From 2e4ef38743c3d4aef109b5cc04429ec1f0e2f6c8 Mon Sep 17 00:00:00 2001 From: Rostislav Skudnov Date: Thu, 24 Nov 2016 15:04:00 +0100 Subject: lineedit: fix handling of repeating Alt-b, Alt-f, Alt-d, Alt-Backspace These key combinations should repeat correctly when the keys are pressed and held. Before this change, they do this erratically - many repeats are "eaten" because they are treated as unrecognized ESC seqs: ESC 0x7f is treated by Alt+baskspace, but ESC 0x7f ESC 0x7f ESC 0x7f is unrecognized. Escape sequences corresponding to these key combinations are moved from read_line_input to lineedit_read_key. Also, these key sequences are now enabled regardless of whether FEATURE_EDITING_VI is set, since Vim does not actually support these key combinations, but they are present in readline library. function old new delta static.esccmds 93 103 +10 read_line_input 3737 3687 -50 Signed-off-by: Rostislav Skudnov Signed-off-by: Denys Vlasenko --- include/libbb.h | 76 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) (limited to 'include') diff --git a/include/libbb.h b/include/libbb.h index 20fc7329f..bdafcf5a6 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1463,46 +1463,46 @@ unsigned long long bb_makedev(unsigned major, unsigned minor) FAST_FUNC; * yet doesn't represent any valid Unicode character. * Also, -1 is reserved for error indication and we don't use it. */ enum { - KEYCODE_UP = -2, - KEYCODE_DOWN = -3, - KEYCODE_RIGHT = -4, - KEYCODE_LEFT = -5, - KEYCODE_HOME = -6, - KEYCODE_END = -7, - KEYCODE_INSERT = -8, - KEYCODE_DELETE = -9, - KEYCODE_PAGEUP = -10, - KEYCODE_PAGEDOWN = -11, - // -12 is reserved for Alt/Ctrl/Shift-TAB + KEYCODE_UP = -2, + KEYCODE_DOWN = -3, + KEYCODE_RIGHT = -4, + KEYCODE_LEFT = -5, + KEYCODE_HOME = -6, + KEYCODE_END = -7, + KEYCODE_INSERT = -8, + KEYCODE_DELETE = -9, + KEYCODE_PAGEUP = -10, + KEYCODE_PAGEDOWN = -11, + KEYCODE_BACKSPACE = -12, /* Used only if Alt/Ctrl/Shifted */ + KEYCODE_D = -13, /* Used only if Alted */ #if 0 - KEYCODE_FUN1 = -13, - KEYCODE_FUN2 = -14, - KEYCODE_FUN3 = -15, - KEYCODE_FUN4 = -16, - KEYCODE_FUN5 = -17, - KEYCODE_FUN6 = -18, - KEYCODE_FUN7 = -19, - KEYCODE_FUN8 = -20, - KEYCODE_FUN9 = -21, - KEYCODE_FUN10 = -22, - KEYCODE_FUN11 = -23, - KEYCODE_FUN12 = -24, -#endif - /* Be sure that last defined value is small enough - * to not interfere with Alt/Ctrl/Shift bits. - * So far we do not exceed -31 (0xfff..fffe1), - * which gives us three upper bits in LSB to play with. + KEYCODE_FUN1 = , + KEYCODE_FUN2 = , + KEYCODE_FUN3 = , + KEYCODE_FUN4 = , + KEYCODE_FUN5 = , + KEYCODE_FUN6 = , + KEYCODE_FUN7 = , + KEYCODE_FUN8 = , + KEYCODE_FUN9 = , + KEYCODE_FUN10 = , + KEYCODE_FUN11 = , + KEYCODE_FUN12 = , +#endif + /* ^^^^^ Be sure that last defined value is small enough. + * Current read_key() code allows going up to -32 (0xfff..fffe0). + * This gives three upper bits in LSB to play with: + * KEYCODE_foo values are 0xfff..fffXX, lowest XX bits are: scavvvvv, + * s=0 if SHIFT, c=0 if CTRL, a=0 if ALT, + * vvvvv bits are the same for same key regardless of "shift bits". */ - //KEYCODE_SHIFT_TAB = (-12) & ~0x80, - //KEYCODE_SHIFT_... = KEYCODE_... & ~0x80, - //KEYCODE_CTRL_UP = KEYCODE_UP & ~0x40, - //KEYCODE_CTRL_DOWN = KEYCODE_DOWN & ~0x40, - KEYCODE_CTRL_RIGHT = KEYCODE_RIGHT & ~0x40, - KEYCODE_CTRL_LEFT = KEYCODE_LEFT & ~0x40, - //KEYCODE_ALT_UP = KEYCODE_UP & ~0x20, - //KEYCODE_ALT_DOWN = KEYCODE_DOWN & ~0x20, - KEYCODE_ALT_RIGHT = KEYCODE_RIGHT & ~0x20, - KEYCODE_ALT_LEFT = KEYCODE_LEFT & ~0x20, + //KEYCODE_SHIFT_... = KEYCODE_... & ~0x80, + KEYCODE_CTRL_RIGHT = KEYCODE_RIGHT & ~0x40, + KEYCODE_CTRL_LEFT = KEYCODE_LEFT & ~0x40, + KEYCODE_ALT_RIGHT = KEYCODE_RIGHT & ~0x20, + KEYCODE_ALT_LEFT = KEYCODE_LEFT & ~0x20, + KEYCODE_ALT_BACKSPACE = KEYCODE_BACKSPACE & ~0x20, + KEYCODE_ALT_D = KEYCODE_D & ~0x20, KEYCODE_CURSOR_POS = -0x100, /* 0xfff..fff00 */ /* How long is the longest ESC sequence we know? -- cgit v1.2.3