diff --git a/src/global.c b/src/global.c
index 093e8aa027e949fbff4fbc2e848d7eb771e299af..402575f009af2fb83127fc7d32f4e5e4f4d7394e 100644
--- a/src/global.c
+++ b/src/global.c
@@ -318,7 +318,8 @@ void add_to_funcs(void (*func)(void), int menus, const char *desc, const char *h
 }
 
 /* Add a key combo to the shortcut list. */
-void add_to_sclist(int menus, const char *scstring, void (*func)(void), int toggle)
+void add_to_sclist(int menus, const char *scstring, const int keycode,
+			void (*func)(void), int toggle)
 {
     static sc *tailsc;
 #ifndef NANO_TINY
@@ -342,7 +343,7 @@ void add_to_sclist(int menus, const char *scstring, void (*func)(void), int togg
     if (toggle)
 	s->ordinal = ++counter;
 #endif
-    assign_keyinfo(s, scstring);
+    assign_keyinfo(s, scstring, keycode);
 
 #ifdef DEBUG
     fprintf(stderr, "Setting keycode to %d for shortcut \"%s\" in menus %x\n", s->keycode, scstring, s->menus);
@@ -402,66 +403,31 @@ functionptrtype func_from_key(int *kbinput)
 }
 
 /* Set the string and its corresponding keycode for the given shortcut s. */
-void assign_keyinfo(sc *s, const char *keystring)
+void assign_keyinfo(sc *s, const char *keystring, const int keycode)
 {
     s->keystr = keystring;
     s->meta = (keystring[0] == 'M');
 
     assert(strlen(keystring) > 1 && (!s->meta || strlen(keystring) > 2));
 
-    if (keystring[0] == '^') {
+    if (keycode)
+	s->keycode = keycode;
+    else if (keystring[0] == '^') {
 	if (strcasecmp(keystring, "^Space") == 0)
 	    s->keycode = 0;
-	else if (strcasecmp(keystring, "^Left") == 0 ||
-		strcasecmp(keystring, "^\xE2\x86\x90") == 0)
-	    s->keycode = CONTROL_LEFT;
-	else if (strcasecmp(keystring, "^Right") == 0 ||
-		strcasecmp(keystring, "^\xE2\x86\x92") == 0)
-	    s->keycode = CONTROL_RIGHT;
-	else if (strcasecmp(keystring, "^Up") == 0 ||
-		strcasecmp(keystring, "^\xE2\x86\x91") == 0)
-	    s->keycode = CONTROL_UP;
-	else if (strcasecmp(keystring, "^Down") == 0 ||
-		strcasecmp(keystring, "^\xE2\x86\x93") == 0)
-	    s->keycode = CONTROL_DOWN;
 	else
 	    s->keycode = keystring[1] - 64;
     } else if (s->meta) {
-	s->keycode = tolower((int)keystring[2]);
 	if (strcasecmp(keystring, "M-Space") == 0)
 	    s->keycode = (int)' ';
+	else
+	    s->keycode = tolower((int)keystring[2]);
     } else if (keystring[0] == 'F')
 	s->keycode = KEY_F0 + atoi(&keystring[1]);
-    /* Catch the strings that don't bind as easily as we'd like. */
-    else if (!strcasecmp(keystring, "Up"))
-	s->keycode = KEY_UP;
-    else if (!strcasecmp(keystring, "Down"))
-	s->keycode = KEY_DOWN;
-    else if (!strcasecmp(keystring, "Left"))
-	s->keycode = KEY_LEFT;
-    else if (!strcasecmp(keystring, "Right"))
-	s->keycode = KEY_RIGHT;
     else if (!strcasecmp(keystring, "Ins"))
 	s->keycode = KEY_IC;
     else if (!strcasecmp(keystring, "Del"))
 	s->keycode = KEY_DC;
-    else if (!strcasecmp(keystring, "Bsp"))
-	s->keycode = KEY_BACKSPACE;
-    /* The Tab and Enter keys don't actually produce special codes
-     * but the exact integer values of ^I and ^M.  Rebinding the
-     * latter therefore also rebinds Tab and Enter. */
-    else if (!strcasecmp(keystring, "Tab"))
-	s->keycode = TAB_CODE;
-    else if (!strcasecmp(keystring, "Enter"))
-	s->keycode = KEY_ENTER;
-    else if (!strcasecmp(keystring, "PgUp"))
-	s->keycode = KEY_PPAGE;
-    else if (!strcasecmp(keystring, "PgDn"))
-	s->keycode = KEY_NPAGE;
-    else if (!strcasecmp(keystring, "Home"))
-	s->keycode = KEY_HOME;
-    else if (!strcasecmp(keystring, "End"))
-	s->keycode = KEY_END;
 }
 
 #ifdef DEBUG
@@ -1059,232 +1025,232 @@ void shortcut_init(void)
 
     /* Start associating key combos with functions in specific menus. */
 
-    add_to_sclist(MMOST, "^G", do_help_void, 0);
-    add_to_sclist(MMOST, "F1", do_help_void, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "^X", do_exit, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "F2", do_exit, 0);
-    add_to_sclist(MMAIN, "^O", do_writeout_void, 0);
-    add_to_sclist(MMAIN, "F3", do_writeout_void, 0);
-    add_to_sclist(MMAIN, "^R", do_insertfile_void, 0);
-    add_to_sclist(MMAIN, "F5", do_insertfile_void, 0);
-    add_to_sclist(MMAIN, "Ins", do_insertfile_void, 0);
-    add_to_sclist(MMAIN|MBROWSER, "^W", do_search, 0);
-    add_to_sclist(MMAIN|MBROWSER, "F6", do_search, 0);
-    add_to_sclist(MMAIN, "^\\", do_replace, 0);
-    add_to_sclist(MMAIN, "M-R", do_replace, 0);
-    add_to_sclist(MMAIN, "F14", do_replace, 0);
-    add_to_sclist(MMOST, "^K", do_cut_text_void, 0);
-    add_to_sclist(MMOST, "F9", do_cut_text_void, 0);
-    add_to_sclist(MMAIN, "^U", do_uncut_text, 0);
-    add_to_sclist(MMAIN, "F10", do_uncut_text, 0);
+    add_to_sclist(MMOST, "^G", 0, do_help_void, 0);
+    add_to_sclist(MMOST, "F1", 0, do_help_void, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "^X", 0, do_exit, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "F2", 0, do_exit, 0);
+    add_to_sclist(MMAIN, "^O", 0, do_writeout_void, 0);
+    add_to_sclist(MMAIN, "F3", 0, do_writeout_void, 0);
+    add_to_sclist(MMAIN, "^R", 0, do_insertfile_void, 0);
+    add_to_sclist(MMAIN, "F5", 0, do_insertfile_void, 0);
+    add_to_sclist(MMAIN, "Ins", 0, do_insertfile_void, 0);
+    add_to_sclist(MMAIN|MBROWSER, "^W", 0, do_search, 0);
+    add_to_sclist(MMAIN|MBROWSER, "F6", 0, do_search, 0);
+    add_to_sclist(MMAIN, "^\\", 0, do_replace, 0);
+    add_to_sclist(MMAIN, "M-R", 0, do_replace, 0);
+    add_to_sclist(MMAIN, "F14", 0, do_replace, 0);
+    add_to_sclist(MMOST, "^K", 0, do_cut_text_void, 0);
+    add_to_sclist(MMOST, "F9", 0, do_cut_text_void, 0);
+    add_to_sclist(MMAIN, "^U", 0, do_uncut_text, 0);
+    add_to_sclist(MMAIN, "F10", 0, do_uncut_text, 0);
 #ifndef DISABLE_JUSTIFY
-    add_to_sclist(MMAIN, "^J", do_justify_void, 0);
-    add_to_sclist(MMAIN, "F4", do_justify_void, 0);
+    add_to_sclist(MMAIN, "^J", 0, do_justify_void, 0);
+    add_to_sclist(MMAIN, "F4", 0, do_justify_void, 0);
 #endif
 #ifndef DISABLE_SPELLER
-    add_to_sclist(MMAIN, "^T", do_spell, 0);
-    add_to_sclist(MMAIN, "F12", do_spell, 0);
+    add_to_sclist(MMAIN, "^T", 0, do_spell, 0);
+    add_to_sclist(MMAIN, "F12", 0, do_spell, 0);
 #else
 #ifndef DISABLE_COLOR
-    add_to_sclist(MMAIN, "^T", do_linter, 0);
-    add_to_sclist(MMAIN, "F12", do_linter, 0);
-#endif
-#endif
-    add_to_sclist(MMAIN, "^C", do_cursorpos_void, 0);
-    add_to_sclist(MMAIN, "F11", do_cursorpos_void, 0);
-    add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0);
-    add_to_sclist(MMAIN, "M-G", do_gotolinecolumn_void, 0);
-    add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "^Y", do_page_up, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "F7", do_page_up, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "PgUp", do_page_up, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "^V", do_page_down, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "F8", do_page_down, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "PgDn", do_page_down, 0);
-    add_to_sclist(MMAIN|MHELP, "M-\\", do_first_line, 0);
-    add_to_sclist(MMAIN|MHELP, "M-|", do_first_line, 0);
-    add_to_sclist(MMAIN|MHELP, "M-/", do_last_line, 0);
-    add_to_sclist(MMAIN|MHELP, "M-?", do_last_line, 0);
-    add_to_sclist(MMAIN|MBROWSER, "M-W", do_research, 0);
-    add_to_sclist(MMAIN|MBROWSER, "F16", do_research, 0);
+    add_to_sclist(MMAIN, "^T", 0, do_linter, 0);
+    add_to_sclist(MMAIN, "F12", 0, do_linter, 0);
+#endif
+#endif
+    add_to_sclist(MMAIN, "^C", 0, do_cursorpos_void, 0);
+    add_to_sclist(MMAIN, "F11", 0, do_cursorpos_void, 0);
+    add_to_sclist(MMAIN, "^_", 0, do_gotolinecolumn_void, 0);
+    add_to_sclist(MMAIN, "M-G", 0, do_gotolinecolumn_void, 0);
+    add_to_sclist(MMAIN, "F13", 0, do_gotolinecolumn_void, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "^Y", 0, do_page_up, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "F7", 0, do_page_up, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "PgUp", KEY_PPAGE, do_page_up, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "^V", 0, do_page_down, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "F8", 0, do_page_down, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER|MLINTER, "PgDn", KEY_NPAGE, do_page_down, 0);
+    add_to_sclist(MMAIN|MHELP, "M-\\", 0, do_first_line, 0);
+    add_to_sclist(MMAIN|MHELP, "M-|", 0, do_first_line, 0);
+    add_to_sclist(MMAIN|MHELP, "M-/", 0, do_last_line, 0);
+    add_to_sclist(MMAIN|MHELP, "M-?", 0, do_last_line, 0);
+    add_to_sclist(MMAIN|MBROWSER, "M-W", 0, do_research, 0);
+    add_to_sclist(MMAIN|MBROWSER, "F16", 0, do_research, 0);
 #ifndef NANO_TINY
