linenoiseEdit() escapes processing refactor.

This commit is contained in:
antirez
2014-03-13 11:08:37 +01:00
parent 4115b61663
commit fb015dabbd

View File

@@ -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;