diff --git a/format.c b/format.c index b64af61e..d6bc9ceb 100644 --- a/format.c +++ b/format.c @@ -1371,6 +1371,9 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) } format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); + if (wp->mode != NULL) + format_add(ft, "pane_mode", "%s", wp->mode->name); + format_add(ft, "pane_synchronized", "%d", !!options_get_number(wp->window->options, "synchronize-panes")); format_add(ft, "pane_search_string", "%s", diff --git a/tmux.1 b/tmux.1 index 39e8d0df..96320f56 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3561,6 +3561,7 @@ The following variables are available, where appropriate: .It Li "pane_input_off" Ta "" Ta "If input to pane is disabled" .It Li "pane_index" Ta "#P" Ta "Index of pane" .It Li "pane_left" Ta "" Ta "Left of pane" +.It Li "pane_mode" Ta "" Ta "Name of pane mode, if any." .It Li "pane_pid" Ta "" Ta "PID of first process in pane" .It Li "pane_right" Ta "" Ta "Right of pane" .It Li "pane_search_string" Ta "" Ta "Last search string in copy mode" diff --git a/tmux.h b/tmux.h index 378c937a..1b1343b7 100644 --- a/tmux.h +++ b/tmux.h @@ -689,15 +689,18 @@ struct screen_write_ctx { * right function to handle input and output. */ struct window_mode { - struct screen *(*init)(struct window_pane *); - void (*free)(struct window_pane *); - 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 *name; - const char *(*key_table)(struct window_pane *); - void (*command)(struct window_pane *, struct client *, - struct session *, struct args *, struct mouse_event *); + struct screen *(*init)(struct window_pane *); + void (*free)(struct window_pane *); + 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 diff --git a/window-choose.c b/window-choose.c index 0e2f1bf9..2f3a1631 100644 --- a/window-choose.c +++ b/window-choose.c @@ -57,6 +57,8 @@ enum window_choose_input_type { }; const struct window_mode window_choose_mode = { + .name = "choose-mode", + .init = window_choose_init, .free = window_choose_free, .resize = window_choose_resize, diff --git a/window-clock.c b/window-clock.c index 94f014fc..d23ac136 100644 --- a/window-clock.c +++ b/window-clock.c @@ -34,6 +34,8 @@ static void window_clock_timer_callback(int, short, void *); static void window_clock_draw_screen(struct window_pane *); const struct window_mode window_clock_mode = { + .name = "clock-mode", + .init = window_clock_init, .free = window_clock_free, .resize = window_clock_resize, diff --git a/window-copy.c b/window-copy.c index 7def63db..8424bfa6 100644 --- a/window-copy.c +++ b/window-copy.c @@ -105,6 +105,8 @@ static void window_copy_move_mouse(struct mouse_event *); static void window_copy_drag_update(struct client *, struct mouse_event *); const struct window_mode window_copy_mode = { + .name = "copy-mode", + .init = window_copy_init, .free = window_copy_free, .resize = window_copy_resize,