-    add_to_sclist(MMAIN, "M-]", do_find_bracket, 0);
-    add_to_sclist(MMAIN, "^^", do_mark, 0);
-    add_to_sclist(MMAIN, "M-A", do_mark, 0);
-    add_to_sclist(MMAIN, "F15", do_mark, 0);
-    add_to_sclist(MMAIN, "M-^", do_copy_text, 0);
-    add_to_sclist(MMAIN, "M-6", do_copy_text, 0);
-    add_to_sclist(MMAIN, "M-}", do_indent_void, 0);
-    add_to_sclist(MMAIN, "M-{", do_unindent, 0);
-    add_to_sclist(MMAIN, "M-U", do_undo, 0);
-    add_to_sclist(MMAIN, "M-E", do_redo, 0);
+    add_to_sclist(MMAIN, "M-]", 0, do_find_bracket, 0);
+    add_to_sclist(MMAIN, "^^", 0, do_mark, 0);
+    add_to_sclist(MMAIN, "M-A", 0, do_mark, 0);
+    add_to_sclist(MMAIN, "F15", 0, do_mark, 0);
+    add_to_sclist(MMAIN, "M-^", 0, do_copy_text, 0);
+    add_to_sclist(MMAIN, "M-6", 0, do_copy_text, 0);
+    add_to_sclist(MMAIN, "M-}", 0, do_indent_void, 0);
+    add_to_sclist(MMAIN, "M-{", 0, do_unindent, 0);
+    add_to_sclist(MMAIN, "M-U", 0, do_undo, 0);
+    add_to_sclist(MMAIN, "M-E", 0, do_redo, 0);
 #endif
 #ifdef ENABLE_COMMENT
