From 90b3a93698ae94da1f4bc20bc723b2a13c81d82e Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Mon, 24 Feb 2014 23:49:21 +0100 Subject: [PATCH] fix ctrl+minus. Closes T922 --- src/bin/keyin.c | 20 ++++++++++---------- src/bin/keyin.h | 3 ++- src/bin/termio.c | 26 ++++++++++---------------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/bin/keyin.c b/src/bin/keyin.c index 42a9fcc2..7fd222d8 100644 --- a/src/bin/keyin.c +++ b/src/bin/keyin.c @@ -217,7 +217,8 @@ _key_try(Termpty *ty, const Keyout *map, Evas_Event_Key_Down *ev) } void -keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) +keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev, + int alt, int shift, int ctrl) { if (ty->state.crlf) { @@ -228,10 +229,9 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) if (_key_try(ty, nocrlf_keyout, ev)) return; } if ( - ((ty->state.alt_kp) && - (evas_key_modifier_is_set(ev->modifiers, "Shift"))) + ((ty->state.alt_kp) && (shift)) // || ((!ty->state.alt_kp) && -// (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) +// (!shift)) ) { if (_key_try(ty, kps_keyout, ev)) return; @@ -243,9 +243,9 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) if (_key_try(ty, kp_keyout, ev)) return; } } - if (evas_key_modifier_is_set(ev->modifiers, "Control")) + if (ctrl) { - if (!strcmp(ev->key, "Minus")) + if (!strcmp(ev->key, "minus")) { termpty_write(ty, "\037", 1); // generate US (unit separator) return; @@ -255,17 +255,17 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) termpty_write(ty, "\0", 1); // generate 0 byte for ctrl+space return; } - else if (!evas_key_modifier_is_set(ev->modifiers, "Shift")) + else if (!shift) { if (_key_try(ty, ctrl_keyout, ev)) return; } } - else if (evas_key_modifier_is_set(ev->modifiers, "Shift")) + else if (shift) { if (_key_try(ty, shift_keyout, ev)) return; } - else if (evas_key_modifier_is_set(ev->modifiers, "Alt")) + else if (alt) { if (_key_try(ty, alt_keyout, ev)) return; } @@ -302,7 +302,7 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) { if ((ev->string[0]) && (!ev->string[1])) { - if (evas_key_modifier_is_set(ev->modifiers, "Alt")) + if (alt) termpty_write(ty, "\033", 1); } termpty_write(ty, ev->string, strlen(ev->string)); diff --git a/src/bin/keyin.h b/src/bin/keyin.h index b7c83f13..5fa31820 100644 --- a/src/bin/keyin.h +++ b/src/bin/keyin.h @@ -1,6 +1,7 @@ #ifndef _KEYIN_H__ #define _KEYIN_H__ 1 -void keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev); +void keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev, + int alt, int shift, int ctrl); #endif diff --git a/src/bin/termio.c b/src/bin/termio.c index 31dd74d5..ec0ab939 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -2065,11 +2065,12 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, Termio *sd = evas_object_smart_data_get(data); Ecore_Compose_State state; char *compres = NULL; + int alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); + int shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); + int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control"); EINA_SAFETY_ON_NULL_RETURN(sd); - if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && - (evas_key_modifier_is_set(ev->modifiers, "Control")) && - (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) + if ((!alt) && (ctrl) && (!shift)) { if (!strcmp(ev->key, "Prior")) { @@ -2142,9 +2143,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, goto end; } } - if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && - (evas_key_modifier_is_set(ev->modifiers, "Control")) && - (evas_key_modifier_is_set(ev->modifiers, "Shift"))) + if ((!alt) && (ctrl) && (shift)) { if (!strcmp(ev->key, "Prior")) { @@ -2183,9 +2182,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, goto end; } } - if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) && - (!evas_key_modifier_is_set(ev->modifiers, "Shift")) && - (!evas_key_modifier_is_set(ev->modifiers, "Control"))) + if ((alt) && (!shift) && (!ctrl)) { if (!strcmp(ev->key, "Home")) { @@ -2200,9 +2197,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, goto end; } } - if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) && - (evas_key_modifier_is_set(ev->modifiers, "Control")) && - (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) + if ((alt) && (ctrl) && (!shift)) { if (_handle_alt_ctrl(ev->key, data)) { @@ -2215,7 +2210,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, // EXCEPTION. Don't filter modifiers alt+shift -> breaks emacs // and jed (alt+shift+5 for search/replace for example) // Don't filter modifiers alt, is used by shells - if (!evas_key_modifier_is_set(ev->modifiers, "Alt")) + if ((!alt) && (!ctrl)) { Ecore_IMF_Event_Key_Down imf_ev; @@ -2228,8 +2223,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, } } } - if ((evas_key_modifier_is_set(ev->modifiers, "Shift")) && - (ev->key)) + if ((shift) && (ev->key)) { int by = sd->grid.h - 2; @@ -2284,7 +2278,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, } else goto end; } - keyin_handle(sd->pty, ev); + keyin_handle(sd->pty, ev, alt, shift, ctrl); end: if (sd->config->flicker_on_key) edje_object_signal_emit(sd->cursor.obj, "key,down", "terminology");