[patch 2/5] Renumber special keys to negative values, making room for Unicode.
Kalle Olavi Niemitalo <[email protected]>
| Newsgroups | gmane.comp.web.links |
|---|---|
| Message-ID | <[email protected]> |
_______________________________________________ elinks-dev mailing list [email protected] http://linuxfromscratch.org/mailman/listinfo/elinks-dev
(unnamed)
(text/x-patch, 7 KB)
Renumber special keys to negative values, making room for Unicode. This version should still be interlink compatible with previous ones. --- commit d25b037cf7e09aff4b0051804355e48d4fcc7460 tree 00672299f4623229a4f490cf80106a0fc2a6baff parent 0c424d5c8c9e3cdb2b46f6b2e8f95f6a3407707f author Kalle Olavi Niemitalo <[email protected]> Thu, 03 Aug 2006 21:09:29 +0300 committer Kalle Olavi Niemitalo <[email protected]> Thu, 03 Aug 2006 21:09:29 +0300 src/bfu/menu.c | 2 +- src/config/kbdbind.c | 4 ++- src/terminal/event.c | 8 +++--- src/terminal/event.h | 4 +++ src/terminal/kbd.c | 19 ++++++++------ src/terminal/kbd.h | 66 ++++++++++++++++++++++++++++++-------------------- 6 files changed, 60 insertions(+), 43 deletions(-) diff --git a/src/bfu/menu.c b/src/bfu/menu.c index c80bf4c..dfd9a66 100644 --- a/src/bfu/menu.c +++ b/src/bfu/menu.c @@ -950,7 +950,7 @@ menu_kbd_handler(struct menu *menu, stru { int key = get_kbd_key(ev); - if ((key >= KBD_F1 && key <= KBD_F12) + if (is_kbd_fkey(key) || check_kbd_modifier(ev, KBD_MOD_ALT)) { delete_window_ev(win, ev); return; diff --git a/src/config/kbdbind.c b/src/config/kbdbind.c index 0e3996e..abc2809 100644 --- a/src/config/kbdbind.c +++ b/src/config/kbdbind.c @@ -437,7 +437,7 @@ parse_keystroke(unsigned char *s, int ca } kbd->key = read_key(s); - return (kbd->key < 0) ? -1 : 0; + return (kbd->key == KBD_UNDEF) ? -1 : 0; } void @@ -449,7 +449,7 @@ add_keystroke_to_string(struct string *s struct key *key; const struct modifier *modp; - if (kbd->key < 0) return; + if (kbd->key == KBD_UNDEF) return; for (modp = modifiers; modp->name_and_dash != NULL; ++modp) { if (kbd->modifier & modp->bitmask) diff --git a/src/terminal/event.c b/src/terminal/event.c index 58c53d8..5943aea 100644 --- a/src/terminal/event.c +++ b/src/terminal/event.c @@ -266,11 +266,11 @@ #endif case EVENT_KBD: { int utf8_io = -1; - int key; + int key = ilev->info.keyboard.key; - set_kbd_term_event(&tev, ilev->info.keyboard.key, ilev->info.keyboard.modifier); - - key = get_kbd_key(&tev); + if (key >= 0x100) + key = -key; + set_kbd_term_event(&tev, key, ilev->info.keyboard.modifier); reset_timer(); diff --git a/src/terminal/event.h b/src/terminal/event.h index f65a623..7e954af 100644 --- a/src/terminal/event.h +++ b/src/terminal/event.h @@ -78,11 +78,15 @@ set_kbd_term_event(struct term_event *ev 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. */ static inline void set_kbd_interlink_event(struct interlink_event *ev, int key, int modifier) { memset(ev, 0, sizeof(*ev)); ev->ev = EVENT_KBD; + if (key <= -0x100) + key = -key; kbd_set(&ev->info.keyboard, key, modifier); } diff --git a/src/terminal/kbd.c b/src/terminal/kbd.c index a2a8827..07fd305 100644 --- a/src/terminal/kbd.c +++ b/src/terminal/kbd.c @@ -656,7 +656,7 @@ #endif static int decode_terminal_escape_sequence(struct itrm *itrm, struct interlink_event *ev) { - struct interlink_event_keyboard kbd = { KBD_UNDEF, KBD_MOD_NONE }; + struct term_event_keyboard kbd = { KBD_UNDEF, KBD_MOD_NONE }; unsigned char c; int v; int el; @@ -670,8 +670,8 @@ decode_terminal_escape_sequence(struct i if (itrm->in.queue.len >= 4 && itrm->in.queue.data[3] >= 'A' && itrm->in.queue.data[3] <= 'L') { - kbd.key = KBD_F1 + itrm->in.queue.data[3] - 'A'; - copy_struct(&ev->info.keyboard, &kbd); + kbd.key = number_to_kbd_fkey(itrm->in.queue.data[3] - 'A' + 1); + set_kbd_interlink_event(ev, kbd.key, kbd.modifier); return 4; } @@ -770,10 +770,9 @@ #endif /* CONFIG_MOUSE */ break; } - /* The event might have been changed to a mouse event */ - if (ev->ev == EVENT_KBD && kbd.key != KBD_UNDEF) { - copy_struct(&ev->info.keyboard, &kbd); - } + /* KBD_UNDEF here means it was unrecognized or a mouse event. */ + if (kbd.key != KBD_UNDEF) + set_kbd_interlink_event(ev, kbd.key, kbd.modifier); return el; } @@ -995,7 +994,7 @@ #endif /* DEBUG_ITRM_QUEUE */ } } else if (itrm->in.queue.data[0] == 0) { - static const struct interlink_event_keyboard os2xtd[256] = { + static const struct term_event_keyboard os2xtd[256] = { #include "terminal/key.inc" }; @@ -1003,7 +1002,9 @@ #include "terminal/key.inc" el = -1; else { el = 2; - copy_struct(&ev.info.keyboard, &os2xtd[itrm->in.queue.data[1]]); + set_kbd_interlink_event(&ev, + os2xtd[itrm->in.queue.data[1]].key, + os2xtd[itrm->in.queue.data[1]].modifier); } } diff --git a/src/terminal/kbd.h b/src/terminal/kbd.h index d8d5462..fb101cc 100644 --- a/src/terminal/kbd.h +++ b/src/terminal/kbd.h @@ -4,46 +4,58 @@ #define EL__TERMINAL_KBD_H struct itrm; struct term_event_keyboard { + /* Values <= 0x100 are special; e.g. KBD_ENTER. + * Values between -0xFF and -2 are not used yet; treat as special. + * Value == -1 is KBD_UNDEF; not sent via socket. + * Values between 0 and 0xFF are bytes received from the terminal. + * Values >= 0x100 are not used. */ int key; int modifier; }; 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. */ int key; int modifier; }; #define KBD_UNDEF -1 -#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 +#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) -#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 +#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) +#define is_kbd_fkey(key) ((unsigned long) (KBD_F1 - (key)) <= (unsigned long) (KBD_F1 - 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 +#define KBD_CTRL_C (-0x200) #define KBD_MOD_NONE 0 #define KBD_MOD_SHIFT 1
signature.asc
(application/pgp-signature, 188 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFE0oT7Hm9IGt60eMgRAgb4AJ0Vmc1I+eMmLDVoNRRbLqotBwikHgCePZ8Y kidNCGLYSxkrOz4Sr0VQvIw= =HfAz -----END PGP SIGNATURE-----