--- /dev/null
+use utf8;
+
+my @generic = qw(^l ! * / : ; < = > ? H L M Z [ ] j k n q t z);
+
+'' => {
+ desc => 'index',
+
+ ';' => ["apply to tagged", 'arg'], # tag-prefix
+ '@' => ["display sender", 'ci'], # display-address
+ ':' => ["enter command"], # enter-command
+ '=' => ["first entry"], # first-entry
+ ']' => ["half page down"], # half-down
+ '[' => ["half page up"], # half-up
+ '?' => ["help"], # help
+ '!' => ["invoke shell"], # shell
+ '*' => ["last message"], # last-entry
+ '>' => ["line $sign{down}"], # next-line
+ '<' => ["line $sign{up}"], # previous-line
+ '.' => ["list new mail"], # buffy-list #TODO
+ '|' => ["pipe to shell"], # pipe-message
+ '$' => ["save mailbox"], # sync-mailbox
+ '/' => ["search"], # search
+ '#' => ["split up thread"], # break-thread
+ '&' => ["thread tagged"], # link-threads
+ '%' => ["toggle readonly"], # toggle-write
+ ' ' => '^m',
+
+ 'a' => ["create alias"], # create-alias
+ 'b' => ["bounce"], # bounce-message
+ '^b'=> ["url$sign{_}view"],
+ '\b'=> ["search bodies"], # M <search>~b
+ 'c' => ["open folder"], # change-folder
+ 'C' => ["copy message"], # copy-message
+ '\c'=> ["open readonly"], # change-folder-readonly
+ '\C'=> ["make plain copy"], # decode-copy
+ 'd' => ["delete"], # delete-message
+ 'D' => ["delete pattern"], # delete-pattern
+ '^d'=> ["delete thread"], # delete-thread
+ '\d'=> ["delete subthread"], # delete-subthread
+ 'e' => ["edit"], # edit
+ '^e'=> ["edit con$sign{_}tent type"], # edit-type
+ '\e'=> ["edit+send copy"], # resend-message
+ 'f' => ["forward"], # forward-message
+ 'F' => ["toggle important"], # flag-message
+ '^f'=> ["forget pass$sign{_}phras$sign{_}e"], # forget-passphrase
+ 'g' => ["reply to all", '', 'Group reply'], # group-reply
+ 'G' => ["fetch POP", '', 'Gather new mail'], # fetch-mail
+ 'h' => ["toggle headers"], # display-toggle-weed
+ 'H' => ["screen top"], # top-page
+ '^i'=> ["next unread msg"], # next-new-then-unread
+# '\tab'=> ["previous unread msg"], # previous-new-then-unread
+ 'j' => ["next entry"], # next-entry, next-undeleted
+ 'J' => ["next message"], # next-entry
+ 'k' => ["previous entry"], # previous-entry, previous-undeleted
+ 'K' => ["previous message"], # previous-entry
+ '^k'=> ["extract pub keys"], # extract-keys
+ '\k'=> ["send public key"], # mail-key
+ 'l' => ["limit pattern"], # limit
+ 'L' => ["reply to list"], # list-reply
+ '^l'=> ["redraw"], # refresh
+ '\l'=> ["show current limit"], # show-limit
+ 'm' => ["compose mail"], # mail
+ 'M' => ["screen middle"], # middle-page
+ '^m'=> ["select"], # select-entry, display-message
+ 'n' => ["search next"], # search-next
+ 'N' => ["toggle new"], # toggle-new
+ '^n'=> ["next thread"], # next-thread
+ '\n'=> ["next subthread"], # next-subthread
+ 'o' => ["sort"], # sort-mailbox
+ 'O' => ["sort reverse"], # sort-reverse
+ 'p' => ["print"], # print-message
+ 'P' => ["to parent"], # parent-message
+ '^p'=> ["previous thread"], # previous-thread
+ '\p'=> ["previous subthread"], # previous-subthread
+ '\P'=> ["check for pgp"], # check-traditional-pgp
+ 'q' => ["exit or quit"], # exit, quit
+ 'Q' => ["query for addresses"], # query #TODO
+ 'r' => ["reply to sender"], # reply
+ 'R' => ["recall postpon$sign{_}e$sign{_}d"], # recall-message
+ '^r'=> ["mark thread read"], # read-thread
+ '\r'=> ["mark sub$sign{_}thread r$sign{_}ead"], # read-subthread
+ 's' => ["move"], # save-message
+ '\s'=> ["save and delete"], # decode-save
+ 't' => ["tag"], # tag-entry
+ 'T' => ["tag pattern"], # tag-pattern
+ '^t'=> ["untag pattern"], # untag-pattern
+ '\t'=> ["tag thread"], # tag-thread
+ 'u' => ["undo delete"], # undelete-message
+ 'U' => ["undelete pattern"], # undelete-pattern
+ '^u'=> ["undelete thread"], # undelete-pattern
+ '\u'=> ["undelete subthread"], # undelete-subthread
+ 'v' => ["attach$sign{_}ments"], # view-attachments
+ 'V' => ["version"], # show-version
+ '\v'=> ["(un)collapse thread"], # collapse-thread
+ '\V'=> ["(un)collapse threads"], # collapse-all
+ 'w' => ["set flag", 'arg'], # set-flag
+ 'W' => ["clear flag", 'arg'], # clear-flag
+ 'x' => ["exit menu"], # exit
+ 'y' => ["list incoming mailboxes"], # M <change-folder>?<toggle-mailboxes>
+ 'z' => ["page $sign{down}"], # next-page
+ 'Z' => ["page $sign{up}"], # previous-page
+}, # index
+
+' ' => {
+ 'L' => ["screen bottom"], # bottom-page
+}, # general
+