aboutsummaryrefslogtreecommitdiff
path: root/tmux.h
diff options
context:
space:
mode:
authornicm <nicm>2016-10-11 07:23:34 +0000
committernicm <nicm>2016-10-11 07:23:34 +0000
commit76d6d3641f271be1756e41494960d96714e7ee58 (patch)
treeff2b551953111d90ed5f32919fe2f3b329357bc1 /tmux.h
parent8b804fb5894b6717de36c5c9c96f7fd29b14a864 (diff)
downloadrtmux-76d6d3641f271be1756e41494960d96714e7ee58.tar.gz
rtmux-76d6d3641f271be1756e41494960d96714e7ee58.tar.bz2
rtmux-76d6d3641f271be1756e41494960d96714e7ee58.zip
Fundamental change to how copy mode key bindings work:
The vi-copy and emacs-copy mode key tables are gone, and instead copy mode commands are bound in one of two normal key tables ("copy-mode" or "copy-mode-vi"). Keys are bound to "send-keys -X copy-mode-command". So: bind -temacs-copy C-Up scroll-up bind -temacs-copy -R5 WheelUpPane scroll-up Becomes: bind -Tcopy-mode C-Up send -X scroll-up bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up This allows the full command parser and command set to be used - for example, we can use the normal command prompt for searching, jumping, and so on instead of a custom one: bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward '%%'" command-prompt also gets a -1 option to only require on key press, which is needed for jumping. The plan is to get rid of mode keys entirely, so more to come eventually.
Diffstat (limited to 'tmux.h')
-rw-r--r--tmux.h64
1 files changed, 8 insertions, 56 deletions
diff --git a/tmux.h b/tmux.h
index 18ef8082..2a020c33 100644
--- a/tmux.h
+++ b/tmux.h
@@ -38,6 +38,7 @@
extern char **environ;
+struct args;
struct client;
struct environ;
struct input_ctx;
@@ -511,58 +512,6 @@ enum mode_key_cmd {
MODEKEYCHOICE_TREE_EXPAND_ALL,
MODEKEYCHOICE_TREE_TOGGLE,
MODEKEYCHOICE_UP,
-
- /* Copy keys. */
- MODEKEYCOPY_APPENDSELECTION,
- MODEKEYCOPY_BACKTOINDENTATION,
- MODEKEYCOPY_BOTTOMLINE,
- MODEKEYCOPY_CANCEL,
- MODEKEYCOPY_CLEARSELECTION,
- MODEKEYCOPY_COPYPIPE,
- MODEKEYCOPY_COPYLINE,
- MODEKEYCOPY_COPYENDOFLINE,
- MODEKEYCOPY_COPYSELECTION,
- MODEKEYCOPY_DOWN,
- MODEKEYCOPY_ENDOFLINE,
- MODEKEYCOPY_GOTOLINE,
- MODEKEYCOPY_HALFPAGEDOWN,
- MODEKEYCOPY_HALFPAGEUP,
- MODEKEYCOPY_HISTORYBOTTOM,
- MODEKEYCOPY_HISTORYTOP,
- MODEKEYCOPY_JUMP,
- MODEKEYCOPY_JUMPAGAIN,
- MODEKEYCOPY_JUMPREVERSE,
- MODEKEYCOPY_JUMPBACK,
- MODEKEYCOPY_JUMPTO,
- MODEKEYCOPY_JUMPTOBACK,
- MODEKEYCOPY_LEFT,
- MODEKEYCOPY_MIDDLELINE,
- MODEKEYCOPY_NEXTPAGE,
- MODEKEYCOPY_NEXTPARAGRAPH,
- MODEKEYCOPY_NEXTSPACE,
- MODEKEYCOPY_NEXTSPACEEND,
- MODEKEYCOPY_NEXTWORD,
- MODEKEYCOPY_NEXTWORDEND,
- MODEKEYCOPY_OTHEREND,
- MODEKEYCOPY_PREVIOUSPAGE,
- MODEKEYCOPY_PREVIOUSPARAGRAPH,
- MODEKEYCOPY_PREVIOUSSPACE,
- MODEKEYCOPY_PREVIOUSWORD,
- MODEKEYCOPY_RECTANGLETOGGLE,
- MODEKEYCOPY_RIGHT,
- MODEKEYCOPY_SCROLLDOWN,
- MODEKEYCOPY_SCROLLUP,
- MODEKEYCOPY_SEARCHAGAIN,
- MODEKEYCOPY_SEARCHDOWN,
- MODEKEYCOPY_SEARCHREVERSE,
- MODEKEYCOPY_SEARCHUP,
- MODEKEYCOPY_SELECTLINE,
- MODEKEYCOPY_STARTNAMEDBUFFER,
- MODEKEYCOPY_STARTNUMBERPREFIX,
- MODEKEYCOPY_STARTOFLINE,
- MODEKEYCOPY_STARTSELECTION,
- MODEKEYCOPY_TOPLINE,
- MODEKEYCOPY_UP,
};
/* Data required while mode keys are in use. */
@@ -576,11 +525,9 @@ struct mode_key_data {
/* Binding between a key and a command. */
struct mode_key_binding {
key_code key;
- u_int repeat;
int mode;
enum mode_key_cmd cmd;
- const char *arg;
RB_ENTRY(mode_key_binding) entry;
};
@@ -832,6 +779,10 @@ struct window_mode {
void (*resize)(struct window_pane *, u_int, u_int);
void (*key)(struct window_pane *, struct client *, struct session *,
key_code, struct mouse_event *);
+
+ const char *(*key_table)(struct window_pane *);
+ void (*command)(struct window_pane *, struct client *,
+ struct session *, struct args *, struct mouse_event *);
};
#define WINDOW_MODE_TIMEOUT 180
@@ -923,6 +874,7 @@ struct window_pane {
void *modedata;
struct event modetimer;
time_t modelast;
+ u_int modeprefix;
TAILQ_ENTRY(window_pane) entry;
RB_ENTRY(window_pane) tree_entry;
@@ -1650,8 +1602,7 @@ enum mode_key_cmd mode_key_fromstring(const struct mode_key_cmdstr *,
const struct mode_key_table *mode_key_findtable(const char *);
void mode_key_init_trees(void);
void mode_key_init(struct mode_key_data *, struct mode_key_tree *);
-enum mode_key_cmd mode_key_lookup(struct mode_key_data *, key_code,
- const char **, u_int *);
+enum mode_key_cmd mode_key_lookup(struct mode_key_data *, key_code);
/* notify.c */
void notify_enable(void);
@@ -1920,6 +1871,7 @@ void server_add_accept(int);
/* server-client.c */
void server_client_set_key_table(struct client *, const char *);
const char *server_client_get_key_table(struct client *);
+int server_client_is_default_key_table(struct client *);
int server_client_check_nested(struct client *);
void server_client_handle_key(struct client *, key_code);
void server_client_create(int);