Ticket #2662: support extended mouse clicks beyond 223.
[midnight-commander.git] / lib / tty / key.h
blob8365395f06403b51f901f615256f48d9991887aa
1 /** \file key.h
2 * \brief Header: keyboard support routines
3 */
5 #ifndef MC__KEY_H
6 #define MC__KEY_H
8 #include "lib/global.h" /* <glib.h> */
9 #include "tty.h" /* KEY_F macro */
11 /*** typedefs(not structures) and defined constants **********************************************/
13 /* Possible return values from tty_get_event: */
14 #define EV_MOUSE -2
15 #define EV_NONE -1
18 * Internal representation of the key modifiers. It is used in the
19 * sequence tables and the keycodes in the mc sources.
21 #define KEY_M_SHIFT 0x1000
22 #define KEY_M_ALT 0x2000
23 #define KEY_M_CTRL 0x4000
24 #define KEY_M_MASK 0x7000
26 #define XCTRL(x) (KEY_M_CTRL | ((x) & 0x1F))
27 #define ALT(x) (KEY_M_ALT | (unsigned int)(x))
29 /* To define sequences and return codes */
30 #define MCKEY_NOACTION 0
31 #define MCKEY_ESCAPE 1
33 /* Return code for the mouse sequence */
34 #define MCKEY_MOUSE -2
36 /* Return code for the extended mouse sequence */
37 #define MCKEY_EXTENDED_MOUSE -3
39 /*** enums ***************************************************************************************/
41 /*** structures declarations (and typedefs of structures)*****************************************/
43 typedef struct
45 int code;
46 const char *name;
47 const char *longname;
48 const char *shortcut;
49 } key_code_name_t;
51 struct Gpm_Event;
53 /*** global variables defined in .c file *********************************************************/
55 extern const key_code_name_t key_name_conv_tab[];
57 extern int old_esc_mode_timeout;
59 extern int double_click_speed;
60 extern int old_esc_mode;
61 extern int use_8th_bit_as_meta;
62 extern int mou_auto_repeat;
64 /*** declarations of public functions ************************************************************/
66 gboolean define_sequence (int code, const char *seq, int action);
68 void init_key (void);
69 void init_key_input_fd (void);
70 void done_key (void);
72 long lookup_key (const char *name, char **label);
73 char *lookup_key_by_code (const int keycode);
74 /* mouse support */
75 int tty_get_event (struct Gpm_Event *event, gboolean redo_event, gboolean block);
76 gboolean is_idle (void);
77 int tty_getch (void);
79 /* While waiting for input, the program can select on more than one file */
80 typedef int (*select_fn) (int fd, void *info);
82 /* Channel manipulation */
83 void add_select_channel (int fd, select_fn callback, void *info);
84 void delete_select_channel (int fd);
85 void remove_select_channel (int fd);
87 /* Activate/deactivate the channel checking */
88 void channels_up (void);
89 void channels_down (void);
91 /* internally used in key.c, defined in keyxtra.c */
92 void load_xtra_key_defines (void);
94 /* Learn a single key */
95 char *learn_key (void);
97 /* Returns a key code (interpreted) */
98 int get_key_code (int nodelay);
100 /* Set keypad mode (xterm and linux console only) */
101 void numeric_keypad_mode (void);
102 void application_keypad_mode (void);
104 /*** inline functions ****************************************************************************/
106 static inline gboolean
107 is_abort_char (int c)
109 return ((c == (int) ESC_CHAR) || (c == (int) KEY_F (10)));
112 #endif /* MC_KEY_H */