mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
input: comments
This commit is contained in:
parent
fed0e5c853
commit
53a437007e
1 changed files with 57 additions and 45 deletions
102
input.c
102
input.c
|
|
@ -363,11 +363,9 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
|
||||||
"effective=0x%08x, repeats=%d",
|
"effective=0x%08x, repeats=%d",
|
||||||
sym, mods, consumed, significant, effective_mods, should_repeat);
|
sym, mods, consumed, significant, effective_mods, should_repeat);
|
||||||
|
|
||||||
enum modifier keymap_mods = MOD_NONE;
|
/*
|
||||||
keymap_mods |= wayl->kbd.shift ? MOD_SHIFT : MOD_NONE;
|
* Builtin shortcuts
|
||||||
keymap_mods |= wayl->kbd.alt ? MOD_ALT : MOD_NONE;
|
*/
|
||||||
keymap_mods |= wayl->kbd.ctrl ? MOD_CTRL : MOD_NONE;
|
|
||||||
keymap_mods |= wayl->kbd.meta ? MOD_META : MOD_NONE;
|
|
||||||
|
|
||||||
if (effective_mods == shift) {
|
if (effective_mods == shift) {
|
||||||
if (sym == XKB_KEY_Page_Up) {
|
if (sym == XKB_KEY_Page_Up) {
|
||||||
|
|
@ -404,6 +402,16 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keys generating escape sequences
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum modifier keymap_mods = MOD_NONE;
|
||||||
|
keymap_mods |= wayl->kbd.shift ? MOD_SHIFT : MOD_NONE;
|
||||||
|
keymap_mods |= wayl->kbd.alt ? MOD_ALT : MOD_NONE;
|
||||||
|
keymap_mods |= wayl->kbd.ctrl ? MOD_CTRL : MOD_NONE;
|
||||||
|
keymap_mods |= wayl->kbd.meta ? MOD_META : MOD_NONE;
|
||||||
|
|
||||||
const struct key_data *keymap = keymap_lookup(term, sym, keymap_mods);
|
const struct key_data *keymap = keymap_lookup(term, sym, keymap_mods);
|
||||||
if (keymap != NULL) {
|
if (keymap != NULL) {
|
||||||
term_to_slave(term, keymap->seq, strlen(keymap->seq));
|
term_to_slave(term, keymap->seq, strlen(keymap->seq));
|
||||||
|
|
@ -413,6 +421,10 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
|
||||||
goto maybe_repeat;
|
goto maybe_repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compose, and maybe emit "normal" character
|
||||||
|
*/
|
||||||
|
|
||||||
uint8_t buf[64] = {0};
|
uint8_t buf[64] = {0};
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
|
@ -427,55 +439,55 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
|
||||||
wayl->kbd.xkb_state, key, (char *)buf, sizeof(buf));
|
wayl->kbd.xkb_state, key, (char *)buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count > 0) {
|
if (count == 0)
|
||||||
|
goto maybe_repeat;
|
||||||
|
|
||||||
#define is_control_key(x) ((x) >= 0x40 && (x) <= 0x7f)
|
#define is_control_key(x) ((x) >= 0x40 && (x) <= 0x7f)
|
||||||
#define IS_CTRL(x) ((x) < 0x20 || ((x) >= 0x7f && (x) <= 0x9f))
|
#define IS_CTRL(x) ((x) < 0x20 || ((x) >= 0x7f && (x) <= 0x9f))
|
||||||
|
|
||||||
if ((keymap_mods & MOD_CTRL) &&
|
if ((keymap_mods & MOD_CTRL) &&
|
||||||
!is_control_key(sym) &&
|
!is_control_key(sym) &&
|
||||||
(count == 1 && !IS_CTRL(buf[0])) &&
|
(count == 1 && !IS_CTRL(buf[0])) &&
|
||||||
sym < 256)
|
sym < 256)
|
||||||
{
|
{
|
||||||
static const int mod_param_map[32] = {
|
static const int mod_param_map[32] = {
|
||||||
[MOD_SHIFT] = 2,
|
[MOD_SHIFT] = 2,
|
||||||
[MOD_ALT] = 3,
|
[MOD_ALT] = 3,
|
||||||
[MOD_SHIFT | MOD_ALT] = 4,
|
[MOD_SHIFT | MOD_ALT] = 4,
|
||||||
[MOD_CTRL] = 5,
|
[MOD_CTRL] = 5,
|
||||||
[MOD_SHIFT | MOD_CTRL] = 6,
|
[MOD_SHIFT | MOD_CTRL] = 6,
|
||||||
[MOD_ALT | MOD_CTRL] = 7,
|
[MOD_ALT | MOD_CTRL] = 7,
|
||||||
[MOD_SHIFT | MOD_ALT | MOD_CTRL] = 8,
|
[MOD_SHIFT | MOD_ALT | MOD_CTRL] = 8,
|
||||||
[MOD_META] = 9,
|
[MOD_META] = 9,
|
||||||
[MOD_META | MOD_SHIFT] = 10,
|
[MOD_META | MOD_SHIFT] = 10,
|
||||||
[MOD_META | MOD_ALT] = 11,
|
[MOD_META | MOD_ALT] = 11,
|
||||||
[MOD_META | MOD_SHIFT | MOD_ALT] = 12,
|
[MOD_META | MOD_SHIFT | MOD_ALT] = 12,
|
||||||
[MOD_META | MOD_CTRL] = 13,
|
[MOD_META | MOD_CTRL] = 13,
|
||||||
[MOD_META | MOD_SHIFT | MOD_CTRL] = 14,
|
[MOD_META | MOD_SHIFT | MOD_CTRL] = 14,
|
||||||
[MOD_META | MOD_ALT | MOD_CTRL] = 15,
|
[MOD_META | MOD_ALT | MOD_CTRL] = 15,
|
||||||
[MOD_META | MOD_SHIFT | MOD_ALT | MOD_CTRL] = 16,
|
[MOD_META | MOD_SHIFT | MOD_ALT | MOD_CTRL] = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(keymap_mods < sizeof(mod_param_map) / sizeof(mod_param_map[0]));
|
assert(keymap_mods < sizeof(mod_param_map) / sizeof(mod_param_map[0]));
|
||||||
int modify_param = mod_param_map[keymap_mods];
|
int modify_param = mod_param_map[keymap_mods];
|
||||||
assert(modify_param != 0);
|
assert(modify_param != 0);
|
||||||
|
|
||||||
char reply[1024];
|
char reply[1024];
|
||||||
snprintf(reply, sizeof(reply), "\x1b[27;%d;%d~", modify_param, sym);
|
snprintf(reply, sizeof(reply), "\x1b[27;%d;%d~", modify_param, sym);
|
||||||
term_to_slave(term, reply, strlen(reply));
|
term_to_slave(term, reply, strlen(reply));
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
if (effective_mods & alt)
|
if (effective_mods & alt)
|
||||||
term_to_slave(term, "\x1b", 1);
|
term_to_slave(term, "\x1b", 1);
|
||||||
|
|
||||||
term_to_slave(term, buf, count);
|
term_to_slave(term, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
clock_gettime(
|
clock_gettime(
|
||||||
term->wl->presentation_clock_id, &term->render.input_time);
|
term->wl->presentation_clock_id, &term->render.input_time);
|
||||||
term_reset_view(term);
|
term_reset_view(term);
|
||||||
selection_cancel(term);
|
selection_cancel(term);
|
||||||
}
|
|
||||||
|
|
||||||
maybe_repeat:
|
maybe_repeat:
|
||||||
if (should_repeat)
|
if (should_repeat)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue