[BACK]Return to mode-key.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/Attic/mode-key.c between version 1.70 and 1.71

version 1.70, 2016/10/10 21:29:23 version 1.71, 2016/10/11 07:23:34
Line 50 
Line 50 
          */           */
         int                     mode;          int                     mode;
         enum mode_key_cmd       cmd;          enum mode_key_cmd       cmd;
         u_int                   repeat;  
 };  };
   
 /* Edit keys command strings. */  /* Edit keys command strings. */
Line 113 
Line 112 
         { 0, NULL }          { 0, NULL }
 };  };
   
 /* Copy keys command strings. */  
 static const struct mode_key_cmdstr mode_key_cmdstr_copy[] = {  
         { MODEKEYCOPY_APPENDSELECTION, "append-selection" },  
         { MODEKEYCOPY_BACKTOINDENTATION, "back-to-indentation" },  
         { MODEKEYCOPY_BOTTOMLINE, "bottom-line" },  
         { MODEKEYCOPY_CANCEL, "cancel" },  
         { MODEKEYCOPY_CLEARSELECTION, "clear-selection" },  
         { MODEKEYCOPY_COPYPIPE, "copy-pipe" },  
         { MODEKEYCOPY_COPYLINE, "copy-line" },  
         { MODEKEYCOPY_COPYENDOFLINE, "copy-end-of-line" },  
         { MODEKEYCOPY_COPYSELECTION, "copy-selection" },  
         { MODEKEYCOPY_DOWN, "cursor-down" },  
         { MODEKEYCOPY_ENDOFLINE, "end-of-line" },  
         { MODEKEYCOPY_GOTOLINE, "goto-line" },  
         { MODEKEYCOPY_HALFPAGEDOWN, "halfpage-down" },  
         { MODEKEYCOPY_HALFPAGEUP, "halfpage-up" },  
         { MODEKEYCOPY_HISTORYBOTTOM, "history-bottom" },  
         { MODEKEYCOPY_HISTORYTOP, "history-top" },  
         { MODEKEYCOPY_JUMP, "jump-forward" },  
         { MODEKEYCOPY_JUMPAGAIN, "jump-again" },  
         { MODEKEYCOPY_JUMPREVERSE, "jump-reverse" },  
         { MODEKEYCOPY_JUMPBACK, "jump-backward" },  
         { MODEKEYCOPY_JUMPTO, "jump-to-forward" },  
         { MODEKEYCOPY_JUMPTOBACK, "jump-to-backward" },  
         { MODEKEYCOPY_LEFT, "cursor-left" },  
         { MODEKEYCOPY_RECTANGLETOGGLE, "rectangle-toggle" },  
         { MODEKEYCOPY_MIDDLELINE, "middle-line" },  
         { MODEKEYCOPY_NEXTPAGE, "page-down" },  
         { MODEKEYCOPY_NEXTPARAGRAPH, "next-paragraph" },  
         { MODEKEYCOPY_NEXTSPACE, "next-space" },  
         { MODEKEYCOPY_NEXTSPACEEND, "next-space-end" },  
         { MODEKEYCOPY_NEXTWORD, "next-word" },  
         { MODEKEYCOPY_NEXTWORDEND, "next-word-end" },  
         { MODEKEYCOPY_OTHEREND, "other-end" },  
         { MODEKEYCOPY_PREVIOUSPAGE, "page-up" },  
         { MODEKEYCOPY_PREVIOUSPARAGRAPH, "previous-paragraph" },  
         { MODEKEYCOPY_PREVIOUSSPACE, "previous-space" },  
         { MODEKEYCOPY_PREVIOUSWORD, "previous-word" },  
         { MODEKEYCOPY_RIGHT, "cursor-right" },  
         { MODEKEYCOPY_SCROLLDOWN, "scroll-down" },  
         { MODEKEYCOPY_SCROLLUP, "scroll-up" },  
         { MODEKEYCOPY_SEARCHAGAIN, "search-again" },  
         { MODEKEYCOPY_SEARCHDOWN, "search-forward" },  
         { MODEKEYCOPY_SEARCHREVERSE, "search-reverse" },  
         { MODEKEYCOPY_SEARCHUP, "search-backward" },  
         { MODEKEYCOPY_SELECTLINE, "select-line" },  
         { MODEKEYCOPY_STARTNAMEDBUFFER, "start-named-buffer" },  
         { MODEKEYCOPY_STARTNUMBERPREFIX, "start-number-prefix" },  
         { MODEKEYCOPY_STARTOFLINE, "start-of-line" },  
         { MODEKEYCOPY_STARTSELECTION, "begin-selection" },  
         { MODEKEYCOPY_TOPLINE, "top-line" },  
         { MODEKEYCOPY_UP, "cursor-up" },  
   
         { 0, NULL }  
 };  
   
 /* vi editing keys. */  /* vi editing keys. */
 static const struct mode_key_entry mode_key_vi_edit[] = {  static const struct mode_key_entry mode_key_vi_edit[] = {
         { '\003' /* C-c */,         0, MODEKEYEDIT_CANCEL, 1 },          { '\003' /* C-c */,         0, MODEKEYEDIT_CANCEL },
         { '\010' /* C-h */,         0, MODEKEYEDIT_BACKSPACE, 1 },          { '\010' /* C-h */,         0, MODEKEYEDIT_BACKSPACE },
         { '\011' /* Tab */,         0, MODEKEYEDIT_COMPLETE, 1 },          { '\011' /* Tab */,         0, MODEKEYEDIT_COMPLETE },
         { '\025' /* C-u */,         0, MODEKEYEDIT_DELETELINE, 1 },          { '\025' /* C-u */,         0, MODEKEYEDIT_DELETELINE },
         { '\027' /* C-w */,         0, MODEKEYEDIT_DELETEWORD, 1 },          { '\027' /* C-w */,         0, MODEKEYEDIT_DELETEWORD },
         { '\033' /* Escape */,      0, MODEKEYEDIT_SWITCHMODE, 1 },          { '\033' /* Escape */,      0, MODEKEYEDIT_SWITCHMODE },
         { '\n',                     0, MODEKEYEDIT_ENTER, 1 },          { '\n',                     0, MODEKEYEDIT_ENTER },
         { '\r',                     0, MODEKEYEDIT_ENTER, 1 },          { '\r',                     0, MODEKEYEDIT_ENTER },
         { KEYC_BSPACE,              0, MODEKEYEDIT_BACKSPACE, 1 },          { KEYC_BSPACE,              0, MODEKEYEDIT_BACKSPACE },
         { KEYC_DC,                  0, MODEKEYEDIT_DELETE, 1 },          { KEYC_DC,                  0, MODEKEYEDIT_DELETE },
         { KEYC_DOWN,                0, MODEKEYEDIT_HISTORYDOWN, 1 },          { KEYC_DOWN,                0, MODEKEYEDIT_HISTORYDOWN },
         { KEYC_LEFT,                0, MODEKEYEDIT_CURSORLEFT, 1 },          { KEYC_LEFT,                0, MODEKEYEDIT_CURSORLEFT },
         { KEYC_RIGHT,               0, MODEKEYEDIT_CURSORRIGHT, 1 },          { KEYC_RIGHT,               0, MODEKEYEDIT_CURSORRIGHT },
         { KEYC_UP,                  0, MODEKEYEDIT_HISTORYUP, 1 },          { KEYC_UP,                  0, MODEKEYEDIT_HISTORYUP },
         { KEYC_HOME,                0, MODEKEYEDIT_STARTOFLINE, 1 },          { KEYC_HOME,                0, MODEKEYEDIT_STARTOFLINE },
         { KEYC_END,                 0, MODEKEYEDIT_ENDOFLINE, 1 },          { KEYC_END,                 0, MODEKEYEDIT_ENDOFLINE },
   
         { '$',                      1, MODEKEYEDIT_ENDOFLINE, 1 },          { '$',                      1, MODEKEYEDIT_ENDOFLINE },
         { '0',                      1, MODEKEYEDIT_STARTOFLINE, 1 },          { '0',                      1, MODEKEYEDIT_STARTOFLINE },
         { 'A',                      1, MODEKEYEDIT_SWITCHMODEAPPENDLINE, 1 },          { 'A',                      1, MODEKEYEDIT_SWITCHMODEAPPENDLINE },
         { 'B',                      1, MODEKEYEDIT_PREVIOUSSPACE, 1 },          { 'B',                      1, MODEKEYEDIT_PREVIOUSSPACE },
         { 'C',                      1, MODEKEYEDIT_SWITCHMODECHANGELINE, 1 },          { 'C',                      1, MODEKEYEDIT_SWITCHMODECHANGELINE },
         { 'D',                      1, MODEKEYEDIT_DELETETOENDOFLINE, 1 },          { 'D',                      1, MODEKEYEDIT_DELETETOENDOFLINE },
         { 'E',                      1, MODEKEYEDIT_NEXTSPACEEND, 1 },          { 'E',                      1, MODEKEYEDIT_NEXTSPACEEND },
         { 'I',                      1, MODEKEYEDIT_SWITCHMODEBEGINLINE, 1 },          { 'I',                      1, MODEKEYEDIT_SWITCHMODEBEGINLINE },
         { 'S',                      1, MODEKEYEDIT_SWITCHMODESUBSTITUTELINE, 1 },          { 'S',                      1, MODEKEYEDIT_SWITCHMODESUBSTITUTELINE },
         { 'W',                      1, MODEKEYEDIT_NEXTSPACE, 1 },          { 'W',                      1, MODEKEYEDIT_NEXTSPACE },
         { 'X',                      1, MODEKEYEDIT_BACKSPACE, 1 },          { 'X',                      1, MODEKEYEDIT_BACKSPACE },
         { '\003' /* C-c */,         1, MODEKEYEDIT_CANCEL, 1 },          { '\003' /* C-c */,         1, MODEKEYEDIT_CANCEL },
         { '\010' /* C-h */,         1, MODEKEYEDIT_BACKSPACE, 1 },          { '\010' /* C-h */,         1, MODEKEYEDIT_BACKSPACE },
         { '\n',                     1, MODEKEYEDIT_ENTER, 1 },          { '\n',                     1, MODEKEYEDIT_ENTER },
         { '\r',                     1, MODEKEYEDIT_ENTER, 1 },          { '\r',                     1, MODEKEYEDIT_ENTER },
         { '^',                      1, MODEKEYEDIT_STARTOFLINE, 1 },          { '^',                      1, MODEKEYEDIT_STARTOFLINE },
         { 'a',                      1, MODEKEYEDIT_SWITCHMODEAPPEND, 1 },          { 'a',                      1, MODEKEYEDIT_SWITCHMODEAPPEND },
         { 'b',                      1, MODEKEYEDIT_PREVIOUSWORD, 1 },          { 'b',                      1, MODEKEYEDIT_PREVIOUSWORD },
         { 'd',                      1, MODEKEYEDIT_DELETELINE, 1 },          { 'd',                      1, MODEKEYEDIT_DELETELINE },
         { 'e',                      1, MODEKEYEDIT_NEXTWORDEND, 1 },          { 'e',                      1, MODEKEYEDIT_NEXTWORDEND },
         { 'h',                      1, MODEKEYEDIT_CURSORLEFT, 1 },          { 'h',                      1, MODEKEYEDIT_CURSORLEFT },
         { 'i',                      1, MODEKEYEDIT_SWITCHMODE, 1 },          { 'i',                      1, MODEKEYEDIT_SWITCHMODE },
         { 'j',                      1, MODEKEYEDIT_HISTORYDOWN, 1 },          { 'j',                      1, MODEKEYEDIT_HISTORYDOWN },
         { 'k',                      1, MODEKEYEDIT_HISTORYUP, 1 },          { 'k',                      1, MODEKEYEDIT_HISTORYUP },
         { 'l',                      1, MODEKEYEDIT_CURSORRIGHT, 1 },          { 'l',                      1, MODEKEYEDIT_CURSORRIGHT },
         { 'p',                      1, MODEKEYEDIT_PASTE, 1 },          { 'p',                      1, MODEKEYEDIT_PASTE },
         { 's',                      1, MODEKEYEDIT_SWITCHMODESUBSTITUTE, 1 },          { 's',                      1, MODEKEYEDIT_SWITCHMODESUBSTITUTE },
         { 'w',                      1, MODEKEYEDIT_NEXTWORD, 1 },          { 'w',                      1, MODEKEYEDIT_NEXTWORD },
         { 'x',                      1, MODEKEYEDIT_DELETE, 1 },          { 'x',                      1, MODEKEYEDIT_DELETE },
         { KEYC_BSPACE,              1, MODEKEYEDIT_BACKSPACE, 1 },          { KEYC_BSPACE,              1, MODEKEYEDIT_BACKSPACE },
         { KEYC_DC,                  1, MODEKEYEDIT_DELETE, 1 },          { KEYC_DC,                  1, MODEKEYEDIT_DELETE },
         { KEYC_DOWN,                1, MODEKEYEDIT_HISTORYDOWN, 1 },          { KEYC_DOWN,                1, MODEKEYEDIT_HISTORYDOWN },
         { KEYC_LEFT,                1, MODEKEYEDIT_CURSORLEFT, 1 },          { KEYC_LEFT,                1, MODEKEYEDIT_CURSORLEFT },
         { KEYC_RIGHT,               1, MODEKEYEDIT_CURSORRIGHT, 1 },          { KEYC_RIGHT,               1, MODEKEYEDIT_CURSORRIGHT },
         { KEYC_UP,                  1, MODEKEYEDIT_HISTORYUP, 1 },          { KEYC_UP,                  1, MODEKEYEDIT_HISTORYUP },
   
         { 0,                       -1, 0, 1 }          { 0,                       -1, 0 }
 };  };
 struct mode_key_tree mode_key_tree_vi_edit;  struct mode_key_tree mode_key_tree_vi_edit;
   
 /* vi choice selection keys. */  /* vi choice selection keys. */
 static const struct mode_key_entry mode_key_vi_choice[] = {  static const struct mode_key_entry mode_key_vi_choice[] = {
         { '0' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '0' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '1' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '1' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '2' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '2' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '3' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '3' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '4' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '4' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '5' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '5' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '6' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '6' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '7' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '7' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '8' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '8' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '9' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '9' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '\002' /* C-b */,         0, MODEKEYCHOICE_PAGEUP, 1 },          { '\002' /* C-b */,         0, MODEKEYCHOICE_PAGEUP },
         { '\003' /* C-c */,         0, MODEKEYCHOICE_CANCEL, 1 },          { '\003' /* C-c */,         0, MODEKEYCHOICE_CANCEL },
         { '\005' /* C-e */,         0, MODEKEYCHOICE_SCROLLDOWN, 1 },          { '\005' /* C-e */,         0, MODEKEYCHOICE_SCROLLDOWN },
         { '\006' /* C-f */,         0, MODEKEYCHOICE_PAGEDOWN, 1 },          { '\006' /* C-f */,         0, MODEKEYCHOICE_PAGEDOWN },
         { '\031' /* C-y */,         0, MODEKEYCHOICE_SCROLLUP, 1 },          { '\031' /* C-y */,         0, MODEKEYCHOICE_SCROLLUP },
         { '\n',                     0, MODEKEYCHOICE_CHOOSE, 1 },          { '\n',                     0, MODEKEYCHOICE_CHOOSE },
         { '\r',                     0, MODEKEYCHOICE_CHOOSE, 1 },          { '\r',                     0, MODEKEYCHOICE_CHOOSE },
         { 'j',                      0, MODEKEYCHOICE_DOWN, 1 },          { 'j',                      0, MODEKEYCHOICE_DOWN },
         { 'k',                      0, MODEKEYCHOICE_UP, 1 },          { 'k',                      0, MODEKEYCHOICE_UP },
         { 'q',                      0, MODEKEYCHOICE_CANCEL, 1 },          { 'q',                      0, MODEKEYCHOICE_CANCEL },
         { KEYC_HOME,                0, MODEKEYCHOICE_STARTOFLIST, 1 },          { KEYC_HOME,                0, MODEKEYCHOICE_STARTOFLIST },
         { 'g',                      0, MODEKEYCHOICE_STARTOFLIST, 1 },          { 'g',                      0, MODEKEYCHOICE_STARTOFLIST },
         { 'H',                      0, MODEKEYCHOICE_TOPLINE, 1 },          { 'H',                      0, MODEKEYCHOICE_TOPLINE },
         { 'L',                      0, MODEKEYCHOICE_BOTTOMLINE, 1 },          { 'L',                      0, MODEKEYCHOICE_BOTTOMLINE },
         { 'G',                      0, MODEKEYCHOICE_ENDOFLIST, 1 },          { 'G',                      0, MODEKEYCHOICE_ENDOFLIST },
         { KEYC_END,                 0, MODEKEYCHOICE_ENDOFLIST, 1 },          { KEYC_END,                 0, MODEKEYCHOICE_ENDOFLIST },
         { KEYC_BSPACE,              0, MODEKEYCHOICE_BACKSPACE, 1 },          { KEYC_BSPACE,              0, MODEKEYCHOICE_BACKSPACE },
         { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCHOICE_SCROLLDOWN, 1 },          { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCHOICE_SCROLLDOWN },
         { KEYC_DOWN,                0, MODEKEYCHOICE_DOWN, 1 },          { KEYC_DOWN,                0, MODEKEYCHOICE_DOWN },
         { KEYC_NPAGE,               0, MODEKEYCHOICE_PAGEDOWN, 1 },          { KEYC_NPAGE,               0, MODEKEYCHOICE_PAGEDOWN },
         { KEYC_PPAGE,               0, MODEKEYCHOICE_PAGEUP, 1 },          { KEYC_PPAGE,               0, MODEKEYCHOICE_PAGEUP },
         { KEYC_UP | KEYC_CTRL,      0, MODEKEYCHOICE_SCROLLUP, 1 },          { KEYC_UP | KEYC_CTRL,      0, MODEKEYCHOICE_SCROLLUP },
         { KEYC_UP,                  0, MODEKEYCHOICE_UP, 1 },          { KEYC_UP,                  0, MODEKEYCHOICE_UP },
         { ' ',                      0, MODEKEYCHOICE_TREE_TOGGLE, 1 },          { ' ',                      0, MODEKEYCHOICE_TREE_TOGGLE },
         { KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE, 1 },          { KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE },
         { KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND, 1 },          { KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND },
         { KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL, 1 },          { KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL },
         { KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL, 1 },          { KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL },
         { KEYC_MOUSEDOWN1_PANE,     0, MODEKEYCHOICE_CHOOSE, 1 },          { KEYC_MOUSEDOWN1_PANE,     0, MODEKEYCHOICE_CHOOSE },
         { KEYC_MOUSEDOWN3_PANE,     0, MODEKEYCHOICE_TREE_TOGGLE, 1 },          { KEYC_MOUSEDOWN3_PANE,     0, MODEKEYCHOICE_TREE_TOGGLE },
         { KEYC_WHEELUP_PANE,        0, MODEKEYCHOICE_UP, 1 },          { KEYC_WHEELUP_PANE,        0, MODEKEYCHOICE_UP },
         { KEYC_WHEELDOWN_PANE,      0, MODEKEYCHOICE_DOWN, 1 },          { KEYC_WHEELDOWN_PANE,      0, MODEKEYCHOICE_DOWN },
   
         { 0,                       -1, 0, 1 }          { 0,                       -1, 0 }
 };  };
 struct mode_key_tree mode_key_tree_vi_choice;  struct mode_key_tree mode_key_tree_vi_choice;
   
 /* vi copy mode keys. */  
 static const struct mode_key_entry mode_key_vi_copy[] = {  
         { ' ',                      0, MODEKEYCOPY_STARTSELECTION, 1 },  
         { '"',                      0, MODEKEYCOPY_STARTNAMEDBUFFER, 1 },  
         { '$',                      0, MODEKEYCOPY_ENDOFLINE, 1 },  
         { ',',                      0, MODEKEYCOPY_JUMPREVERSE, 1 },  
         { ';',                      0, MODEKEYCOPY_JUMPAGAIN, 1 },  
         { '/',                      0, MODEKEYCOPY_SEARCHDOWN, 1 },  
         { '0',                      0, MODEKEYCOPY_STARTOFLINE, 1 },  
         { '1',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '2',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '3',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '4',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '5',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '6',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '7',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '8',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '9',                      0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { ':',                      0, MODEKEYCOPY_GOTOLINE, 1 },  
         { '?',                      0, MODEKEYCOPY_SEARCHUP, 1 },  
         { 'A',                      0, MODEKEYCOPY_APPENDSELECTION, 1 },  
         { 'B',                      0, MODEKEYCOPY_PREVIOUSSPACE, 1 },  
         { 'D',                      0, MODEKEYCOPY_COPYENDOFLINE, 1 },  
         { 'E',                      0, MODEKEYCOPY_NEXTSPACEEND, 1 },  
         { 'F',                      0, MODEKEYCOPY_JUMPBACK, 1 },  
         { 'G',                      0, MODEKEYCOPY_HISTORYBOTTOM, 1 },  
         { 'H',                      0, MODEKEYCOPY_TOPLINE, 1 },  
         { 'J',                      0, MODEKEYCOPY_SCROLLDOWN, 1 },  
         { 'K',                      0, MODEKEYCOPY_SCROLLUP, 1 },  
         { 'L',                      0, MODEKEYCOPY_BOTTOMLINE, 1 },  
         { 'M',                      0, MODEKEYCOPY_MIDDLELINE, 1 },  
         { 'N',                      0, MODEKEYCOPY_SEARCHREVERSE, 1 },  
         { 'T',                      0, MODEKEYCOPY_JUMPTOBACK, 1 },  
         { 'V',                      0, MODEKEYCOPY_SELECTLINE, 1 },  
         { 'W',                      0, MODEKEYCOPY_NEXTSPACE, 1 },  
         { '\002' /* C-b */,         0, MODEKEYCOPY_PREVIOUSPAGE, 1 },  
         { '\003' /* C-c */,         0, MODEKEYCOPY_CANCEL, 1 },  
         { '\004' /* C-d */,         0, MODEKEYCOPY_HALFPAGEDOWN, 1 },  
         { '\005' /* C-e */,         0, MODEKEYCOPY_SCROLLDOWN, 1 },  
         { '\006' /* C-f */,         0, MODEKEYCOPY_NEXTPAGE, 1 },  
         { '\010' /* C-h */,         0, MODEKEYCOPY_LEFT, 1 },  
         { '\025' /* C-u */,         0, MODEKEYCOPY_HALFPAGEUP, 1 },  
         { '\031' /* C-y */,         0, MODEKEYCOPY_SCROLLUP, 1 },  
         { '\033' /* Escape */,      0, MODEKEYCOPY_CLEARSELECTION, 1 },  
         { '\n',                     0, MODEKEYCOPY_COPYSELECTION, 1 },  
         { '\r',                     0, MODEKEYCOPY_COPYSELECTION, 1 },  
         { '^',                      0, MODEKEYCOPY_BACKTOINDENTATION, 1 },  
         { 'b',                      0, MODEKEYCOPY_PREVIOUSWORD, 1 },  
         { 'e',                      0, MODEKEYCOPY_NEXTWORDEND, 1 },  
         { 'f',                      0, MODEKEYCOPY_JUMP, 1 },  
         { 'g',                      0, MODEKEYCOPY_HISTORYTOP, 1 },  
         { 'h',                      0, MODEKEYCOPY_LEFT, 1 },  
         { 'j',                      0, MODEKEYCOPY_DOWN, 1 },  
         { 'k',                      0, MODEKEYCOPY_UP, 1 },  
         { 'l',                      0, MODEKEYCOPY_RIGHT, 1 },  
         { 'n',                      0, MODEKEYCOPY_SEARCHAGAIN, 1 },  
         { 'o',                      0, MODEKEYCOPY_OTHEREND, 1 },  
         { 't',                      0, MODEKEYCOPY_JUMPTO, 1 },  
         { 'q',                      0, MODEKEYCOPY_CANCEL, 1 },  
         { 'v',                      0, MODEKEYCOPY_RECTANGLETOGGLE, 1 },  
         { 'w',                      0, MODEKEYCOPY_NEXTWORD, 1 },  
         { '{',                      0, MODEKEYCOPY_PREVIOUSPARAGRAPH, 1 },  
         { '}',                      0, MODEKEYCOPY_NEXTPARAGRAPH, 1 },  
         { KEYC_BSPACE,              0, MODEKEYCOPY_LEFT, 1 },  
         { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCOPY_SCROLLDOWN, 1 },  
         { KEYC_DOWN,                0, MODEKEYCOPY_DOWN, 1 },  
         { KEYC_LEFT,                0, MODEKEYCOPY_LEFT, 1 },  
         { KEYC_NPAGE,               0, MODEKEYCOPY_NEXTPAGE, 1 },  
         { KEYC_PPAGE,               0, MODEKEYCOPY_PREVIOUSPAGE, 1 },  
         { KEYC_RIGHT,               0, MODEKEYCOPY_RIGHT, 1 },  
         { KEYC_UP | KEYC_CTRL,      0, MODEKEYCOPY_SCROLLUP, 1 },  
         { KEYC_UP,                  0, MODEKEYCOPY_UP, 1 },  
         { KEYC_WHEELUP_PANE,        0, MODEKEYCOPY_SCROLLUP, 1 },  
         { KEYC_WHEELDOWN_PANE,      0, MODEKEYCOPY_SCROLLDOWN, 1 },  
         { KEYC_MOUSEDRAG1_PANE,     0, MODEKEYCOPY_STARTSELECTION, 1 },  
         { KEYC_MOUSEDRAGEND1_PANE,  0, MODEKEYCOPY_COPYSELECTION, 1 },  
   
         { 0,                       -1, 0, 1 }  
 };  
 struct mode_key_tree mode_key_tree_vi_copy;  
   
 /* emacs editing keys. */  /* emacs editing keys. */
 static const struct mode_key_entry mode_key_emacs_edit[] = {  static const struct mode_key_entry mode_key_emacs_edit[] = {
         { '\001' /* C-a */,         0, MODEKEYEDIT_STARTOFLINE, 1 },          { '\001' /* C-a */,         0, MODEKEYEDIT_STARTOFLINE },
         { '\002' /* C-b */,         0, MODEKEYEDIT_CURSORLEFT, 1 },          { '\002' /* C-b */,         0, MODEKEYEDIT_CURSORLEFT },
         { '\003' /* C-c */,         0, MODEKEYEDIT_CANCEL, 1 },          { '\003' /* C-c */,         0, MODEKEYEDIT_CANCEL },
         { '\004' /* C-d */,         0, MODEKEYEDIT_DELETE, 1 },          { '\004' /* C-d */,         0, MODEKEYEDIT_DELETE },
         { '\005' /* C-e */,         0, MODEKEYEDIT_ENDOFLINE, 1 },          { '\005' /* C-e */,         0, MODEKEYEDIT_ENDOFLINE },
         { '\006' /* C-f */,         0, MODEKEYEDIT_CURSORRIGHT, 1 },          { '\006' /* C-f */,         0, MODEKEYEDIT_CURSORRIGHT },
         { '\010' /* C-H */,         0, MODEKEYEDIT_BACKSPACE, 1 },          { '\010' /* C-H */,         0, MODEKEYEDIT_BACKSPACE },
         { '\011' /* Tab */,         0, MODEKEYEDIT_COMPLETE, 1 },          { '\011' /* Tab */,         0, MODEKEYEDIT_COMPLETE },
         { '\013' /* C-k */,         0, MODEKEYEDIT_DELETETOENDOFLINE, 1 },          { '\013' /* C-k */,         0, MODEKEYEDIT_DELETETOENDOFLINE },
         { '\016' /* C-n */,         0, MODEKEYEDIT_HISTORYDOWN, 1 },          { '\016' /* C-n */,         0, MODEKEYEDIT_HISTORYDOWN },
         { '\020' /* C-p */,         0, MODEKEYEDIT_HISTORYUP, 1 },          { '\020' /* C-p */,         0, MODEKEYEDIT_HISTORYUP },
         { '\024' /* C-t */,         0, MODEKEYEDIT_TRANSPOSECHARS, 1 },          { '\024' /* C-t */,         0, MODEKEYEDIT_TRANSPOSECHARS },
         { '\025' /* C-u */,         0, MODEKEYEDIT_DELETELINE, 1 },          { '\025' /* C-u */,         0, MODEKEYEDIT_DELETELINE },
         { '\027' /* C-w */,         0, MODEKEYEDIT_DELETEWORD, 1 },          { '\027' /* C-w */,         0, MODEKEYEDIT_DELETEWORD },
         { '\031' /* C-y */,         0, MODEKEYEDIT_PASTE, 1 },          { '\031' /* C-y */,         0, MODEKEYEDIT_PASTE },
         { '\033' /* Escape */,      0, MODEKEYEDIT_CANCEL, 1 },          { '\033' /* Escape */,      0, MODEKEYEDIT_CANCEL },
         { '\n',                     0, MODEKEYEDIT_ENTER, 1 },          { '\n',                     0, MODEKEYEDIT_ENTER },
         { '\r',                     0, MODEKEYEDIT_ENTER, 1 },          { '\r',                     0, MODEKEYEDIT_ENTER },
         { 'b' | KEYC_ESCAPE,        0, MODEKEYEDIT_PREVIOUSWORD, 1 },          { 'b' | KEYC_ESCAPE,        0, MODEKEYEDIT_PREVIOUSWORD },
         { 'f' | KEYC_ESCAPE,        0, MODEKEYEDIT_NEXTWORDEND, 1 },          { 'f' | KEYC_ESCAPE,        0, MODEKEYEDIT_NEXTWORDEND },
         { 'm' | KEYC_ESCAPE,        0, MODEKEYEDIT_STARTOFLINE, 1 },          { 'm' | KEYC_ESCAPE,        0, MODEKEYEDIT_STARTOFLINE },
         { KEYC_BSPACE,              0, MODEKEYEDIT_BACKSPACE, 1 },          { KEYC_BSPACE,              0, MODEKEYEDIT_BACKSPACE },
         { KEYC_DC,                  0, MODEKEYEDIT_DELETE, 1 },          { KEYC_DC,                  0, MODEKEYEDIT_DELETE },
         { KEYC_DOWN,                0, MODEKEYEDIT_HISTORYDOWN, 1 },          { KEYC_DOWN,                0, MODEKEYEDIT_HISTORYDOWN },
         { KEYC_LEFT,                0, MODEKEYEDIT_CURSORLEFT, 1 },          { KEYC_LEFT,                0, MODEKEYEDIT_CURSORLEFT },
         { KEYC_RIGHT,               0, MODEKEYEDIT_CURSORRIGHT, 1 },          { KEYC_RIGHT,               0, MODEKEYEDIT_CURSORRIGHT },
         { KEYC_UP,                  0, MODEKEYEDIT_HISTORYUP, 1 },          { KEYC_UP,                  0, MODEKEYEDIT_HISTORYUP },
         { KEYC_HOME,                0, MODEKEYEDIT_STARTOFLINE, 1 },          { KEYC_HOME,                0, MODEKEYEDIT_STARTOFLINE },
         { KEYC_END,                 0, MODEKEYEDIT_ENDOFLINE, 1 },          { KEYC_END,                 0, MODEKEYEDIT_ENDOFLINE },
   
         { 0,                       -1, 0, 1 }          { 0,                       -1, 0 }
 };  };
 struct mode_key_tree mode_key_tree_emacs_edit;  struct mode_key_tree mode_key_tree_emacs_edit;
   
 /* emacs choice selection keys. */  /* emacs choice selection keys. */
 static const struct mode_key_entry mode_key_emacs_choice[] = {  static const struct mode_key_entry mode_key_emacs_choice[] = {
         { '0' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '0' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '1' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '1' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '2' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '2' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '3' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '3' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '4' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '4' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '5' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '5' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '6' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '6' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '7' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '7' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '8' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '8' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '9' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 },          { '9' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTNUMBERPREFIX },
         { '\003' /* C-c */,         0, MODEKEYCHOICE_CANCEL, 1 },          { '\003' /* C-c */,         0, MODEKEYCHOICE_CANCEL },
         { '\016' /* C-n */,         0, MODEKEYCHOICE_DOWN, 1 },          { '\016' /* C-n */,         0, MODEKEYCHOICE_DOWN },
         { '\020' /* C-p */,         0, MODEKEYCHOICE_UP, 1 },          { '\020' /* C-p */,         0, MODEKEYCHOICE_UP },
         { '\026' /* C-v */,         0, MODEKEYCHOICE_PAGEDOWN, 1 },          { '\026' /* C-v */,         0, MODEKEYCHOICE_PAGEDOWN },
         { '\033' /* Escape */,      0, MODEKEYCHOICE_CANCEL, 1 },          { '\033' /* Escape */,      0, MODEKEYCHOICE_CANCEL },
         { '\n',                     0, MODEKEYCHOICE_CHOOSE, 1 },          { '\n',                     0, MODEKEYCHOICE_CHOOSE },
         { '\r',                     0, MODEKEYCHOICE_CHOOSE, 1 },          { '\r',                     0, MODEKEYCHOICE_CHOOSE },
         { 'q',                      0, MODEKEYCHOICE_CANCEL, 1 },          { 'q',                      0, MODEKEYCHOICE_CANCEL },
         { 'v' | KEYC_ESCAPE,        0, MODEKEYCHOICE_PAGEUP, 1 },          { 'v' | KEYC_ESCAPE,        0, MODEKEYCHOICE_PAGEUP },
         { KEYC_HOME,                0, MODEKEYCHOICE_STARTOFLIST, 1 },          { KEYC_HOME,                0, MODEKEYCHOICE_STARTOFLIST },
         { '<' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTOFLIST, 1 },          { '<' | KEYC_ESCAPE,        0, MODEKEYCHOICE_STARTOFLIST },
         { 'R' | KEYC_ESCAPE,        0, MODEKEYCHOICE_TOPLINE, 1 },          { 'R' | KEYC_ESCAPE,        0, MODEKEYCHOICE_TOPLINE },
         { '>' | KEYC_ESCAPE,        0, MODEKEYCHOICE_ENDOFLIST, 1 },          { '>' | KEYC_ESCAPE,        0, MODEKEYCHOICE_ENDOFLIST },
         { KEYC_END,                 0, MODEKEYCHOICE_ENDOFLIST, 1 },          { KEYC_END,                 0, MODEKEYCHOICE_ENDOFLIST },
         { KEYC_BSPACE,              0, MODEKEYCHOICE_BACKSPACE, 1 },          { KEYC_BSPACE,              0, MODEKEYCHOICE_BACKSPACE },
         { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCHOICE_SCROLLDOWN, 1 },          { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCHOICE_SCROLLDOWN },
         { KEYC_DOWN,                0, MODEKEYCHOICE_DOWN, 1 },          { KEYC_DOWN,                0, MODEKEYCHOICE_DOWN },
         { KEYC_NPAGE,               0, MODEKEYCHOICE_PAGEDOWN, 1 },          { KEYC_NPAGE,               0, MODEKEYCHOICE_PAGEDOWN },
         { KEYC_PPAGE,               0, MODEKEYCHOICE_PAGEUP, 1 },          { KEYC_PPAGE,               0, MODEKEYCHOICE_PAGEUP },
         { KEYC_UP | KEYC_CTRL,      0, MODEKEYCHOICE_SCROLLUP, 1 },          { KEYC_UP | KEYC_CTRL,      0, MODEKEYCHOICE_SCROLLUP },
         { KEYC_UP,                  0, MODEKEYCHOICE_UP, 1 },          { KEYC_UP,                  0, MODEKEYCHOICE_UP },
         { ' ',                      0, MODEKEYCHOICE_TREE_TOGGLE, 1 },          { ' ',                      0, MODEKEYCHOICE_TREE_TOGGLE },
         { KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE, 1 },          { KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE },
         { KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND, 1 },          { KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND },
         { KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL, 1 },          { KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL },
         { KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL, 1 },          { KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL },
         { KEYC_MOUSEDOWN1_PANE,     0, MODEKEYCHOICE_CHOOSE, 1 },          { KEYC_MOUSEDOWN1_PANE,     0, MODEKEYCHOICE_CHOOSE },
         { KEYC_MOUSEDOWN3_PANE,     0, MODEKEYCHOICE_TREE_TOGGLE, 1 },          { KEYC_MOUSEDOWN3_PANE,     0, MODEKEYCHOICE_TREE_TOGGLE },
         { KEYC_WHEELUP_PANE,        0, MODEKEYCHOICE_UP, 5 },          { KEYC_WHEELUP_PANE,        0, MODEKEYCHOICE_UP },
         { KEYC_WHEELDOWN_PANE,      0, MODEKEYCHOICE_DOWN, 5 },          { KEYC_WHEELDOWN_PANE,      0, MODEKEYCHOICE_DOWN },
   
         { 0,                       -1, 0, 1 }          { 0,                       -1, 0 }
 };  };
 struct mode_key_tree mode_key_tree_emacs_choice;  struct mode_key_tree mode_key_tree_emacs_choice;
   
 /* emacs copy mode keys. */  
 static const struct mode_key_entry mode_key_emacs_copy[] = {  
         { ' ',                      0, MODEKEYCOPY_NEXTPAGE, 1 },  
         { ',',                      0, MODEKEYCOPY_JUMPREVERSE, 1 },  
         { ';',                      0, MODEKEYCOPY_JUMPAGAIN, 1 },  
         { '1' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '2' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '3' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '4' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '5' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '6' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '7' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '8' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '9' | KEYC_ESCAPE,        0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 },  
         { '<' | KEYC_ESCAPE,        0, MODEKEYCOPY_HISTORYTOP, 1 },  
         { '>' | KEYC_ESCAPE,        0, MODEKEYCOPY_HISTORYBOTTOM, 1 },  
         { 'F',                      0, MODEKEYCOPY_JUMPBACK, 1 },  
         { 'N',                      0, MODEKEYCOPY_SEARCHREVERSE, 1 },  
         { 'R' | KEYC_ESCAPE,        0, MODEKEYCOPY_TOPLINE, 1 },  
         { 'R',                      0, MODEKEYCOPY_RECTANGLETOGGLE, 1 },  
         { 'T',                      0, MODEKEYCOPY_JUMPTOBACK, 1 },  
         { '\000' /* C-Space */,     0, MODEKEYCOPY_STARTSELECTION, 1 },  
         { '\001' /* C-a */,         0, MODEKEYCOPY_STARTOFLINE, 1 },  
         { '\002' /* C-b */,         0, MODEKEYCOPY_LEFT, 1 },  
         { '\003' /* C-c */,         0, MODEKEYCOPY_CANCEL, 1 },  
         { '\005' /* C-e */,         0, MODEKEYCOPY_ENDOFLINE, 1 },  
         { '\006' /* C-f */,         0, MODEKEYCOPY_RIGHT, 1 },  
         { '\007' /* C-g */,         0, MODEKEYCOPY_CLEARSELECTION, 1 },  
         { '\013' /* C-k */,         0, MODEKEYCOPY_COPYENDOFLINE, 1 },  
         { '\016' /* C-n */,         0, MODEKEYCOPY_DOWN, 1 },  
         { '\020' /* C-p */,         0, MODEKEYCOPY_UP, 1 },  
         { '\022' /* C-r */,         0, MODEKEYCOPY_SEARCHUP, 1 },  
         { '\023' /* C-s */,         0, MODEKEYCOPY_SEARCHDOWN, 1 },  
         { '\026' /* C-v */,         0, MODEKEYCOPY_NEXTPAGE, 1 },  
         { '\027' /* C-w */,         0, MODEKEYCOPY_COPYSELECTION, 1 },  
         { '\033' /* Escape */,      0, MODEKEYCOPY_CANCEL, 1 },  
         { 'b' | KEYC_ESCAPE,        0, MODEKEYCOPY_PREVIOUSWORD, 1 },  
         { 'f',                      0, MODEKEYCOPY_JUMP, 1 },  
         { 'f' | KEYC_ESCAPE,        0, MODEKEYCOPY_NEXTWORDEND, 1 },  
         { 'g',                      0, MODEKEYCOPY_GOTOLINE, 1 },  
         { 'm' | KEYC_ESCAPE,        0, MODEKEYCOPY_BACKTOINDENTATION, 1 },  
         { 'n',                      0, MODEKEYCOPY_SEARCHAGAIN, 1 },  
         { 'q',                      0, MODEKEYCOPY_CANCEL, 1 },  
         { 'r' | KEYC_ESCAPE,        0, MODEKEYCOPY_MIDDLELINE, 1 },  
         { 't',                      0, MODEKEYCOPY_JUMPTO, 1 },  
         { 'v' | KEYC_ESCAPE,        0, MODEKEYCOPY_PREVIOUSPAGE, 1 },  
         { 'w' | KEYC_ESCAPE,        0, MODEKEYCOPY_COPYSELECTION, 1 },  
         { '{' | KEYC_ESCAPE,        0, MODEKEYCOPY_PREVIOUSPARAGRAPH, 1 },  
         { '}' | KEYC_ESCAPE,        0, MODEKEYCOPY_NEXTPARAGRAPH, 1 },  
         { KEYC_DOWN | KEYC_CTRL,    0, MODEKEYCOPY_SCROLLDOWN, 1 },  
         { KEYC_DOWN | KEYC_ESCAPE,  0, MODEKEYCOPY_HALFPAGEDOWN, 1 },  
         { KEYC_DOWN,                0, MODEKEYCOPY_DOWN, 1 },  
         { KEYC_LEFT,                0, MODEKEYCOPY_LEFT, 1 },  
         { KEYC_NPAGE,               0, MODEKEYCOPY_NEXTPAGE, 1 },  
         { KEYC_PPAGE,               0, MODEKEYCOPY_PREVIOUSPAGE, 1 },  
         { KEYC_RIGHT,               0, MODEKEYCOPY_RIGHT, 1 },  
         { KEYC_UP | KEYC_CTRL,      0, MODEKEYCOPY_SCROLLUP, 1 },  
         { KEYC_UP | KEYC_ESCAPE,    0, MODEKEYCOPY_HALFPAGEUP, 1 },  
         { KEYC_UP,                  0, MODEKEYCOPY_UP, 1 },  
         { KEYC_WHEELUP_PANE,        0, MODEKEYCOPY_SCROLLUP, 5 },  
         { KEYC_WHEELDOWN_PANE,      0, MODEKEYCOPY_SCROLLDOWN, 5 },  
         { KEYC_MOUSEDRAG1_PANE,     0, MODEKEYCOPY_STARTSELECTION, 1 },  
         { KEYC_MOUSEDRAGEND1_PANE,  0, MODEKEYCOPY_COPYSELECTION, 1 },  
   
         { 0,                       -1, 0, 1 }  
 };  
 struct mode_key_tree mode_key_tree_emacs_copy;  
   
 /* Table mapping key table names to default settings and trees. */  /* Table mapping key table names to default settings and trees. */
 const struct mode_key_table mode_key_tables[] = {  const struct mode_key_table mode_key_tables[] = {
         { "vi-edit", mode_key_cmdstr_edit,          { "vi-edit", mode_key_cmdstr_edit,
           &mode_key_tree_vi_edit, mode_key_vi_edit },            &mode_key_tree_vi_edit, mode_key_vi_edit },
         { "vi-choice", mode_key_cmdstr_choice,          { "vi-choice", mode_key_cmdstr_choice,
           &mode_key_tree_vi_choice, mode_key_vi_choice },            &mode_key_tree_vi_choice, mode_key_vi_choice },
         { "vi-copy", mode_key_cmdstr_copy,  
           &mode_key_tree_vi_copy, mode_key_vi_copy },  
         { "emacs-edit", mode_key_cmdstr_edit,          { "emacs-edit", mode_key_cmdstr_edit,
           &mode_key_tree_emacs_edit, mode_key_emacs_edit },            &mode_key_tree_emacs_edit, mode_key_emacs_edit },
         { "emacs-choice", mode_key_cmdstr_choice,          { "emacs-choice", mode_key_cmdstr_choice,
           &mode_key_tree_emacs_choice, mode_key_emacs_choice },            &mode_key_tree_emacs_choice, mode_key_emacs_choice },
         { "emacs-copy", mode_key_cmdstr_copy,  
           &mode_key_tree_emacs_copy, mode_key_emacs_copy },  
   
         { NULL, NULL, NULL, NULL }          { NULL, NULL, NULL, NULL }
 };  };
Line 587 
Line 377 
                 for (ment = mtab->table; ment->mode != -1; ment++) {                  for (ment = mtab->table; ment->mode != -1; ment++) {
                         mbind = xmalloc(sizeof *mbind);                          mbind = xmalloc(sizeof *mbind);
                         mbind->key = ment->key;                          mbind->key = ment->key;
                         mbind->repeat = ment->repeat;  
                         mbind->mode = ment->mode;                          mbind->mode = ment->mode;
                         mbind->cmd = ment->cmd;                          mbind->cmd = ment->cmd;
                         mbind->arg = NULL;  
                         RB_INSERT(mode_key_tree, mtab->tree, mbind);                          RB_INSERT(mode_key_tree, mtab->tree, mbind);
                 }                  }
         }          }
Line 604 
Line 392 
 }  }
   
 enum mode_key_cmd  enum mode_key_cmd
 mode_key_lookup(struct mode_key_data *mdata, key_code key, const char **arg,  mode_key_lookup(struct mode_key_data *mdata, key_code key)
     u_int *repeat)  
 {  {
         struct mode_key_binding *mbind, mtmp;          struct mode_key_binding *mbind, mtmp;
   
Line 616 
Line 403 
                         return (MODEKEY_NONE);                          return (MODEKEY_NONE);
                 return (MODEKEY_OTHER);                  return (MODEKEY_OTHER);
         }          }
         if (repeat != NULL)  
                 *repeat = mbind->repeat;  
   
         switch (mbind->cmd) {          switch (mbind->cmd) {
         case MODEKEYEDIT_SWITCHMODE:          case MODEKEYEDIT_SWITCHMODE:
Line 630 
Line 415 
                 mdata->mode = 1 - mdata->mode;                  mdata->mode = 1 - mdata->mode;
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         default:          default:
                 if (arg != NULL)  
                         *arg = mbind->arg;  
                 return (mbind->cmd);                  return (mbind->cmd);
         }          }
 }  }

Legend:
Removed from v.1.70  
changed lines
  Added in v.1.71