-    add_to_sclist(MMAIN, "M-3", do_comment, 0);
+    add_to_sclist(MMAIN, "M-3", 0, do_comment, 0);
 #endif
-    add_to_sclist(MMOST, "^B", do_left, 0);
-    add_to_sclist(MMOST, "Left", do_left, 0);
-    add_to_sclist(MMOST, "^F", do_right, 0);
-    add_to_sclist(MMOST, "Right", do_right, 0);
+    add_to_sclist(MMOST, "^B", 0, do_left, 0);
+    add_to_sclist(MMOST, "Left", KEY_LEFT, do_left, 0);
+    add_to_sclist(MMOST, "^F", 0, do_right, 0);
+    add_to_sclist(MMOST, "Right", KEY_RIGHT, do_right, 0);
     if (using_utf8()) {
-	add_to_sclist(MMOST, "^\xE2\x86\x90", do_prev_word_void, 0);
-	add_to_sclist(MMOST, "^\xE2\x86\x92", do_next_word_void, 0);
+	add_to_sclist(MMOST, "^\xE2\x86\x90", CONTROL_LEFT, do_prev_word_void, 0);
+	add_to_sclist(MMOST, "^\xE2\x86\x92", CONTROL_RIGHT, do_next_word_void, 0);
     } else {
-	add_to_sclist(MMOST, "^Left", do_prev_word_void, 0);
-	add_to_sclist(MMOST, "^Right", do_next_word_void, 0);
+	add_to_sclist(MMOST, "^Left", CONTROL_LEFT, do_prev_word_void, 0);
+	add_to_sclist(MMOST, "^Right", CONTROL_RIGHT, do_next_word_void, 0);
     }
