From 0ccfb61bb0e0beb5fe76b64e30637de7d9f696c7 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 May 2017 12:20:55 +0000 Subject: In order that people can use formats like #D in #() in the status line and not have to wait for an update when they change pane, we allow commands to run more than once a second if the expanded form changes. Unfortunately this can mean them being run far too often (pretty much continually) when multiple clients exist, because some formats (including #D) will always differ between clients. To avoid this, give each client its own tree of jobs which means that the same command will be different instances for each client - similar to how we have the tag to separate commands for different panes. GitHub issue 889; test case reported by Paul Johnson. --- tmux.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'tmux.h') diff --git a/tmux.h b/tmux.h index 33f7f4e3..276636e8 100644 --- a/tmux.h +++ b/tmux.h @@ -43,6 +43,7 @@ struct client; struct cmdq_item; struct cmdq_list; struct environ; +struct format_job_tree; struct input_ctx; struct mode_key_cmdstr; struct mouse_event; @@ -1290,6 +1291,7 @@ struct client { struct timeval activity_time; struct environ *environ; + struct format_job_tree *jobs; char *title; const char *cwd; @@ -1501,7 +1503,8 @@ char *paste_make_sample(struct paste_buffer *); #define FORMAT_PANE 0x80000000U #define FORMAT_WINDOW 0x40000000U struct format_tree; -struct format_tree *format_create(struct cmdq_item *, int, int); +struct format_tree *format_create(struct client *, struct cmdq_item *, int, + int); void format_free(struct format_tree *); void printflike(3, 4) format_add(struct format_tree *, const char *, const char *, ...); @@ -1517,6 +1520,7 @@ void format_defaults_pane(struct format_tree *, struct window_pane *); void format_defaults_paste_buffer(struct format_tree *, struct paste_buffer *); +void format_lost_client(struct client *); /* hooks.c */ struct hook; -- cgit