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
pgpiuQSZdGlMY.pgp
Description: PGP signature
_______________________________________________ elinks-dev mailing list [email protected] http://linuxfromscratch.org/mailman/listinfo/elinks-dev
