mirror of
https://github.com/antirez/linenoise.git
synced 2025-11-16 12:34:48 +00:00
linenoiseEdit() escapes processing refactor.
This commit is contained in:
45
linenoise.c
45
linenoise.c
@@ -736,24 +736,33 @@ static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen,
|
|||||||
if (read(l.ifd,seq,1) == -1) break;
|
if (read(l.ifd,seq,1) == -1) break;
|
||||||
if (read(l.ifd,seq+1,1) == -1) break;
|
if (read(l.ifd,seq+1,1) == -1) break;
|
||||||
|
|
||||||
if (seq[0] == '[' && seq[1] == 'D') {
|
/* [ codes. */
|
||||||
/* Left arrow */
|
if (seq[0] == '[') {
|
||||||
linenoiseEditMoveLeft(&l);
|
if (seq[1] >= '0' && seq[1] <= '9') {
|
||||||
} else if (seq[0] == '[' && seq[1] == 'C') {
|
/* Extended escape, read additional byte. */
|
||||||
/* Right arrow */
|
if (read(l.ifd,seq+2,1) == -1) break;
|
||||||
linenoiseEditMoveRight(&l);
|
if (seq[2] == '~') {
|
||||||
} else if (seq[0] == '[' &&
|
switch(seq[1]) {
|
||||||
(seq[1] == 'A' || seq[1] == 'B')) {
|
case '3': /* Delete key. */
|
||||||
/* Up and Down arrows */
|
linenoiseEditDelete(&l);
|
||||||
linenoiseEditHistoryNext(&l,
|
break;
|
||||||
(seq[1] == 'A') ? LINENOISE_HISTORY_PREV :
|
}
|
||||||
LINENOISE_HISTORY_NEXT);
|
}
|
||||||
} else if (seq[0] == '[' && seq[1] > 48 && seq[1] < 55) {
|
} else {
|
||||||
/* Extended escape, read additional byte. */
|
switch(seq[1]) {
|
||||||
if (read(l.ifd,seq+2,1) == -1) break;
|
case 'A':
|
||||||
if (seq[1] == '3' && seq[2] == '~') {
|
linenoiseEditHistoryNext(&l, LINENOISE_HISTORY_PREV);
|
||||||
/* Delete key. */
|
break;
|
||||||
linenoiseEditDelete(&l);
|
case 'B':
|
||||||
|
linenoiseEditHistoryNext(&l, LINENOISE_HISTORY_NEXT);
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
linenoiseEditMoveLeft(&l);
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
linenoiseEditMoveLeft(&l);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user