summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-11-16 14:02:49 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-11-16 14:02:49 +0100
commit8d094bcab0580595765e8ce216c4d23d3c6823e2 (patch)
tree3db8288400126c5a7b4422ed64f8ed2030267e9c /lib
parent1bfbbcca5174bee0193b77a8c61177abb1265e32 (diff)
parentff6b691a8cf4e7a5899308ed5af9dab051ef107b (diff)
downloadbarebox-8d094bcab0580595765e8ce216c4d23d3c6823e2.tar.gz
barebox-8d094bcab0580595765e8ce216c4d23d3c6823e2.tar.xz
Merge branch 'for-next/readline'
Diffstat (limited to 'lib')
-rw-r--r--lib/readline.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/lib/readline.c b/lib/readline.c
index 5717a1782..3fb620e37 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -137,6 +137,18 @@ static char* hist_next(void)
} \
}
+#define DO_BACKSPACE() \
+ wlen = eol_num - num; \
+ num--; \
+ memmove(buf + num, buf + num + 1, wlen); \
+ getcmd_putch(CTL_BACKSPACE); \
+ putnstr(buf + num, wlen); \
+ getcmd_putch(' '); \
+ do { \
+ getcmd_putch(CTL_BACKSPACE); \
+ } while (wlen--); \
+ eol_num--;
+
static void cread_add_char(char ichar, int insert, unsigned long *num,
unsigned long *eol_num, char *buf, unsigned long len)
{
@@ -273,16 +285,7 @@ int readline(const char *prompt, char *buf, int len)
case KEY_DEL7:
case 8:
if (num) {
- wlen = eol_num - num;
- num--;
- memmove(buf + num, buf + num + 1, wlen);
- getcmd_putch(CTL_BACKSPACE);
- putnstr(buf + num, wlen);
- getcmd_putch(' ');
- do {
- getcmd_putch(CTL_BACKSPACE);
- } while (wlen--);
- eol_num--;
+ DO_BACKSPACE();
}
break;
case KEY_DEL:
@@ -325,6 +328,16 @@ int readline(const char *prompt, char *buf, int len)
REFRESH_TO_EOL();
continue;
}
+ case CTL_CH('w'):
+ while ((num >= 1) && (buf[num - 1] == ' ')) {
+ DO_BACKSPACE();
+ }
+
+ while ((num >= 1) && (buf[num - 1] != ' ')) {
+ DO_BACKSPACE();
+ }
+
+ break;
default:
if (isascii(ichar) && isprint(ichar))
cread_add_char(ichar, insert, &num, &eol_num, buf, len);
@@ -340,4 +353,3 @@ int readline(const char *prompt, char *buf, int len)
return rc < 0 ? rc : len;
}
-