Add a separate mode struct for the active window mode if any.

This commit is contained in:
nicm
2019-03-07 20:24:21 +00:00
parent 3c24bc5617
commit f98c66ece8
12 changed files with 638 additions and 558 deletions

32
tmux.h
View File

@ -693,25 +693,37 @@ struct screen_write_ctx {
* Window mode. Windows can be in several modes and this is used to call the
* right function to handle input and output.
*/
struct window_mode_entry;
struct window_mode {
const char *name;
struct screen *(*init)(struct window_pane *, struct cmd_find_state *,
struct args *);
void (*free)(struct window_pane *);
void (*resize)(struct window_pane *, u_int, u_int);
void (*key)(struct window_pane *, struct client *,
struct screen *(*init)(struct window_mode_entry *,
struct cmd_find_state *, struct args *);
void (*free)(struct window_mode_entry *);
void (*resize)(struct window_mode_entry *, u_int, u_int);
void (*key)(struct window_mode_entry *, struct client *,
struct session *, struct winlink *, key_code,
struct mouse_event *);
const char *(*key_table)(struct window_pane *);
void (*command)(struct window_pane *, struct client *,
const char *(*key_table)(struct window_mode_entry *);
void (*command)(struct window_mode_entry *, struct client *,
struct session *, struct winlink *, struct args *,
struct mouse_event *);
void (*formats)(struct window_pane *, struct format_tree *);
void (*formats)(struct window_mode_entry *,
struct format_tree *);
};
#define WINDOW_MODE_TIMEOUT 180
/* Active window mode. */
struct window_mode_entry {
struct window_pane *wp;
const struct window_mode *mode;
void *data;
u_int prefix;
};
/* Child window structure. */
struct window_pane {
u_int id;
@ -780,11 +792,9 @@ struct window_pane {
struct grid *saved_grid;
struct grid_cell saved_cell;
const struct window_mode *mode;
void *modedata;
struct window_mode_entry *mode;
struct event modetimer;
time_t modelast;
u_int modeprefix;
char *searchstr;
TAILQ_ENTRY(window_pane) entry;