less: reuse former vi's key reading code. Improve SIGWINCH handling.
function old new delta
less_main 2056 2097 +41
getch_nowait 248 273 +25
read_key 310 321 +11
static.esccmds 61 69 +8
count_lines 72 74 +2
less_gets 166 142 -24
less_getch 172 43 -129
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/5 up/down: 91/-170) Total: -79 bytes
text data bss dec hex filename
diff --git a/libbb/read_key.c b/libbb/read_key.c
index 598bd94..614e2f9 100644
--- a/libbb/read_key.c
+++ b/libbb/read_key.c
@@ -33,14 +33,16 @@
'[','B' |0x80,KEYCODE_DOWN ,
'[','C' |0x80,KEYCODE_RIGHT ,
'[','D' |0x80,KEYCODE_LEFT ,
- '[','H' |0x80,KEYCODE_HOME ,
- '[','F' |0x80,KEYCODE_END ,
- '[','1','~' |0x80,KEYCODE_HOME ,
+ '[','H' |0x80,KEYCODE_HOME , /* xterm */
+ '[','F' |0x80,KEYCODE_END , /* xterm */
+ '[','1','~' |0x80,KEYCODE_HOME , /* vt100? linux vt? or what? */
'[','2','~' |0x80,KEYCODE_INSERT ,
'[','3','~' |0x80,KEYCODE_DELETE ,
- '[','4','~' |0x80,KEYCODE_END ,
+ '[','4','~' |0x80,KEYCODE_END , /* vt100? linux vt? or what? */
'[','5','~' |0x80,KEYCODE_PAGEUP ,
'[','6','~' |0x80,KEYCODE_PAGEDOWN,
+ '[','7','~' |0x80,KEYCODE_HOME , /* vt100? linux vt? or what? */
+ '[','8','~' |0x80,KEYCODE_END , /* vt100? linux vt? or what? */
#if 0
'[','1','1','~'|0x80,KEYCODE_FUN1 ,
'[','1','2','~'|0x80,KEYCODE_FUN2 ,
@@ -58,7 +60,9 @@
0
};
- n = *nbuffered;
+ n = 0;
+ if (nbuffered)
+ n = *nbuffered;
if (n == 0) {
/* If no data, block waiting for input. If we read more
* than the minimal ESC sequence size, the "n=0" below
@@ -141,6 +145,7 @@
* by now. */
ret:
- *nbuffered = n;
+ if (nbuffered)
+ *nbuffered = n;
return c;
}