From 5b0ab8be628ecc658a3cc7b76d44342e76fdd72e Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Sat, 23 Jul 2016 12:15:39 +0200 Subject: [PATCH] shortcuts: remove any unnecessary classifying of keys After initialization, the type of a key is never used nor needed (other than for meta keys). --- src/global.c | 29 +++++++++-------------------- src/nano.h | 2 +- src/proto.h | 1 - src/rcfile.c | 1 - src/winio.c | 2 +- 5 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/global.c b/src/global.c index e2d8749f..b95afa87 100644 --- a/src/global.c +++ b/src/global.c @@ -340,7 +340,6 @@ void add_to_sclist(int menus, const char *scstring, void (*func)(void), int togg if (toggle) s->ordinal = ++counter; s->keystr = (char *) scstring; - s->type = strtokeytype(scstring); assign_keyinfo(s); #ifdef DEBUG @@ -400,41 +399,31 @@ functionptrtype func_from_key(int *kbinput) return NULL; } -/* Return the type of command key based on the given string. */ -key_type strtokeytype(const char *str) -{ - if (str[0] == '^') - return CONTROL; - else if (str[0] == 'M') - return META; - else if (str[0] == 'F') - return FKEY; - else - return RAWINPUT; -} - /* Assign the info to the shortcut struct. * Assumes keystr is already assigned, naturally. */ void assign_keyinfo(sc *s) { - if (s->type == CONTROL) { + s->type = DIRECT; + + if (s->keystr[0] == '^') { assert(strlen(s->keystr) > 1); s->seq = s->keystr[1] - 64; - } else if (s->type == META) { + } else if (s->keystr[0] == 'M') { assert(strlen(s->keystr) > 2); + s->type = META; s->seq = tolower((int) s->keystr[2]); - } else if (s->type == FKEY) { + } else if (s->keystr[0] == 'F') { assert(strlen(s->keystr) > 1); s->seq = KEY_F0 + atoi(&s->keystr[1]); } else /* RAWINPUT */ s->seq = (int) s->keystr[0]; /* Override some keys which don't bind as easily as we'd like. */ - if (s->type == CONTROL && (!strcasecmp(&s->keystr[1], "space"))) + if (strcasecmp(s->keystr, "^Space") == 0) s->seq = 0; - else if (s->type == META && (!strcasecmp(&s->keystr[2], "space"))) + else if (strcasecmp(s->keystr, "M-Space") == 0) s->seq = (int) ' '; - else if (s->type == RAWINPUT) { + else { if (!strcasecmp(s->keystr, "Up")) s->seq = KEY_UP; else if (!strcasecmp(s->keystr, "Down")) diff --git a/src/nano.h b/src/nano.h index 7403833d..b43c3214 100644 --- a/src/nano.h +++ b/src/nano.h @@ -188,7 +188,7 @@ typedef enum { } update_type; typedef enum { - CONTROL, META, FKEY, RAWINPUT + DIRECT, META } key_type; typedef enum { diff --git a/src/proto.h b/src/proto.h index 98081aa4..58f7fad8 100644 --- a/src/proto.h +++ b/src/proto.h @@ -362,7 +362,6 @@ size_t length_of_list(int menu); const sc *first_sc_for(int menu, void (*func)(void)); int sc_seq_or(void (*func)(void), int defaultval); functionptrtype func_from_key(int *kbinput); -key_type strtokeytype(const char *str); void assign_keyinfo(sc *s); void print_sclist(void); void shortcut_init(void); diff --git a/src/rcfile.c b/src/rcfile.c index c46c361a..722a9adf 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -472,7 +472,6 @@ void parse_binding(char *ptr, bool dobind) newsc->keystr = keycopy; newsc->menus = menu; - newsc->type = strtokeytype(newsc->keystr); assign_keyinfo(newsc); /* Do not allow rebinding the equivalent of the Escape key. */ diff --git a/src/winio.c b/src/winio.c index b9122902..f98117b0 100644 --- a/src/winio.c +++ b/src/winio.c @@ -1563,7 +1563,7 @@ int get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts) /* And put the corresponding key into the keyboard buffer. */ if (f != NULL) { const sc *s = first_sc_for(currmenu, f->scfunc); - unget_kbinput(s->seq, s->type == META, s->type == FKEY); + unget_kbinput(s->seq, s->type == META, s->type == DIRECT); } return 1; } else