-    add_to_sclist(MMOST, "M-Space", do_prev_word_void, 0);
-    add_to_sclist(MMOST, "^Space", do_next_word_void, 0);
-    add_to_sclist((MMOST & ~MBROWSER), "^A", do_home, 0);
-    add_to_sclist((MMOST & ~MBROWSER), "Home", do_home, 0);
-    add_to_sclist((MMOST & ~MBROWSER), "^E", do_end, 0);
-    add_to_sclist((MMOST & ~MBROWSER), "End", do_end, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "^P", do_up_void, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "Up", do_up_void, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "^N", do_down_void, 0);
-    add_to_sclist(MMAIN|MHELP|MBROWSER, "Down", do_down_void, 0);
+    add_to_sclist(MMOST, "M-Space", 0, do_prev_word_void, 0);
+    add_to_sclist(MMOST, "^Space", 0, do_next_word_void, 0);
+    add_to_sclist((MMOST & ~MBROWSER), "^A", 0, do_home, 0);
+    add_to_sclist((MMOST & ~MBROWSER), "Home", KEY_HOME, do_home, 0);
+    add_to_sclist((MMOST & ~MBROWSER), "^E", 0, do_end, 0);
+    add_to_sclist((MMOST & ~MBROWSER), "End", KEY_END, do_end, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "^P", 0, do_up_void, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "Up", KEY_UP, do_up_void, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "^N", 0, do_down_void, 0);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "Down", KEY_DOWN, do_down_void, 0);
     if (using_utf8()) {
-	add_to_sclist(MMAIN, "^\xE2\x86\x91", do_prev_block, 0);
-	add_to_sclist(MMAIN, "^\xE2\x86\x93", do_next_block, 0);
+	add_to_sclist(MMAIN, "^\xE2\x86\x91", CONTROL_UP, do_prev_block, 0);
+	add_to_sclist(MMAIN, "^\xE2\x86\x93", CONTROL_DOWN, do_next_block, 0);
     } else {
-	add_to_sclist(MMAIN, "^Up", do_prev_block, 0);
-	add_to_sclist(MMAIN, "^Down", do_next_block, 0);
+	add_to_sclist(MMAIN, "^Up", CONTROL_UP, do_prev_block, 0);
+	add_to_sclist(MMAIN, "^Down", CONTROL_DOWN, do_next_block, 0);
     }
-    add_to_sclist(MMAIN, "M-7", do_prev_block, 0);
-    add_to_sclist(MMAIN, "M-8", do_next_block, 0);
+    add_to_sclist(MMAIN, "M-7", 0, do_prev_block, 0);
+    add_to_sclist(MMAIN, "M-8", 0, do_next_block, 0);
 #ifndef DISABLE_JUSTIFY
