aboutsummaryrefslogtreecommitdiff
path: root/libbb/lineedit.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2011-11-03 13:28:22 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2011-11-03 13:28:22 +0100
commit9ce09bc9cb7743f87eb3e536c81d8c303e12bc81 (patch)
treead65a2f47136af7a730b630c4e08532c02ff0fb6 /libbb/lineedit.c
parent45cdf166dccb4981004bae822f52e48df05aab91 (diff)
downloadbusybox-w32-9ce09bc9cb7743f87eb3e536c81d8c303e12bc81.tar.gz
busybox-w32-9ce09bc9cb7743f87eb3e536c81d8c303e12bc81.tar.bz2
busybox-w32-9ce09bc9cb7743f87eb3e536c81d8c303e12bc81.zip
lineedit: add support for M-b, M-f, M-d, M-Backspace
function old new delta ctrl_left - 96 +96 ctrl_right - 76 +76 static.esccmds 81 93 +12 read_line_input 3876 3885 +9 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 2/0 up/down: 193/0) Total: 193 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/lineedit.c')
-rw-r--r--libbb/lineedit.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index 603bbfcae..0d232889b 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -2504,6 +2504,44 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
2504 vi_cmdmode = 1; 2504 vi_cmdmode = 1;
2505 input_backward(1); 2505 input_backward(1);
2506 } 2506 }
2507 /* Handle a few ESC-<key> combinations the same way
2508 * standard readline bindings (IOW: bash) do.
2509 * Often, Alt-<key> generates ESC-<key>.
2510 */
2511 ic = lineedit_read_key(read_key_buffer, timeout);
2512 switch (ic) {
2513 //case KEYCODE_LEFT: - bash doesn't do this
2514 case 'b':
2515 ctrl_left();
2516 break;
2517 //case KEYCODE_RIGHT: - bash doesn't do this
2518 case 'f':
2519 ctrl_right();
2520 break;
2521 //case KEYCODE_DELETE: - bash doesn't do this
2522 case 'd': /* Alt-D */
2523 {
2524 /* Delete word forward */
2525 int nc, sc = cursor;
2526 ctrl_right();
2527 nc = cursor;
2528 input_backward(cursor - sc);
2529 while (--nc >= cursor)
2530 input_delete(1);
2531 break;
2532 }
2533 case '\b': /* Alt-Backspace(?) */
2534 case '\x7f': /* Alt-Backspace(?) */
2535 //case 'w': - bash doesn't do this
2536 {
2537 /* Delete word backward */
2538 int sc = cursor;
2539 ctrl_left();
2540 while (sc-- > cursor)
2541 input_delete(1);
2542 break;
2543 }
2544 }
2507 break; 2545 break;
2508#endif /* FEATURE_COMMAND_EDITING_VI */ 2546#endif /* FEATURE_COMMAND_EDITING_VI */
2509 2547
@@ -2532,9 +2570,11 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
2532 input_backward(1); 2570 input_backward(1);
2533 break; 2571 break;
2534 case KEYCODE_CTRL_LEFT: 2572 case KEYCODE_CTRL_LEFT:
2573 case KEYCODE_ALT_LEFT: /* bash doesn't do it */
2535 ctrl_left(); 2574 ctrl_left();
2536 break; 2575 break;
2537 case KEYCODE_CTRL_RIGHT: 2576 case KEYCODE_CTRL_RIGHT:
2577 case KEYCODE_ALT_RIGHT: /* bash doesn't do it */
2538 ctrl_right(); 2578 ctrl_right();
2539 break; 2579 break;
2540 case KEYCODE_HOME: 2580 case KEYCODE_HOME: