1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00

terminal: New enum term_event_special_key.

This makes constants like KBD_ENTER visible to the debugger, at least
when compiled with GCC.
This commit is contained in:
Kalle Olavi Niemitalo 2006-08-13 19:03:09 +03:00 committed by Kalle Olavi Niemitalo
parent c5c36eba88
commit f290ff5608
3 changed files with 51 additions and 35 deletions

View File

@ -78,8 +78,10 @@ set_kbd_term_event(struct term_event *ev, int key, int modifier)
kbd_set(&ev->info.keyboard, key, modifier);
}
/* @key can be e.g. KBD_ENTER as in term_event_keyboard.key.
* This function then sets ev->info.keyboard.key = -KBD_ENTER. */
/* @key can be either a 8-bit byte or a value from enum term_event_special_key.
* In the latter case, this function negates the value, unless it is KBD_UNDEF.
* For example, key == KBD_ENTER results in ev->info.keyboard.key = -KBD_ENTER.
* This mapping keeps the interlink protocol compatible with ELinks 0.11. */
static inline void
set_kbd_interlink_event(struct interlink_event *ev, int key, int modifier)
{

View File

@ -48,6 +48,14 @@ static int process_queue(struct itrm *);
static void handle_itrm_stdin(struct itrm *);
static void unhandle_itrm_stdin(struct itrm *);
#ifdef CONFIG_DEBUG
/* This hack makes GCC put enum term_event_special_key in the debug
* information even though it is not otherwise used. The const
* prevents an unused-variable warning. */
static const enum term_event_special_key dummy_term_event_special_key;
#endif
int
is_blocked(void)
{

View File

@ -3,11 +3,11 @@
struct itrm;
/* Values <= -0x100 are special; e.g. KBD_ENTER.
/* Values <= -0x100 are special; from enum term_event_special_key.
* Values between -0xFF and -2 are not used yet; treat as special.
* Value == -1 is KBD_UNDEF; not sent via socket.
* Values >= 0 are characters received from the terminal;
* in UCS-4 #ifdef CONFIG_UTF_8.
* in UCS-4 #ifdef CONFIG_UTF_8. Test with is_kbd_character().
*
* Any at least 32-bit signed integer type would work here; using an
* exact-width type hurts portability in principle, but some other
@ -23,48 +23,54 @@ struct interlink_event_keyboard {
/* Values <= -2 are not used, for ELinks 0.11 compatibility.
* Value == -1 is KBD_UNDEF; not sent via socket.
* Values between 0 and 0xFF are bytes received from the terminal.
* Values >= 0x100 are special; e.g. -KBD_ENTER. */
* Values >= 0x100 are special; absolute values of constants
* from enum term_event_special_key, e.g. -KBD_ENTER. */
int key;
int modifier;
};
/* Values for term_event_key_T */
/* Codes of special keys, for use in term_event_key_T.
* The enum has a tag mainly to let you cast numbers to it in GDB and see
* their names. ELinks doesn't use this enum type as term_event_key_T,
* because it might be 16-bit and Unicode characters wouldn't then fit. */
enum term_event_special_key {
KBD_UNDEF = -1,
#define KBD_UNDEF -1
KBD_ENTER = -0x100,
KBD_BS = -0x101,
KBD_TAB = -0x102,
KBD_ESC = -0x103,
KBD_LEFT = -0x104,
KBD_RIGHT = -0x105,
KBD_UP = -0x106,
KBD_DOWN = -0x107,
KBD_INS = -0x108,
KBD_DEL = -0x109,
KBD_HOME = -0x10a,
KBD_END = -0x10b,
KBD_PAGE_UP = -0x10c,
KBD_PAGE_DOWN = -0x10d,
#define KBD_ENTER (-0x100)
#define KBD_BS (-0x101)
#define KBD_TAB (-0x102)
#define KBD_ESC (-0x103)
#define KBD_LEFT (-0x104)
#define KBD_RIGHT (-0x105)
#define KBD_UP (-0x106)
#define KBD_DOWN (-0x107)
#define KBD_INS (-0x108)
#define KBD_DEL (-0x109)
#define KBD_HOME (-0x10a)
#define KBD_END (-0x10b)
#define KBD_PAGE_UP (-0x10c)
#define KBD_PAGE_DOWN (-0x10d)
KBD_F1 = -0x120,
KBD_F2 = -0x121,
KBD_F3 = -0x122,
KBD_F4 = -0x123,
KBD_F5 = -0x124,
KBD_F6 = -0x125,
KBD_F7 = -0x126,
KBD_F8 = -0x127,
KBD_F9 = -0x128,
KBD_F10 = -0x129,
KBD_F11 = -0x12a,
KBD_F12 = -0x12b,
KBD_CTRL_C = -0x200
};
#define KBD_F1 (-0x120)
#define KBD_F2 (-0x121)
#define KBD_F3 (-0x122)
#define KBD_F4 (-0x123)
#define KBD_F5 (-0x124)
#define KBD_F6 (-0x125)
#define KBD_F7 (-0x126)
#define KBD_F8 (-0x127)
#define KBD_F9 (-0x128)
#define KBD_F10 (-0x129)
#define KBD_F11 (-0x12a)
#define KBD_F12 (-0x12b)
static inline int is_kbd_fkey(term_event_key_T key) { return key <= KBD_F1 && key >= KBD_F12; }
#define number_to_kbd_fkey(num) (KBD_F1 - (num) + 1)
#define kbd_fkey_to_number(key) (KBD_F1 - (key) + 1)
#define KBD_CTRL_C (-0x200)
/* int is_kbd_character(term_event_key_T key);
* Return true if @key is a character in some charset, rather than a
* special key. The character is not necessarily printable. As for