-    add_to_sclist(MMAIN, "M-(", do_para_begin_void, 0);
-    add_to_sclist(MMAIN, "M-9", do_para_begin_void, 0);
-    add_to_sclist(MMAIN, "M-)", do_para_end_void, 0);
-    add_to_sclist(MMAIN, "M-0", do_para_end_void, 0);
+    add_to_sclist(MMAIN, "M-(", 0, do_para_begin_void, 0);
+    add_to_sclist(MMAIN, "M-9", 0, do_para_begin_void, 0);
+    add_to_sclist(MMAIN, "M-)", 0, do_para_end_void, 0);
+    add_to_sclist(MMAIN, "M-0", 0, do_para_end_void, 0);
 #endif
 #ifndef NANO_TINY
-    add_to_sclist(MMAIN, "M--", do_scroll_up, 0);
-    add_to_sclist(MMAIN, "M-_", do_scroll_up, 0);
-    add_to_sclist(MMAIN, "M-+", do_scroll_down, 0);
-    add_to_sclist(MMAIN, "M-=", do_scroll_down, 0);
+    add_to_sclist(MMAIN, "M--", 0, do_scroll_up, 0);
+    add_to_sclist(MMAIN, "M-_", 0, do_scroll_up, 0);
+    add_to_sclist(MMAIN, "M-+", 0, do_scroll_down, 0);
+    add_to_sclist(MMAIN, "M-=", 0, do_scroll_down, 0);
 #endif
 #ifndef DISABLE_MULTIBUFFER
-    add_to_sclist(MMAIN, "M-<", switch_to_prev_buffer_void, 0);
-    add_to_sclist(MMAIN, "M-,", switch_to_prev_buffer_void, 0);
-    add_to_sclist(MMAIN, "M->", switch_to_next_buffer_void, 0);
-    add_to_sclist(MMAIN, "M-.", switch_to_next_buffer_void, 0);
+    add_to_sclist(MMAIN, "M-<", 0, switch_to_prev_buffer_void, 0);
+    add_to_sclist(MMAIN, "M-,", 0, switch_to_prev_buffer_void, 0);
+    add_to_sclist(MMAIN, "M->", 0, switch_to_next_buffer_void, 0);
+    add_to_sclist(MMAIN, "M-.", 0, switch_to_next_buffer_void, 0);
 #endif
-    add_to_sclist(MMOST, "M-V", do_verbatim_input, 0);
+    add_to_sclist(MMOST, "M-V", 0, do_verbatim_input, 0);
 #ifndef NANO_TINY
-    add_to_sclist(MMAIN, "M-T", do_cut_till_eof, 0);
-    add_to_sclist(MMAIN, "M-D", do_wordlinechar_count, 0);
+    add_to_sclist(MMAIN, "M-T", 0, do_cut_till_eof, 0);
+    add_to_sclist(MMAIN, "M-D", 0, do_wordlinechar_count, 0);
 #endif
 #ifndef DISABLE_JUSTIFY
-    add_to_sclist(MMAIN|MWHEREIS, "M-J", do_full_justify, 0);
+    add_to_sclist(MMAIN|MWHEREIS, "M-J", 0, do_full_justify, 0);
 #endif
-    add_to_sclist(MMAIN|MHELP, "^L", total_refresh, 0);
-    add_to_sclist(MMAIN, "^Z", do_suspend_void, 0);
+    add_to_sclist(MMAIN|MHELP, "^L", 0, total_refresh, 0);
+    add_to_sclist(MMAIN, "^Z", 0, do_suspend_void, 0);
 
 #ifndef NANO_TINY
     /* Group of "Appearance" toggles. */
-    add_to_sclist(MMAIN, "M-X", do_toggle_void, NO_HELP);
-    add_to_sclist(MMAIN, "M-C", do_toggle_void, CONST_UPDATE);
-    add_to_sclist(MMAIN, "M-O", do_toggle_void, MORE_SPACE);
-    add_to_sclist(MMAIN, "M-S", do_toggle_void, SMOOTH_SCROLL);
-    add_to_sclist(MMAIN, "M-$", do_toggle_void, SOFTWRAP);
-    add_to_sclist(MMAIN, "M-P", do_toggle_void, WHITESPACE_DISPLAY);
+    add_to_sclist(MMAIN, "M-X", 0, do_toggle_void, NO_HELP);
+    add_to_sclist(MMAIN, "M-C", 0, do_toggle_void, CONST_UPDATE);
+    add_to_sclist(MMAIN, "M-O", 0, do_toggle_void, MORE_SPACE);
+    add_to_sclist(MMAIN, "M-S", 0, do_toggle_void, SMOOTH_SCROLL);
+    add_to_sclist(MMAIN, "M-$", 0, do_toggle_void, SOFTWRAP);
+    add_to_sclist(MMAIN, "M-P", 0, do_toggle_void, WHITESPACE_DISPLAY);
 #ifndef DISABLE_COLOR
