aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-07-04 19:02:47 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2018-07-04 19:02:47 +0530
commit74a0dc0a97e05702b18d4df7547ca7dc59f507c8 (patch)
treeb401e283d0b486b31f0a47cec8eae604be8c3dc1
parentcd318db1b22848249c3a41a884945108a72a4e8b (diff)
downloadnnn-74a0dc0a97e05702b18d4df7547ca7dc59f507c8.tar.gz
Replace multiple if with switch
-rw-r--r--nnn.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/nnn.c b/nnn.c
index b136699..fa4c177 100644
--- a/nnn.c
+++ b/nnn.c
@@ -1213,35 +1213,30 @@ xreadline(char *fname, char *prompt)
if ((r = get_wch(ch)) != ERR) {
if (r == OK) {
- if (*ch == KEY_ENTER || *ch == '\n' || *ch == '\r')
- break;
-
- if (*ch == '\b') {
+ switch (*ch) {
+ case KEY_ENTER: //fallthrough
+ case '\n': //fallthrough
+ case '\r':
+ goto END;
+ case '\b': /* some old curses (e.g. rhel25) still send '\b' for backspace */
if (pos > 0) {
memmove(buf + pos - 1, buf + pos, (len - pos) << 2);
--len, --pos;
- }
+ } //fallthrough
+ case '\t': /* TAB breaks cursor position, ignore it */
continue;
- }
-
- if (*ch == CONTROL('L')) {
+ case CONTROL('L'):
clearprompt();
printprompt(prompt);
len = pos = 0;
continue;
- }
-
- if (*ch == CONTROL('A')) {
+ case CONTROL('A'):
pos = 0;
continue;
- }
-
- if (*ch == CONTROL('E')) {
+ case CONTROL('E'):
pos = len;
continue;
- }
-
- if (*ch == CONTROL('U')) {
+ case CONTROL('U'):
clearprompt();
printprompt(prompt);
memmove(buf, buf + pos, (len - pos) << 2);
@@ -1254,10 +1249,6 @@ xreadline(char *fname, char *prompt)
if (keyname(*ch)[0] == '^')
continue;
- /* TAB breaks cursor position, ignore it */
- if (*ch == '\t')
- continue;
-
if (pos < NAME_MAX - 1) {
memmove(buf + pos + 1, buf + pos, (len - pos) << 2);
buf[pos] = *ch;
@@ -1293,6 +1284,7 @@ xreadline(char *fname, char *prompt)
}
}
+END:
buf[len] = '\0';
if (old_curs != ERR)
curs_set(old_curs);