use utf8;
-my @generic = qw(^l ! * / : ; < = > ? H L M Z [ ] j k n q t z);
+my %common = (
+ "\e"=> ['me mode', '+'],
+
+ 'H' => ['pm'], # top-page
+ 'j' => ['pm'], # next-entry, next-undeleted
+ 'k' => ['pm'], # previous-entry, previous-undeleted
+ 'L' => ['pm'], # bottom-page
+ '^l'=> ['ci'], # refresh
+ 'M' => ['pm'], # middle-page
+ '^m'=> ['mi mode^m'], # select-entry, display-message
+ 'n' => ['po'], # search-next
+ 'q' => ['mv mode'], # exit
+ 't' => ['co'], # tag-entry
+ 'z' => ['pm'], # next-page
+ 'Z' => ['pm'], # previous-page
+
+ '*' => ['pm'], # last-entry
+ '=' => ['pm'], # first-entry
+ ':' => ['mi'], # enter-command
+ ';' => ['mi arg'], # tag-prefix
+ '>' => ['pm'], # next-line
+ '<' => ['pm'], # previous-line
+ ']' => ['pm'], # half-down
+ '[' => ['pm'], # half-up
+ '?' => ['ci'], # help
+ '!' => ['ci arg'], # shell
+ '/' => ['po arg mode/~'], # search
+ '+/'=> ['po arg mode/~'], # search
+);
+
+{
'' => {
- desc => 'index',
+ %common,
- ';' => ["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", 'mode/~'], # search
- '#' => ["split up thread"], # break-thread
- '&' => ["thread tagged"], # link-threads
- '%' => ["toggle readonly"], # toggle-write
+ '@' => ['ci'], # display-address
+ '.' => ['mv'], # buffy-list #TODO
+ '|' => ['mi'], # pipe-message
+ '$' => ['co'], # sync-mailbox
+ '#' => ['co'], # break-thread
+ '&' => ['co'], # link-threads
+ '%' => ['co'], # 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
+ 'a' => ['mi'], # create-alias
+ 'b' => ['mo'], # bounce-message
+ '^b'=> ['ci'],
+ '+b'=> [undef], # M <search>~b
+ 'c' => ['mv'], # change-folder
+ 'C' => ['mi'], # copy-message
+ '+c'=> ['mv'], # change-folder-readonly
+ '+C'=> [undef], # decode-copy
+ 'd' => ['co'], # delete-message
+ 'D' => ['co arg'], # delete-pattern
+ '^d'=> ['co'], # delete-thread
+ '+d'=> ['co'], # delete-subthread
+ 'e' => ['co linkvi'], # edit
+ '^e'=> ['co'], # edit-type
+ '+e'=> [undef], # resend-message
+ 'f' => ['mo modem'], # forward-message
+ 'F' => ['co'], # flag-message
+ '^f'=> ['mi'], # forget-passphrase
+ 'g' => ['mo modem'], # group-reply
+ 'G' => ['mi'], # fetch-mail
+ 'h' => ['me'], # display-toggle-weed
+ '^i'=> ['po'], # next-new-then-unread
+ '+^i'=> [undef], # previous-new-then-unread
+ 'j' => ['pm'], # next-undeleted
+ 'k' => ['pm'], # previous-undeleted
+ 'J' => ['po'], # next-entry
+ 'K' => ['po'], # previous-entry
+ '^k'=> ['ci'], # extract-keys
+ '+k'=> ['mo modem'], # mail-key
+ 'l' => ['me'], # limit
+ 'L' => ['mo modem'], # list-reply
+ '+l'=> ['ci'], # show-limit
+ 'm' => ['mo modem'], # mail
+ 'N' => ['co'], # toggle-new
+ '^n'=> ['po'], # next-thread
+ '+n'=> ['po'], # next-subthread
+ 'o' => ['me modeo'], # sort-mailbox
+ 'O' => ['me modeo'], # sort-reverse
+ 'p' => ['ci'], # print-message
+ 'P' => ['po'], # parent-message
+ '^p'=> ['po'], # previous-thread
+ '+p'=> ['po'], # previous-subthread
+ '+P'=> [undef], # check-traditional-pgp
+ 'q' => ['mv'], # quit
+ 'Q' => ['ci arg'], # query
+ 'r' => ['mo modem'], # reply
+ 'R' => ['mo modem'], # recall-message
+ '^r'=> ['co'], # read-thread
+ '+r'=> ['co'], # read-subthread
+ 's' => ['co'], # save-message
+ '+s'=> ['co'], # decode-save
+ 'T' => ['co arg'], # tag-pattern
+ '^t'=> ['co'], # untag-pattern
+ '+t'=> ['co'], # tag-thread
+ 'u' => ['co'], # undelete-message
+ 'U' => ['co arg'], # undelete-pattern
+ '^u'=> ['co'], # undelete-thread
+ '+u'=> ['co'], # undelete-subthread
+ 'v' => ['ci'], # view-attachments
+ 'V' => ['ci'], # show-version
+ '+v'=> ['me'], # collapse-thread
+ '+V'=> ['me'], # collapse-all
+ 'w' => ['co arg modew'], # set-flag
+ 'W' => ['co arg modew'], # clear-flag
+ 'x' => ['mv'], # exit
+ 'y' => ['mv'], # M <change-folder>?<toggle-mailboxes>
}, # index
-' ' => {
- 'L' => ["screen bottom"], # bottom-page
-}, # general
+'m' => {
+ %common,
-'/~' => {
- desc => 'search flags (/~)',
+ '|' => ['co'],
+ 'a' => ['mi'],
+ 'A' => ['mi'],
+ 'b' => ['co'],
+ 'c' => ['co'],
+ 'C' => ['mi'],
+ 'd' => ['co'],
+ 'D' => ['co'],
+ '^d'=> ['co'],
+ 'e' => ['co linkvi'],
+ 'E' => ['co linkvi'],
+ '^e'=> ['co'],
+ 'f' => ['co'],
+ '^f'=> ['mi'],
+ '+f'=> ['co'],
+ 'F' => ['co'],
+ 'G' => ['ci'],
+ 'h' => ['ci'],
+ 'i' => ['mi'],
+ 'l' => ['ci'],
+ 'm' => ['co'],
+ 'M' => ['co'],
+ '^m'=> ['ci'],
+ 'n' => ['mi'],
+ 'P' => ['mv mode'],
+ 'r' => ['co'],
+ 'R' => ['co'],
+ 's' => ['co'],
+ 'S' => ['co menumS'],
+ 't' => ['co'],
+ '^t'=> ['co'],
+ 'w' => ['mi'],
+ 'u' => ['mi'],
+ 'U' => ['co'],
+ 'y' => ['mo'],
+}, # compose
- A => ["all"],
- b => ["msg body", 'X arg'],
- B => ["whole msg", 'arg'],
- c => ["cc address", 'arg'],
- C => ["to or cc address", 'arg'],
- d => ["date sent ran$sign{_}g$sign{_}e", 'arg'],
- D => ["deleted"],
- e => ["sender", 'arg'],
- E => ["expired"],
- f => ["from", 'arg'],
- F => ["flagged"],
- g => ["signed"],
- G => ["encryp$sign{_}ted"],
- h => ["header", 'arg'],
- H => ["spam attr$sign{_}ib$sign{_}ute", 'arg'],
- i => ["msg id", 'arg'],
- k => ["pgp key"],
- L => ["receiv$sign{_}d by", 'arg'],
- l => ["mailing list"],
- m => ["num$sign{_}ber ran$sign{_}g$sign{_}e", 'arg'],
- n => ["score range", 'arg'],
- N => ["new"],
- O => ["old"],
- p => ["to you"],
- P => ["by you"],
- Q => ["replies"],
- r => ["receive date ran$sign{_}ge", 'arg'],
- R => ["read"],
- s => ["subject"],
- S => ["super$sign{_}seded"],
- t => ["to address", 'arg'],
- T => ["tagged"],
- u => ["subscr$sign{_}ibed list"],
- U => ["unread"],
- v => ["collapsed thread"],
- V => ["verified"],
- x => ["refer$sign{_}ence", 'arg'],
- X => ["attach$sign{_}ments", 'arg'],
- y => ["x-label", 'arg'],
- z => ["size range", 'arg'],
- '=' => ["dupli$sign{_}cate"],
- '$' => ["unrefer$sign{_}enced"],
- '(' => ["in thread", 'arg'],
+w => {
+ "\e"=> ['me mode', '+'],
+ 'D' => ['co'],
+ 'd' => 'wD',
+ 'N' => ['co'],
+ 'n' => 'wN',
+ 'O' => ['co'],
+ 'o' => 'wO',
+ 'r' => ['co'],
+ 'R' => 'wr',
+ '*' => ['co'],
+ '!' => ['co'],
+}, # flag
+
+'/~' => {
+ "\e"=> ['me mode', '+'],
+ A => [undef],
+ b => ['X arg'],
+ B => ['arg'],
+ c => ['arg'],
+ C => ['arg'],
+ d => ['arg'],
+ D => [undef],
+ e => ['arg'],
+ E => [undef],
+ f => ['arg'],
+ F => [undef],
+ g => [undef],
+ G => [undef],
+ h => ['arg'],
+ H => ['arg'],
+ i => ['arg'],
+ k => [undef],
+ L => ['arg'],
+ l => [undef],
+ m => ['arg'],
+ n => ['arg'],
+ N => [undef],
+ O => [undef],
+ p => [undef],
+ P => [undef],
+ Q => [undef],
+ r => ['arg'],
+ R => [undef],
+ s => [undef],
+ S => [undef],
+ t => ['arg'],
+ T => [undef],
+ u => [undef],
+ U => [undef],
+ v => [undef],
+ V => [undef],
+ x => ['arg'],
+ X => ['arg'],
+ y => ['arg'],
+ z => ['arg'],
+ '=' => [undef],
+ '$' => [undef],
+ '(' => ['arg'],
}, # search option
+
+}