-    add_to_sclist(MMAIN, "M-Y", do_toggle_void, NO_COLOR_SYNTAX);
+    add_to_sclist(MMAIN, "M-Y", 0, do_toggle_void, NO_COLOR_SYNTAX);
 #endif
 
     /* Group of "Editing-behavior" toggles. */
-    add_to_sclist(MMAIN, "M-H", do_toggle_void, SMART_HOME);
-    add_to_sclist(MMAIN, "M-I", do_toggle_void, AUTOINDENT);
-    add_to_sclist(MMAIN, "M-K", do_toggle_void, CUT_TO_END);
+    add_to_sclist(MMAIN, "M-H", 0, do_toggle_void, SMART_HOME);
+    add_to_sclist(MMAIN, "M-I", 0, do_toggle_void, AUTOINDENT);
+    add_to_sclist(MMAIN, "M-K", 0, do_toggle_void, CUT_TO_END);
 #ifndef DISABLE_WRAPPING
-    add_to_sclist(MMAIN, "M-L", do_toggle_void, NO_WRAP);
+    add_to_sclist(MMAIN, "M-L", 0, do_toggle_void, NO_WRAP);
 #endif
-    add_to_sclist(MMAIN, "M-Q", do_toggle_void, TABS_TO_SPACES);
+    add_to_sclist(MMAIN, "M-Q", 0, do_toggle_void, TABS_TO_SPACES);
 
     /* Group of "Peripheral-feature" toggles. */
-    add_to_sclist(MMAIN, "M-B", do_toggle_void, BACKUP_FILE);
+    add_to_sclist(MMAIN, "M-B", 0, do_toggle_void, BACKUP_FILE);
 #ifndef DISABLE_MULTIBUFFER
-    add_to_sclist(MMAIN, "M-F", do_toggle_void, MULTIBUFFER);
+    add_to_sclist(MMAIN, "M-F", 0, do_toggle_void, MULTIBUFFER);
 #endif
 #ifndef DISABLE_MOUSE
-    add_to_sclist(MMAIN, "M-M", do_toggle_void, USE_MOUSE);
+    add_to_sclist(MMAIN, "M-M", 0, do_toggle_void, USE_MOUSE);
 #endif
-    add_to_sclist(MMAIN, "M-N", do_toggle_void, NO_CONVERT);
-    add_to_sclist(MMAIN, "M-Z", do_toggle_void, SUSPEND);
+    add_to_sclist(MMAIN, "M-N", 0, do_toggle_void, NO_CONVERT);
+    add_to_sclist(MMAIN, "M-Z", 0, do_toggle_void, SUSPEND);
 #endif /* !NANO_TINY */
 
-    add_to_sclist(MMAIN, "^Q", xon_complaint, 0);
-    add_to_sclist(MMAIN, "^S", xoff_complaint, 0);
+    add_to_sclist(MMAIN, "^Q", 0, xon_complaint, 0);
+    add_to_sclist(MMAIN, "^S", 0, xoff_complaint, 0);
 
-    add_to_sclist(((MMOST & ~MMAIN & ~MBROWSER) | MYESNO), "^C", do_cancel, 0);
+    add_to_sclist(((MMOST & ~MMAIN & ~MBROWSER) | MYESNO), "^C", 0, do_cancel, 0);
 
-    add_to_sclist(MWHEREIS|MREPLACE, "M-C", case_sens_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE, "M-R", regexp_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE, "M-B", backwards_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE, "^R", flip_replace_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^Y", do_first_line, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^V", do_last_line, 0);
+    add_to_sclist(MWHEREIS|MREPLACE, "M-C", 0, case_sens_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE, "M-R", 0, regexp_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE, "M-B", 0, backwards_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE, "^R", 0, flip_replace_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^Y", 0, do_first_line, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^V", 0, do_last_line, 0);
 #ifndef DISABLE_JUSTIFY
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^W", do_para_begin_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^O", do_para_end_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^W", 0, do_para_begin_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^O", 0, do_para_end_void, 0);
 #endif
