Re: BUG REPORT tin 1.7.10 release 20050716 ("Grimsay") [UNIX]

Michael Bienia <[email protected]>
Newsgroups gmane.network.tin.devel
Message-ID <[email protected]>
On 2005-07-17 00:27:40 +0200, Urs Janßen wrote:
> On Sun, Jul 17, 2005 at 12:52:23AM +0300, Teemu Likonen wrote:
> > Version: tin 1.7.10 release 20050716 ("Grimsay") Jul 17 2005 00:12:27
> >
> > I just compiled snapshot of 1.7.10 and found two bugs. If I have _no_
> > file /etc/tin/keymap or ~/.tin/keymap, some key bindings are missing. For
> > example there is no TAB key in group level anymore and SPACE doesn't
> > work with the help pager. If I copy doc/keymap.sample to /etc/tin/keymap
> > I got all the familiar keys working. I've never used any keymap file, so
> > is this odd (at least to me) change in defaults made on purpose?
> 
> no, this is a bug (I have an idea why this happens: same functions are bound
> to several keys (e.g. SELECT_ENTER_NEXT_UNREAD_GROUP to 'n' and '\t'), but
> the new override code can't handle this).

Attached is a new approach for the override code. I hope it works better
than the current one. But as I've done much testing yet there could
still be some small bugs.

Michael
patch-20050719.diff (text/plain, 40.3 KB)
 keymap.c |  708 ++++++++++++++++++++++++++++++---------------------------------
 1 files changed, 342 insertions(+), 366 deletions(-)
diff -Nurp tin-1.7.10/src/keymap.c tin-1.7.10.new/src/keymap.c
--- tin-1.7.10/src/keymap.c	2005-07-02 15:12:10.000000000 +0200
+++ tin-1.7.10.new/src/keymap.c	2005-07-19 21:53:28.152330005 +0200
@@ -44,11 +44,11 @@
 /*
  * local prototypes
  */
-static void add_default_key(struct keylist *keys, char key, t_function func);
+static void add_default_key(struct keylist *key_list, const char *keys, t_function func);
 static void add_global_keys(struct keylist *keys);
 static void free_keylist(struct keylist *keys);
 static void upgrade_keymap_file(char *old);
-static t_bool add_key(struct keylist *keys, char key, t_function func, t_bool default_key);
+static t_bool add_key(struct keylist *keys, char key, t_function func, t_bool override);
 static t_bool process_keys(t_function func, const char *keys, struct keylist *kl);
 static t_bool process_mapping(char *keyname, char *keys);
 
@@ -127,17 +127,13 @@ func_to_key(
 static t_bool
 add_key(
 	struct keylist *keys,
-	char key,
+	const char key,
 	t_function func,
-	t_bool default_key)
+	t_bool override)
 {
 	size_t i;
 	struct keynode *entry = NULL;
 
-	/* check if the function has already a key assigned before we add the default one */
-	if (default_key && func_to_key(func, *keys) != '?')
-		return FALSE;
-
 	/* is a function already associated with this key */
 	for (i = 0; i < keys->used; i++) {
 		if (keys->list[i].key == key)
@@ -145,7 +141,7 @@ add_key(
 	}
 
 	if (entry != NULL) {
-		if (!default_key) {
+		if (override) {
 			entry->function = func;
 			return TRUE;
 		} else
@@ -172,11 +168,17 @@ add_key(
 
 static void
 add_default_key(
-	struct keylist *keys,
-	char key,
+	struct keylist *key_list,
+	const char *keys,
 	t_function func)
 {
-	add_key(keys, key, func, TRUE);
+	const char *key = keys;
+	/* check if the function has already a key assigned before we add the default one */
+	if (func_to_key(func, *key_list) != '?')
+		return;
+	
+	for(; *key != '\0'; key++)
+		add_key(key_list, *key, func, FALSE);
 }
 
 
@@ -429,7 +431,7 @@ process_keys(
 		}
 
 		if (!error)
-			add_key(kl, key, func, FALSE);
+			add_key(kl, key, func, TRUE);
 
 		keydef = strtok(NULL, KEYSEPS);
 	}
@@ -2237,364 +2239,347 @@ setup_default_keys(
 {
 	/* select level */
 	add_global_keys(&select_keys);
-	add_default_key(&select_keys, ctrl('J'), SELECT_ENTER_GROUP);
-	add_default_key(&select_keys, ctrl('M'), SELECT_ENTER_GROUP);
-	add_default_key(&select_keys, ctrl('R'), SELECT_RESET_NEWSRC);
-	add_default_key(&select_keys, 'c', CATCHUP);
-	add_default_key(&select_keys, 'd', SELECT_TOGGLE_DESCRIPTIONS);
-	add_default_key(&select_keys, 'g', SELECT_GOTO);
-	add_default_key(&select_keys, 'm', SELECT_MOVE_GROUP);
-	add_default_key(&select_keys, 'n', SELECT_ENTER_NEXT_UNREAD_GROUP);
-	add_default_key(&select_keys, 'r', SELECT_TOGGLE_READ_DISPLAY);
-	add_default_key(&select_keys, 's', SELECT_SUBSCRIBE);
-	add_default_key(&select_keys, 'u', SELECT_UNSUBSCRIBE);
-	add_default_key(&select_keys, 'y', SELECT_YANK_ACTIVE);
-	add_default_key(&select_keys, 'z', SELECT_MARK_GROUP_UNREAD);
-	add_default_key(&select_keys, 'C', CATCHUP_NEXT_UNREAD);
-	add_default_key(&select_keys, 'E', GLOBAL_EDIT_FILTER);
-	add_default_key(&select_keys, 'N', SELECT_NEXT_UNREAD_GROUP);
-	add_default_key(&select_keys, 'S', SELECT_SUBSCRIBE_PATTERN);
-	add_default_key(&select_keys, 'U', SELECT_UNSUBSCRIBE_PATTERN);
-	add_default_key(&select_keys, 'X', SELECT_QUIT_NO_WRITE);
-	add_default_key(&select_keys, 'Y', SELECT_SYNC_WITH_ACTIVE);
-	add_default_key(&select_keys, 'Z', SELECT_MARK_GROUP_UNREAD);
-	add_default_key(&select_keys, ' ', GLOBAL_PAGE_DOWN);
-	add_default_key(&select_keys, '.', SELECT_SORT_ACTIVE);
-	add_default_key(&select_keys, '\t', SELECT_ENTER_NEXT_UNREAD_GROUP);
+	add_default_key(&select_keys, " ", GLOBAL_PAGE_DOWN);
+	add_default_key(&select_keys, "\n\r", SELECT_ENTER_GROUP);
+	add_default_key(&select_keys, "", SELECT_RESET_NEWSRC);
+	add_default_key(&select_keys, "c", CATCHUP);
+	add_default_key(&select_keys, "d", SELECT_TOGGLE_DESCRIPTIONS);
+	add_default_key(&select_keys, "g", SELECT_GOTO);
+	add_default_key(&select_keys, "m", SELECT_MOVE_GROUP);
+	add_default_key(&select_keys, "n\t", SELECT_ENTER_NEXT_UNREAD_GROUP);
+	add_default_key(&select_keys, "r", SELECT_TOGGLE_READ_DISPLAY);
+	add_default_key(&select_keys, "s", SELECT_SUBSCRIBE);
+	add_default_key(&select_keys, "u", SELECT_UNSUBSCRIBE);
+	add_default_key(&select_keys, "y", SELECT_YANK_ACTIVE);
+	add_default_key(&select_keys, "z", SELECT_MARK_GROUP_UNREAD);
+	add_default_key(&select_keys, "C", CATCHUP_NEXT_UNREAD);
+	add_default_key(&select_keys, "E", GLOBAL_EDIT_FILTER);
+	add_default_key(&select_keys, "N", SELECT_NEXT_UNREAD_GROUP);
+	add_default_key(&select_keys, "S", SELECT_SUBSCRIBE_PATTERN);
+	add_default_key(&select_keys, "U", SELECT_UNSUBSCRIBE_PATTERN);
+	add_default_key(&select_keys, "X", SELECT_QUIT_NO_WRITE);
+	add_default_key(&select_keys, "Y", SELECT_SYNC_WITH_ACTIVE);
+	add_default_key(&select_keys, "Z", SELECT_MARK_GROUP_UNREAD);
+	add_default_key(&select_keys, ".", SELECT_SORT_ACTIVE);
+	add_default_key(&select_keys, ">", GLOBAL_SCROLL_DOWN);
+	add_default_key(&select_keys, "<", GLOBAL_SCROLL_UP);
 
 	/* group level */
 	add_global_keys(&group_keys);
-	add_default_key(&group_keys, ctrl('A'), GLOBAL_MENU_FILTER_SELECT);
-	add_default_key(&group_keys, ctrl('J'), GROUP_READ_BASENOTE);
-	add_default_key(&group_keys, ctrl('K'), GLOBAL_MENU_FILTER_KILL);
-	add_default_key(&group_keys, ctrl('M'), GROUP_READ_BASENOTE);
-	add_default_key(&group_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&group_keys, 'c', CATCHUP);
-	add_default_key(&group_keys, 'd', GROUP_TOGGLE_SUBJECT_DISPLAY);
-	add_default_key(&group_keys, 'g', GROUP_GOTO);
-	add_default_key(&group_keys, 'l', GROUP_LIST_THREAD);
-	add_default_key(&group_keys, 'm', GROUP_MAIL);
-	add_default_key(&group_keys, 'n', GROUP_NEXT_GROUP);
+	add_default_key(&group_keys, " ", GLOBAL_PAGE_DOWN);
+	add_default_key(&group_keys, "", GLOBAL_MENU_FILTER_SELECT);
+	add_default_key(&group_keys, "\n\r", GROUP_READ_BASENOTE);
+	add_default_key(&group_keys, "", GLOBAL_MENU_FILTER_KILL);
+	add_default_key(&group_keys, "a", GLOBAL_SEARCH_AUTHOR_FORWARD);
+	add_default_key(&group_keys, "c", CATCHUP);
+	add_default_key(&group_keys, "d", GROUP_TOGGLE_SUBJECT_DISPLAY);
+	add_default_key(&group_keys, "g", GROUP_GOTO);
+	add_default_key(&group_keys, "l", GROUP_LIST_THREAD);
+	add_default_key(&group_keys, "m", GROUP_MAIL);
+	add_default_key(&group_keys, "n", GROUP_NEXT_GROUP);
 #ifndef DISABLE_PRINTING
-	add_default_key(&group_keys, 'o', GLOBAL_PRINT);
+	add_default_key(&group_keys, "o", GLOBAL_PRINT);
 #endif /* !DISABLE_PRINTING */
-	add_default_key(&group_keys, 'p', GROUP_PREVIOUS_GROUP);
-	add_default_key(&group_keys, 'r', GROUP_TOGGLE_READ_UNREAD);
-	add_default_key(&group_keys, 's', GROUP_SAVE);
-	add_default_key(&group_keys, 't', GROUP_TAG);
-	add_default_key(&group_keys, 'u', GROUP_TOGGLE_THREADING);
-	add_default_key(&group_keys, 'x', GROUP_REPOST);
-	add_default_key(&group_keys, 'z', MARK_ARTICLE_UNREAD);
-	add_default_key(&group_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
-	add_default_key(&group_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&group_keys, 'C', CATCHUP_NEXT_UNREAD);
-	add_default_key(&group_keys, 'E', GLOBAL_EDIT_FILTER);
-	add_default_key(&group_keys, 'G', GROUP_TOGGLE_GET_ARTICLES_LIMIT);
-	add_default_key(&group_keys, 'K', GROUP_MARK_THREAD_READ);
-	add_default_key(&group_keys, 'L', GLOBAL_LOOKUP_MESSAGEID);
-	add_default_key(&group_keys, 'N', GROUP_NEXT_UNREAD_ARTICLE);
-	add_default_key(&group_keys, 'P', GROUP_PREVIOUS_UNREAD_ARTICLE);
-	add_default_key(&group_keys, 'S', GROUP_AUTOSAVE);
-	add_default_key(&group_keys, 'T', GROUP_TAG_PARTS);
-	add_default_key(&group_keys, 'U', GROUP_UNTAG);
-	add_default_key(&group_keys, 'X', GROUP_MARK_UNSELECTED_ARTICLES_READ);
-	add_default_key(&group_keys, 'Z', MARK_THREAD_UNREAD);
-	add_default_key(&group_keys, '\t', GROUP_NEXT_UNREAD_ARTICLE_OR_GROUP);
-	add_default_key(&group_keys, ' ', GLOBAL_PAGE_DOWN);
-	add_default_key(&group_keys, '-', GLOBAL_LAST_VIEWED);
-	add_default_key(&group_keys, '|', GLOBAL_PIPE);
-	add_default_key(&group_keys, '[', GLOBAL_QUICK_FILTER_SELECT);
-	add_default_key(&group_keys, ']', GLOBAL_QUICK_FILTER_KILL);
-	add_default_key(&group_keys, '*', GROUP_SELECT_THREAD);
-	add_default_key(&group_keys, '.', GROUP_TOGGLE_SELECT_THREAD);
-	add_default_key(&group_keys, '@', GROUP_REVERSE_SELECTIONS);
-	add_default_key(&group_keys, '~', GROUP_UNDO_SELECTIONS);
-	add_default_key(&group_keys, '=', GROUP_SELECT_PATTERN);
-	add_default_key(&group_keys, ';', GROUP_SELECT_THREAD_IF_UNREAD_SELECTED);
-	add_default_key(&group_keys, '+', GROUP_DO_AUTOSELECT);
+	add_default_key(&group_keys, "p", GROUP_PREVIOUS_GROUP);
+	add_default_key(&group_keys, "r", GROUP_TOGGLE_READ_UNREAD);
+	add_default_key(&group_keys, "s", GROUP_SAVE);
+	add_default_key(&group_keys, "t", GROUP_TAG);
+	add_default_key(&group_keys, "u", GROUP_TOGGLE_THREADING);
+	add_default_key(&group_keys, "x", GROUP_REPOST);
+	add_default_key(&group_keys, "z", MARK_ARTICLE_UNREAD);
+	add_default_key(&group_keys, "A", GLOBAL_SEARCH_AUTHOR_BACKWARD);
+	add_default_key(&group_keys, "B", GLOBAL_SEARCH_BODY);
+	add_default_key(&group_keys, "C", CATCHUP_NEXT_UNREAD);
+	add_default_key(&group_keys, "E", GLOBAL_EDIT_FILTER);
+	add_default_key(&group_keys, "G", GROUP_TOGGLE_GET_ARTICLES_LIMIT);
+	add_default_key(&group_keys, "K", GROUP_MARK_THREAD_READ);
+	add_default_key(&group_keys, "L", GLOBAL_LOOKUP_MESSAGEID);
+	add_default_key(&group_keys, "N", GROUP_NEXT_UNREAD_ARTICLE);
+	add_default_key(&group_keys, "P", GROUP_PREVIOUS_UNREAD_ARTICLE);
+	add_default_key(&group_keys, "S", GROUP_AUTOSAVE);
+	add_default_key(&group_keys, "T", GROUP_TAG_PARTS);
+	add_default_key(&group_keys, "U", GROUP_UNTAG);
+	add_default_key(&group_keys, "X", GROUP_MARK_UNSELECTED_ARTICLES_READ);
+	add_default_key(&group_keys, "Z", MARK_THREAD_UNREAD);
+	add_default_key(&group_keys, "\t", GROUP_NEXT_UNREAD_ARTICLE_OR_GROUP);
+	add_default_key(&group_keys, "-", GLOBAL_LAST_VIEWED);
+	add_default_key(&group_keys, "|", GLOBAL_PIPE);
+	add_default_key(&group_keys, "[", GLOBAL_QUICK_FILTER_SELECT);
+	add_default_key(&group_keys, "]", GLOBAL_QUICK_FILTER_KILL);
+	add_default_key(&group_keys, "*", GROUP_SELECT_THREAD);
+	add_default_key(&group_keys, ".", GROUP_TOGGLE_SELECT_THREAD);
+	add_default_key(&group_keys, "@", GROUP_REVERSE_SELECTIONS);
+	add_default_key(&group_keys, "~", GROUP_UNDO_SELECTIONS);
+	add_default_key(&group_keys, "=", GROUP_SELECT_PATTERN);
+	add_default_key(&group_keys, ";", GROUP_SELECT_THREAD_IF_UNREAD_SELECTED);
+	add_default_key(&group_keys, "+", GROUP_DO_AUTOSELECT);
+	add_default_key(&group_keys, ">", GLOBAL_SCROLL_DOWN);
+	add_default_key(&group_keys, "<", GLOBAL_SCROLL_UP);
 
 	/* thread keys */
 	add_global_keys(&thread_keys);
-	add_default_key(&thread_keys, ctrl('A'), GLOBAL_MENU_FILTER_SELECT);
-	add_default_key(&thread_keys, ctrl('K'), GLOBAL_MENU_FILTER_KILL);
-	add_default_key(&thread_keys, ctrl('J'), THREAD_READ_ARTICLE);
-	add_default_key(&thread_keys, ctrl('M'), THREAD_READ_ARTICLE);
-	add_default_key(&thread_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&thread_keys, 'c', CATCHUP);
-	add_default_key(&thread_keys, 'd', THREAD_TOGGLE_SUBJECT_DISPLAY);
-	add_default_key(&thread_keys, 'm', THREAD_MAIL);
+	add_default_key(&thread_keys, " ", GLOBAL_PAGE_DOWN);
+	add_default_key(&thread_keys, "", GLOBAL_MENU_FILTER_SELECT);
+	add_default_key(&thread_keys, "", GLOBAL_MENU_FILTER_KILL);
+	add_default_key(&thread_keys, "\n\r", THREAD_READ_ARTICLE);
+	add_default_key(&thread_keys, "a", GLOBAL_SEARCH_AUTHOR_FORWARD);
+	add_default_key(&thread_keys, "c", CATCHUP);
+	add_default_key(&thread_keys, "d", THREAD_TOGGLE_SUBJECT_DISPLAY);
+	add_default_key(&thread_keys, "m", THREAD_MAIL);
 #ifndef DISABLE_PRINTING
-	add_default_key(&thread_keys, 'o', GLOBAL_PRINT);
+	add_default_key(&thread_keys, "o", GLOBAL_PRINT);
 #endif /* !DISABLE_PRINTING */
-	add_default_key(&thread_keys, 's', THREAD_SAVE);
-	add_default_key(&thread_keys, 't', THREAD_TAG);
-	add_default_key(&thread_keys, 'z', MARK_ARTICLE_UNREAD);
-	add_default_key(&thread_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
-	add_default_key(&thread_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&thread_keys, 'C', CATCHUP_NEXT_UNREAD);
-	add_default_key(&thread_keys, 'E', GLOBAL_EDIT_FILTER);
-	add_default_key(&thread_keys, 'K', THREAD_MARK_ARTICLE_READ);
-	add_default_key(&thread_keys, 'L', GLOBAL_LOOKUP_MESSAGEID);
-	add_default_key(&thread_keys, 'S', THREAD_AUTOSAVE);
-	add_default_key(&thread_keys, 'U', THREAD_UNTAG);
-	add_default_key(&thread_keys, 'Z', MARK_THREAD_UNREAD);
-	add_default_key(&thread_keys, '\t', THREAD_READ_NEXT_ARTICLE_OR_THREAD);
-	add_default_key(&thread_keys, ' ', GLOBAL_PAGE_DOWN);
-	add_default_key(&thread_keys, '-', GLOBAL_LAST_VIEWED);
-	add_default_key(&thread_keys, '|', GLOBAL_PIPE);
-	add_default_key(&thread_keys, '*', THREAD_SELECT_ARTICLE);
-	add_default_key(&thread_keys, '.', THREAD_TOGGLE_ARTICLE_SELECTION);
-	add_default_key(&thread_keys, '@', THREAD_REVERSE_SELECTIONS);
-	add_default_key(&thread_keys, '~', THREAD_UNDO_SELECTIONS);
+	add_default_key(&thread_keys, "s", THREAD_SAVE);
+	add_default_key(&thread_keys, "t", THREAD_TAG);
+	add_default_key(&thread_keys, "z", MARK_ARTICLE_UNREAD);
+	add_default_key(&thread_keys, "A", GLOBAL_SEARCH_AUTHOR_BACKWARD);
+	add_default_key(&thread_keys, "B", GLOBAL_SEARCH_BODY);
+	add_default_key(&thread_keys, "C", CATCHUP_NEXT_UNREAD);
+	add_default_key(&thread_keys, "E", GLOBAL_EDIT_FILTER);
+	add_default_key(&thread_keys, "K", THREAD_MARK_ARTICLE_READ);
+	add_default_key(&thread_keys, "L", GLOBAL_LOOKUP_MESSAGEID);
+	add_default_key(&thread_keys, "S", THREAD_AUTOSAVE);
+	add_default_key(&thread_keys, "U", THREAD_UNTAG);
+	add_default_key(&thread_keys, "Z", MARK_THREAD_UNREAD);
+	add_default_key(&thread_keys, "\t", THREAD_READ_NEXT_ARTICLE_OR_THREAD);
+	add_default_key(&thread_keys, "-", GLOBAL_LAST_VIEWED);
+	add_default_key(&thread_keys, "|", GLOBAL_PIPE);
+	add_default_key(&thread_keys, "*", THREAD_SELECT_ARTICLE);
+	add_default_key(&thread_keys, ".", THREAD_TOGGLE_ARTICLE_SELECTION);
+	add_default_key(&thread_keys, "@", THREAD_REVERSE_SELECTIONS);
+	add_default_key(&thread_keys, "~", THREAD_UNDO_SELECTIONS);
+	add_default_key(&thread_keys, ">", GLOBAL_SCROLL_DOWN);
+	add_default_key(&thread_keys, "<", GLOBAL_SCROLL_UP);
 
 	/* page level */
 	add_global_keys(&page_keys);
-	add_default_key(&page_keys, ctrl('A'), GLOBAL_MENU_FILTER_SELECT);
-	add_default_key(&page_keys, ctrl('E'), PAGE_REPLY_QUOTE_HEADERS);
+	add_default_key(&page_keys, "", GLOBAL_PAGE_DOWN);
+	add_default_key(&page_keys, "", GLOBAL_MENU_FILTER_SELECT);
+	add_default_key(&page_keys, "", PAGE_REPLY_QUOTE_HEADERS);
 #ifdef HAVE_PGP_GPG
-	add_default_key(&page_keys, ctrl('G'), PAGE_PGP_CHECK_ARTICLE);
+	add_default_key(&page_keys, "", PAGE_PGP_CHECK_ARTICLE);
 #endif /* HAVE_PGP_GPG */
-	add_default_key(&page_keys, ctrl('H'), PAGE_TOGGLE_HEADERS);
-	add_default_key(&page_keys, ctrl('J'), PAGE_NEXT_THREAD);
-	add_default_key(&page_keys, ctrl('K'), GLOBAL_MENU_FILTER_KILL);
-	add_default_key(&page_keys, ctrl('M'), PAGE_NEXT_THREAD);
-	add_default_key(&page_keys, ctrl('T'), PAGE_TOGGLE_TABS);
-	add_default_key(&page_keys, ctrl('W'), PAGE_FOLLOWUP_QUOTE_HEADERS);
-	add_default_key(&page_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&page_keys, 'c', CATCHUP);
-	add_default_key(&page_keys, 'e', PAGE_EDIT_ARTICLE);
-	add_default_key(&page_keys, 'f', PAGE_FOLLOWUP_QUOTE);
-	add_default_key(&page_keys, 'g', GLOBAL_FIRST_PAGE);
-	add_default_key(&page_keys, 'l', PAGE_LIST_THREAD);
-	add_default_key(&page_keys, 'm', PAGE_MAIL);
-	add_default_key(&page_keys, 'n', PAGE_NEXT_ARTICLE);
+	add_default_key(&page_keys, "", PAGE_TOGGLE_HEADERS);
+	add_default_key(&page_keys, "", GLOBAL_MENU_FILTER_KILL);
+	add_default_key(&page_keys, "\n\r", PAGE_NEXT_THREAD);
+	add_default_key(&page_keys, "", PAGE_TOGGLE_TABS);
+	add_default_key(&page_keys, "", PAGE_FOLLOWUP_QUOTE_HEADERS);
+	add_default_key(&page_keys, "a", GLOBAL_SEARCH_AUTHOR_FORWARD);
+	add_default_key(&page_keys, "c", CATCHUP);
+	add_default_key(&page_keys, "e", PAGE_EDIT_ARTICLE);
+	add_default_key(&page_keys, "f", PAGE_FOLLOWUP_QUOTE);
+	add_default_key(&page_keys, "g", GLOBAL_FIRST_PAGE);
+	add_default_key(&page_keys, "l", PAGE_LIST_THREAD);
+	add_default_key(&page_keys, "m", PAGE_MAIL);
+	add_default_key(&page_keys, "n", PAGE_NEXT_ARTICLE);
 #ifndef DISABLE_PRINTING
-	add_default_key(&page_keys, 'o', GLOBAL_PRINT);
+	add_default_key(&page_keys, "o", GLOBAL_PRINT);
 #endif /* !DISABLE_PRINTING */
-	add_default_key(&page_keys, 'p', PAGE_PREVIOUS_ARTICLE);
-	add_default_key(&page_keys, 'r', PAGE_REPLY_QUOTE);
-	add_default_key(&page_keys, 's', PAGE_SAVE);
-	add_default_key(&page_keys, 't', PAGE_TAG);
-	add_default_key(&page_keys, 'u', PAGE_GOTO_PARENT);
-	add_default_key(&page_keys, 'x', PAGE_REPOST);
-	add_default_key(&page_keys, 'z', MARK_ARTICLE_UNREAD);
-	add_default_key(&page_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
-	add_default_key(&page_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&page_keys, 'C', CATCHUP_NEXT_UNREAD);
-	add_default_key(&page_keys, 'D', PAGE_CANCEL);
-	add_default_key(&page_keys, 'E', GLOBAL_EDIT_FILTER);
-	add_default_key(&page_keys, 'F', PAGE_FOLLOWUP);
-	add_default_key(&page_keys, 'G', GLOBAL_LAST_PAGE);
-	add_default_key(&page_keys, 'K', PAGE_MARK_THREAD_READ);
-	add_default_key(&page_keys, 'L', GLOBAL_LOOKUP_MESSAGEID);
-	add_default_key(&page_keys, 'N', PAGE_NEXT_UNREAD_ARTICLE);
-	add_default_key(&page_keys, 'P', PAGE_PREVIOUS_UNREAD_ARTICLE);
-	add_default_key(&page_keys, 'R', PAGE_REPLY);
-	add_default_key(&page_keys, 'S', PAGE_AUTOSAVE);
-	add_default_key(&page_keys, 'T', PAGE_GROUP_SELECT);
-	add_default_key(&page_keys, 'U', PAGE_VIEW_URL);
-	add_default_key(&page_keys, 'V', PAGE_VIEW_ATTACHMENTS);
-	add_default_key(&page_keys, 'Z', MARK_THREAD_UNREAD);
-	add_default_key(&page_keys, '\t', PAGE_NEXT_UNREAD);
-	add_default_key(&page_keys, ' ', PAGE_PAGE_DOWN3);
-	add_default_key(&page_keys, '-', GLOBAL_LAST_VIEWED);
-	add_default_key(&page_keys, '|', GLOBAL_PIPE);
-	add_default_key(&page_keys, '<', PAGE_TOP_THREAD);
-	add_default_key(&page_keys, '>', PAGE_BOTTOM_THREAD);
-	add_default_key(&page_keys, '"', PAGE_TOGGLE_TEX2ISO);
-	add_default_key(&page_keys, '(', PAGE_TOGGLE_UUE);
-	add_default_key(&page_keys, ')', PAGE_REVEAL);
-	add_default_key(&page_keys, '[', GLOBAL_QUICK_FILTER_SELECT);
-	add_default_key(&page_keys, ']', GLOBAL_QUICK_FILTER_KILL);
-	add_default_key(&page_keys, '%', PAGE_TOGGLE_ROT13);
-	add_default_key(&page_keys, ':', PAGE_SKIP_INCLUDED_TEXT);
-	add_default_key(&page_keys, '_', PAGE_TOGGLE_HIGHLIGHTING);
+	add_default_key(&page_keys, "p", PAGE_PREVIOUS_ARTICLE);
+	add_default_key(&page_keys, "r", PAGE_REPLY_QUOTE);
+	add_default_key(&page_keys, "s", PAGE_SAVE);
+	add_default_key(&page_keys, "t", PAGE_TAG);
+	add_default_key(&page_keys, "u", PAGE_GOTO_PARENT);
+	add_default_key(&page_keys, "x", PAGE_REPOST);
+	add_default_key(&page_keys, "z", MARK_ARTICLE_UNREAD);
+	add_default_key(&page_keys, "A", GLOBAL_SEARCH_AUTHOR_BACKWARD);
+	add_default_key(&page_keys, "B", GLOBAL_SEARCH_BODY);
+	add_default_key(&page_keys, "C", CATCHUP_NEXT_UNREAD);
+	add_default_key(&page_keys, "D", PAGE_CANCEL);
+	add_default_key(&page_keys, "E", GLOBAL_EDIT_FILTER);
+	add_default_key(&page_keys, "F", PAGE_FOLLOWUP);
+	add_default_key(&page_keys, "G", GLOBAL_LAST_PAGE);
+	add_default_key(&page_keys, "K", PAGE_MARK_THREAD_READ);
+	add_default_key(&page_keys, "L", GLOBAL_LOOKUP_MESSAGEID);
+	add_default_key(&page_keys, "N", PAGE_NEXT_UNREAD_ARTICLE);
+	add_default_key(&page_keys, "P", PAGE_PREVIOUS_UNREAD_ARTICLE);
+	add_default_key(&page_keys, "R", PAGE_REPLY);
+	add_default_key(&page_keys, "S", PAGE_AUTOSAVE);
+	add_default_key(&page_keys, "T", PAGE_GROUP_SELECT);
+	add_default_key(&page_keys, "U", PAGE_VIEW_URL);
+	add_default_key(&page_keys, "V", PAGE_VIEW_ATTACHMENTS);
+	add_default_key(&page_keys, "Z", MARK_THREAD_UNREAD);
+	add_default_key(&page_keys, "\t", PAGE_NEXT_UNREAD);
+	add_default_key(&page_keys, " ", PAGE_PAGE_DOWN3);
+	add_default_key(&page_keys, "-", GLOBAL_LAST_VIEWED);
+	add_default_key(&page_keys, "|", GLOBAL_PIPE);
+	add_default_key(&page_keys, "<", PAGE_TOP_THREAD);
+	add_default_key(&page_keys, ">", PAGE_BOTTOM_THREAD);
+	add_default_key(&page_keys, "\"", PAGE_TOGGLE_TEX2ISO);
+	add_default_key(&page_keys, "(", PAGE_TOGGLE_UUE);
+	add_default_key(&page_keys, ")", PAGE_REVEAL);
+	add_default_key(&page_keys, "[", GLOBAL_QUICK_FILTER_SELECT);
+	add_default_key(&page_keys, "]", GLOBAL_QUICK_FILTER_KILL);
+	add_default_key(&page_keys, "%", PAGE_TOGGLE_ROT13);
+	add_default_key(&page_keys, ":", PAGE_SKIP_INCLUDED_TEXT);
+	add_default_key(&page_keys, "_", PAGE_TOGGLE_HIGHLIGHTING);
 
 	/* info pager */
-	add_default_key(&info_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&info_keys, ctrl('B'), GLOBAL_PAGE_UP);
-	add_default_key(&info_keys, ctrl('D'), GLOBAL_PAGE_DOWN);
-	add_default_key(&info_keys, ctrl('F'), GLOBAL_PAGE_DOWN);
-	add_default_key(&info_keys, ctrl('N'), GLOBAL_LINE_DOWN);
-	add_default_key(&info_keys, ctrl('P'), GLOBAL_LINE_UP);
-	add_default_key(&info_keys, ctrl('U'), GLOBAL_PAGE_UP);
-	add_default_key(&info_keys, 'b', GLOBAL_PAGE_UP);
-	add_default_key(&info_keys, 'g', GLOBAL_FIRST_PAGE);
-	add_default_key(&info_keys, 'j', GLOBAL_LINE_DOWN);
-	add_default_key(&info_keys, 'k', GLOBAL_LINE_UP);
-	add_default_key(&info_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&info_keys, 'G', GLOBAL_LAST_PAGE);
-	add_default_key(&info_keys, 'H', GLOBAL_TOGGLE_HELP_DISPLAY);
-	add_default_key(&info_keys, ' ', GLOBAL_PAGE_DOWN);
-	add_default_key(&info_keys, '^', GLOBAL_FIRST_PAGE);
-	add_default_key(&info_keys, '$', GLOBAL_LAST_PAGE);
-	add_default_key(&info_keys, '/', GLOBAL_SEARCH_SUBJECT_FORWARD);
-	add_default_key(&info_keys, '?', GLOBAL_SEARCH_SUBJECT_BACKWARD);
-	add_default_key(&info_keys, '\\', GLOBAL_SEARCH_REPEAT);
+	add_default_key(&info_keys, "", GLOBAL_ABORT);
+	add_default_key(&info_keys, "j ", GLOBAL_LINE_DOWN);
+	add_default_key(&info_keys, "k", GLOBAL_LINE_UP);
+	add_default_key(&info_keys, " ", GLOBAL_PAGE_DOWN);
+	add_default_key(&info_keys, "b", GLOBAL_PAGE_UP);
+	add_default_key(&info_keys, "g^", GLOBAL_FIRST_PAGE);
+	add_default_key(&info_keys, "G$", GLOBAL_LAST_PAGE);
+	add_default_key(&info_keys, "q", GLOBAL_QUIT);
+	add_default_key(&info_keys, "H", GLOBAL_TOGGLE_HELP_DISPLAY);
+	add_default_key(&info_keys, "/", GLOBAL_SEARCH_SUBJECT_FORWARD);
+	add_default_key(&info_keys, "?", GLOBAL_SEARCH_SUBJECT_BACKWARD);
+	add_default_key(&info_keys, "\\", GLOBAL_SEARCH_REPEAT);
 
 	/* options menu */
-	add_default_key(&option_menu_keys, '1', DIGIT_1);
-	add_default_key(&option_menu_keys, '2', DIGIT_2);
-	add_default_key(&option_menu_keys, '3', DIGIT_3);
-	add_default_key(&option_menu_keys, '4', DIGIT_4);
-	add_default_key(&option_menu_keys, '5', DIGIT_5);
-	add_default_key(&option_menu_keys, '6', DIGIT_6);
-	add_default_key(&option_menu_keys, '7', DIGIT_7);
-	add_default_key(&option_menu_keys, '8', DIGIT_8);
-	add_default_key(&option_menu_keys, '9', DIGIT_9);
-	add_default_key(&option_menu_keys, ctrl('B'), GLOBAL_PAGE_UP);
-	add_default_key(&option_menu_keys, ctrl('D'), GLOBAL_PAGE_DOWN);
-	add_default_key(&option_menu_keys, ctrl('F'), GLOBAL_PAGE_DOWN);
-	add_default_key(&option_menu_keys, ctrl('J'), CONFIG_SELECT);
-	add_default_key(&option_menu_keys, ctrl('L'), GLOBAL_REDRAW_SCREEN);
-	add_default_key(&option_menu_keys, ctrl('M'), CONFIG_SELECT);
-	add_default_key(&option_menu_keys, ctrl('N'), GLOBAL_LINE_DOWN);
-	add_default_key(&option_menu_keys, ctrl('P'), GLOBAL_LINE_UP);
-	add_default_key(&option_menu_keys, ctrl('U'), GLOBAL_PAGE_UP);
-	add_default_key(&option_menu_keys, 'b', GLOBAL_PAGE_UP);
-	add_default_key(&option_menu_keys, 'g', GLOBAL_FIRST_PAGE);
-	add_default_key(&option_menu_keys, 'j', GLOBAL_LINE_DOWN);
-	add_default_key(&option_menu_keys, 'k', GLOBAL_LINE_UP);
-	add_default_key(&option_menu_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&option_menu_keys, 'v', GLOBAL_VERSION);
-	add_default_key(&option_menu_keys, 'G', GLOBAL_LAST_PAGE);
-	add_default_key(&option_menu_keys, 'Q', CONFIG_NO_SAVE);
-	add_default_key(&option_menu_keys, '^', GLOBAL_FIRST_PAGE);
-	add_default_key(&option_menu_keys, '$', GLOBAL_LAST_PAGE);
-	add_default_key(&option_menu_keys, ' ', GLOBAL_PAGE_DOWN);
-	add_default_key(&option_menu_keys, '>', GLOBAL_SCROLL_DOWN);
-	add_default_key(&option_menu_keys, '<', GLOBAL_SCROLL_UP);
-	add_default_key(&option_menu_keys, '/', GLOBAL_SEARCH_SUBJECT_FORWARD);
-	add_default_key(&option_menu_keys, '?', GLOBAL_SEARCH_SUBJECT_BACKWARD);
-	add_default_key(&option_menu_keys, '\\', GLOBAL_SEARCH_REPEAT);
+	add_default_key(&option_menu_keys, "1", DIGIT_1);
+	add_default_key(&option_menu_keys, "2", DIGIT_2);
+	add_default_key(&option_menu_keys, "3", DIGIT_3);
+	add_default_key(&option_menu_keys, "4", DIGIT_4);
+	add_default_key(&option_menu_keys, "5", DIGIT_5);
+	add_default_key(&option_menu_keys, "6", DIGIT_6);
+	add_default_key(&option_menu_keys, "7", DIGIT_7);
+	add_default_key(&option_menu_keys, "8", DIGIT_8);
+	add_default_key(&option_menu_keys, "9", DIGIT_9);
+	add_default_key(&option_menu_keys, "b", GLOBAL_PAGE_UP);
+	add_default_key(&option_menu_keys, " ", GLOBAL_PAGE_DOWN);
+	add_default_key(&option_menu_keys, "\n\r", CONFIG_SELECT);
+	add_default_key(&option_menu_keys, "", GLOBAL_REDRAW_SCREEN);
+	add_default_key(&option_menu_keys, "j", GLOBAL_LINE_DOWN);
+	add_default_key(&option_menu_keys, "k", GLOBAL_LINE_UP);
+	add_default_key(&option_menu_keys, "g^", GLOBAL_FIRST_PAGE);
+	add_default_key(&option_menu_keys, "G$", GLOBAL_LAST_PAGE);
+	add_default_key(&option_menu_keys, "q", GLOBAL_QUIT);
+	add_default_key(&option_menu_keys, "v", GLOBAL_VERSION);
+	add_default_key(&option_menu_keys, "Q", CONFIG_NO_SAVE);
+	add_default_key(&option_menu_keys, ">", GLOBAL_SCROLL_DOWN);
+	add_default_key(&option_menu_keys, "<", GLOBAL_SCROLL_UP);
+	add_default_key(&option_menu_keys, "/", GLOBAL_SEARCH_SUBJECT_FORWARD);
+	add_default_key(&option_menu_keys, "?", GLOBAL_SEARCH_SUBJECT_BACKWARD);
+	add_default_key(&option_menu_keys, "\\", GLOBAL_SEARCH_REPEAT);
 
 	/* prompt keys */
-	add_default_key(&prompt_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&prompt_keys, 'n', PROMPT_NO);
-	add_default_key(&prompt_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&prompt_keys, 'y', PROMPT_YES);
-	add_default_key(&prompt_keys, 'N', PROMPT_NO);
-	add_default_key(&prompt_keys, 'Y', PROMPT_YES);
+	add_default_key(&prompt_keys, "", GLOBAL_ABORT);
+	add_default_key(&prompt_keys, "nN", PROMPT_NO);
+	add_default_key(&prompt_keys, "q", GLOBAL_QUIT);
+	add_default_key(&prompt_keys, "yY", PROMPT_YES);
 
 	/* post keys */
-	add_default_key(&post_send_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_send_keys, 'e', POST_EDIT);
+	add_default_key(&post_send_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_send_keys, "e", POST_EDIT);
 #ifdef HAVE_PGP_GPG
-	add_default_key(&post_send_keys, 'g', POST_PGP);
+	add_default_key(&post_send_keys, "g", POST_PGP);
 #endif /* HAVE_PGP_GPG */
 #ifdef HAVE_ISPELL
-	add_default_key(&post_send_keys, 'i', POST_ISPELL);
+	add_default_key(&post_send_keys, "i", POST_ISPELL);
 #endif /* HAVE_ISPELL */
-	add_default_key(&post_send_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&post_send_keys, 's', POST_SEND);
+	add_default_key(&post_send_keys, "q", GLOBAL_QUIT);
+	add_default_key(&post_send_keys, "s", POST_SEND);
 
-	add_default_key(&post_edit_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_edit_keys, 'e', POST_EDIT);
-	add_default_key(&post_edit_keys, 'o', POST_POSTPONE);
-	add_default_key(&post_edit_keys, 'q', GLOBAL_QUIT);
-
-	add_default_key(&post_edit_ext_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_edit_ext_keys, 'e', POST_EDIT);
-	add_default_key(&post_edit_ext_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&post_edit_ext_keys, 'M', GLOBAL_OPTION_MENU);
+	add_default_key(&post_edit_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_edit_keys, "e", POST_EDIT);
+	add_default_key(&post_edit_keys, "o", POST_POSTPONE);
+	add_default_key(&post_edit_keys, "q", GLOBAL_QUIT);
+
+	add_default_key(&post_edit_ext_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_edit_ext_keys, "e", POST_EDIT);
+	add_default_key(&post_edit_ext_keys, "q", GLOBAL_QUIT);
+	add_default_key(&post_edit_ext_keys, "M", GLOBAL_OPTION_MENU);
 
-	add_default_key(&post_post_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_post_keys, 'e', POST_EDIT);
+	add_default_key(&post_post_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_post_keys, "e", POST_EDIT);
 #ifdef HAVE_PGP_GPG
-	add_default_key(&post_post_keys, 'g', POST_PGP);
+	add_default_key(&post_post_keys, "g", POST_PGP);
 #endif /* HAVE_PGP_GPG */
 #ifdef HAVE_ISPELL
-	add_default_key(&post_post_keys, 'i', POST_ISPELL);
+	add_default_key(&post_post_keys, "i", POST_ISPELL);
 #endif /* HAVE_ISPELL */
-	add_default_key(&post_post_keys, 'o', POST_POSTPONE);
-	add_default_key(&post_post_keys, 'p', GLOBAL_POST);
-	add_default_key(&post_post_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&post_post_keys, 'M', GLOBAL_OPTION_MENU);
-
-	add_default_key(&post_postpone_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_postpone_keys, 'n', PROMPT_NO);
-	add_default_key(&post_postpone_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&post_postpone_keys, 'y', PROMPT_YES);
-	add_default_key(&post_postpone_keys, 'A', POSTPONE_ALL);
-	add_default_key(&post_postpone_keys, 'Y', POSTPONE_OVERRIDE);
-
-	add_default_key(&post_mail_fup_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_mail_fup_keys, 'm', POST_MAIL);
-	add_default_key(&post_mail_fup_keys, 'p', GLOBAL_POST);
-	add_default_key(&post_mail_fup_keys, 'q', GLOBAL_QUIT);
-
-	add_default_key(&post_ignore_fupto_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_ignore_fupto_keys, 'i', POST_IGNORE_FUPTO);
-	add_default_key(&post_ignore_fupto_keys, 'p', GLOBAL_POST);
-	add_default_key(&post_ignore_fupto_keys, 'q', GLOBAL_QUIT);
-
-	add_default_key(&post_continue_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_continue_keys, 'a', POST_ABORT);
-	add_default_key(&post_continue_keys, 'c', POST_CONTINUE);
-	add_default_key(&post_continue_keys, 'q', GLOBAL_QUIT);
-
-	add_default_key(&post_delete_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_delete_keys, 'd', POST_CANCEL);
-	add_default_key(&post_delete_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&post_delete_keys, 's', POST_SUPERSEDE);
-
-	add_default_key(&post_cancel_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&post_cancel_keys, 'e', POST_EDIT);
-	add_default_key(&post_cancel_keys, 'd', POST_CANCEL);
-	add_default_key(&post_cancel_keys, 'q', GLOBAL_QUIT);
+	add_default_key(&post_post_keys, "o", POST_POSTPONE);
+	add_default_key(&post_post_keys, "p", GLOBAL_POST);
+	add_default_key(&post_post_keys, "q", GLOBAL_QUIT);
+	add_default_key(&post_post_keys, "M", GLOBAL_OPTION_MENU);
+
+	add_default_key(&post_postpone_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_postpone_keys, "n", PROMPT_NO);
+	add_default_key(&post_postpone_keys, "q", GLOBAL_QUIT);
+	add_default_key(&post_postpone_keys, "y", PROMPT_YES);
+	add_default_key(&post_postpone_keys, "A", POSTPONE_ALL);
+	add_default_key(&post_postpone_keys, "Y", POSTPONE_OVERRIDE);
+
+	add_default_key(&post_mail_fup_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_mail_fup_keys, "m", POST_MAIL);
+	add_default_key(&post_mail_fup_keys, "p", GLOBAL_POST);
+	add_default_key(&post_mail_fup_keys, "q", GLOBAL_QUIT);
+
+	add_default_key(&post_ignore_fupto_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_ignore_fupto_keys, "i", POST_IGNORE_FUPTO);
+	add_default_key(&post_ignore_fupto_keys, "p", GLOBAL_POST);
+	add_default_key(&post_ignore_fupto_keys, "q", GLOBAL_QUIT);
+
+	add_default_key(&post_continue_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_continue_keys, "a", POST_ABORT);
+	add_default_key(&post_continue_keys, "c", POST_CONTINUE);
+	add_default_key(&post_continue_keys, "q", GLOBAL_QUIT);
+
+	add_default_key(&post_delete_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_delete_keys, "d", POST_CANCEL);
+	add_default_key(&post_delete_keys, "q", GLOBAL_QUIT);
+	add_default_key(&post_delete_keys, "s", POST_SUPERSEDE);
+
+	add_default_key(&post_cancel_keys, "", GLOBAL_ABORT);
+	add_default_key(&post_cancel_keys, "e", POST_EDIT);
+	add_default_key(&post_cancel_keys, "d", POST_CANCEL);
+	add_default_key(&post_cancel_keys, "q", GLOBAL_QUIT);
 
 	/* feed keys */
-	add_default_key(&feed_post_process_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&feed_post_process_keys, 'n', POSTPROCESS_NO);
-	add_default_key(&feed_post_process_keys, 's', POSTPROCESS_SHAR);
-	add_default_key(&feed_post_process_keys, 'y', POSTPROCESS_YES);
-	add_default_key(&feed_post_process_keys, 'q', GLOBAL_QUIT);
-
-	add_default_key(&feed_type_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&feed_type_keys, 'a', FEED_ARTICLE);
-	add_default_key(&feed_type_keys, 'h', FEED_HOT);
-	add_default_key(&feed_type_keys, 'p', FEED_PATTERN);
-	add_default_key(&feed_type_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&feed_type_keys, 't', FEED_THREAD);
-	add_default_key(&feed_type_keys, 'T', FEED_TAGGED);
-
-	add_default_key(&feed_supersede_article_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&feed_supersede_article_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&feed_supersede_article_keys, 'r', FEED_KEY_REPOST);
-	add_default_key(&feed_supersede_article_keys, 's', FEED_SUPERSEDE);
+	add_default_key(&feed_post_process_keys, "", GLOBAL_ABORT);
+	add_default_key(&feed_post_process_keys, "n", POSTPROCESS_NO);
+	add_default_key(&feed_post_process_keys, "s", POSTPROCESS_SHAR);
+	add_default_key(&feed_post_process_keys, "y", POSTPROCESS_YES);
+	add_default_key(&feed_post_process_keys, "q", GLOBAL_QUIT);
+
+	add_default_key(&feed_type_keys, "", GLOBAL_ABORT);
+	add_default_key(&feed_type_keys, "a", FEED_ARTICLE);
+	add_default_key(&feed_type_keys, "h", FEED_HOT);
+	add_default_key(&feed_type_keys, "p", FEED_PATTERN);
+	add_default_key(&feed_type_keys, "q", GLOBAL_QUIT);
+	add_default_key(&feed_type_keys, "t", FEED_THREAD);
+	add_default_key(&feed_type_keys, "T", FEED_TAGGED);
+
+	add_default_key(&feed_supersede_article_keys, "", GLOBAL_ABORT);
+	add_default_key(&feed_supersede_article_keys, "q", GLOBAL_QUIT);
+	add_default_key(&feed_supersede_article_keys, "r", FEED_KEY_REPOST);
+	add_default_key(&feed_supersede_article_keys, "s", FEED_SUPERSEDE);
 
 	/* filter keys */
-	add_default_key(&filter_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&filter_keys, 'e', FILTER_EDIT);
-	add_default_key(&filter_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&filter_keys, 's', FILTER_SAVE);
+	add_default_key(&filter_keys, "", GLOBAL_ABORT);
+	add_default_key(&filter_keys, "e", FILTER_EDIT);
+	add_default_key(&filter_keys, "q", GLOBAL_QUIT);
+	add_default_key(&filter_keys, "s", FILTER_SAVE);
 
 	/* mark read */
-	add_default_key(&mark_read_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&mark_read_keys, 'c', MARK_READ_CURRENT);
-	add_default_key(&mark_read_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&mark_read_keys, 't', MARK_READ_TAGGED);
+	add_default_key(&mark_read_keys, "", GLOBAL_ABORT);
+	add_default_key(&mark_read_keys, "c", MARK_READ_CURRENT);
+	add_default_key(&mark_read_keys, "q", GLOBAL_QUIT);
+	add_default_key(&mark_read_keys, "t", MARK_READ_TAGGED);
 
 #ifdef HAVE_PGP_GPG
 	/* pgp mail */
-	add_default_key(&pgp_mail_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&pgp_mail_keys, 'b', PGP_KEY_ENCRYPT_SIGN);
-	add_default_key(&pgp_mail_keys, 'e', PGP_KEY_ENCRYPT);
-	add_default_key(&pgp_mail_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&pgp_mail_keys, 's', PGP_KEY_SIGN);
+	add_default_key(&pgp_mail_keys, "", GLOBAL_ABORT);
+	add_default_key(&pgp_mail_keys, "b", PGP_KEY_ENCRYPT_SIGN);
+	add_default_key(&pgp_mail_keys, "e", PGP_KEY_ENCRYPT);
+	add_default_key(&pgp_mail_keys, "q", GLOBAL_QUIT);
+	add_default_key(&pgp_mail_keys, "s", PGP_KEY_SIGN);
 
 	/* pgp news */
-	add_default_key(&pgp_news_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&pgp_news_keys, 'i', PGP_INCLUDE_KEY);
-	add_default_key(&pgp_news_keys, 'q', GLOBAL_QUIT);
-	add_default_key(&pgp_news_keys, 's', PGP_KEY_SIGN);
+	add_default_key(&pgp_news_keys, "", GLOBAL_ABORT);
+	add_default_key(&pgp_news_keys, "i", PGP_INCLUDE_KEY);
+	add_default_key(&pgp_news_keys, "q", GLOBAL_QUIT);
+	add_default_key(&pgp_news_keys, "s", PGP_KEY_SIGN);
 #endif /* HAVE_PGP_GPG */
 
 	/* save */
-	add_default_key(&save_append_overwrite_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&save_append_overwrite_keys, 'a', SAVE_APPEND_FILE);
-	add_default_key(&save_append_overwrite_keys, 'o', SAVE_OVERWRITE_FILE);
-	add_default_key(&save_append_overwrite_keys, 'q', GLOBAL_QUIT);
+	add_default_key(&save_append_overwrite_keys, "", GLOBAL_ABORT);
+	add_default_key(&save_append_overwrite_keys, "a", SAVE_APPEND_FILE);
+	add_default_key(&save_append_overwrite_keys, "o", SAVE_OVERWRITE_FILE);
+	add_default_key(&save_append_overwrite_keys, "q", GLOBAL_QUIT);
 }
 
 
@@ -2606,52 +2591,43 @@ static void
 add_global_keys(
 	struct keylist *keys)
 {
-	add_default_key(keys, ESC, GLOBAL_ABORT);
-	add_default_key(keys, '0', DIGIT_0);
-	add_default_key(keys, '1', DIGIT_1);
-	add_default_key(keys, '2', DIGIT_2);
-	add_default_key(keys, '3', DIGIT_3);
-	add_default_key(keys, '4', DIGIT_4);
-	add_default_key(keys, '5', DIGIT_5);
-	add_default_key(keys, '6', DIGIT_6);
-	add_default_key(keys, '7', DIGIT_7);
-	add_default_key(keys, '8', DIGIT_8);
-	add_default_key(keys, '9', DIGIT_9);
-	add_default_key(keys, ctrl('B'), GLOBAL_PAGE_UP);
-	add_default_key(keys, ctrl('D'), GLOBAL_PAGE_DOWN);
-	add_default_key(keys, ctrl('F'), GLOBAL_PAGE_DOWN);
-	add_default_key(keys, ctrl('L'), GLOBAL_REDRAW_SCREEN);
-	add_default_key(keys, ctrl('N'), GLOBAL_LINE_DOWN);
-	add_default_key(keys, ctrl('O'), GLOBAL_POSTPONED);
-	add_default_key(keys, ctrl('P'), GLOBAL_LINE_UP);
-	add_default_key(keys, ctrl('U'), GLOBAL_PAGE_UP);
-	add_default_key(keys, 'b', GLOBAL_PAGE_UP);
-	add_default_key(keys, 'h', GLOBAL_HELP);
-	add_default_key(keys, 'i', GLOBAL_TOGGLE_INFO_LAST_LINE);
-	add_default_key(keys, 'j', GLOBAL_LINE_DOWN);
-	add_default_key(keys, 'k', GLOBAL_LINE_UP);
-	add_default_key(keys, 'q', GLOBAL_QUIT);
-	add_default_key(keys, 'v', GLOBAL_VERSION);
-	add_default_key(keys, 'w', GLOBAL_POST);
-	add_default_key(keys, 'H', GLOBAL_TOGGLE_HELP_DISPLAY);
-	add_default_key(keys, 'I', GLOBAL_TOGGLE_INVERSE_VIDEO);
-	add_default_key(keys, 'M', GLOBAL_OPTION_MENU);
-	add_default_key(keys, 'O', GLOBAL_POSTPONED);
-	add_default_key(keys, 'Q', GLOBAL_QUIT_TIN);
-	add_default_key(keys, 'R', GLOBAL_BUGREPORT);
-	add_default_key(keys, 'W', GLOBAL_DISPLAY_POST_HISTORY);
-	add_default_key(keys, '^', GLOBAL_FIRST_PAGE);
-	add_default_key(keys, '$', GLOBAL_LAST_PAGE);
-	add_default_key(keys, '>', GLOBAL_SCROLL_DOWN);
-	add_default_key(keys, '<', GLOBAL_SCROLL_UP);
-	add_default_key(keys, '/', GLOBAL_SEARCH_SUBJECT_FORWARD);
-	add_default_key(keys, '?', GLOBAL_SEARCH_SUBJECT_BACKWARD);
-	add_default_key(keys, '\\', GLOBAL_SEARCH_REPEAT);
-	add_default_key(keys, '#', GLOBAL_SET_RANGE);
+	add_default_key(keys, "", GLOBAL_ABORT);
+	add_default_key(keys, "0", DIGIT_0);
+	add_default_key(keys, "1", DIGIT_1);
+	add_default_key(keys, "2", DIGIT_2);
+	add_default_key(keys, "3", DIGIT_3);
+	add_default_key(keys, "4", DIGIT_4);
+	add_default_key(keys, "5", DIGIT_5);
+	add_default_key(keys, "6", DIGIT_6);
+	add_default_key(keys, "7", DIGIT_7);
+	add_default_key(keys, "8", DIGIT_8);
+	add_default_key(keys, "9", DIGIT_9);
+	add_default_key(keys, "b", GLOBAL_PAGE_UP);
+	add_default_key(keys, "", GLOBAL_REDRAW_SCREEN);
+	add_default_key(keys, "j", GLOBAL_LINE_DOWN);
+	add_default_key(keys, "k", GLOBAL_LINE_UP);
+	add_default_key(keys, "O", GLOBAL_POSTPONED);
+	add_default_key(keys, "h", GLOBAL_HELP);
+	add_default_key(keys, "i", GLOBAL_TOGGLE_INFO_LAST_LINE);
+	add_default_key(keys, "q", GLOBAL_QUIT);
+	add_default_key(keys, "v", GLOBAL_VERSION);
+	add_default_key(keys, "w", GLOBAL_POST);
+	add_default_key(keys, "H", GLOBAL_TOGGLE_HELP_DISPLAY);
+	add_default_key(keys, "I", GLOBAL_TOGGLE_INVERSE_VIDEO);
+	add_default_key(keys, "M", GLOBAL_OPTION_MENU);
+	add_default_key(keys, "Q", GLOBAL_QUIT_TIN);
+	add_default_key(keys, "R", GLOBAL_BUGREPORT);
+	add_default_key(keys, "W", GLOBAL_DISPLAY_POST_HISTORY);
+	add_default_key(keys, "^", GLOBAL_FIRST_PAGE);
+	add_default_key(keys, "$", GLOBAL_LAST_PAGE);
+	add_default_key(keys, "/", GLOBAL_SEARCH_SUBJECT_FORWARD);
+	add_default_key(keys, "?", GLOBAL_SEARCH_SUBJECT_BACKWARD);
+	add_default_key(keys, "\\", GLOBAL_SEARCH_REPEAT);
+	add_default_key(keys, "#", GLOBAL_SET_RANGE);
 #ifndef NO_SHELL_ESCAPE
-	add_default_key(keys, '!', GLOBAL_SHELL_ESCAPE);
+	add_default_key(keys, "!", GLOBAL_SHELL_ESCAPE);
 #endif /* NO_SHELL_ESCAPE */
 #ifdef HAVE_COLOR
-	add_default_key(keys, '&', GLOBAL_TOGGLE_COLOR);
+	add_default_key(keys, "&", GLOBAL_TOGGLE_COLOR);
 #endif /* HAVE COLOR */
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.