diff options
author | nicm <nicm> | 2017-02-03 21:01:02 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-02-03 21:01:02 +0000 |
commit | 5e6a8177e55a8e30e0cd67c7ee3039aa22ff1c0e (patch) | |
tree | 13019779a1e985f4857616f08d54bffb8fd20008 | |
parent | 75adf8368a649b62bfa4a20e8c21340cf53c2a6a (diff) | |
download | rtmux-5e6a8177e55a8e30e0cd67c7ee3039aa22ff1c0e.tar.gz rtmux-5e6a8177e55a8e30e0cd67c7ee3039aa22ff1c0e.tar.bz2 rtmux-5e6a8177e55a8e30e0cd67c7ee3039aa22ff1c0e.zip |
Cache status line position to reduce option lookups during output.
-rw-r--r-- | cmd-set-option.c | 2 | ||||
-rw-r--r-- | resize.c | 2 | ||||
-rw-r--r-- | session.c | 2 | ||||
-rw-r--r-- | status.c | 19 | ||||
-rw-r--r-- | tmux.h | 4 |
5 files changed, 23 insertions, 6 deletions
diff --git a/cmd-set-option.c b/cmd-set-option.c index c7cef42c..cc8b7570 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -248,6 +248,8 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) RB_FOREACH(w, windows, &windows) layout_fix_panes(w, w->sx, w->sy); } + RB_FOREACH (s, sessions, &sessions) + status_update_saved(s); /* * Update sizes and redraw. May not always be necessary but do it @@ -89,6 +89,8 @@ recalculate_sizes(void) s->sx = ssx; s->sy = ssy; + + status_update_saved(s); } RB_FOREACH(w, windows, &windows) { @@ -131,6 +131,8 @@ session_create(const char *name, int argc, char **argv, const char *path, s->options = options_create(global_s_options); s->hooks = hooks_create(global_hooks); + status_update_saved(s); + s->tio = NULL; if (tio != NULL) { s->tio = xmalloc(sizeof *s->tio); @@ -192,17 +192,26 @@ status_timer_start_all(void) status_timer_start(c); } +/* Update status cache. */ +void +status_update_saved(struct session *s) +{ + if (!options_get_number(s->options, "status")) + s->statusat = -1; + else if (options_get_number(s->options, "status-position") == 0) + s->statusat = 0; + else + s->statusat = 1; +} + /* Get screen line of status line. -1 means off. */ int status_at_line(struct client *c) { struct session *s = c->session; - if (!options_get_number(s->options, "status")) - return (-1); - - if (options_get_number(s->options, "status-position") == 0) - return (0); + if (s->statusat != 1) + return (s->statusat); return (c->tty.sy - 1); } @@ -545,7 +545,6 @@ struct grid_cell { int fg; int bg; struct utf8_data data; - }; struct grid_cell_entry { u_char flags; @@ -936,6 +935,8 @@ struct session { struct winlink_stack lastw; struct winlinks windows; + int statusat; + struct hooks *hooks; struct options *options; @@ -1864,6 +1865,7 @@ void server_unzoom_window(struct window *); /* status.c */ void status_timer_start(struct client *); void status_timer_start_all(void); +void status_update_saved(struct session *s); int status_at_line(struct client *); struct window *status_get_window_at(struct client *, u_int); int status_redraw(struct client *); |