-    add_to_sclist(MWHEREIS, "^T", do_gotolinecolumn_void, 0);
-    add_to_sclist(MGOTOLINE, "^T", gototext_void, 0);
+    add_to_sclist(MWHEREIS, "^T", 0, do_gotolinecolumn_void, 0);
+    add_to_sclist(MGOTOLINE, "^T", 0, gototext_void, 0);
 #ifndef DISABLE_HISTORIES
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^P", get_history_older_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Up", get_history_older_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^N", get_history_newer_void, 0);
-    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Down", get_history_newer_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^P", 0, get_history_older_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Up", KEY_UP, get_history_older_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^N", 0, get_history_newer_void, 0);
+    add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Down", KEY_DOWN, get_history_newer_void, 0);
 #endif
 #ifndef DISABLE_BROWSER
-    add_to_sclist(MWHEREISFILE, "^Y", do_first_file, 0);
-    add_to_sclist(MWHEREISFILE, "^V", do_last_file, 0);
-    add_to_sclist(MBROWSER|MWHEREISFILE, "M-\\", do_first_file, 0);
-    add_to_sclist(MBROWSER|MWHEREISFILE, "M-|", do_first_file, 0);
-    add_to_sclist(MBROWSER|MWHEREISFILE, "M-/", do_last_file, 0);
-    add_to_sclist(MBROWSER|MWHEREISFILE, "M-?", do_last_file, 0);
-    add_to_sclist(MBROWSER, "Home", do_first_file, 0);
-    add_to_sclist(MBROWSER, "End", do_last_file, 0);
-    add_to_sclist(MBROWSER, "^_", goto_dir_void, 0);
-    add_to_sclist(MBROWSER, "M-G", goto_dir_void, 0);
-    add_to_sclist(MBROWSER, "F13", goto_dir_void, 0);
-    add_to_sclist(MBROWSER, "^L", total_refresh, 0);
+    add_to_sclist(MWHEREISFILE, "^Y", 0, do_first_file, 0);
+    add_to_sclist(MWHEREISFILE, "^V", 0, do_last_file, 0);
+    add_to_sclist(MBROWSER|MWHEREISFILE, "M-\\", 0, do_first_file, 0);
+    add_to_sclist(MBROWSER|MWHEREISFILE, "M-|", 0, do_first_file, 0);
+    add_to_sclist(MBROWSER|MWHEREISFILE, "M-/", 0, do_last_file, 0);
+    add_to_sclist(MBROWSER|MWHEREISFILE, "M-?", 0, do_last_file, 0);
+    add_to_sclist(MBROWSER, "Home", KEY_HOME, do_first_file, 0);
+    add_to_sclist(MBROWSER, "End", KEY_END, do_last_file, 0);
+    add_to_sclist(MBROWSER, "^_", 0, goto_dir_void, 0);
+    add_to_sclist(MBROWSER, "M-G", 0, goto_dir_void, 0);
+    add_to_sclist(MBROWSER, "F13", 0, goto_dir_void, 0);
+    add_to_sclist(MBROWSER, "^L", 0, total_refresh, 0);
 #endif
     if (ISSET(TEMP_FILE))
-	add_to_sclist(MWRITEFILE, "^Q", discard_buffer, 0);
-    add_to_sclist(MWRITEFILE, "M-D", dos_format_void, 0);
-    add_to_sclist(MWRITEFILE, "M-M", mac_format_void, 0);
+	add_to_sclist(MWRITEFILE, "^Q", 0, discard_buffer, 0);
+    add_to_sclist(MWRITEFILE, "M-D", 0, dos_format_void, 0);
+    add_to_sclist(MWRITEFILE, "M-M", 0, mac_format_void, 0);
     if (!ISSET(RESTRICTED)) {
 	/* Don't allow Appending, Prepending, nor Backups in restricted mode. */
-	add_to_sclist(MWRITEFILE, "M-A", append_void, 0);
-	add_to_sclist(MWRITEFILE, "M-P", prepend_void, 0);
-	add_to_sclist(MWRITEFILE, "M-B", backup_file_void, 0);
+	add_to_sclist(MWRITEFILE, "M-A", 0, append_void, 0);
+	add_to_sclist(MWRITEFILE, "M-P", 0, prepend_void, 0);
+	add_to_sclist(MWRITEFILE, "M-B", 0, backup_file_void, 0);
 #ifndef DISABLE_BROWSER
-	add_to_sclist(MWRITEFILE|MINSERTFILE, "^T", to_files_void, 0);
+	add_to_sclist(MWRITEFILE|MINSERTFILE, "^T", 0, to_files_void, 0);
 #endif
-	add_to_sclist(MINSERTFILE|MEXTCMD, "^X", flip_execute_void, 0);
-	add_to_sclist(MINSERTFILE|MEXTCMD, "M-F", new_buffer_void, 0);
+	add_to_sclist(MINSERTFILE|MEXTCMD, "^X", 0, flip_execute_void, 0);
+	add_to_sclist(MINSERTFILE|MEXTCMD, "M-F", 0, new_buffer_void, 0);
     }
