diff options
author | Denis Vlasenko | 2008-04-25 18:44:35 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-04-25 18:44:35 +0000 |
commit | 2c84495184c6d3de84f1b591ccb49c700273e0f5 (patch) | |
tree | 85e7ddcdbcfb25adc51f59837091c7ee10afd142 | |
parent | 44f08212597f46caee40d2176feefcbb43653e16 (diff) | |
download | busybox-2c84495184c6d3de84f1b591ccb49c700273e0f5.zip busybox-2c84495184c6d3de84f1b591ccb49c700273e0f5.tar.gz |
lineedit: hack for making it sort-of-work even if term width is wrong
function old new delta
read_line_input 3158 3153 -5
input_end 29 24 -5
input_delete 115 110 -5
input_forward 27 20 -7
cmdedit_set_out_char 88 80 -8
-rw-r--r-- | libbb/lineedit.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c index 5a0d03e..d1a7a4b 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -166,10 +166,17 @@ static void deinit_S(void) } #define DEINIT_S() deinit_S() + /* Put 'command_ps[cursor]', cursor++. * Advance cursor on screen. If we reached right margin, scroll text up * and remove terminal margin effect by printing 'next_char' */ +#define HACK_FOR_WRONG_WIDTH 1 +#if HACK_FOR_WRONG_WIDTH +static void cmdedit_set_out_char(void) +#define cmdedit_set_out_char(next_char) cmdedit_set_out_char() +#else static void cmdedit_set_out_char(int next_char) +#endif { int c = (unsigned char)command_ps[cursor]; @@ -196,9 +203,21 @@ static void cmdedit_set_out_char(int next_char) /* terminal is scrolled down */ cmdedit_y++; cmdedit_x = 0; +#if HACK_FOR_WRONG_WIDTH + /* This works better if our idea of term width is wrong + * and it is actually wider (often happens on serial lines). + * Printing CR,LF *forces* cursor to next line. + * OTOH if terminal width is correct AND terminal does NOT + * have automargin (IOW: it is moving cursor to next line + * by itself (which is wrong for VT-10x terminals)), + * this will break things: there will be one extra empty line */ + puts("\r"); /* + implicit '\n' */ +#else + /* Works ok only if cmdedit_termw is correct */ /* destroy "(auto)margin" */ bb_putchar(next_char); bb_putchar('\b'); +#endif } // Huh? What if command_ps[cursor] == '\0' (we are at the end already?) cursor++; |