diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-07-27 19:29:35 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-07-27 19:29:35 +0000 |
commit | d95274c5f294ddf1341f66019fee47a35b4f2561 (patch) | |
tree | b0e4b6d58f3c64091a740ab4de2e186549860fd5 /tmux.h | |
parent | 13e29dd7b5dfcefdfda6a1dd3c3f78c9cd7f1cc9 (diff) | |
download | rtmux-d95274c5f294ddf1341f66019fee47a35b4f2561.tar.gz rtmux-d95274c5f294ddf1341f66019fee47a35b4f2561.tar.bz2 rtmux-d95274c5f294ddf1341f66019fee47a35b4f2561.zip |
Change mode key bindings from big switches into a set of tables. Rather than
lumping them all together, split editing keys from those used in choice/more
mode and those for copy/scroll mode.
Tidier and clearer, and the first step towards customisable mode keys.
Diffstat (limited to 'tmux.h')
-rw-r--r-- | tmux.h | 100 |
1 files changed, 69 insertions, 31 deletions
@@ -358,40 +358,71 @@ struct msg_unlock_data { /* Editing keys. */ enum mode_key_cmd { - MODEKEYCMD_BACKSPACE = 0x1000, - MODEKEYCMD_BACKTOINDENTATION, - MODEKEYCMD_CHOOSE, - MODEKEYCMD_CLEARSELECTION, - MODEKEYCMD_COMPLETE, - MODEKEYCMD_COPYSELECTION, - MODEKEYCMD_DELETE, - MODEKEYCMD_DELETETOENDOFLINE, - MODEKEYCMD_DOWN, - MODEKEYCMD_ENDOFLINE, - MODEKEYCMD_LEFT, - MODEKEYCMD_NEXTPAGE, - MODEKEYCMD_NEXTWORD, - MODEKEYCMD_NONE, - MODEKEYCMD_OTHERKEY, - MODEKEYCMD_PASTE, - MODEKEYCMD_PREVIOUSPAGE, - MODEKEYCMD_PREVIOUSWORD, - MODEKEYCMD_QUIT, - MODEKEYCMD_RIGHT, - MODEKEYCMD_STARTOFLINE, - MODEKEYCMD_STARTSELECTION, - MODEKEYCMD_UP, + MODEKEY_NONE, + MODEKEY_OTHER, + + /* Editing keys. */ + MODEKEYEDIT_BACKSPACE, + MODEKEYEDIT_CANCEL, + MODEKEYEDIT_COMPLETE, + MODEKEYEDIT_CURSORLEFT, + MODEKEYEDIT_CURSORRIGHT, + MODEKEYEDIT_DELETE, + MODEKEYEDIT_DELETETOENDOFLINE, + MODEKEYEDIT_ENDOFLINE, + MODEKEYEDIT_ENTER, + MODEKEYEDIT_HISTORYDOWN, + MODEKEYEDIT_HISTORYUP, + MODEKEYEDIT_PASTE, + MODEKEYEDIT_STARTOFLINE, + MODEKEYEDIT_SWITCHMODE, + MODEKEYEDIT_SWITCHMODEAPPEND, + + /* Menu (choice) keys. */ + MODEKEYCHOICE_CANCEL, + MODEKEYCHOICE_CHOOSE, + MODEKEYCHOICE_DOWN, + MODEKEYCHOICE_PAGEDOWN, + MODEKEYCHOICE_PAGEUP, + MODEKEYCHOICE_UP, + + /* Copy keys. */ + MODEKEYCOPY_CANCEL, + MODEKEYCOPY_BACKTOINDENTATION, + MODEKEYCOPY_CLEARSELECTION, + MODEKEYCOPY_COPYSELECTION, + MODEKEYCOPY_DOWN, + MODEKEYCOPY_ENDOFLINE, + MODEKEYCOPY_LEFT, + MODEKEYCOPY_NEXTPAGE, + MODEKEYCOPY_NEXTWORD, + MODEKEYCOPY_NONE, + MODEKEYCOPY_PREVIOUSPAGE, + MODEKEYCOPY_PREVIOUSWORD, + MODEKEYCOPY_QUIT, + MODEKEYCOPY_RIGHT, + MODEKEYCOPY_STARTOFLINE, + MODEKEYCOPY_STARTSELECTION, + MODEKEYCOPY_UP, }; -struct mode_key_data { - int type; +struct mode_key_entry { + int key; - int flags; -#define MODEKEY_EDITMODE 0x1 -#define MODEKEY_CANEDIT 0x2 -#define MODEKEY_CHOOSEMODE 0x4 -}; + /* + * Editing mode for vi: 0 is edit mode, keys not in the table are + * returned as MODEKEY_OTHER; 1 is command mode, keys not in the table + * are returned as MODEKEY_NONE. This is also matched on, allowing some + * keys to be bound in edit mode. + */ + int mode; + enum mode_key_cmd cmd; +}; +struct mode_key_data { + const struct mode_key_entry *table; + int mode; +}; #define MODEKEY_EMACS 0 #define MODEKEY_VI 1 @@ -1032,7 +1063,14 @@ void sighandler(int); int load_cfg(const char *, char **x); /* mode-key.c */ -void mode_key_init(struct mode_key_data *, int, int); +extern const struct mode_key_entry mode_key_vi_edit[]; +extern const struct mode_key_entry mode_key_vi_choice[]; +extern const struct mode_key_entry mode_key_vi_copy[]; +extern const struct mode_key_entry mode_key_emacs_edit[]; +extern const struct mode_key_entry mode_key_emacs_choice[]; +extern const struct mode_key_entry mode_key_emacs_copy[]; +void mode_key_init( + struct mode_key_data *, const struct mode_key_entry *); enum mode_key_cmd mode_key_lookup(struct mode_key_data *, int); /* options.c */ |