-    add_to_sclist(MHELP|MBROWSER, "^C", do_exit, 0);
+    add_to_sclist(MHELP|MBROWSER, "^C", 0, do_exit, 0);
     /* Allow exiting from the file browser and the help viewer with
      * the same key as they were entered. */
 #ifndef DISABLE_BROWSER
-    add_to_sclist(MBROWSER, "^T", do_exit, 0);
+    add_to_sclist(MBROWSER, "^T", 0, do_exit, 0);
 #endif
 #ifndef DISABLE_HELP
-    add_to_sclist(MHELP, "^G", do_exit, 0);
-    add_to_sclist(MHELP, "Home", do_first_line, 0);
-    add_to_sclist(MHELP, "End", do_last_line, 0);
-#endif
-    add_to_sclist(MMOST, "^I", do_tab, 0);
-    add_to_sclist(MMOST, "Tab", do_tab, 0);
-    add_to_sclist(MMOST, "^M", do_enter, 0);
-    add_to_sclist(MMOST, "Enter", do_enter, 0);
-    add_to_sclist(MMOST, "^D", do_delete, 0);
-    add_to_sclist(MMOST, "Del", do_delete, 0);
-    add_to_sclist(MMOST, "^H", do_backspace, 0);
-    add_to_sclist(MMOST, "Bsp", do_backspace, 0);
+    add_to_sclist(MHELP, "^G", 0, do_exit, 0);
+    add_to_sclist(MHELP, "Home", KEY_HOME, do_first_line, 0);
+    add_to_sclist(MHELP, "End", KEY_END, do_last_line, 0);
+#endif
+    add_to_sclist(MMOST, "^I", 0, do_tab, 0);
+    add_to_sclist(MMOST, "Tab", TAB_CODE, do_tab, 0);
+    add_to_sclist(MMOST, "^M", 0, do_enter, 0);
+    add_to_sclist(MMOST, "Enter", KEY_ENTER, do_enter, 0);
+    add_to_sclist(MMOST, "^D", 0, do_delete, 0);
+    add_to_sclist(MMOST, "Del", 0, do_delete, 0);
+    add_to_sclist(MMOST, "^H", 0, do_backspace, 0);
+    add_to_sclist(MMOST, "Bsp", KEY_BACKSPACE, do_backspace, 0);
 
 #ifdef DEBUG
     print_sclist();
diff --git a/src/proto.h b/src/proto.h
index 2d1593d8fa01ce925aec89beccdce619aa8405a1..b4087e90b742249e5e72a042f6ff4a3d2e4415f4 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -368,7 +368,7 @@ 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);
-void assign_keyinfo(sc *s, const char *keystring);
+void assign_keyinfo(sc *s, const char *keystring, const int keycode);
 void print_sclist(void);
 void shortcut_init(void);
 #ifndef DISABLE_COLOR
diff --git a/src/rcfile.c b/src/rcfile.c
index bd267cb1e2bdeba783dc0e1fbd80a92c1b9085a0..541c71a818878925103a7813921219448a2bc90d 100644
--- a/src/rcfile.c
+++ b/src/rcfile.c
@@ -478,7 +478,7 @@ void parse_binding(char *ptr, bool dobind)
 	}
 
 	newsc->menus = menu;
-	assign_keyinfo(newsc, keycopy);
+	assign_keyinfo(newsc, keycopy, 0);
 
 	/* Do not allow rebinding a frequent escape-sequence starter: Esc [. */
 	if (newsc->meta && newsc->keycode == 91) {