2005-09-20 23:26:39 +10:00
/** \file input.h
Functions for reading a character of input from stdin , using the
inputrc information for key bindings .
*/
2005-10-05 01:11:39 +10:00
# ifndef FISH_INPUT_H
# define FISH_INPUT_H
# include <wchar.h>
2006-03-10 23:38:09 +10:00
# include "input_common.h"
2005-10-05 01:11:39 +10:00
2005-09-20 23:26:39 +10:00
/**
Key codes for inputrc - style keyboard functions that are passed on
to the caller of input_read ( )
*/
enum
{
2006-05-14 20:16:23 +10:00
R_BEGINNING_OF_LINE = R_NULL + 10 , /* This give input_common ten slots for lowlevel keycodes */
2005-09-20 23:26:39 +10:00
R_END_OF_LINE ,
R_FORWARD_CHAR ,
R_BACKWARD_CHAR ,
R_FORWARD_WORD ,
R_BACKWARD_WORD ,
R_HISTORY_SEARCH_BACKWARD ,
R_HISTORY_SEARCH_FORWARD ,
R_DELETE_CHAR ,
R_BACKWARD_DELETE_CHAR ,
R_KILL_LINE ,
R_YANK ,
R_YANK_POP ,
R_COMPLETE ,
R_BEGINNING_OF_HISTORY ,
R_END_OF_HISTORY ,
R_BACKWARD_KILL_LINE ,
R_KILL_WHOLE_LINE ,
R_KILL_WORD ,
R_BACKWARD_KILL_WORD ,
R_DUMP_FUNCTIONS ,
R_HISTORY_TOKEN_SEARCH_BACKWARD ,
R_HISTORY_TOKEN_SEARCH_FORWARD ,
R_SELF_INSERT ,
2006-07-24 06:52:03 +10:00
R_VI_ARG_DIGIT ,
2006-10-09 11:15:29 +10:00
R_VI_DELETE_TO ,
2006-11-01 08:01:49 +10:00
R_EXECUTE ,
R_BEGINNING_OF_BUFFER ,
2006-12-12 20:13:48 +10:00
R_END_OF_BUFFER ,
2007-09-22 00:05:49 +10:00
R_REPAINT ,
R_UP_LINE ,
R_DOWN_LINE ,
2005-09-20 23:26:39 +10:00
}
;
/**
Initialize the terminal by calling setupterm , and set up arrays
used by readch to detect escape sequences for special keys .
Before calling input_init , terminfo is not initialized and MUST not be used
*/
int input_init ( ) ;
/**
free up memory used by terminal functions .
*/
void input_destroy ( ) ;
/**
Read a character from fd 0. Try to convert some escape sequences
into character constants , but do not permanently block the escape
character .
This is performed in the same way vim does it , i . e . if an escape
character is read , wait for more input for a short time ( a few
milliseconds ) . If more input is avaialable , it is assumed to be an
escape sequence for a special character ( such as an arrow key ) , and
readch attempts to parse it . If no more input follows after the
escape key , it is assumed to be an actual escape key press , and is
returned as such .
*/
wint_t input_readch ( ) ;
/**
Push a character or a readline function onto the stack of unread
characters that input_readch will return before actually reading from fd
2011-12-26 19:18:46 -08:00
0.
2006-01-24 06:40:14 +10:00
*/
2005-09-20 23:26:39 +10:00
void input_unreadch ( wint_t ch ) ;
/**
2008-01-14 02:47:47 +10:00
Add a key mapping from the specified sequence to the specified command
2005-09-20 23:26:39 +10:00
2008-01-14 02:47:47 +10:00
\ param sequence the sequence to bind
\ param command an input function that will be run whenever the key sequence occurs
2005-09-20 23:26:39 +10:00
*/
2008-01-14 02:47:47 +10:00
void input_mapping_add ( const wchar_t * sequence , const wchar_t * command ) ;
2007-09-26 02:14:47 +10:00
2008-01-14 02:47:47 +10:00
/**
2011-12-31 15:57:30 -08:00
Insert all mapping names into the specified wcstring_list_t
2008-01-14 02:47:47 +10:00
*/
2011-12-31 15:57:30 -08:00
void input_mapping_get_names ( wcstring_list_t & lst ) ;
2007-09-26 02:14:47 +10:00
2008-01-14 02:47:47 +10:00
/**
Erase binding for specified key sequence
*/
2011-12-31 15:57:30 -08:00
bool input_mapping_erase ( const wchar_t * sequence ) ;
2007-09-26 02:14:47 +10:00
2008-01-14 02:47:47 +10:00
/**
2011-12-31 15:57:30 -08:00
Gets the command bound to the specified key sequence . Returns true if it exists , false if not .
2008-01-14 02:47:47 +10:00
*/
2011-12-31 15:57:30 -08:00
bool input_mapping_get ( const wcstring & sequence , wcstring & cmd ) ;
2005-09-20 23:26:39 +10:00
/**
2007-09-26 02:14:47 +10:00
Return the sequence for the terminfo variable of the specified name .
If no terminfo variable of the specified name could be found , return 0 and set errno to ENOENT .
If the terminfo variable does not have a value , return 0 and set errno to EILSEQ .
*/
const wchar_t * input_terminfo_get_sequence ( const wchar_t * name ) ;
2005-09-20 23:26:39 +10:00
/**
2007-09-26 02:14:47 +10:00
Return the name of the terminfo variable with the specified sequence
*/
2011-12-31 15:57:30 -08:00
bool input_terminfo_get_name ( const wcstring & seq , wcstring & name ) ;
2005-09-20 23:26:39 +10:00
2012-02-07 17:06:45 -08:00
/** Return a list of all known terminfo names */
wcstring_list_t input_terminfo_get_names ( bool skip_null ) ;
2007-09-26 02:14:47 +10:00
2005-09-20 23:26:39 +10:00
/**
2007-09-26 02:14:47 +10:00
Returns the input function code for the given input function name .
2005-09-20 23:26:39 +10:00
*/
2011-12-31 15:57:30 -08:00
wchar_t input_function_get_code ( const wcstring & name ) ;
2007-09-26 02:14:47 +10:00
/**
Returns a list of all existing input function names
*/
2012-01-23 20:48:47 -08:00
wcstring_list_t input_function_get_names ( void ) ;
2007-09-26 02:14:47 +10:00
2005-09-20 23:26:39 +10:00
2005-10-05 01:11:39 +10:00
# endif