From a8b84b7cfa29f06346bd46a6ce1f64041f590f19 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 11 Sep 2017 10:08:28 +0100 Subject: [PATCH 001/836] 2.6-rc3. --- CHANGES | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 00518f2fcb..dc88ae807c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.5 TO 2.6-rc2, 10 September 2017 +CHANGES FROM 2.5 TO 2.6-rc3, 11 September 2017 * Add select-pane -T to set pane title. diff --git a/configure.ac b/configure.ac index 26f9837314..dcbe4a18c9 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.6-rc2) +AC_INIT(tmux, 2.6-rc3) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From d563aa7c7b45e6fbd87fb1072579583dbaba86bc Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Sep 2017 09:04:46 +0000 Subject: [PATCH 002/836] Initialize alerts timer event where it is used, avoids crash with new windows. --- alerts.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/alerts.c b/alerts.c index 27af3ee469..d90d0eb843 100644 --- a/alerts.c +++ b/alerts.c @@ -141,9 +141,11 @@ alerts_reset(struct window *w) { struct timeval tv; + if (!event_initialized(&w->alerts_timer)) + evtimer_set(&w->alerts_timer, alerts_timer, w); + w->flags &= ~WINDOW_SILENCE; - if (event_initialized(&w->alerts_timer)) - event_del(&w->alerts_timer); + event_del(&w->alerts_timer); timerclear(&tv); tv.tv_sec = options_get_number(w->options, "monitor-silence"); @@ -158,9 +160,6 @@ alerts_queue(struct window *w, int flags) { alerts_reset(w); - if (!event_initialized(&w->alerts_timer)) - evtimer_set(&w->alerts_timer, alerts_timer, w); - if ((w->flags & flags) != flags) { w->flags |= flags; log_debug("@%u alerts flags added %#x", w->id, flags); From 71ec616e4d8b8ccb37991913fbb1e7386dd98f6a Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Sep 2017 09:04:46 +0000 Subject: [PATCH 003/836] Initialize alerts timer event where it is used, avoids crash with new windows. --- alerts.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/alerts.c b/alerts.c index 32469c6340..d90d0eb843 100644 --- a/alerts.c +++ b/alerts.c @@ -141,6 +141,9 @@ alerts_reset(struct window *w) { struct timeval tv; + if (!event_initialized(&w->alerts_timer)) + evtimer_set(&w->alerts_timer, alerts_timer, w); + w->flags &= ~WINDOW_SILENCE; event_del(&w->alerts_timer); @@ -157,9 +160,6 @@ alerts_queue(struct window *w, int flags) { alerts_reset(w); - if (!event_initialized(&w->alerts_timer)) - evtimer_set(&w->alerts_timer, alerts_timer, w); - if ((w->flags & flags) != flags) { w->flags |= flags; log_debug("@%u alerts flags added %#x", w->id, flags); From 6a292f09ba575690c8af3ff8b5a94acbbe6acacf Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 5 Oct 2017 08:12:24 +0000 Subject: [PATCH 004/836] When writing batches of characters to the screen, we need to clear padding or later UTF-8 characters could be displayed incorrectly. GitHub issue 1090. --- screen-write.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/screen-write.c b/screen-write.c index 15f8d07f78..f090d6fa05 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1243,6 +1243,7 @@ screen_write_collect_end(struct screen_write_ctx *ctx) struct screen *s = ctx->s; struct screen_write_collect_item *ci = ctx->item; struct grid_cell gc; + u_int xx; if (ci->used == 0) return; @@ -1255,9 +1256,27 @@ screen_write_collect_end(struct screen_write_ctx *ctx) log_debug("%s: %u %s (at %u,%u)", __func__, ci->used, ci->data, s->cx, s->cy); + if (s->cx != 0) { + for (xx = s->cx; xx > 0; xx--) { + grid_view_get_cell(s->grid, xx, s->cy, &gc); + if (~gc.flags & GRID_FLAG_PADDING) + break; + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } + if (gc.data.width > 1) + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } + memcpy(&gc, &ci->gc, sizeof gc); grid_view_set_cells(s->grid, s->cx, s->cy, &gc, ci->data, ci->used); s->cx += ci->used; + + for (xx = s->cx; xx < screen_size_x(s); xx++) { + grid_view_get_cell(s->grid, xx, s->cy, &gc); + if (~gc.flags & GRID_FLAG_PADDING) + break; + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } } /* Write cell data, collecting if necessary. */ @@ -1388,6 +1407,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) * already ensured there is enough room. */ for (xx = s->cx + 1; xx < s->cx + width; xx++) { + log_debug("%s: new padding at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &screen_write_pad_cell); skip = 0; } @@ -1537,10 +1557,12 @@ screen_write_overwrite(struct screen_write_ctx *ctx, struct grid_cell *gc, grid_view_get_cell(gd, xx, s->cy, &tmp_gc); if (~tmp_gc.flags & GRID_FLAG_PADDING) break; + log_debug("%s: padding at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); } /* Overwrite the character at the start of this padding. */ + log_debug("%s: character at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); done = 1; } @@ -1557,6 +1579,7 @@ screen_write_overwrite(struct screen_write_ctx *ctx, struct grid_cell *gc, grid_view_get_cell(gd, xx, s->cy, &tmp_gc); if (~tmp_gc.flags & GRID_FLAG_PADDING) break; + log_debug("%s: overwrite at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); done = 1; } From 88517ceebb6cf31f661a1e265b2db6cbf61f09eb Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 5 Oct 2017 13:29:18 +0000 Subject: [PATCH 005/836] Add support for the xterm(1) title stack, from Brad Town, GitHub issue 1075. --- input.c | 23 ++++++++++++++++++- screen.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tmux.h | 4 ++++ 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index e4aecf7d95..42ff7f3b24 100644 --- a/input.c +++ b/input.c @@ -1693,11 +1693,32 @@ input_csi_dispatch_winops(struct input_ctx *ictx) /* FALLTHROUGH */ case 9: case 10: + m++; + if (input_get(ictx, m, 0, -1) == -1) + return; + break; case 22: + m++; + switch (input_get(ictx, m, 0, -1)) { + case -1: + return; + case 0: + case 2: + screen_push_title(ictx->ctx.s); + break; + } + break; case 23: m++; - if (input_get(ictx, m, 0, -1) == -1) + switch (input_get(ictx, m, 0, -1)) { + case -1: return; + case 0: + case 2: + screen_pop_title(ictx->ctx.s); + server_status_window(ictx->wp->window); + break; + } break; case 18: input_reply(ictx, "\033[8;%u;%ut", wp->sy, wp->sx); diff --git a/screen.c b/screen.c index ebd117a00e..800dbe8f6e 100644 --- a/screen.c +++ b/screen.c @@ -25,17 +25,44 @@ #include "tmux.h" +struct screen_title_entry { + char *text; + + TAILQ_ENTRY(screen_title_entry) entry; +}; +TAILQ_HEAD(screen_titles, screen_title_entry); + static void screen_resize_x(struct screen *, u_int); static void screen_resize_y(struct screen *, u_int); static void screen_reflow(struct screen *, u_int); +/* Free titles stack. */ +static void +screen_free_titles(struct screen *s) +{ + struct screen_title_entry *title_entry; + + if (s->titles == NULL) + return; + + while ((title_entry = TAILQ_FIRST(s->titles)) != NULL) { + TAILQ_REMOVE(s->titles, title_entry, entry); + free(title_entry->text); + free(title_entry); + } + + free(s->titles); + s->titles = NULL; +} + /* Create a new screen. */ void screen_init(struct screen *s, u_int sx, u_int sy, u_int hlimit) { s->grid = grid_create(sx, sy, hlimit); s->title = xstrdup(""); + s->titles = NULL; s->cstyle = 0; s->ccolour = xstrdup(""); @@ -61,6 +88,7 @@ screen_reinit(struct screen *s) grid_clear_lines(s->grid, s->grid->hsize, s->grid->sy, 8); screen_clear_selection(s); + screen_free_titles(s); } /* Destroy a screen. */ @@ -70,7 +98,10 @@ screen_free(struct screen *s) free(s->tabs); free(s->title); free(s->ccolour); + grid_destroy(s->grid); + + screen_free_titles(s); } /* Reset tabs to default, eight spaces apart. */ @@ -111,6 +142,43 @@ screen_set_title(struct screen *s, const char *title) utf8_stravis(&s->title, title, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); } +/* Push the current title onto the stack. */ +void +screen_push_title(struct screen *s) +{ + struct screen_title_entry *title_entry; + + if (s->titles == NULL) { + s->titles = xmalloc(sizeof *s->titles); + TAILQ_INIT(s->titles); + } + title_entry = xmalloc(sizeof *title_entry); + title_entry->text = xstrdup(s->title); + TAILQ_INSERT_HEAD(s->titles, title_entry, entry); +} + +/* + * Pop a title from the stack and set it as the screen title. If the stack is + * empty, do nothing. + */ +void +screen_pop_title(struct screen *s) +{ + struct screen_title_entry *title_entry; + + if (s->titles == NULL) + return; + + title_entry = TAILQ_FIRST(s->titles); + if (title_entry != NULL) { + screen_set_title(s, title_entry->text); + + TAILQ_REMOVE(s->titles, title_entry, entry); + free(title_entry->text); + free(title_entry); + } +} + /* Resize screen. */ void screen_resize(struct screen *s, u_int sx, u_int sy, int reflow) diff --git a/tmux.h b/tmux.h index c3524cb8aa..a661a6dabd 100644 --- a/tmux.h +++ b/tmux.h @@ -660,8 +660,10 @@ struct screen_sel { }; /* Virtual screen. */ +struct screen_titles; struct screen { char *title; + struct screen_titles *titles; struct grid *grid; /* grid data */ @@ -2082,6 +2084,8 @@ void screen_reset_tabs(struct screen *); void screen_set_cursor_style(struct screen *, u_int); void screen_set_cursor_colour(struct screen *, const char *); void screen_set_title(struct screen *, const char *); +void screen_push_title(struct screen *); +void screen_pop_title(struct screen *); void screen_resize(struct screen *, u_int, u_int, int); void screen_set_selection(struct screen *, u_int, u_int, u_int, u_int, u_int, struct grid_cell *); From bd71cbbe276432ce8869baa0f2d55433e1ab820c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 5 Oct 2017 14:31:23 +0100 Subject: [PATCH 006/836] 2.6. --- CHANGES | 4 ++-- configure.ac | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index dc88ae807c..b71dc3e505 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.5 TO 2.6-rc3, 11 September 2017 +CHANGES FROM 2.5 TO 2.6, 05 October 2017 * Add select-pane -T to set pane title. @@ -411,7 +411,7 @@ Normal Changes * Copy mode is exited if the history is cleared whilst in copy-mode. * 'copy-mode' learned '-e' to exit copy-mode when scrolling to end. -CHANGES FROM 1.9a TO 2.0, 6 March 2015 +CHANGES FROM 1.9a TO 2.0, 06 March 2015 Incompatible Changes ==================== diff --git a/configure.ac b/configure.ac index dcbe4a18c9..ca89e2da28 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.6-rc3) +AC_INIT(tmux, 2.6) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From b462063cd59647e7f98eb11bde9bb0fef41bb2bd Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 5 Oct 2017 13:43:34 +0000 Subject: [PATCH 007/836] Add -- to some key bindings so leading -s work. --- key-bindings.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index badbc0f48c..7677800994 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -162,13 +162,13 @@ key_bindings_init(void) "bind ! break-pane", "bind '\"' split-window", "bind '#' list-buffers", - "bind '$' command-prompt -I'#S' \"rename-session '%%'\"", + "bind '$' command-prompt -I'#S' \"rename-session -- '%%'\"", "bind % split-window -h", "bind & confirm-before -p\"kill-window #W? (y/n)\" kill-window", "bind \"'\" command-prompt -pindex \"select-window -t ':%%'\"", "bind ( switch-client -p", "bind ) switch-client -n", - "bind , command-prompt -I'#W' \"rename-window '%%'\"", + "bind , command-prompt -I'#W' \"rename-window -- '%%'\"", "bind - delete-buffer", "bind . command-prompt \"move-window -t '%%'\"", "bind 0 select-window -t:=0", @@ -192,7 +192,7 @@ key_bindings_init(void) "bind ] paste-buffer", "bind c new-window", "bind d detach-client", - "bind f command-prompt \"find-window '%%'\"", + "bind f command-prompt \"find-window -- '%%'\"", "bind i display-message", "bind l last-window", "bind m select-pane -m", From 9c4caf49a2e65ca03efe67332493de28c177be14 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 6 Oct 2017 18:02:30 +0000 Subject: [PATCH 008/836] Support %else in config files to match %if, from Brad Town in GitHub issue 1071. --- cfg.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++---------- tmux.1 | 25 +++++++-- 2 files changed, 164 insertions(+), 33 deletions(-) diff --git a/cfg.c b/cfg.c index 5f5df24a45..86901e6a01 100644 --- a/cfg.c +++ b/cfg.c @@ -27,6 +27,17 @@ #include "tmux.h" +/* Condition for %if, %elif, %else and %endif. */ +struct cfg_cond { + size_t line; /* line number of %if */ + int met; /* condition was met */ + int skip; /* skip later %elif/%else */ + int saw_else; /* saw a %else */ + + TAILQ_ENTRY(cfg_cond) entry; +}; +TAILQ_HEAD(cfg_conds, cfg_cond); + static char *cfg_file; int cfg_finished; static char **cfg_causes; @@ -102,6 +113,124 @@ start_cfg(void) cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL)); } +static int +cfg_check_condition(const char *path, size_t line, const char *p, int *skip) +{ + struct format_tree *ft; + char *s; + int result; + + while (isspace((u_char)*p)) + p++; + if (p[0] == '\0') { + cfg_add_cause("%s:%zu: invalid condition", path, line); + *skip = 1; + return (0); + } + + ft = format_create(NULL, NULL, FORMAT_NONE, FORMAT_NOJOBS); + s = format_expand(ft, p); + result = format_true(s); + free(s); + format_free(ft); + + *skip = result; + return (result); +} + +static void +cfg_handle_if(const char *path, size_t line, struct cfg_conds *conds, + const char *p) +{ + struct cfg_cond *cond; + struct cfg_cond *parent = TAILQ_FIRST(conds); + + /* + * Add a new condition. If a previous condition exists and isn't + * currently met, this new one also can't be met. + */ + cond = xcalloc(1, sizeof *cond); + cond->line = line; + if (parent == NULL || parent->met) + cond->met = cfg_check_condition(path, line, p, &cond->skip); + else + cond->skip = 1; + cond->saw_else = 0; + TAILQ_INSERT_HEAD(conds, cond, entry); +} + +static void +cfg_handle_elif(const char *path, size_t line, struct cfg_conds *conds, + const char *p) +{ + struct cfg_cond *cond = TAILQ_FIRST(conds); + + /* + * If a previous condition exists and wasn't met, check this + * one instead and change the state. + */ + if (cond == NULL || cond->saw_else) + cfg_add_cause("%s:%zu: unexpected %%elif", path, line); + else if (!cond->skip) + cond->met = cfg_check_condition(path, line, p, &cond->skip); + else + cond->met = 0; +} + +static void +cfg_handle_else(const char *path, size_t line, struct cfg_conds *conds) +{ + struct cfg_cond *cond = TAILQ_FIRST(conds); + + /* + * If a previous condition exists and wasn't met and wasn't already + * %else, use this one instead. + */ + if (cond == NULL || cond->saw_else) { + cfg_add_cause("%s:%zu: unexpected %%else", path, line); + return; + } + cond->saw_else = 1; + cond->met = !cond->skip; + cond->skip = 1; +} + +static void +cfg_handle_endif(const char *path, size_t line, struct cfg_conds *conds) +{ + struct cfg_cond *cond = TAILQ_FIRST(conds); + + /* + * Remove previous condition if one exists. + */ + if (cond == NULL) { + cfg_add_cause("%s:%zu: unexpected %%endif", path, line); + return; + } + TAILQ_REMOVE(conds, cond, entry); + free(cond); +} + +static void +cfg_handle_directive(const char *p, const char *path, size_t line, + struct cfg_conds *conds) +{ + int n = 0; + + while (p[n] != '\0' && !isspace((u_char)p[n])) + n++; + if (strncmp(p, "%if", n) == 0) + cfg_handle_if(path, line, conds, p + n); + else if (strncmp(p, "%elif", n) == 0) + cfg_handle_elif(path, line, conds, p + n); + else if (strcmp(p, "%else") == 0) + cfg_handle_else(path, line, conds); + else if (strcmp(p, "%endif") == 0) + cfg_handle_endif(path, line, conds); + else + cfg_add_cause("%s:%zu: invalid directive: %s", path, line, p); +} + int load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) { @@ -109,11 +238,13 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) const char delim[3] = { '\\', '\\', '\0' }; u_int found = 0; size_t line = 0; - char *buf, *cause1, *p, *q, *s; + char *buf, *cause1, *p, *q; struct cmd_list *cmdlist; struct cmdq_item *new_item; - int condition = 0; - struct format_tree *ft; + struct cfg_cond *cond, *cond1; + struct cfg_conds conds; + + TAILQ_INIT(&conds); log_debug("loading %s", path); if ((f = fopen(path, "rb")) == NULL) { @@ -137,33 +268,12 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) while (q != p && isspace((u_char)*q)) *q-- = '\0'; - if (condition != 0 && strcmp(p, "%endif") == 0) { - condition = 0; + if (*p == '%') { + cfg_handle_directive(p, path, line, &conds); continue; } - if (strncmp(p, "%if ", 4) == 0) { - if (condition != 0) { - cfg_add_cause("%s:%zu: nested %%if", path, - line); - continue; - } - ft = format_create(NULL, NULL, FORMAT_NONE, - FORMAT_NOJOBS); - - s = p + 3; - while (isspace((u_char)*s)) - s++; - s = format_expand(ft, s); - if (*s != '\0' && (s[0] != '0' || s[1] != '\0')) - condition = 1; - else - condition = -1; - free(s); - - format_free(ft); - continue; - } - if (condition == -1) + cond = TAILQ_FIRST(&conds); + if (cond != NULL && !cond->met) continue; cmdlist = cmd_string_parse(p, path, line, &cause1); @@ -190,6 +300,12 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) } fclose(f); + TAILQ_FOREACH_REVERSE_SAFE(cond, &conds, cfg_conds, entry, cond1) { + cfg_add_cause("%s:%zu: unterminated %%if", path, cond->line); + TAILQ_REMOVE(&conds, cond, entry); + free(cond); + } + return (found); } diff --git a/tmux.1 b/tmux.1 index 45eb83b275..218a16d2ef 100644 --- a/tmux.1 +++ b/tmux.1 @@ -976,22 +976,37 @@ them with and .Em %endif lines. +Additional +.Em %elif +and +.Em %else +lines may also be used. The argument to .Em %if -is expanded as a format and if it evaluates to false -(zero or empty), subsequent lines are ignored until +and +.Em %elif +is expanded as a format and if it evaluates to false (zero or empty), +subsequent lines are ignored until the next +.Em %elif , +.Em %else +or .Em %endif . For example: .Bd -literal -offset indent %if #{==:#{host},myhost} set -g status-style bg=red +%elif #{==:#{host},myotherhost} +set -g status-style bg=green +%else +set -g status-style bg=blue %endif .Ed .Pp Will change the status line to red if running on -.Ql myhost . -.Em %if -may not be nested. +.Ql myhost , +green if running on +.Ql myotherhost , +or blue if running on another host. .It Ic start-server .D1 (alias: Ic start ) Start the From 0b4c408168c170f0986a8dd862ec949942b2eaa8 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 8 Oct 2017 16:45:01 +0000 Subject: [PATCH 009/836] Fix description of history_size, from Campbell Barton. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 218a16d2ef..1d02efab5a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3649,7 +3649,7 @@ The following variables are available, where appropriate: .It Li "cursor_y" Ta "" Ta "Cursor Y position in pane" .It Li "history_bytes" Ta "" Ta "Number of bytes in window history" .It Li "history_limit" Ta "" Ta "Maximum window history lines" -.It Li "history_size" Ta "" Ta "Size of history in bytes" +.It Li "history_size" Ta "" Ta "Size of history in lines" .It Li "hook" Ta "" Ta "Name of running hook, if any" .It Li "hook_pane" Ta "" Ta "ID of pane where hook was run, if any" .It Li "hook_session" Ta "" Ta "ID of session where hook was run, if any" From db44151a3747ac66a45b2f730b0f9919172e2a75 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 9 Oct 2017 11:35:35 +0000 Subject: [PATCH 010/836] kind should be S-Down not S-Up. --- tty-keys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty-keys.c b/tty-keys.c index 7c0455f020..febf57f1ba 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -271,7 +271,7 @@ static const struct tty_default_key_code tty_default_code_keys[] = { { TTYC_KDC5, KEYC_DC|KEYC_CTRL|KEYC_XTERM }, { TTYC_KDC6, KEYC_DC|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, { TTYC_KDC7, KEYC_DC|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, - { TTYC_KIND, KEYC_UP|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KIND, KEYC_DOWN|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KDN2, KEYC_DOWN|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KDN3, KEYC_DOWN|KEYC_ESCAPE|KEYC_XTERM }, { TTYC_KDN4, KEYC_DOWN|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, From a3967de9a58f1773b8ca01a1f98fcafb86b73ac1 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 11 Oct 2017 08:03:31 +0100 Subject: [PATCH 011/836] Include headers if found regardless of forkpty. --- compat.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compat.h b/compat.h index e06f104df4..b83e618923 100644 --- a/compat.h +++ b/compat.h @@ -101,17 +101,17 @@ void warnx(const char *, ...); #include #endif -#ifdef HAVE_FORKPTY #ifdef HAVE_LIBUTIL_H #include #endif + #ifdef HAVE_PTY_H #include #endif + #ifdef HAVE_UTIL_H #include #endif -#endif #ifdef HAVE_VIS #include From 99351c9cae3c01c68c57aebf127551ec6afe7db2 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Oct 2017 08:08:16 +0000 Subject: [PATCH 012/836] Add C-n and C-p keys for tree mode, and choose the right initial line when no panes. --- mode-tree.c | 2 ++ window-tree.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mode-tree.c b/mode-tree.c index ad783bb455..7b37879507 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -774,11 +774,13 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, case KEYC_UP: case 'k': case KEYC_WHEELUP_PANE: + case '\020': /* C-p */ mode_tree_up(mtd, 1); break; case KEYC_DOWN: case 'j': case KEYC_WHEELDOWN_PANE: + case '\016': /* C-n */ mode_tree_down(mtd, 1); break; case KEYC_PPAGE: diff --git a/window-tree.c b/window-tree.c index cbabd67e39..100ded2b49 100644 --- a/window-tree.c +++ b/window-tree.c @@ -434,7 +434,10 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, *tag = (uint64_t)data->fs.wl; break; case WINDOW_TREE_PANE: - *tag = (uint64_t)data->fs.wp; + if (window_count_panes(data->fs.wl->window) == 1) + *tag = (uint64_t)data->fs.wl; + else + *tag = (uint64_t)data->fs.wp; break; } } From 6e5121be7e280914f1116189b04c9c7a4b5f1590 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Oct 2017 11:26:58 +0000 Subject: [PATCH 013/836] Clear to end of line properly with UTF-8 present. --- mode-tree.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 7b37879507..349cda4936 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -554,10 +554,12 @@ mode_tree_draw(struct mode_tree_data *mtd) } if (i != mtd->current) { - screen_write_puts(&ctx, &gc0, "%.*s", w, text); + screen_write_nputs(&ctx, w, &gc0, "%s", text); screen_write_clearendofline(&ctx, 8); - } else - screen_write_puts(&ctx, &gc, "%-*.*s", w, w, text); + } else { + screen_write_nputs(&ctx, w, &gc, "%s", text); + screen_write_clearendofline(&ctx, gc.bg); + } free(text); if (mti->tagged) { From eb9839fd32d51688fe1877776921d2d76f2642a2 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Oct 2017 12:57:49 +0000 Subject: [PATCH 014/836] Box around label in preview. --- window-tree.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/window-tree.c b/window-tree.c index 100ded2b49..b79f59137b 100644 --- a/window-tree.c +++ b/window-tree.c @@ -442,6 +442,28 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, } } + +static void +window_tree_draw_label(struct screen_write_ctx *ctx, u_int px, u_int py, + u_int sx, u_int sy, const struct grid_cell *gc, const char *label) +{ + size_t len; + u_int ox, oy; + + len = strlen(label); + if (sx == 0 || sy == 1 || len > sx) + return; + ox = (sx - len + 1) / 2; + oy = (sy + 1) / 2; + + if (ox > 1 && ox + len < sx - 1 && sy >= 3) { + screen_write_cursormove(ctx, px + ox - 1, py + oy - 1); + screen_write_box(ctx, len + 2, 3); + } + screen_write_cursormove(ctx, px + ox, py + oy); + screen_write_puts(ctx, gc, "%s", label); +} + static void window_tree_draw_session(struct window_tree_modedata *data, struct session *s, struct screen_write_ctx *ctx, u_int sx, u_int sy) @@ -454,7 +476,6 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, struct grid_cell gc; int colour, active_colour, left, right; char *label; - size_t len; total = winlink_count(&s->windows); @@ -554,10 +575,7 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, xasprintf(&label, " %u:%s ", wl->idx, w->name); if (strlen(label) > width) xasprintf(&label, " %u ", wl->idx); - len = strlen(label) / 2; - screen_write_cursormove(ctx, offset + (each / 2) - len, sy / 2); - if (len < width) - screen_write_puts(ctx, &gc, "%s", label); + window_tree_draw_label(ctx, offset, 0, width, sy, &gc, label); free(label); if (loop != end - 1) { @@ -581,7 +599,6 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, struct grid_cell gc; int colour, active_colour, left, right; char *label; - size_t len; total = window_count_panes(w); @@ -678,10 +695,7 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, screen_write_preview(ctx, &wp->base, width, sy); xasprintf(&label, " %u ", loop); - len = strlen(label) / 2; - screen_write_cursormove(ctx, offset + (each / 2) - len, sy / 2); - if (len < width) - screen_write_puts(ctx, &gc, "%s", label); + window_tree_draw_label(ctx, offset, 0, each, sy, &gc, label); free(label); if (loop != end - 1) { From d10def5b0b5a4d000b1a34efd32cc4a2613f66c7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 12 Oct 2017 11:56:06 +0100 Subject: [PATCH 015/836] Check missed during merge. --- server-client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server-client.c b/server-client.c index 7c4af0d6b3..37b648c8e7 100644 --- a/server-client.c +++ b/server-client.c @@ -1067,7 +1067,7 @@ server_client_resize_force(struct window_pane *wp) memset(&ws, 0, sizeof ws); ws.ws_col = wp->sx; ws.ws_row = wp->sy - 1; - if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) + if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) #ifdef __sun if (errno != EINVAL && errno != ENXIO) #endif @@ -1096,7 +1096,7 @@ server_client_resize_event(__unused int fd, __unused short events, void *data) memset(&ws, 0, sizeof ws); ws.ws_col = wp->sx; ws.ws_row = wp->sy; - if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) + if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) #ifdef __sun /* * Some versions of Solaris apparently can return an error when From a5fd5782f87362b8ee31cd5c6975728e112db9ff Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 12 Oct 2017 11:32:27 +0000 Subject: [PATCH 016/836] Show exit status and time in the remain-on-exit pane text, mostly from Timo Boettcher in GitHub issue 1103. --- format.c | 11 ++++++----- server-fn.c | 30 ++++++++++++++++++++++++------ server.c | 1 + tmux.h | 2 ++ window.c | 1 + 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/format.c b/format.c index da9eb54555..aa8396d738 100644 --- a/format.c +++ b/format.c @@ -1376,8 +1376,8 @@ void format_defaults_pane(struct format_tree *ft, struct window_pane *wp) { struct grid *gd = wp->base.grid; + int status = wp->status; u_int idx; - int status; if (ft->w == NULL) ft->w = wp->window; @@ -1399,8 +1399,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1); - status = wp->status; - if (wp->fd == -1 && WIFEXITED(status)) + if ((wp->flags & PANE_STATUSREADY) && WIFEXITED(status)) format_add(ft, "pane_dead_status", "%d", WEXITSTATUS(status)); format_add(ft, "pane_dead", "%d", wp->fd == -1); @@ -1411,8 +1410,10 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); format_add(ft, "pane_at_left", "%d", wp->xoff == 0); format_add(ft, "pane_at_top", "%d", wp->yoff == 0); - format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == wp->window->sx); - format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == wp->window->sy); + format_add(ft, "pane_at_right", "%d", + wp->xoff + wp->sx == wp->window->sx); + format_add(ft, "pane_at_bottom", "%d", + wp->yoff + wp->sy == wp->window->sy); } format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); diff --git a/server-fn.c b/server-fn.c index f5ede2c24d..713e85b7f8 100644 --- a/server-fn.c +++ b/server-fn.c @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -278,11 +279,11 @@ void server_destroy_pane(struct window_pane *wp, int notify) { struct window *w = wp->window; - int old_fd; struct screen_write_ctx ctx; struct grid_cell gc; + time_t t; + char tim[26]; - old_fd = wp->fd; if (wp->fd != -1) { bufferevent_free(wp->event); close(wp->fd); @@ -290,9 +291,13 @@ server_destroy_pane(struct window_pane *wp, int notify) } if (options_get_number(w->options, "remain-on-exit")) { - if (old_fd == -1) + if (~wp->flags & PANE_STATUSREADY) return; + if (wp->flags & PANE_STATUSDRAWN) + return; + wp->flags |= PANE_STATUSDRAWN; + if (notify) notify_pane("pane-died", wp); @@ -301,11 +306,24 @@ server_destroy_pane(struct window_pane *wp, int notify) screen_write_cursormove(&ctx, 0, screen_size_y(ctx.s) - 1); screen_write_linefeed(&ctx, 1, 8); memcpy(&gc, &grid_default_cell, sizeof gc); - gc.attr |= GRID_ATTR_BRIGHT; - screen_write_puts(&ctx, &gc, "Pane is dead"); + + time(&t); + ctime_r(&t, tim); + + if (WIFEXITED(wp->status)) { + screen_write_nputs(&ctx, -1, &gc, + "Pane is dead (status %d, %s)", + WEXITSTATUS(wp->status), + tim); + } else if (WIFSIGNALED(wp->status)) { + screen_write_nputs(&ctx, -1, &gc, + "Pane is dead (signal %d, %s)", + WTERMSIG(wp->status), + tim); + } + screen_write_stop(&ctx); wp->flags |= PANE_REDRAW; - return; } diff --git a/server.c b/server.c index 753f6d0118..82b5a6b857 100644 --- a/server.c +++ b/server.c @@ -424,6 +424,7 @@ server_child_exited(pid_t pid, int status) TAILQ_FOREACH(wp, &w->panes, entry) { if (wp->pid == pid) { wp->status = status; + wp->flags |= PANE_STATUSREADY; log_debug("%%%u exited", wp->id); wp->flags |= PANE_EXITED; diff --git a/tmux.h b/tmux.h index a661a6dabd..ad35c33633 100644 --- a/tmux.h +++ b/tmux.h @@ -778,6 +778,8 @@ struct window_pane { #define PANE_INPUTOFF 0x40 #define PANE_CHANGED 0x80 #define PANE_EXITED 0x100 +#define PANE_STATUSREADY 0x200 +#define PANE_STATUSDRAWN 0x400 int argc; char **argv; diff --git a/window.c b/window.c index 1c97fb8d2b..2afd42d36d 100644 --- a/window.c +++ b/window.c @@ -908,6 +908,7 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, free((void *)wp->cwd); wp->cwd = xstrdup(cwd); } + wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); cmd = cmd_stringify_argv(wp->argc, wp->argv); log_debug("spawn: %s -- %s", wp->shell, cmd); From 2f6935a630507351233d6296cc6ec9a08d6a702a Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 16 Oct 2017 19:30:53 +0000 Subject: [PATCH 017/836] Infrastructure for drawing status lines of more than one line in height, still only one is allowed but this lets tmux draw bigger ones. --- resize.c | 20 ++++++----- screen-redraw.c | 88 +++++++++++++++++++++++++++++-------------------- server-client.c | 15 +++++---- status.c | 67 ++++++++++++++++++++++++++----------- tmux.h | 2 ++ tty.c | 2 +- 6 files changed, 123 insertions(+), 71 deletions(-) diff --git a/resize.c b/resize.c index 0fd30ba006..8ed359b457 100644 --- a/resize.c +++ b/resize.c @@ -49,11 +49,11 @@ recalculate_sizes(void) struct client *c; struct window *w; struct window_pane *wp; - u_int ssx, ssy, has, limit; - int flag, has_status, is_zoomed, forced; + u_int ssx, ssy, has, limit, lines; + int flag, is_zoomed, forced; RB_FOREACH(s, sessions, &sessions) { - has_status = options_get_number(s->options, "status"); + lines = status_line_size(s); s->attached = 0; ssx = ssy = UINT_MAX; @@ -66,10 +66,14 @@ recalculate_sizes(void) if (c->session == s) { if (c->tty.sx < ssx) ssx = c->tty.sx; - if (has_status && + c->flags &= ~CLIENT_STATUSOFF; + if (lines != 0 && lines + PANE_MINIMUM > c->tty.sy) + c->flags |= CLIENT_STATUSOFF; + if ((~c->flags & CLIENT_STATUSOFF) && !(c->flags & CLIENT_CONTROL) && - c->tty.sy > 1 && c->tty.sy - 1 < ssy) - ssy = c->tty.sy - 1; + c->tty.sy > lines && + c->tty.sy - lines < ssy) + ssy = c->tty.sy - lines; else if (c->tty.sy < ssy) ssy = c->tty.sy; s->attached++; @@ -81,8 +85,8 @@ recalculate_sizes(void) } s->flags &= ~SESSION_UNATTACHED; - if (has_status && ssy == 0) - ssy = 1; + if (lines != 0 && ssy == 0) + ssy = lines; if (s->sx == ssx && s->sy == ssy) continue; diff --git a/screen-redraw.c b/screen-redraw.c index 6c4d84d868..7a31182a7b 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -33,11 +33,11 @@ static int screen_redraw_make_pane_status(struct client *, struct window *, struct window_pane *); static void screen_redraw_draw_pane_status(struct client *, int); -static void screen_redraw_draw_borders(struct client *, int, int, u_int); -static void screen_redraw_draw_panes(struct client *, u_int); -static void screen_redraw_draw_status(struct client *, u_int); +static void screen_redraw_draw_borders(struct client *, int, u_int, u_int); +static void screen_redraw_draw_panes(struct client *, u_int, u_int); +static void screen_redraw_draw_status(struct client *, u_int, u_int); static void screen_redraw_draw_number(struct client *, struct window_pane *, - u_int); + u_int, u_int); #define CELL_INSIDE 0 #define CELL_LEFTRIGHT 1 @@ -377,36 +377,38 @@ screen_redraw_screen(struct client *c, int draw_panes, int draw_status, struct tty *tty = &c->tty; struct window *w = c->session->curw->window; struct options *wo = w->options; - u_int top; - int status, pane_status, spos; + u_int top, lines; + int position, pane_status; - /* Suspended clients should not be updated. */ if (c->flags & CLIENT_SUSPENDED) return; - /* Get status line, er, status. */ - spos = options_get_number(oo, "status-position"); - if (c->message_string != NULL || c->prompt_string != NULL) - status = 1; + if (c->flags & CLIENT_STATUSOFF) + lines = 0; else - status = options_get_number(oo, "status"); - top = 0; - if (status && spos == 0) + lines = status_line_size(c->session); + if (c->message_string != NULL || c->prompt_string != NULL) + lines = (lines == 0) ? 1 : lines; + + position = options_get_number(oo, "status-position"); + if (lines != 0 && position == 0) top = 1; - if (!status) + else + top = 0; + + if (lines == 0) draw_status = 0; - /* Draw the elements. */ if (draw_borders) { pane_status = options_get_number(wo, "pane-border-status"); - screen_redraw_draw_borders(c, status, pane_status, top); + screen_redraw_draw_borders(c, pane_status, lines, top); if (pane_status != CELL_STATUS_OFF) screen_redraw_draw_pane_status(c, pane_status); } if (draw_panes) - screen_redraw_draw_panes(c, top); + screen_redraw_draw_panes(c, lines, top); if (draw_status) - screen_redraw_draw_status(c, top); + screen_redraw_draw_status(c, lines, top); tty_reset(tty); } @@ -421,7 +423,7 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) yoff = wp->yoff; if (status_at_line(c) == 0) - yoff++; + yoff += status_line_size(c->session); log_debug("%s: redraw pane %%%u (at %u,%u)", c->name, wp->id, wp->xoff, yoff); @@ -433,7 +435,7 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) /* Draw the borders. */ static void -screen_redraw_draw_borders(struct client *c, int status, int pane_status, +screen_redraw_draw_borders(struct client *c, int pane_status, u_int lines, u_int top) { struct session *s = c->session; @@ -449,7 +451,7 @@ screen_redraw_draw_borders(struct client *c, int status, int pane_status, const char *tmp; size_t msglen = 0; - small = (tty->sy - status + top > w->sy) || (tty->sx > w->sx); + small = (tty->sy - lines + top > w->sy) || (tty->sx > w->sx); if (small) { flags = w->flags & (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); if (flags == (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT)) @@ -458,18 +460,20 @@ screen_redraw_draw_borders(struct client *c, int status, int pane_status, tmp = "force-width"; else if (flags == WINDOW_FORCEHEIGHT) tmp = "force-height"; + else if (c->flags & CLIENT_STATUSOFF) + tmp = "status line"; else tmp = "a smaller client"; xsnprintf(msg, sizeof msg, "(size %ux%u from %s)", w->sx, w->sy, tmp); msglen = strlen(msg); - if (tty->sy - 1 - status + top > w->sy && tty->sx >= msglen) { + if (tty->sy - 1 - lines + top > w->sy && tty->sx >= msglen) { msgx = tty->sx - msglen; - msgy = tty->sy - 1 - status + top; + msgy = tty->sy - 1 - lines + top; } else if (tty->sx - w->sx > msglen) { msgx = tty->sx - msglen; - msgy = tty->sy - 1 - status + top; + msgy = tty->sy - 1 - lines + top; } else small = 0; } @@ -483,7 +487,7 @@ screen_redraw_draw_borders(struct client *c, int status, int pane_status, memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < tty->sy - status; j++) { + for (j = 0; j < tty->sy - lines; j++) { for (i = 0; i < tty->sx; i++) { type = screen_redraw_check_cell(c, i, j, pane_status, &wp); @@ -505,7 +509,10 @@ screen_redraw_draw_borders(struct client *c, int status, int pane_status, tty_attributes(tty, &active_gc, NULL); else tty_attributes(tty, &other_gc, NULL); - tty_cursor(tty, i, top + j); + if (top) + tty_cursor(tty, i, lines + j); + else + tty_cursor(tty, i, j); tty_putc(tty, CELL_BORDERS[type]); } } @@ -520,38 +527,47 @@ screen_redraw_draw_borders(struct client *c, int status, int pane_status, /* Draw the panes. */ static void -screen_redraw_draw_panes(struct client *c, u_int top) +screen_redraw_draw_panes(struct client *c, u_int lines, u_int top) { struct window *w = c->session->curw->window; struct tty *tty = &c->tty; struct window_pane *wp; - u_int i; + u_int i, y; + + if (top) + y = lines; + else + y = 0; TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; for (i = 0; i < wp->sy; i++) - tty_draw_pane(tty, wp, i, wp->xoff, top + wp->yoff); + tty_draw_pane(tty, wp, i, wp->xoff, y + wp->yoff); if (c->flags & CLIENT_IDENTIFY) - screen_redraw_draw_number(c, wp, top); + screen_redraw_draw_number(c, wp, lines, top); } } /* Draw the status line. */ static void -screen_redraw_draw_status(struct client *c, u_int top) +screen_redraw_draw_status(struct client *c, u_int lines, u_int top) { struct tty *tty = &c->tty; + u_int i, y; if (top) - tty_draw_line(tty, NULL, &c->status, 0, 0, 0); + y = 0; else - tty_draw_line(tty, NULL, &c->status, 0, 0, tty->sy - 1); + y = tty->sy - lines; + for (i = 0; i < lines; i++) + tty_draw_line(tty, NULL, &c->status, i, 0, y); } /* Draw number on a pane. */ static void -screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top) +screen_redraw_draw_number(struct client *c, struct window_pane *wp, + u_int lines, u_int top) { struct tty *tty = &c->tty; struct session *s = c->session; @@ -576,7 +592,7 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top) xoff = wp->xoff; yoff = wp->yoff; if (top) - yoff++; + yoff += lines; if (wp->sx < len * 6 || wp->sy < 5) { tty_cursor(tty, xoff + px - len / 2, yoff + py); diff --git a/server-client.c b/server-client.c index 0b4146a8b5..aa0f838e25 100644 --- a/server-client.c +++ b/server-client.c @@ -1201,7 +1201,7 @@ server_client_reset_state(struct client *c) struct window_pane *wp = w->active, *loop; struct screen *s = wp->screen; struct options *oo = c->session->options; - int status, mode, o; + int lines, mode; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; @@ -1209,13 +1209,14 @@ server_client_reset_state(struct client *c) tty_region_off(&c->tty); tty_margin_off(&c->tty); - status = options_get_number(oo, "status"); - if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - status) + if (status_at_line(c) != 0) + lines = 0; + else + lines = status_line_size(c->session); + if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - lines) tty_cursor(&c->tty, 0, 0); - else { - o = status && options_get_number(oo, "status-position") == 0; - tty_cursor(&c->tty, wp->xoff + s->cx, o + wp->yoff + s->cy); - } + else + tty_cursor(&c->tty, wp->xoff + s->cx, lines + wp->yoff + s->cy); /* * Set mouse mode if requested. To support dragging, always use button diff --git a/status.c b/status.c index b7d2471504..a696d5612b 100644 --- a/status.c +++ b/status.c @@ -210,9 +210,24 @@ status_at_line(struct client *c) { struct session *s = c->session; + if (c->flags & CLIENT_STATUSOFF) + return (-1); if (s->statusat != 1) return (s->statusat); - return (c->tty.sy - 1); + return (c->tty.sy - status_line_size(s)); +} + +/* + * Get size of status line for session. 0 means off. Note that status line may + * be forced off for an individual client if it is too small (the + * CLIENT_STATUSOFF flag is set for this). + */ +u_int +status_line_size(struct session *s) +{ + if (s->statusat == -1) + return (0); + return (1); } /* Retrieve options for left string. */ @@ -296,7 +311,7 @@ status_redraw(struct client *c) time_t t; char *left, *right; const char *sep; - u_int offset, needed; + u_int offset, needed, lines; u_int wlstart, wlwidth, wlavailable, wloffset, wlsize; size_t llen, rlen, seplen; int larrow, rarrow; @@ -309,7 +324,8 @@ status_redraw(struct client *c) } /* No status line? */ - if (c->tty.sy == 0 || !options_get_number(s->options, "status")) + lines = status_line_size(s); + if (c->tty.sy == 0 || lines == 0) return (1); left = right = NULL; larrow = rarrow = 0; @@ -322,14 +338,13 @@ status_redraw(struct client *c) /* Create the target screen. */ memcpy(&old_status, &c->status, sizeof old_status); - screen_init(&c->status, c->tty.sx, 1, 0); + screen_init(&c->status, c->tty.sx, lines, 0); screen_write_start(&ctx, NULL, &c->status); - for (offset = 0; offset < c->tty.sx; offset++) - screen_write_putc(&ctx, &stdgc, ' '); + screen_write_clearscreen(&ctx, stdgc.bg); screen_write_stop(&ctx); - /* If the height is one line, blank status line. */ - if (c->tty.sy <= 1) + /* If the height is too small, blank status line. */ + if (c->tty.sy < lines) goto out; /* Work out left and right strings. */ @@ -637,11 +652,17 @@ status_message_redraw(struct client *c) struct screen old_status; size_t len; struct grid_cell gc; + u_int lines; if (c->tty.sx == 0 || c->tty.sy == 0) return (0); memcpy(&old_status, &c->status, sizeof old_status); - screen_init(&c->status, c->tty.sx, 1, 0); + + lines = status_line_size(c->session); + if (lines <= 1) + screen_init(&c->status, c->tty.sx, 1, 0); + else + screen_init(&c->status, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->message_string); if (len > c->tty.sx) @@ -650,12 +671,9 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); screen_write_start(&ctx, NULL, &c->status); - - screen_write_cursormove(&ctx, 0, 0); + screen_write_clearscreen(&ctx, gc.bg); + screen_write_cursormove(&ctx, 0, lines - 1); screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); - for (; len < c->tty.sx; len++) - screen_write_putc(&ctx, &gc, ' '); - screen_write_stop(&ctx); if (grid_compare(c->status.grid, old_status.grid) == 0) { @@ -782,12 +800,24 @@ status_prompt_redraw(struct client *c) struct session *s = c->session; struct screen old_status; u_int i, offset, left, start, pcursor, pwidth, width; + u_int lines; + size_t len, off; struct grid_cell gc, cursorgc; if (c->tty.sx == 0 || c->tty.sy == 0) return (0); memcpy(&old_status, &c->status, sizeof old_status); - screen_init(&c->status, c->tty.sx, 1, 0); + + lines = status_line_size(c->session); + if (lines <= 1) + screen_init(&c->status, c->tty.sx, 1, 0); + else + screen_init(&c->status, c->tty.sx, lines, 0); + + len = screen_write_strlen("%s", c->prompt_string); + if (len > c->tty.sx) + len = c->tty.sx; + off = 0; if (c->prompt_mode == PROMPT_COMMAND) style_apply(&gc, s->options, "message-command-style"); @@ -802,11 +832,10 @@ status_prompt_redraw(struct client *c) start = c->tty.sx; screen_write_start(&ctx, NULL, &c->status); - screen_write_cursormove(&ctx, 0, 0); + screen_write_clearscreen(&ctx, gc.bg); + screen_write_cursormove(&ctx, 0, lines - 1); screen_write_nputs(&ctx, start, &gc, "%s", c->prompt_string); - while (c->status.cx < screen_size_x(&c->status)) - screen_write_putc(&ctx, &gc, ' '); - screen_write_cursormove(&ctx, start, 0); + screen_write_cursormove(&ctx, start, lines - 1); left = c->tty.sx - start; if (left == 0) diff --git a/tmux.h b/tmux.h index ad35c33633..6cb9a06f99 100644 --- a/tmux.h +++ b/tmux.h @@ -1381,6 +1381,7 @@ struct client { #define CLIENT_DOUBLECLICK 0x100000 #define CLIENT_TRIPLECLICK 0x200000 #define CLIENT_SIZECHANGED 0x400000 +#define CLIENT_STATUSOFF 0x800000 int flags; struct key_table *keytable; @@ -1928,6 +1929,7 @@ 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 *); +u_int status_line_size(struct session *); struct window *status_get_window_at(struct client *, u_int); int status_redraw(struct client *); void printflike(2, 3) status_message_set(struct client *, const char *, ...); diff --git a/tty.c b/tty.c index 0d1aa368f0..90361e3fbf 100644 --- a/tty.c +++ b/tty.c @@ -1038,7 +1038,7 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), ctx->xoff = wp->xoff; ctx->yoff = wp->yoff; if (status_at_line(c) == 0) - ctx->yoff++; + ctx->yoff += status_line_size(c->session); cmdfn(&c->tty, ctx); } From a34de2e378e0cff7191a426117f44e8b81543445 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 17 Oct 2017 10:35:35 +0100 Subject: [PATCH 018/836] Save and restore LIBS when checking for b64_ntop, reported by Ralf Friedl. --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac index 83c104c33c..b18b381058 100644 --- a/configure.ac +++ b/configure.ac @@ -285,6 +285,7 @@ if test "x$found_b64_ntop" = xno; then AC_MSG_RESULT(no) AC_MSG_CHECKING(for b64_ntop with -lresolv) + OLD_LIBS="$LIBS" LIBS="$LIBS -lresolv" AC_TRY_LINK( [ @@ -297,6 +298,7 @@ if test "x$found_b64_ntop" = xno; then found_b64_ntop=no ) if test "x$found_b64_ntop" = xno; then + LIBS="$OLD_LIBS" AC_MSG_RESULT(no) fi fi From 37531673a3a61af3ff8ff58249325d2e758cb4b3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 20 Oct 2017 13:26:54 +0100 Subject: [PATCH 019/836] Need compat for queue.h. --- server-fn.c | 1 - 1 file changed, 1 deletion(-) diff --git a/server-fn.c b/server-fn.c index 087f0e79c6..008c96eea1 100644 --- a/server-fn.c +++ b/server-fn.c @@ -17,7 +17,6 @@ */ #include -#include #include #include From d3e8709ab5581bed818346b4b984946d5722665f Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 20 Oct 2017 13:10:54 +0000 Subject: [PATCH 020/836] Clear status line with spaces again so reverse works, spotted by sthen. --- status.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/status.c b/status.c index a696d5612b..b24fc2eb28 100644 --- a/status.c +++ b/status.c @@ -340,7 +340,8 @@ status_redraw(struct client *c) memcpy(&old_status, &c->status, sizeof old_status); screen_init(&c->status, c->tty.sx, lines, 0); screen_write_start(&ctx, NULL, &c->status); - screen_write_clearscreen(&ctx, stdgc.bg); + for (offset = 0; offset < lines * c->tty.sx; offset++) + screen_write_putc(&ctx, &stdgc, ' '); screen_write_stop(&ctx); /* If the height is too small, blank status line. */ @@ -652,7 +653,7 @@ status_message_redraw(struct client *c) struct screen old_status; size_t len; struct grid_cell gc; - u_int lines; + u_int lines, offset; if (c->tty.sx == 0 || c->tty.sy == 0) return (0); @@ -671,7 +672,9 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); screen_write_start(&ctx, NULL, &c->status); - screen_write_clearscreen(&ctx, gc.bg); + screen_write_cursormove(&ctx, 0, 0); + for (offset = 0; offset < lines * c->tty.sx; offset++) + screen_write_putc(&ctx, &gc, ' '); screen_write_cursormove(&ctx, 0, lines - 1); screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); screen_write_stop(&ctx); @@ -832,10 +835,12 @@ status_prompt_redraw(struct client *c) start = c->tty.sx; screen_write_start(&ctx, NULL, &c->status); - screen_write_clearscreen(&ctx, gc.bg); - screen_write_cursormove(&ctx, 0, lines - 1); + screen_write_cursormove(&ctx, 0, 0); + for (offset = 0; offset < lines * c->tty.sx; offset++) + screen_write_putc(&ctx, &gc, ' '); + screen_write_cursormove(&ctx, 0, 0); screen_write_nputs(&ctx, start, &gc, "%s", c->prompt_string); - screen_write_cursormove(&ctx, start, lines - 1); + screen_write_cursormove(&ctx, start, 0); left = c->tty.sx - start; if (left == 0) From f7a037ba269ec37ae5ea4d99a006fa084b7f8064 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 22 Oct 2017 14:14:14 +0100 Subject: [PATCH 021/836] Apparently vim(1) now has syntax highlighting built in, GitHub issue 1124. --- README | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README b/README index 056d56914a..2503ba8226 100644 --- a/README +++ b/README @@ -43,11 +43,6 @@ the source tree with: A small example configuration in example_tmux.conf. -A vim(1) syntax file is available at: - - https://github.com/ericpruitt/tmux.vim - https://raw.githubusercontent.com/ericpruitt/tmux.vim/master/vim/syntax/tmux.vim - And a bash(1) completion file at: https://github.com/imomaliev/tmux-bash-completion From 26f1857154aacbca5e6ebbb817aa3b48f02d05bf Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 22 Oct 2017 13:16:54 +0000 Subject: [PATCH 022/836] Use window_pane_index() when drawing pane numbers (so pane-base-index is applied), from Thomas Adam. GitHub issue 1125. --- window-tree.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/window-tree.c b/window-tree.c index b79f59137b..a95503f8b7 100644 --- a/window-tree.c +++ b/window-tree.c @@ -597,7 +597,7 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, u_int loop, total, visible, each, width, offset; u_int current, start, end, remaining, i; struct grid_cell gc; - int colour, active_colour, left, right; + int colour, active_colour, left, right, pane_idx; char *label; total = window_count_panes(w); @@ -694,7 +694,9 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, screen_write_cursormove(ctx, offset, 0); screen_write_preview(ctx, &wp->base, width, sy); - xasprintf(&label, " %u ", loop); + if (window_pane_index(wp, &pane_idx) != 0) + pane_idx = loop; + xasprintf(&label, " %u ", pane_idx); window_tree_draw_label(ctx, offset, 0, each, sy, &gc, label); free(label); From 8dd776106dc54c5ec722317d20290f17ce9aff43 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Oct 2017 11:26:11 +0000 Subject: [PATCH 023/836] Add P key to paste tagged in buffer mode, and trim some code that should no longer be necessary. --- mode-tree.c | 6 ++--- tmux.1 | 4 +++- tmux.h | 2 +- window-buffer.c | 61 +++++++++++++++++++++++++------------------------ window-client.c | 48 ++++++++++++-------------------------- window-tree.c | 24 ++++++++----------- 6 files changed, 61 insertions(+), 84 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 349cda4936..e6d26b46b9 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -266,7 +266,7 @@ mode_tree_count_tagged(struct mode_tree_data *mtd) void mode_tree_each_tagged(struct mode_tree_data *mtd, void (*cb)(void *, void *, - key_code), key_code key, int current) + struct client *, key_code), struct client *c, key_code key, int current) { struct mode_tree_item *mti; u_int i; @@ -277,12 +277,12 @@ mode_tree_each_tagged(struct mode_tree_data *mtd, void (*cb)(void *, void *, mti = mtd->line_list[i].item; if (mti->tagged) { fired = 1; - cb(mtd->modedata, mti->itemdata, key); + cb(mtd->modedata, mti->itemdata, c, key); } } if (!fired && current) { mti = mtd->line_list[mtd->current].item; - cb(mtd->modedata, mti->itemdata, key); + cb(mtd->modedata, mti->itemdata, c, key); } } diff --git a/tmux.1 b/tmux.1 index 1d02efab5a..0cf8036764 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4098,7 +4098,7 @@ a list. The following keys may be used in buffer mode: .Bl -column "Key" "Function" -offset indent .It Sy "Key" Ta Sy "Function" -.It Li "Enter" Ta "Choose selected buffer" +.It Li "Enter" Ta "Paste selected buffer" .It Li "Up" Ta "Select previous buffer" .It Li "Down" Ta "Select next buffer" .It Li "C-s" Ta "Search by name or content" @@ -4106,6 +4106,8 @@ The following keys may be used in buffer mode: .It Li "t" Ta "Toggle if buffer is tagged" .It Li "T" Ta "Tag no buffers" .It Li "C-t" Ta "Tag all buffers" +.It Li "p" Ta "Paste selected buffer" +.It Li "P" Ta "Paste tagged buffers" .It Li "d" Ta "Delete selected buffer" .It Li "D" Ta "Delete tagged buffers" .It Li "f" Ta "Enter a format to filter items" diff --git a/tmux.h b/tmux.h index 6cb9a06f99..720ff40ef6 100644 --- a/tmux.h +++ b/tmux.h @@ -2226,7 +2226,7 @@ u_int layout_set_previous(struct window *); u_int mode_tree_count_tagged(struct mode_tree_data *); void *mode_tree_get_current(struct mode_tree_data *); void mode_tree_each_tagged(struct mode_tree_data *, void (*)(void *, void *, - key_code), key_code, int); + struct client *, key_code), struct client *, key_code, int); void mode_tree_up(struct mode_tree_data *, int); void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, diff --git a/window-buffer.c b/window-buffer.c index e37cd32aa9..5f58a8581b 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -319,7 +319,8 @@ window_buffer_resize(struct window_pane *wp, u_int sx, u_int sy) } static void -window_buffer_do_delete(void* modedata, void *itemdata, __unused key_code key) +window_buffer_do_delete(void* modedata, void *itemdata, + __unused struct client *c, __unused key_code key) { struct window_buffer_modedata *data = modedata; struct window_buffer_itemdata *item = itemdata; @@ -331,53 +332,53 @@ window_buffer_do_delete(void* modedata, void *itemdata, __unused key_code key) paste_free(pb); } +static void +window_buffer_do_paste(void* modedata, void *itemdata, struct client *c, + __unused key_code key) +{ + struct window_buffer_modedata *data = modedata; + struct window_buffer_itemdata *item = itemdata; + struct paste_buffer *pb; + + if ((pb = paste_get_name(item->name)) != NULL) + mode_tree_run_command(c, NULL, data->command, item->name); +} + static void window_buffer_key(struct window_pane *wp, struct client *c, __unused struct session *s, key_code key, struct mouse_event *m) { struct window_buffer_modedata *data = wp->modedata; + struct mode_tree_data *mtd = data->data; struct window_buffer_itemdata *item; - char *command, *name; int finished; - /* - * t = toggle tag - * T = tag none - * C-t = tag all - * q = exit - * O = change sort order - * - * d = delete buffer - * D = delete tagged buffers - * Enter = paste buffer - */ - - finished = mode_tree_key(data->data, c, &key, m); + finished = mode_tree_key(mtd, c, &key, m); switch (key) { case 'd': - item = mode_tree_get_current(data->data); - window_buffer_do_delete(data, item, key); - mode_tree_build(data->data); + item = mode_tree_get_current(mtd); + window_buffer_do_delete(data, item, c, key); + mode_tree_build(mtd); break; case 'D': - mode_tree_each_tagged(data->data, window_buffer_do_delete, key, - 0); - mode_tree_build(data->data); + mode_tree_each_tagged(mtd, window_buffer_do_delete, c, key, 0); + mode_tree_build(mtd); + break; + case 'P': + mode_tree_each_tagged(mtd, window_buffer_do_paste, c, key, 0); + finished = 1; break; + case 'p': case '\r': - item = mode_tree_get_current(data->data); - command = xstrdup(data->command); - name = xstrdup(item->name); - window_pane_reset_mode(wp); - mode_tree_run_command(c, NULL, command, name); - free(name); - free(command); - return; + item = mode_tree_get_current(mtd); + window_buffer_do_paste(data, item, c, key); + finished = 1; + break; } if (finished || paste_get_top(NULL) == NULL) window_pane_reset_mode(wp); else { - mode_tree_draw(data->data); + mode_tree_draw(mtd); wp->flags |= PANE_REDRAW; } } diff --git a/window-client.c b/window-client.c index 214d3b7cfa..4b57aa23a7 100644 --- a/window-client.c +++ b/window-client.c @@ -301,7 +301,8 @@ window_client_resize(struct window_pane *wp, u_int sx, u_int sy) } static void -window_client_do_detach(void* modedata, void *itemdata, key_code key) +window_client_do_detach(void* modedata, void *itemdata, + __unused struct client *c, key_code key) { struct window_client_modedata *data = modedata; struct window_client_itemdata *item = itemdata; @@ -321,56 +322,35 @@ window_client_key(struct window_pane *wp, struct client *c, __unused struct session *s, key_code key, struct mouse_event *m) { struct window_client_modedata *data = wp->modedata; + struct mode_tree_data *mtd = data->data; struct window_client_itemdata *item; - char *command, *name; int finished; - /* - * t = toggle tag - * T = tag none - * C-t = tag all - * q = exit - * O = change sort order - * - * d = detach client - * D = detach tagged clients - * x = detach and kill client - * X = detach and kill tagged clients - * z = suspend client - * Z = suspend tagged clients - * Enter = detach client - */ - - finished = mode_tree_key(data->data, c, &key, m); + finished = mode_tree_key(mtd, c, &key, m); switch (key) { case 'd': case 'x': case 'z': - item = mode_tree_get_current(data->data); - window_client_do_detach(data, item, key); - mode_tree_build(data->data); + item = mode_tree_get_current(mtd); + window_client_do_detach(data, item, c, key); + mode_tree_build(mtd); break; case 'D': case 'X': case 'Z': - mode_tree_each_tagged(data->data, window_client_do_detach, key, - 0); - mode_tree_build(data->data); + mode_tree_each_tagged(mtd, window_client_do_detach, c, key, 0); + mode_tree_build(mtd); break; case '\r': - item = mode_tree_get_current(data->data); - command = xstrdup(data->command); - name = xstrdup(item->c->ttyname); - window_pane_reset_mode(wp); - mode_tree_run_command(c, NULL, command, name); - free(name); - free(command); - return; + item = mode_tree_get_current(mtd); + mode_tree_run_command(c, NULL, data->command, item->c->ttyname); + finished = 1; + break; } if (finished || server_client_how_many() == 0) window_pane_reset_mode(wp); else { - mode_tree_draw(data->data); + mode_tree_draw(mtd); wp->flags |= PANE_REDRAW; } } diff --git a/window-tree.c b/window-tree.c index a95503f8b7..b7626c86c0 100644 --- a/window-tree.c +++ b/window-tree.c @@ -95,7 +95,6 @@ struct window_tree_modedata { struct window_tree_itemdata **item_list; u_int item_size; - struct client *client; const char *entered; struct cmd_find_state fs; @@ -898,7 +897,8 @@ window_tree_get_target(struct window_tree_itemdata *item, } static void -window_tree_command_each(void* modedata, void* itemdata, __unused key_code key) +window_tree_command_each(void* modedata, void* itemdata, struct client *c, + __unused key_code key) { struct window_tree_modedata *data = modedata; struct window_tree_itemdata *item = itemdata; @@ -907,7 +907,7 @@ window_tree_command_each(void* modedata, void* itemdata, __unused key_code key) name = window_tree_get_target(item, &fs); if (name != NULL) - mode_tree_run_command(data->client, &fs, data->entered, name); + mode_tree_run_command(c, &fs, data->entered, name); free(name); } @@ -934,13 +934,9 @@ window_tree_command_callback(struct client *c, void *modedata, const char *s, if (data->dead) return (0); - data->client = c; data->entered = s; - - mode_tree_each_tagged(data->data, window_tree_command_each, KEYC_NONE, - 1); - - data->client = NULL; + mode_tree_each_tagged(data->data, window_tree_command_each, c, + KEYC_NONE, 1); data->entered = NULL; data->references++; @@ -963,7 +959,7 @@ window_tree_key(struct window_pane *wp, struct client *c, { struct window_tree_modedata *data = wp->modedata; struct window_tree_itemdata *item; - char *command, *name, *prompt; + char *name, *prompt; struct cmd_find_state fs; int finished; u_int tagged; @@ -992,14 +988,12 @@ window_tree_key(struct window_pane *wp, struct client *c, break; case '\r': item = mode_tree_get_current(data->data); - command = xstrdup(data->command); name = window_tree_get_target(item, &fs); - window_pane_reset_mode(wp); if (name != NULL) - mode_tree_run_command(c, NULL, command, name); + mode_tree_run_command(c, NULL, data->command, name); + finished = 1; free(name); - free(command); - return; + break; } if (finished) window_pane_reset_mode(wp); From 6e8d29e9a208862a918871b736a0142cf4b91f5b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 25 Oct 2017 12:29:10 +0100 Subject: [PATCH 024/836] Update TODO. --- TODO | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/TODO b/TODO index 5a8892d2e9..7a15c35668 100644 --- a/TODO +++ b/TODO @@ -110,21 +110,22 @@ bind -n DoubleClick3Status confirm-before -p "kill-window #I? (y/n)" kill-window * respawn -c flag same as neww etc * marker lines in history (GitHub issue 1042) - * tree mode stuff: predefined filters, tag-all key, ... + * tree mode stuff: make command prompt (:) common code so all modes get it, + predefined filters, tag-all key, ... - hooks * more hooks for various things * finish after hooks for special commands. these do not have a hook at - the moment: + the moment: attach-session detach-client kill-server respawn-window swap-window break-pane find-window kill-session rotate-window switch-client choose-tree if-shell kill-window run-shell wait-for command-prompt join-pane move-window source-file confirm-before kill-pane respawn-pane swap-pane - at the moment AFTERHOOK uses current only if target is not valid, - but target is ALWAYS valid - it should use current if no -t flag? - then select-* could use AFTERHOOK + at the moment AFTERHOOK uses current only if target is not valid, + but target is ALWAYS valid - it should use current if no -t flag? + then select-* could use AFTERHOOK * multiple hooks with the same name? * finish hooks for notifys * for session_closed, if no sessions at all, perhaps fake up a - temporary one + temporary one From 78ae4ee82c4596de09b6e6f379e83d638ff2752d Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Oct 2017 12:13:20 +0000 Subject: [PATCH 025/836] h/l keys for expand and collapse. --- mode-tree.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mode-tree.c b/mode-tree.c index e6d26b46b9..98f29e8289 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -848,6 +848,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, mode_tree_build(mtd); break; case KEYC_LEFT: + case 'h': case '-': if (line->flat || !current->expanded) current = current->parent; @@ -860,6 +861,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, } break; case KEYC_RIGHT: + case 'l': case '+': if (line->flat || current->expanded) mode_tree_down(mtd, 0); From 578a63bbc9ac29378f844827fc393e21ae6cb6b6 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Oct 2017 14:14:52 +0000 Subject: [PATCH 026/836] Default allow-rename to off because it is ridiculous that applications are even able to do this and confusing when they do. --- options-table.c | 2 +- tmux.1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/options-table.c b/options-table.c index a4d450d71e..c3363e480b 100644 --- a/options-table.c +++ b/options-table.c @@ -548,7 +548,7 @@ const struct options_table_entry options_table[] = { { .name = "allow-rename", .type = OPTIONS_TABLE_FLAG, .scope = OPTIONS_TABLE_WINDOW, - .default_num = 1 + .default_num = 0 }, { .name = "alternate-screen", diff --git a/tmux.1 b/tmux.1 index 0cf8036764..984c74734f 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3019,7 +3019,7 @@ and poor for interactive programs such as shells. .Xc Allow programs to change the window name using a terminal escape sequence (\eek...\ee\e\e). -The default is on. +The default is off. .Pp .It Xo Ic alternate-screen .Op Ic on | off From 37f83adca8b965133ebdaeebea790ae897bd7175 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 25 Oct 2017 15:19:41 +0100 Subject: [PATCH 027/836] Update CHANGES. --- CHANGES | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGES b/CHANGES index 24bc1dfa62..8d40d396b2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,19 @@ CHANGES FROM 2.6 TO master +* Support %else in config files to match %if; from Brad Town in GitHub issue + 1071. + +* Fix "kind" terminfo(5) capability to be S-Down not S-Up. + +* Add a box around the preview label in tree mode. + +* Show exit status and time in the remain-on-exit pane text; from Timo + Boettcher in GitHub issue 1103. + +* Correctly use pane-base-index in tree mode. + +* Change the allow-rename option default to off. + * Support for xterm(1) title stack escape sequences (GitHub issue 1075 from Brad Town). From be4c01697cec057e8043eb6b81ef959271581eb3 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Oct 2017 15:20:10 +0000 Subject: [PATCH 028/836] Note that notifications are also hooks. --- tmux.1 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 984c74734f..b2171b4c71 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3347,7 +3347,12 @@ layout after every set-hook after-split-window "selectl even-vertical" .Ed .Pp -In addition, the following hooks are available: +All the notifications listed in the +.Sx CONTROL MODE +section are hooks (without any arguments), except +.Ic %exit . +The following additional hooks are available: +.Pp .Bl -tag -width "XXXXXXXXXXXXXXXXXXXXXX" .It alert-activity Run when a window has activity. From e91e8a2a6c9bd36309acc58723cb62edc4410931 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 26 Oct 2017 08:17:12 +0000 Subject: [PATCH 029/836] Fix crash exiting command prompt (from Alex Maese in GitHub issue 1139) and a man page tweak from jmc. --- tmux.1 | 1 - window-tree.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index b2171b4c71..847e3e1b31 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3352,7 +3352,6 @@ All the notifications listed in the section are hooks (without any arguments), except .Ic %exit . The following additional hooks are available: -.Pp .Bl -tag -width "XXXXXXXXXXXXXXXXXXXXXX" .It alert-activity Run when a window has activity. diff --git a/window-tree.c b/window-tree.c index b7626c86c0..164f0aadea 100644 --- a/window-tree.c +++ b/window-tree.c @@ -931,7 +931,7 @@ window_tree_command_callback(struct client *c, void *modedata, const char *s, { struct window_tree_modedata *data = modedata; - if (data->dead) + if (s == NULL || data->dead) return (0); data->entered = s; From 3887d95bcae1f31ec13c2a24ff29ad211a93a5f7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 18:26:38 +0000 Subject: [PATCH 030/836] There is no point in reflowing panes which have not changed width. --- screen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/screen.c b/screen.c index 800dbe8f6e..c792c04afe 100644 --- a/screen.c +++ b/screen.c @@ -197,7 +197,8 @@ screen_resize(struct screen *s, u_int sx, u_int sy, int reflow) * is simpler and more reliable so let's do that. */ screen_reset_tabs(s); - } + } else + reflow = 0; if (sy != screen_size_y(s)) screen_resize_y(s, sy); From c1f62f1fdebc3bd000b81bd93dcae6f1a539f345 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 18:27:35 +0000 Subject: [PATCH 031/836] Only show the first member of session groups in tree mode (-G flag disables). --- cmd-choose-tree.c | 4 ++-- format.c | 41 ++++++++++++++++++++++++++++++++++++++--- session.c | 6 +----- tmux.1 | 7 ++++++- tmux.h | 1 + window-tree.c | 15 +++++++++++++-- 6 files changed, 61 insertions(+), 13 deletions(-) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index 65c3ae0afc..815c2a0341 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -30,8 +30,8 @@ const struct cmd_entry cmd_choose_tree_entry = { .name = "choose-tree", .alias = NULL, - .args = { "F:f:NO:st:w", 0, 1 }, - .usage = "[-Nsw] [-F format] [-f filter] [-O sort-order] " + .args = { "F:Gf:NO:st:w", 0, 1 }, + .usage = "[-GNsw] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/format.c b/format.c index aa8396d738..8c5a0698f9 100644 --- a/format.c +++ b/format.c @@ -572,8 +572,38 @@ format_cb_pane_tabs(struct format_tree *ft, struct format_entry *fe) evbuffer_add(buffer, ",", 1); evbuffer_add_printf(buffer, "%u", i); } - size = EVBUFFER_LENGTH(buffer); - xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); + if ((size = EVBUFFER_LENGTH(buffer)) != 0) + xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); + evbuffer_free(buffer); +} + +/* Callback for session_group_others. */ +static void +format_cb_session_group_others(struct format_tree *ft, struct format_entry *fe) +{ + struct session *s = ft->s; + struct session_group *sg; + struct session *loop; + struct evbuffer *buffer; + int size; + + if (s == NULL) + return; + sg = session_group_contains(s); + if (sg == NULL) + return; + + buffer = evbuffer_new(); + TAILQ_FOREACH(loop, &sg->sessions, gentry) { + if (loop == s) + continue; + + if (EVBUFFER_LENGTH(buffer) > 0) + evbuffer_add(buffer, ",", 1); + evbuffer_add_printf(buffer, "%s", loop->name); + } + if ((size = EVBUFFER_LENGTH(buffer)) != 0) + xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer)); evbuffer_free(buffer); } @@ -1253,8 +1283,13 @@ format_defaults_session(struct format_tree *ft, struct session *s) sg = session_group_contains(s); format_add(ft, "session_grouped", "%d", sg != NULL); - if (sg != NULL) + if (sg != NULL) { format_add(ft, "session_group", "%s", sg->name); + format_add(ft, "session_group_size", "%u", + session_group_count (sg)); + format_add_cb(ft, "session_group_others", + format_cb_session_group_others); + } format_add_tv(ft, "session_created", &s->creation_time); format_add_tv(ft, "session_last_attached", &s->last_attached_time); diff --git a/session.c b/session.c index a675ae3d26..11493181b2 100644 --- a/session.c +++ b/session.c @@ -39,10 +39,6 @@ static struct winlink *session_next_alert(struct winlink *); static struct winlink *session_previous_alert(struct winlink *); static void session_group_remove(struct session *); -static u_int session_group_count(struct session_group *); -static void session_group_synchronize1(struct session *, struct session *); - -static u_int session_group_count(struct session_group *); static void session_group_synchronize1(struct session *, struct session *); RB_GENERATE(sessions, session, entry, session_cmp); @@ -624,7 +620,7 @@ session_group_remove(struct session *s) } /* Count number of sessions in session group. */ -static u_int +u_int session_group_count(struct session_group *sg) { struct session *s; diff --git a/tmux.1 b/tmux.1 index 847e3e1b31..b7b2a08850 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1428,7 +1428,7 @@ starts without the preview. This command works only if at least one client is attached. .It Xo .Ic choose-tree -.Op Fl Nsw +.Op Fl GNsw .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -1484,6 +1484,9 @@ If a filter would lead to an empty list, it is ignored. specifies the format for each item in the tree. .Fl N starts without the preview. +.Fl G +includes all sessions in any session groups in the tree rather than only the +first. This command works only if at least one client is attached. .It Xo .Ic display-panes @@ -3710,6 +3713,8 @@ The following variables are available, where appropriate: .It Li "session_format" Ta "" Ta "1 if format is for a session (not assuming the current)" .It Li "session_last_attached" Ta "" Ta "Time session last attached" .It Li "session_group" Ta "" Ta "Name of session group" +.It Li "session_group_size" Ta "" Ta "Size of session group" +.It Li "session_group_others" Ta "" Ta "List of other sessions in group" .It Li "session_grouped" Ta "" Ta "1 if session in a group" .It Li "session_height" Ta "" Ta "Height of session" .It Li "session_id" Ta "" Ta "Unique session ID" diff --git a/tmux.h b/tmux.h index 720ff40ef6..974a067805 100644 --- a/tmux.h +++ b/tmux.h @@ -2335,6 +2335,7 @@ struct session_group *session_group_new(const char *); void session_group_add(struct session_group *, struct session *); void session_group_synchronize_to(struct session *); void session_group_synchronize_from(struct session *); +u_int session_group_count(struct session_group *); void session_renumber_windows(struct session *); /* utf8.c */ diff --git a/window-tree.c b/window-tree.c index 164f0aadea..8765628a92 100644 --- a/window-tree.c +++ b/window-tree.c @@ -43,8 +43,12 @@ static void window_tree_key(struct window_pane *, "#{?#{==:#{window_panes},1}, \"#{pane_title}\",}" \ "," \ "#{session_windows} windows" \ - "#{?session_grouped, (group ,}" \ - "#{session_group}#{?session_grouped,),}" \ + "#{?session_grouped, " \ + "(group #{session_group}" \ + "#{?session_group_others," \ + " with #{session_group_others}," \ + "})," \ + "}" \ "#{?session_attached, (attached),}" \ "}" \ "}" @@ -91,6 +95,7 @@ struct window_tree_modedata { struct mode_tree_data *data; char *format; char *command; + int squash_groups; struct window_tree_itemdata **item_list; u_int item_size; @@ -394,6 +399,7 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, { struct window_tree_modedata *data = modedata; struct session *s, **l; + struct session_group *sg; u_int n, i; for (i = 0; i < data->item_size; i++) @@ -405,6 +411,10 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, l = NULL; n = 0; RB_FOREACH(s, sessions, &sessions) { + if (data->squash_groups && + (sg = session_group_contains(s)) != NULL && + s != TAILQ_FIRST(&sg->sessions)) + continue; l = xreallocarray(l, n + 1, sizeof *l); l[n++] = s; } @@ -805,6 +815,7 @@ window_tree_init(struct window_pane *wp, struct cmd_find_state *fs, data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND); else data->command = xstrdup(args->argv[0]); + data->squash_groups = !args_has(args, 'G'); data->data = mode_tree_start(wp, args, window_tree_build, window_tree_draw, window_tree_search, data, window_tree_sort_list, From 95850e1aca6697df784d02c24a0ca997f82f90f7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 18:43:51 +0000 Subject: [PATCH 032/836] Tweak previous slightly so that current session is chosen if it is in the group rather than first. --- format.c | 5 ++++- window-tree.c | 12 ++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/format.c b/format.c index 8c5a0698f9..e254eb229c 100644 --- a/format.c +++ b/format.c @@ -795,8 +795,11 @@ format_find(struct format_tree *ft, const char *key, int modifiers) found = s; goto found; } - if (fe->value == NULL && fe->cb != NULL) + if (fe->value == NULL && fe->cb != NULL) { fe->cb(ft, fe); + if (fe->value == NULL) + fe->value = xstrdup(""); + } found = fe->value; goto found; } diff --git a/window-tree.c b/window-tree.c index 8765628a92..563c64e0da 100644 --- a/window-tree.c +++ b/window-tree.c @@ -399,9 +399,11 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, { struct window_tree_modedata *data = modedata; struct session *s, **l; - struct session_group *sg; + struct session_group *sg, *current; u_int n, i; + current = session_group_contains(data->fs.s); + for (i = 0; i < data->item_size; i++) window_tree_free_item(data->item_list[i]); free(data->item_list); @@ -412,9 +414,11 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, n = 0; RB_FOREACH(s, sessions, &sessions) { if (data->squash_groups && - (sg = session_group_contains(s)) != NULL && - s != TAILQ_FIRST(&sg->sessions)) - continue; + (sg = session_group_contains(s)) != NULL) { + if ((sg == current && s != data->fs.s) || + (sg != current && s != TAILQ_FIRST(&sg->sessions))) + continue; + } l = xreallocarray(l, n + 1, sizeof *l); l[n++] = s; } From 17655e5ba65e37787cd9920e1a89aedf6f623957 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 18:52:05 +0000 Subject: [PATCH 033/836] Format for group list of "other sessions" is a bit weird, just list all the sessions in the group. --- format.c | 11 ++++------- tmux.1 | 2 +- window-tree.c | 6 ++---- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/format.c b/format.c index e254eb229c..1b967c936c 100644 --- a/format.c +++ b/format.c @@ -577,9 +577,9 @@ format_cb_pane_tabs(struct format_tree *ft, struct format_entry *fe) evbuffer_free(buffer); } -/* Callback for session_group_others. */ +/* Callback for session_group_list. */ static void -format_cb_session_group_others(struct format_tree *ft, struct format_entry *fe) +format_cb_session_group_list(struct format_tree *ft, struct format_entry *fe) { struct session *s = ft->s; struct session_group *sg; @@ -595,9 +595,6 @@ format_cb_session_group_others(struct format_tree *ft, struct format_entry *fe) buffer = evbuffer_new(); TAILQ_FOREACH(loop, &sg->sessions, gentry) { - if (loop == s) - continue; - if (EVBUFFER_LENGTH(buffer) > 0) evbuffer_add(buffer, ",", 1); evbuffer_add_printf(buffer, "%s", loop->name); @@ -1290,8 +1287,8 @@ format_defaults_session(struct format_tree *ft, struct session *s) format_add(ft, "session_group", "%s", sg->name); format_add(ft, "session_group_size", "%u", session_group_count (sg)); - format_add_cb(ft, "session_group_others", - format_cb_session_group_others); + format_add_cb(ft, "session_group_list", + format_cb_session_group_list); } format_add_tv(ft, "session_created", &s->creation_time); diff --git a/tmux.1 b/tmux.1 index b7b2a08850..a67a7274aa 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3714,7 +3714,7 @@ The following variables are available, where appropriate: .It Li "session_last_attached" Ta "" Ta "Time session last attached" .It Li "session_group" Ta "" Ta "Name of session group" .It Li "session_group_size" Ta "" Ta "Size of session group" -.It Li "session_group_others" Ta "" Ta "List of other sessions in group" +.It Li "session_group_list" Ta "" Ta "List of sessions in group" .It Li "session_grouped" Ta "" Ta "1 if session in a group" .It Li "session_height" Ta "" Ta "Height of session" .It Li "session_id" Ta "" Ta "Unique session ID" diff --git a/window-tree.c b/window-tree.c index 563c64e0da..c83db5574b 100644 --- a/window-tree.c +++ b/window-tree.c @@ -44,10 +44,8 @@ static void window_tree_key(struct window_pane *, "," \ "#{session_windows} windows" \ "#{?session_grouped, " \ - "(group #{session_group}" \ - "#{?session_group_others," \ - " with #{session_group_others}," \ - "})," \ + "(group #{session_group}: " \ + "#{session_group_list})," \ "}" \ "#{?session_attached, (attached),}" \ "}" \ From 8d37f699ad2406ad96080b0cee211142dbcb33cb Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 21:29:17 +0000 Subject: [PATCH 034/836] Add a "fast" version of screen_write_copy for tree mode that doesn't do all the checks and selection and marking stuff needed for copy mode. --- mode-tree.c | 2 +- screen-write.c | 55 ++++++++++++++++++++++++++++++++++++++----------- status.c | 3 +-- tmux.h | 2 ++ window-client.c | 4 ++-- 5 files changed, 49 insertions(+), 17 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 98f29e8289..32ae4a33b8 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -595,7 +595,7 @@ mode_tree_draw(struct mode_tree_data *mtd) box = mtd->drawcb(mtd->modedata, mti->itemdata, box_x, box_y); if (box != NULL) { screen_write_cursormove(&ctx, 2, h + 1); - screen_write_copy(&ctx, box, 0, 0, box_x, box_y, NULL, NULL); + screen_write_fast_copy(&ctx, box, 0, 0, box_x, box_y); screen_free(box); } diff --git a/screen-write.c b/screen-write.c index f090d6fa05..37a51fcb77 100644 --- a/screen-write.c +++ b/screen-write.c @@ -351,11 +351,10 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, free(msg); } -/* Copy from another screen. */ +/* Copy from another screen. Assumes target region is big enough. */ void screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, - u_int py, u_int nx, u_int ny, bitstr_t *markbs, - const struct grid_cell *markgc) + u_int py, u_int nx, u_int ny, bitstr_t *mbs, const struct grid_cell *mgc) { struct screen *s = ctx->s; struct grid *gd = src->grid; @@ -371,22 +370,52 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, for (yy = py; yy < py + ny; yy++) { for (xx = px; xx < px + nx; xx++) { grid_get_cell(gd, xx, yy, &gc); - if (markbs != NULL) { + if (mbs != NULL) { b = (yy * screen_size_x(src)) + xx; - if (bit_test(markbs, b)) { - gc.attr = markgc->attr; - gc.fg = markgc->fg; - gc.bg = markgc->bg; + if (bit_test(mbs, b)) { + gc.attr = mgc->attr; + gc.fg = mgc->fg; + gc.bg = mgc->bg; } } screen_write_cell(ctx, &gc); } - cy++; screen_write_cursormove(ctx, cx, cy); } } +/* + * Copy from another screen but without the selection stuff. Also assumes the + * target region is already big enough and already cleared. + */ +void +screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, + u_int px, u_int py, u_int nx, u_int ny) +{ + struct screen *s = ctx->s; + struct grid *gd = src->grid; + struct grid_cell gc; + u_int xx, yy, cx, cy; + + if (nx == 0 || ny == 0) + return; + + cy = s->cy; + for (yy = py; yy < py + ny; yy++) { + cx = s->cx; + for (xx = px; xx < px + nx; xx++) { + if (xx >= gd->linedata[yy].cellsize) + break; + grid_get_cell(gd, xx, yy, &gc); + if (!grid_cells_equal(&gc, &grid_default_cell)) + grid_view_set_cell(ctx->s->grid, cx, cy, &gc); + cx++; + } + cy++; + } +} + /* Draw a horizontal line on screen. */ void screen_write_hline(struct screen_write_ctx *ctx, u_int nx, int left, int right) @@ -471,7 +500,10 @@ screen_write_box(struct screen_write_ctx *ctx, u_int nx, u_int ny) screen_write_cursormove(ctx, cx, cy); } -/* Write a preview version of a window. */ +/* + * Write a preview version of a window. Assumes target area is big enough and + * already cleared. + */ void screen_write_preview(struct screen_write_ctx *ctx, struct screen *src, u_int nx, u_int ny) @@ -515,8 +547,7 @@ screen_write_preview(struct screen_write_ctx *ctx, struct screen *src, u_int nx, py = 0; } - screen_write_copy(ctx, src, px, src->grid->hsize + py, nx, ny, NULL, - NULL); + screen_write_fast_copy(ctx, src, px, src->grid->hsize + py, nx, ny); if (src->mode & MODE_CURSOR) { grid_view_get_cell(src->grid, src->cx, src->cy, &gc); diff --git a/status.c b/status.c index b24fc2eb28..60faa42dd2 100644 --- a/status.c +++ b/status.c @@ -508,8 +508,7 @@ status_redraw(struct client *c) /* Copy the window list. */ c->wlmouse = -wloffset + wlstart; screen_write_cursormove(&ctx, wloffset, 0); - screen_write_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1, NULL, - NULL); + screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); screen_free(&window_list); screen_write_stop(&ctx); diff --git a/tmux.h b/tmux.h index 974a067805..62e88248a2 100644 --- a/tmux.h +++ b/tmux.h @@ -2037,6 +2037,8 @@ void screen_write_putc(struct screen_write_ctx *, const struct grid_cell *, u_char); void screen_write_copy(struct screen_write_ctx *, struct screen *, u_int, u_int, u_int, u_int, bitstr_t *, const struct grid_cell *); +void screen_write_fast_copy(struct screen_write_ctx *, struct screen *, + u_int, u_int, u_int, u_int); void screen_write_hline(struct screen_write_ctx *, u_int, int, int); void screen_write_vline(struct screen_write_ctx *, u_int, int, int); void screen_write_box(struct screen_write_ctx *, u_int, u_int); diff --git a/window-client.c b/window-client.c index 4b57aa23a7..fc5b55e7f5 100644 --- a/window-client.c +++ b/window-client.c @@ -235,9 +235,9 @@ window_client_draw(__unused void *modedata, void *itemdata, u_int sx, u_int sy) screen_write_cursormove(&ctx, 0, sy - 1); if (c->old_status != NULL) - screen_write_copy(&ctx, c->old_status, 0, 0, sx, 1, NULL, NULL); + screen_write_fast_copy(&ctx, c->old_status, 0, 0, sx, 1); else - screen_write_copy(&ctx, &c->status, 0, 0, sx, 1, NULL, NULL); + screen_write_fast_copy(&ctx, &c->status, 0, 0, sx, 1); screen_write_stop(&ctx); return (&s); From 43264dfbf410489b36343a29cc83798a54df67f8 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Nov 2017 22:00:42 +0000 Subject: [PATCH 035/836] Make the mode draw function use the parent screen directly rather than its own to avoid copying twice. --- mode-tree.c | 28 ++++++++++--------------- screen-write.c | 2 +- tmux.h | 15 ++++++++------ window-buffer.c | 23 +++++++-------------- window-client.c | 30 ++++++++++----------------- window-tree.c | 55 +++++++++++++++++++++++-------------------------- 6 files changed, 65 insertions(+), 88 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 32ae4a33b8..4307dbf0b6 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -39,10 +39,9 @@ struct mode_tree_data { u_int sort_size; u_int sort_type; - void (*buildcb)(void *, u_int, uint64_t *, - const char *); - struct screen *(*drawcb)(void *, void *, u_int, u_int); - int (*searchcb)(void*, void *, const char *); + mode_tree_build_cb buildcb; + mode_tree_draw_cb drawcb; + mode_tree_search_cb searchcb; struct mode_tree_list children; struct mode_tree_list saved; @@ -265,8 +264,8 @@ mode_tree_count_tagged(struct mode_tree_data *mtd) } void -mode_tree_each_tagged(struct mode_tree_data *mtd, void (*cb)(void *, void *, - struct client *, key_code), struct client *c, key_code key, int current) +mode_tree_each_tagged(struct mode_tree_data *mtd, mode_tree_each_cb cb, + struct client *c, key_code key, int current) { struct mode_tree_item *mti; u_int i; @@ -288,10 +287,9 @@ mode_tree_each_tagged(struct mode_tree_data *mtd, void (*cb)(void *, void *, struct mode_tree_data * mode_tree_start(struct window_pane *wp, struct args *args, - void (*buildcb)(void *, u_int, uint64_t *, const char *), - struct screen *(*drawcb)(void *, void *, u_int, u_int), - int (*searchcb)(void *, void *, const char *), void *modedata, - const char **sort_list, u_int sort_size, struct screen **s) + mode_tree_build_cb buildcb, mode_tree_draw_cb drawcb, + mode_tree_search_cb searchcb, void *modedata, const char **sort_list, + u_int sort_size, struct screen **s) { struct mode_tree_data *mtd; const char *sort; @@ -463,7 +461,7 @@ void mode_tree_draw(struct mode_tree_data *mtd) { struct window_pane *wp = mtd->wp; - struct screen *s = &mtd->screen, *box = NULL; + struct screen *s = &mtd->screen; struct mode_tree_line *line; struct mode_tree_item *mti; struct options *oo = wp->window->options; @@ -591,13 +589,9 @@ mode_tree_draw(struct mode_tree_data *mtd) box_x = w - 4; box_y = sy - h - 2; - if (box_x != 0 && box_y != 0) - box = mtd->drawcb(mtd->modedata, mti->itemdata, box_x, box_y); - if (box != NULL) { + if (box_x != 0 && box_y != 0) { screen_write_cursormove(&ctx, 2, h + 1); - screen_write_fast_copy(&ctx, box, 0, 0, box_x, box_y); - - screen_free(box); + mtd->drawcb(mtd->modedata, mti->itemdata, &ctx, box_x, box_y); } screen_write_stop(&ctx); diff --git a/screen-write.c b/screen-write.c index 37a51fcb77..44c28982ae 100644 --- a/screen-write.c +++ b/screen-write.c @@ -457,7 +457,7 @@ screen_write_vline(struct screen_write_ctx *ctx, u_int ny, int top, int bottom) screen_write_cursormove(ctx, cx, cy + i); screen_write_putc(ctx, &gc, 'x'); } - screen_write_cursormove(ctx, cx, cy + ny); + screen_write_cursormove(ctx, cx, cy + ny - 1); screen_write_putc(ctx, &gc, bottom ? 'v' : 'x'); screen_write_cursormove(ctx, cx, cy); diff --git a/tmux.h b/tmux.h index 62e88248a2..dcd4c67674 100644 --- a/tmux.h +++ b/tmux.h @@ -2225,17 +2225,20 @@ u_int layout_set_next(struct window *); u_int layout_set_previous(struct window *); /* mode-tree.c */ +typedef void (*mode_tree_build_cb)(void *, u_int, uint64_t *, const char *); +typedef void (*mode_tree_draw_cb)(void *, void *, struct screen_write_ctx *, + u_int, u_int); +typedef int (*mode_tree_search_cb)(void *, void *, const char *); +typedef void (*mode_tree_each_cb)(void *, void *, struct client *, key_code); u_int mode_tree_count_tagged(struct mode_tree_data *); void *mode_tree_get_current(struct mode_tree_data *); -void mode_tree_each_tagged(struct mode_tree_data *, void (*)(void *, void *, - struct client *, key_code), struct client *, key_code, int); +void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, + struct client *, key_code, int); void mode_tree_up(struct mode_tree_data *, int); void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, - void (*)(void *, u_int, uint64_t *, const char *), - struct screen *(*)(void *, void *, u_int, u_int), - int (*)(void *, void *, const char *), void *, const char **, - u_int, struct screen **); + mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, + void *, const char **, u_int, struct screen **); void mode_tree_build(struct mode_tree_data *); void mode_tree_free(struct mode_tree_data *); void mode_tree_resize(struct mode_tree_data *, u_int, u_int); diff --git a/window-buffer.c b/window-buffer.c index 5f58a8581b..14b15762cf 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -196,26 +196,20 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, } -static struct screen * -window_buffer_draw(__unused void *modedata, void *itemdata, u_int sx, u_int sy) +static void +window_buffer_draw(__unused void *modedata, void *itemdata, + struct screen_write_ctx *ctx, u_int sx, u_int sy) { struct window_buffer_itemdata *item = itemdata; struct paste_buffer *pb; - static struct screen s; - struct screen_write_ctx ctx; char line[1024]; const char *pdata, *end, *cp; size_t psize, at; - u_int i; + u_int i, cx = ctx->s->cx, cy = ctx->s->cy; pb = paste_get_name(item->name); if (pb == NULL) - return (NULL); - - screen_init(&s, sx, sy, 0); - - screen_write_start(&ctx, NULL, &s); - screen_write_clearscreen(&ctx, 8); + return; pdata = end = paste_buffer_data(pb, &psize); for (i = 0; i < sy; i++) { @@ -232,17 +226,14 @@ window_buffer_draw(__unused void *modedata, void *itemdata, u_int sx, u_int sy) line[at] = '\0'; if (*line != '\0') { - screen_write_cursormove(&ctx, 0, i); - screen_write_puts(&ctx, &grid_default_cell, "%s", line); + screen_write_cursormove(ctx, cx, cy + i); + screen_write_puts(ctx, &grid_default_cell, "%s", line); } if (end == pdata + psize) break; end++; } - - screen_write_stop(&ctx); - return (&s); } static int diff --git a/window-client.c b/window-client.c index fc5b55e7f5..5f1b58bad8 100644 --- a/window-client.c +++ b/window-client.c @@ -210,37 +210,29 @@ window_client_build(void *modedata, u_int sort_type, __unused uint64_t *tag, } } -static struct screen * -window_client_draw(__unused void *modedata, void *itemdata, u_int sx, u_int sy) +static void +window_client_draw(__unused void *modedata, void *itemdata, + struct screen_write_ctx *ctx, u_int sx, u_int sy) { struct window_client_itemdata *item = itemdata; struct client *c = item->c; struct window_pane *wp; - static struct screen s; - struct screen_write_ctx ctx; + u_int cx = ctx->s->cx, cy = ctx->s->cy; if (c->session == NULL || (c->flags & (CLIENT_DEAD|CLIENT_DETACHING))) - return (NULL); + return; wp = c->session->curw->window->active; - screen_init(&s, sx, sy, 0); + screen_write_preview(ctx, &wp->base, sx, sy - 3); - screen_write_start(&ctx, NULL, &s); - screen_write_clearscreen(&ctx, 8); + screen_write_cursormove(ctx, cx, cy + sy - 2); + screen_write_hline(ctx, sx, 0, 0); - screen_write_preview(&ctx, &wp->base, sx, sy - 3); - - screen_write_cursormove(&ctx, 0, sy - 2); - screen_write_hline(&ctx, sx, 0, 0); - - screen_write_cursormove(&ctx, 0, sy - 1); + screen_write_cursormove(ctx, cx, cy + sy - 1); if (c->old_status != NULL) - screen_write_fast_copy(&ctx, c->old_status, 0, 0, sx, 1); + screen_write_fast_copy(ctx, c->old_status, 0, 0, sx, 1); else - screen_write_fast_copy(&ctx, &c->status, 0, 0, sx, 1); - - screen_write_stop(&ctx); - return (&s); + screen_write_fast_copy(ctx, &c->status, 0, 0, sx, 1); } static struct screen * diff --git a/window-tree.c b/window-tree.c index c83db5574b..8e676c7287 100644 --- a/window-tree.c +++ b/window-tree.c @@ -482,6 +482,7 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, struct options *oo = s->options; struct winlink *wl; struct window *w; + u_int cx = ctx->s->cx, cy = ctx->s->cy; u_int loop, total, visible, each, width, offset; u_int current, start, end, remaining, i; struct grid_cell gc; @@ -544,15 +545,15 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, return; if (left) { - screen_write_cursormove(ctx, 2, 0); + screen_write_cursormove(ctx, cx + 2, cy); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, 0, sy / 2); + screen_write_cursormove(ctx, cx, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, "<"); } if (right) { - screen_write_cursormove(ctx, sx - 3, 0); + screen_write_cursormove(ctx, cx + sx - 3, cy); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, sx - 1, sy / 2); + screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, ">"); } @@ -580,17 +581,18 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, else width = each - 1; - screen_write_cursormove(ctx, offset, 0); + screen_write_cursormove(ctx, cx + offset, cy); screen_write_preview(ctx, &w->active->base, width, sy); xasprintf(&label, " %u:%s ", wl->idx, w->name); if (strlen(label) > width) xasprintf(&label, " %u ", wl->idx); - window_tree_draw_label(ctx, offset, 0, width, sy, &gc, label); + window_tree_draw_label(ctx, cx + offset, cy, width, sy, &gc, + label); free(label); if (loop != end - 1) { - screen_write_cursormove(ctx, offset + width, 0); + screen_write_cursormove(ctx, cx + offset + width, cy); screen_write_vline(ctx, sy, 0, 0); } loop++; @@ -605,6 +607,7 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, { struct options *oo = s->options; struct window_pane *wp; + u_int cx = ctx->s->cx, cy = ctx->s->cy; u_int loop, total, visible, each, width, offset; u_int current, start, end, remaining, i; struct grid_cell gc; @@ -667,15 +670,15 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, return; if (left) { - screen_write_cursormove(ctx, 2, 0); + screen_write_cursormove(ctx, cx + 2, cy); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, 0, sy / 2); + screen_write_cursormove(ctx, cx, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, "<"); } if (right) { - screen_write_cursormove(ctx, sx - 3, 0); + screen_write_cursormove(ctx, cx + sx - 3, cy); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, sx - 1, sy / 2); + screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, ">"); } @@ -702,17 +705,18 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, else width = each - 1; - screen_write_cursormove(ctx, offset, 0); + screen_write_cursormove(ctx, cx + offset, cy); screen_write_preview(ctx, &wp->base, width, sy); if (window_pane_index(wp, &pane_idx) != 0) pane_idx = loop; xasprintf(&label, " %u ", pane_idx); - window_tree_draw_label(ctx, offset, 0, each, sy, &gc, label); + window_tree_draw_label(ctx, cx + offset, cy, each, sy, &gc, + label); free(label); if (loop != end - 1) { - screen_write_cursormove(ctx, offset + width, 0); + screen_write_cursormove(ctx, cx + offset + width, cy); screen_write_vline(ctx, sy, 0, 0); } loop++; @@ -721,39 +725,32 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, } } -static struct screen * -window_tree_draw(void *modedata, void *itemdata, u_int sx, u_int sy) +static void +window_tree_draw(void *modedata, void *itemdata, struct screen_write_ctx *ctx, + u_int sx, u_int sy) { struct window_tree_itemdata *item = itemdata; struct session *sp; struct winlink *wlp; struct window_pane *wp; - static struct screen s; - struct screen_write_ctx ctx; window_tree_pull_item(item, &sp, &wlp, &wp); if (wp == NULL) - return (NULL); - - screen_init(&s, sx, sy, 0); - screen_write_start(&ctx, NULL, &s); + return; switch (item->type) { case WINDOW_TREE_NONE: - return (0); + break; case WINDOW_TREE_SESSION: - window_tree_draw_session(modedata, sp, &ctx, sx, sy); + window_tree_draw_session(modedata, sp, ctx, sx, sy); break; case WINDOW_TREE_WINDOW: - window_tree_draw_window(modedata, sp, wlp->window, &ctx, sx, sy); + window_tree_draw_window(modedata, sp, wlp->window, ctx, sx, sy); break; case WINDOW_TREE_PANE: - screen_write_preview(&ctx, &wp->base, sx, sy); + screen_write_preview(ctx, &wp->base, sx, sy); break; } - - screen_write_stop(&ctx); - return (&s); } static int From ba93a647f1b59d85340f9708ee2ae4fb6f201a64 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 Nov 2017 14:23:44 +0000 Subject: [PATCH 036/836] Change mouse in modes so that one click moves the cursor and a double click chooses the line. --- mode-tree.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 4307dbf0b6..28f9780577 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -726,7 +726,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, int choice; key_code tmp; - if (*key == KEYC_MOUSEDOWN1_PANE) { + if (KEYC_IS_MOUSE(*key)) { if (cmd_mouse_at(mtd->wp, m, &x, &y, 0) != 0) { *key = KEYC_NONE; return (0); @@ -736,8 +736,11 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, return (0); } if (mtd->offset + y < mtd->line_size) { - mtd->current = mtd->offset + y; - *key = '\r'; + if (*key == KEYC_MOUSEDOWN1_PANE || + *key == KEYC_DOUBLECLICK1_PANE) + mtd->current = mtd->offset + y; + if (*key == KEYC_DOUBLECLICK1_PANE) + *key = '\r'; return (0); } } From 50a5f84cb4accf806dea2235ca8d3749b107aac8 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 Nov 2017 17:02:33 +0000 Subject: [PATCH 037/836] Support mouse on preview in tree mode. --- grid.c | 2 +- mode-tree.c | 60 +++++++++++++++++----------- screen-write.c | 2 + tmux.h | 4 +- window-buffer.c | 2 +- window-client.c | 2 +- window-tree.c | 103 ++++++++++++++++++++++++++++++++++++++++++++---- 7 files changed, 140 insertions(+), 35 deletions(-) diff --git a/grid.c b/grid.c index aa9aea4c66..74e80f960b 100644 --- a/grid.c +++ b/grid.c @@ -182,7 +182,7 @@ grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) static int grid_check_y(struct grid *gd, u_int py) { - if ((py) >= (gd)->hsize + (gd)->sy) { + if (py >= gd->hsize + gd->sy) { log_debug("y out of range: %u", py); return (-1); } diff --git a/mode-tree.c b/mode-tree.c index 28f9780577..79af6ab5e6 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -190,27 +190,6 @@ mode_tree_clear_tagged(struct mode_tree_list *mtl) } } -static void -mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag) -{ - u_int i; - - for (i = 0; i < mtd->line_size; i++) { - if (mtd->line_list[i].item->tag == tag) - break; - } - if (i != mtd->line_size) { - mtd->current = i; - if (mtd->current > mtd->height - 1) - mtd->offset = mtd->current - mtd->height + 1; - else - mtd->offset = 0; - } else { - mtd->current = 0; - mtd->offset = 0; - } -} - void mode_tree_up(struct mode_tree_data *mtd, int wrap) { @@ -248,6 +227,36 @@ mode_tree_get_current(struct mode_tree_data *mtd) return (mtd->line_list[mtd->current].item->itemdata); } +void +mode_tree_expand_current(struct mode_tree_data *mtd) +{ + if (!mtd->line_list[mtd->current].item->expanded) { + mtd->line_list[mtd->current].item->expanded = 1; + mode_tree_build(mtd); + } +} + +void +mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag) +{ + u_int i; + + for (i = 0; i < mtd->line_size; i++) { + if (mtd->line_list[i].item->tag == tag) + break; + } + if (i != mtd->line_size) { + mtd->current = i; + if (mtd->current > mtd->height - 1) + mtd->offset = mtd->current - mtd->height + 1; + else + mtd->offset = 0; + } else { + mtd->current = 0; + mtd->offset = 0; + } +} + u_int mode_tree_count_tagged(struct mode_tree_data *mtd) { @@ -718,7 +727,7 @@ mode_tree_filter_free(void *data) int mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, - struct mouse_event *m) + struct mouse_event *m, u_int *xp, u_int *yp) { struct mode_tree_line *line; struct mode_tree_item *current, *parent; @@ -731,8 +740,13 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, *key = KEYC_NONE; return (0); } + if (xp != NULL) + *xp = x; + if (yp != NULL) + *yp = y; if (x > mtd->width || y > mtd->height) { - *key = KEYC_NONE; + if (!mtd->preview || y < mtd->height) + *key = KEYC_NONE; return (0); } if (mtd->offset + y < mtd->line_size) { diff --git a/screen-write.c b/screen-write.c index 44c28982ae..5ab472bd49 100644 --- a/screen-write.c +++ b/screen-write.c @@ -403,6 +403,8 @@ screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, cy = s->cy; for (yy = py; yy < py + ny; yy++) { + if (yy >= gd->hsize + gd->sy) + break; cx = s->cx; for (xx = px; xx < px + nx; xx++) { if (xx >= gd->linedata[yy].cellsize) diff --git a/tmux.h b/tmux.h index dcd4c67674..28fe134959 100644 --- a/tmux.h +++ b/tmux.h @@ -2232,6 +2232,8 @@ typedef int (*mode_tree_search_cb)(void *, void *, const char *); typedef void (*mode_tree_each_cb)(void *, void *, struct client *, key_code); u_int mode_tree_count_tagged(struct mode_tree_data *); void *mode_tree_get_current(struct mode_tree_data *); +void mode_tree_expand_current(struct mode_tree_data *); +void mode_tree_set_current(struct mode_tree_data *, uint64_t); void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, struct client *, key_code, int); void mode_tree_up(struct mode_tree_data *, int); @@ -2248,7 +2250,7 @@ struct mode_tree_item *mode_tree_add(struct mode_tree_data *, void mode_tree_remove(struct mode_tree_data *, struct mode_tree_item *); void mode_tree_draw(struct mode_tree_data *); int mode_tree_key(struct mode_tree_data *, struct client *, key_code *, - struct mouse_event *); + struct mouse_event *, u_int *, u_int *); void mode_tree_run_command(struct client *, struct cmd_find_state *, const char *, const char *); diff --git a/window-buffer.c b/window-buffer.c index 14b15762cf..d416e39f9e 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -344,7 +344,7 @@ window_buffer_key(struct window_pane *wp, struct client *c, struct window_buffer_itemdata *item; int finished; - finished = mode_tree_key(mtd, c, &key, m); + finished = mode_tree_key(mtd, c, &key, m, NULL, NULL); switch (key) { case 'd': item = mode_tree_get_current(mtd); diff --git a/window-client.c b/window-client.c index 5f1b58bad8..76e536ece0 100644 --- a/window-client.c +++ b/window-client.c @@ -318,7 +318,7 @@ window_client_key(struct window_pane *wp, struct client *c, struct window_client_itemdata *item; int finished; - finished = mode_tree_key(mtd, c, &key, m); + finished = mode_tree_key(mtd, c, &key, m, NULL, NULL); switch (key) { case 'd': case 'x': diff --git a/window-tree.c b/window-tree.c index 8e676c7287..4165047bb9 100644 --- a/window-tree.c +++ b/window-tree.c @@ -104,6 +104,12 @@ struct window_tree_modedata { enum window_tree_type type; int offset; + + int left; + int right; + u_int start; + u_int end; + u_int each; }; static void @@ -545,17 +551,25 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, return; if (left) { + data->left = cx + 2; screen_write_cursormove(ctx, cx + 2, cy); screen_write_vline(ctx, sy, 0, 0); screen_write_cursormove(ctx, cx, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, "<"); - } + } else + data->left = -1; if (right) { + data->right = cx + sx - 3; screen_write_cursormove(ctx, cx + sx - 3, cy); screen_write_vline(ctx, sy, 0, 0); screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, ">"); - } + } else + data->right = -1; + + data->start = start; + data->end = end; + data->each = each; i = loop = 0; RB_FOREACH(wl, winlinks, &s->windows) { @@ -670,17 +684,25 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, return; if (left) { + data->left = cx + 2; screen_write_cursormove(ctx, cx + 2, cy); screen_write_vline(ctx, sy, 0, 0); screen_write_cursormove(ctx, cx, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, "<"); - } + } else + data->left = -1; if (right) { + data->right = cx + sx - 3; screen_write_cursormove(ctx, cx + sx - 3, cy); screen_write_vline(ctx, sy, 0, 0); screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); screen_write_puts(ctx, &grid_default_cell, ">"); - } + } else + data->right = -1; + + data->start = start; + data->end = end; + data->each = each; i = loop = 0; TAILQ_FOREACH(wp, &w->panes, entry) { @@ -963,21 +985,86 @@ window_tree_command_free(void *modedata) window_tree_destroy(data); } +static key_code +window_tree_mouse(struct window_tree_modedata *data, key_code key, u_int x, + struct window_tree_itemdata *item) +{ + struct session *s; + struct winlink *wl; + struct window_pane *wp; + u_int loop; + + if (key != KEYC_MOUSEDOWN1_PANE) + return (KEYC_NONE); + + if (data->left != -1 && x <= (u_int)data->left) + return ('<'); + if (data->right != -1 && x >= (u_int)data->right) + return ('>'); + + if (data->left != -1) + x -= data->left; + else if (x != 0) + x--; + if (x == 0 || data->end == 0) + x = 0; + else { + x = x / data->each; + if (data->start + x >= data->end) + x = data->end - 1; + } + + window_tree_pull_item(item, &s, &wl, &wp); + if (item->type == WINDOW_TREE_SESSION) { + if (s == NULL) + return (KEYC_NONE); + mode_tree_expand_current(data->data); + loop = 0; + RB_FOREACH(wl, winlinks, &s->windows) { + if (loop == data->start + x) + break; + loop++; + } + if (wl != NULL) + mode_tree_set_current(data->data, (uint64_t)wl); + return ('\r'); + } + if (item->type == WINDOW_TREE_WINDOW) { + if (wl == NULL) + return (KEYC_NONE); + mode_tree_expand_current(data->data); + loop = 0; + TAILQ_FOREACH(wp, &wl->window->panes, entry) { + if (loop == data->start + x) + break; + loop++; + } + if (wp != NULL) + mode_tree_set_current(data->data, (uint64_t)wp); + return ('\r'); + } + return (KEYC_NONE); +} + static void window_tree_key(struct window_pane *wp, struct client *c, __unused struct session *s, key_code key, struct mouse_event *m) { struct window_tree_modedata *data = wp->modedata; - struct window_tree_itemdata *item; + struct window_tree_itemdata *item, *new_item; char *name, *prompt; struct cmd_find_state fs; int finished; - u_int tagged; + u_int tagged, x, y; item = mode_tree_get_current(data->data); - finished = mode_tree_key(data->data, c, &key, m); - if (item != mode_tree_get_current(data->data)) + finished = mode_tree_key(data->data, c, &key, m, &x, &y); + if (item != (new_item = mode_tree_get_current(data->data))) { + item = new_item; data->offset = 0; + } + if (KEYC_IS_MOUSE(key)) + key = window_tree_mouse(data, key, x, item); switch (key) { case '<': data->offset--; From a2681ffcee99a83d33d159132bb8e748f4144dd3 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 Nov 2017 17:11:20 +0000 Subject: [PATCH 038/836] Clear key properly if on space with nothing in it. --- mode-tree.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 79af6ab5e6..662d4b1738 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -745,7 +745,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, if (yp != NULL) *yp = y; if (x > mtd->width || y > mtd->height) { - if (!mtd->preview || y < mtd->height) + if (!mtd->preview) *key = KEYC_NONE; return (0); } @@ -755,8 +755,11 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, mtd->current = mtd->offset + y; if (*key == KEYC_DOUBLECLICK1_PANE) *key = '\r'; - return (0); - } + else + *key = KEYC_NONE; + } else + *key = KEYC_NONE; + return (0); } line = &mtd->line_list[mtd->current]; From 384736e9550be328e0209c1f217b164d2fbc8fa1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 Nov 2017 23:02:13 +0000 Subject: [PATCH 039/836] If we successfully change the directory, set PWD too to give the shell a hint in case of symlinks. --- window.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/window.c b/window.c index 2afd42d36d..78e81269ab 100644 --- a/window.c +++ b/window.c @@ -935,10 +935,13 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, proc_clear_signals(server_proc, 1); sigprocmask(SIG_SETMASK, &oldset, NULL); - if (chdir(wp->cwd) != 0) { - if ((home = find_home()) == NULL || chdir(home) != 0) - chdir("/"); - } + cwd = NULL; + if (chdir(wp->cwd) == 0) + cwd = wp->cwd; + else if ((home = find_home()) != NULL && chdir(home) == 0) + cwd = home; + else + chdir("/"); if (tcgetattr(STDIN_FILENO, &tio2) != 0) fatal("tcgetattr failed"); @@ -953,6 +956,8 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, if (path != NULL) environ_set(env, "PATH", "%s", path); + if (cwd != NULL) + environ_set(env, "PWD", "%s", cwd); environ_set(env, "TMUX_PANE", "%%%u", wp->id); environ_push(env); From d81fa579c34a2e198a7833740fca9b76092b2628 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 13 Nov 2017 11:49:11 +0000 Subject: [PATCH 040/836] When searching in copy mode, do not scroll if the result is already on screen. GitHub issue 1150. --- window-copy.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/window-copy.c b/window-copy.c index 09ccc26cf9..b804ffeb94 100644 --- a/window-copy.c +++ b/window-copy.c @@ -955,18 +955,22 @@ window_copy_scroll_to(struct window_pane *wp, u_int px, u_int py) data->cx = px; - gap = gd->sy / 4; - if (py < gd->sy) { - offset = 0; - data->cy = py; - } else if (py > gd->hsize + gd->sy - gap) { - offset = gd->hsize; - data->cy = py - gd->hsize; - } else { - offset = py + gap - gd->sy; - data->cy = py - offset; + if (py >= gd->hsize - data->oy && py < gd->hsize - data->oy + gd->sy) + data->cy = py - (gd->hsize - data->oy); + else { + gap = gd->sy / 4; + if (py < gd->sy) { + offset = 0; + data->cy = py; + } else if (py > gd->hsize + gd->sy - gap) { + offset = gd->hsize; + data->cy = py - gd->hsize; + } else { + offset = py + gap - gd->sy; + data->cy = py - offset; + } + data->oy = gd->hsize - offset; } - data->oy = gd->hsize - offset; window_copy_update_selection(wp, 1); window_copy_redraw_screen(wp); From aeda2e5808af7c4b629dce23d2b4331a77ecde83 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 15 Nov 2017 19:18:57 +0000 Subject: [PATCH 041/836] If there is a double width character at the very end of the line with not enough room to draw it, just leave it out. --- tty.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tty.c b/tty.c index 90361e3fbf..0dee5008e4 100644 --- a/tty.c +++ b/tty.c @@ -882,6 +882,7 @@ void tty_draw_line(struct tty *tty, const struct window_pane *wp, struct screen *s, u_int py, u_int ox, u_int oy) { + struct grid *gd = s->grid; struct grid_cell gc, last; u_int i, j, ux, sx, nx, width; int flags, cleared = 0; @@ -900,15 +901,15 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, * there may be empty background cells after it (from BCE). */ sx = screen_size_x(s); - if (sx > s->grid->linedata[s->grid->hsize + py].cellsize) - sx = s->grid->linedata[s->grid->hsize + py].cellsize; + if (sx > gd->linedata[gd->hsize + py].cellsize) + sx = gd->linedata[gd->hsize + py].cellsize; if (sx > tty->sx) sx = tty->sx; ux = 0; if (wp == NULL || py == 0 || - (~s->grid->linedata[s->grid->hsize + py - 1].flags & GRID_LINE_WRAPPED) || + (~gd->linedata[gd->hsize + py - 1].flags & GRID_LINE_WRAPPED) || ox != 0 || tty->cx < tty->sx || screen_size_x(s) < tty->sx) { @@ -932,7 +933,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, width = 0; for (i = 0; i < sx; i++) { - grid_view_get_cell(s->grid, i, py, &gc); + grid_view_get_cell(gd, i, py, &gc); if (len != 0 && (((~tty->flags & TTY_UTF8) && (gc.data.size != 1 || @@ -943,6 +944,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, gc.attr != last.attr || gc.fg != last.fg || gc.bg != last.bg || + ux + width + gc.data.width >= screen_size_x(s) || (sizeof buf) - len < gc.data.size)) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); @@ -956,7 +958,14 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, screen_select_cell(s, &last, &gc); else memcpy(&last, &gc, sizeof last); - if (((~tty->flags & TTY_UTF8) && + if (ux + gc.data.width > screen_size_x(s)) + for (j = 0; j < gc.data.width; j++) { + if (ux + j > screen_size_x(s)) + break; + tty_putc(tty, ' '); + ux++; + } + else if (((~tty->flags & TTY_UTF8) && (gc.data.size != 1 || *gc.data.data >= 0x7f || gc.data.width != 1)) || @@ -993,8 +1002,8 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } } - nx = screen_size_x(s) - ux; - if (!cleared && ux < tty->sx && nx != 0) { + if (!cleared && ux < screen_size_x(s)) { + nx = screen_size_x(s) - ux; tty_default_attributes(tty, wp, 8); tty_clear_line(tty, wp, oy + py, ox + ux, nx, 8); } From 533a5719c5edf53f0d7021d4340af230cc43ac8a Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 15 Nov 2017 19:21:24 +0000 Subject: [PATCH 042/836] Completely rewrite the reflow code to correctly handle double width characters (previously they were not accounted for). --- grid.c | 411 ++++++++++++++++++++++++++++++------------------- screen-write.c | 5 +- screen.c | 11 +- tmux.h | 2 +- 4 files changed, 258 insertions(+), 171 deletions(-) diff --git a/grid.c b/grid.c index 74e80f960b..1cd01cbdc0 100644 --- a/grid.c +++ b/grid.c @@ -43,22 +43,8 @@ static const struct grid_cell_entry grid_default_entry = { 0, { .data = { 0, 8, 8, ' ' } } }; -static void grid_expand_line(struct grid *, u_int, u_int, u_int); static void grid_empty_line(struct grid *, u_int, u_int); -static void grid_reflow_copy(struct grid_line *, u_int, struct grid_line *, - u_int, u_int); -static void grid_reflow_join(struct grid *, u_int *, struct grid_line *, - u_int); -static void grid_reflow_split(struct grid *, u_int *, struct grid_line *, - u_int, u_int); -static void grid_reflow_move(struct grid *, u_int *, struct grid_line *); - -static size_t grid_string_cells_fg(const struct grid_cell *, int *); -static size_t grid_string_cells_bg(const struct grid_cell *, int *); -static void grid_string_cells_code(const struct grid_cell *, - const struct grid_cell *, char *, size_t, int); - /* Store cell in entry. */ static void grid_store_cell(struct grid_cell_entry *gce, const struct grid_cell *gc, @@ -423,20 +409,11 @@ grid_peek_line(struct grid *gd, u_int py) return (&gd->linedata[py]); } -/* Get cell for reading. */ -void -grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) +/* Get cell from line. */ +static void +grid_get_cell1(struct grid_line *gl, u_int px, struct grid_cell *gc) { - struct grid_line *gl; - struct grid_cell_entry *gce; - - if (grid_check_y(gd, py) != 0 || px >= gd->linedata[py].cellsize) { - memcpy(gc, &grid_default_cell, sizeof *gc); - return; - } - - gl = &gd->linedata[py]; - gce = &gl->celldata[px]; + struct grid_cell_entry *gce = &gl->celldata[px]; if (gce->flags & GRID_FLAG_EXTENDED) { if (gce->offset >= gl->extdsize) @@ -457,6 +434,17 @@ grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) utf8_set(&gc->data, gce->data.data); } +/* Get cell for reading. */ +void +grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) +{ + if (grid_check_y(gd, py) != 0 || px >= gd->linedata[py].cellsize) { + memcpy(gc, &grid_default_cell, sizeof *gc); + return; + } + return (grid_get_cell1(&gd->linedata[py], px, gc)); +} + /* Set cell at relative position. */ void grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc) @@ -953,164 +941,269 @@ grid_duplicate_lines(struct grid *dst, u_int dy, struct grid *src, u_int sy, } } -/* Copy a section of a line. */ +/* Join line below onto this one. */ static void -grid_reflow_copy(struct grid_line *dst_gl, u_int to, struct grid_line *src_gl, - u_int from, u_int to_copy) +grid_reflow_join(struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy) { - struct grid_cell_entry *gce; - u_int i, was; + struct grid_line *gl = &gd->linedata[yy], *from; + struct grid_cell gc; + u_int lines, want, left, i, at = gl->cellused, line; + int wrapped = 1; + + lines = 0; + for (;;) { + /* + * If this is now the last line, there is nothing more to be + * done. + */ + if (yy + lines == gd->hsize + gd->sy) + break; + line = yy + 1 + lines; + + /* If the next line is empty, skip it. */ + if (~gd->linedata[line].flags & GRID_LINE_WRAPPED) + wrapped = 0; + if (gd->linedata[line].cellused == 0) { + if (!wrapped) + break; + continue; + } - memcpy(&dst_gl->celldata[to], &src_gl->celldata[from], - to_copy * sizeof *dst_gl->celldata); + /* + * Is the destination line now full? Copy the first character + * separately because we need to leave "from" set to the last + * line if this line is full. + */ + grid_get_cell1(&gd->linedata[line], 0, &gc); + if (width + gc.data.width > sx) + break; + width += gc.data.width; + grid_set_cell(gd, at, yy, &gc); + at++; + + /* Join as much more as possible onto the current line. */ + from = &gd->linedata[line]; + for (want = 1; want < from->cellused; want++) { + grid_get_cell1(from, want, &gc); + if (width + gc.data.width > sx) + break; + width += gc.data.width; + + grid_set_cell(gd, at, yy, &gc); + at++; + } + lines++; - for (i = to; i < to + to_copy; i++) { - gce = &dst_gl->celldata[i]; - if (~gce->flags & GRID_FLAG_EXTENDED) - continue; - was = gce->offset; + /* + * If this line wasn't wrapped or we didn't consume the entire + * line, don't try to join any further lines. + */ + if (!wrapped || want != from->cellused || width == sx) + break; + } + if (lines == 0) + return; - dst_gl->extddata = xreallocarray(dst_gl->extddata, - dst_gl->extdsize + 1, sizeof *dst_gl->extddata); - gce->offset = dst_gl->extdsize++; - memcpy(&dst_gl->extddata[gce->offset], &src_gl->extddata[was], - sizeof *dst_gl->extddata); + /* + * If we didn't consume the entire final line, then remove what we did + * consume. If we consumed the entire line and it wasn't wrapped, + * remove the wrap flag from this line. + */ + left = from->cellused - want; + if (left != 0) { + grid_move_cells(gd, 0, want, yy + lines, left, 8); + from->cellsize = from->cellused = left; + lines--; + } else if (!wrapped) + gl->flags &= ~GRID_LINE_WRAPPED; + + /* Remove the lines that were completely consumed. */ + if (lines != 0) { + if (yy + lines != gd->hsize + gd->sy) { + memmove(&gd->linedata[yy + 1], + &gd->linedata[yy + lines + 1], + ((gd->hsize + gd->sy) - (yy + lines + 1)) * + (sizeof *gd->linedata)); + } + if (gd->hsize >= lines) + gd->hsize -= lines; + else { + lines -= gd->hsize; + gd->hsize = 0; + for (i = 1; i < lines + 1; i++) + grid_empty_line(gd, gd->hsize + gd->sy - i, 8); + } } + + /* Adjust cursor and scroll positions. */ + if (*cy > yy + lines) + *cy -= lines; + else if (*cy > yy) + *cy = yy; + if (gd->hscrolled > yy + lines) + gd->hscrolled -= lines; + else if (gd->hscrolled > yy) + gd->hscrolled = yy; } -/* Join line data. */ +/* Split this line into several new ones */ static void -grid_reflow_join(struct grid *dst, u_int *py, struct grid_line *src_gl, - u_int new_x) +grid_reflow_split(struct grid *gd, u_int sx, u_int yy, u_int at, u_int *cy) { - struct grid_line *dst_gl = &dst->linedata[(*py) - 1]; - u_int left, to_copy, ox, nx; - - /* How much is left on the old line? */ - left = new_x - dst_gl->cellused; - - /* Work out how much to append. */ - to_copy = src_gl->cellused; - if (to_copy > left) - to_copy = left; - ox = dst_gl->cellused; - nx = ox + to_copy; - - /* Resize the destination line. */ - dst_gl->celldata = xreallocarray(dst_gl->celldata, nx, - sizeof *dst_gl->celldata); - dst_gl->cellsize = dst_gl->cellused = nx; - - /* Append as much as possible. */ - grid_reflow_copy(dst_gl, ox, src_gl, 0, to_copy); + struct grid_line *gl = &gd->linedata[yy]; + struct grid_cell gc; + u_int line, lines, width, i, used = gl->cellused, xx; + int flags = gl->flags; + + /* How many lines do we need to insert? We know we need at least one. */ + if (~gl->flags & GRID_LINE_EXTENDED) + lines = (gl->cellused - 1) / sx; + else { + lines = 1; + width = 0; + for (i = at; i < used; i++) { + grid_get_cell1(gl, i, &gc); + if (width + gc.data.width > sx) { + lines++; + width = 0; + } + width += gc.data.width; + } + } - /* If there is any left in the source, split it. */ - if (src_gl->cellused > to_copy) { - dst_gl->flags |= GRID_LINE_WRAPPED; + /* Trim the original line size. */ + gl->cellsize = gl->cellused = at; + gl->flags |= GRID_LINE_WRAPPED; - src_gl->cellused -= to_copy; - grid_reflow_split(dst, py, src_gl, new_x, to_copy); + /* Insert new lines. */ + gd->linedata = xreallocarray(gd->linedata, gd->hsize + gd->sy + lines, + sizeof *gd->linedata); + memmove(&gd->linedata[yy + lines + 1], &gd->linedata[yy + 1], + ((gd->hsize + gd->sy) - (yy + 1)) * (sizeof *gd->linedata)); + gd->hsize += lines; + for (i = 0; i < lines; i++) + grid_empty_line(gd, yy + 1 + i, 8); + gl = &gd->linedata[yy]; + + /* Copy sections from the original line. */ + line = yy + 1; + width = 0; + xx = 0; + for (i = at; i < used; i++) { + grid_get_cell1(gl, i, &gc); + if (width + gc.data.width > sx) { + gd->linedata[line].flags |= GRID_LINE_WRAPPED; + + line++; + width = 0; + xx = 0; + } + width += gc.data.width; + grid_set_cell(gd, xx, line, &gc); + xx++; } -} + if (flags & GRID_LINE_WRAPPED) + gd->linedata[line].flags |= GRID_LINE_WRAPPED; -/* Split line data. */ -static void -grid_reflow_split(struct grid *dst, u_int *py, struct grid_line *src_gl, - u_int new_x, u_int offset) -{ - struct grid_line *dst_gl = NULL; - u_int to_copy; - - /* Loop and copy sections of the source line. */ - while (src_gl->cellused > 0) { - /* Create new line. */ - if (*py >= dst->hsize + dst->sy) - grid_scroll_history(dst, 8); - dst_gl = &dst->linedata[*py]; - (*py)++; - - /* How much should we copy? */ - to_copy = new_x; - if (to_copy > src_gl->cellused) - to_copy = src_gl->cellused; - - /* Expand destination line. */ - dst_gl->celldata = xreallocarray(NULL, to_copy, - sizeof *dst_gl->celldata); - dst_gl->cellsize = dst_gl->cellused = to_copy; - dst_gl->flags |= GRID_LINE_WRAPPED; - - /* Copy the data. */ - grid_reflow_copy(dst_gl, 0, src_gl, offset, to_copy); - - /* Move offset and reduce old line size. */ - offset += to_copy; - src_gl->cellused -= to_copy; - } + /* Adjust the cursor and scroll positions. */ + if (yy <= *cy) + (*cy) += lines; + if (yy <= gd->hscrolled) + gd->hscrolled += lines; - /* Last line is not wrapped. */ - if (dst_gl != NULL) - dst_gl->flags &= ~GRID_LINE_WRAPPED; + /* + * If the original line had the wrapped flag and there is still space + * in the last new line, try to join with the next lines. + */ + if (width < sx && (flags & GRID_LINE_WRAPPED)) + grid_reflow_join(gd, sx, line, width, cy); } -/* Move line data. */ -static void -grid_reflow_move(struct grid *dst, u_int *py, struct grid_line *src_gl) +/* Reflow lines on grid to new width. */ +void +grid_reflow(struct grid *gd, u_int sx, u_int *cursor) { - struct grid_line *dst_gl; - - /* Create new line. */ - if (*py >= dst->hsize + dst->sy) - grid_scroll_history(dst, 8); - dst_gl = &dst->linedata[*py]; - (*py)++; + struct grid_line *gl; + struct grid_cell gc; + u_int yy, cy, width, i, at, first; + struct timeval start, tv; - /* Copy the old line. */ - memcpy(dst_gl, src_gl, sizeof *dst_gl); - dst_gl->flags &= ~GRID_LINE_WRAPPED; + gettimeofday(&start, NULL); - /* Clear old line. */ - src_gl->celldata = NULL; - src_gl->extddata = NULL; -} + log_debug("%s: %u lines, new width %u", __func__, gd->hsize + gd->sy, + sx); + cy = gd->hsize + (*cursor); -/* - * Reflow lines from src grid into dst grid of width new_x. Returns number of - * lines fewer in the visible area. The source grid is destroyed. - */ -u_int -grid_reflow(struct grid *dst, struct grid *src, u_int new_x) -{ - u_int py, sy, line; - int previous_wrapped; - struct grid_line *src_gl; - - py = 0; - sy = src->sy; - - previous_wrapped = 0; - for (line = 0; line < sy + src->hsize; line++) { - src_gl = src->linedata + line; - if (!previous_wrapped) { - /* Wasn't wrapped. If smaller, move to destination. */ - if (src_gl->cellused <= new_x) - grid_reflow_move(dst, &py, src_gl); + /* + * Loop over lines from top to bottom. The size may change during the + * loop, but it is OK because we are always adding or removing lines + * below the current one. + */ + for (yy = 0; yy < gd->hsize + gd->sy; yy++) { + gl = &gd->linedata[yy]; + + /* Work out the width of this line. */ + first = at = width = 0; + if (~gl->flags & GRID_LINE_EXTENDED) { + first = 1; + width = gl->cellused; + if (width > sx) + at = sx; else - grid_reflow_split(dst, &py, src_gl, new_x, 0); + at = width; } else { - /* Previous was wrapped. Try to join. */ - grid_reflow_join(dst, &py, src_gl, new_x); + for (i = 0; i < gl->cellused; i++) { + grid_get_cell1(gl, i, &gc); + if (i == 0) + first = gc.data.width; + if (at == 0 && width + gc.data.width > sx) + at = i; + width += gc.data.width; + } + } + + /* + * If the line is exactly right, there is no need to do + * anything. + */ + if (width == sx) + continue; + + /* + * If the first character is wider than the target width, there + * is no point in trying to do anything. + */ + if (first > sx) + continue; + + /* + * If the line is too big, it needs to be split, whether or not + * it was previously wrapped. + */ + if (width > sx) { + grid_reflow_split(gd, sx, yy, at, &cy); + continue; } - previous_wrapped = (src_gl->flags & GRID_LINE_WRAPPED); - /* This is where we started scrolling. */ - if (line == sy + src->hsize - src->hscrolled - 1) - dst->hscrolled = 0; + /* + * If the line was previously wrapped, join as much as possible + * of the next line. + */ + if (gl->flags & GRID_LINE_WRAPPED) + grid_reflow_join(gd, sx, yy, width, &cy); + } - grid_destroy(src); + if (gd->hscrolled > gd->hsize) + gd->hscrolled = gd->hsize; + if (cy < gd->hsize) + *cursor = 0; + else + *cursor = cy - gd->hsize; - if (py > sy) - return (0); - return (sy - py); + gettimeofday(&tv, NULL); + timersub(&tv, &start, &tv); + log_debug("%s: now %u lines (in %llu.%06u seconds)", __func__, + gd->hsize + gd->sy, (unsigned long long)tv.tv_sec, + (u_int)tv.tv_usec); } diff --git a/screen-write.c b/screen-write.c index 5ab472bd49..1687e8c873 100644 --- a/screen-write.c +++ b/screen-write.c @@ -378,7 +378,8 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, gc.bg = mgc->bg; } } - screen_write_cell(ctx, &gc); + if (xx + gc.data.width <= px + nx) + screen_write_cell(ctx, &gc); } cy++; screen_write_cursormove(ctx, cx, cy); @@ -410,6 +411,8 @@ screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, if (xx >= gd->linedata[yy].cellsize) break; grid_get_cell(gd, xx, yy, &gc); + if (xx + gc.data.width > px + nx) + break; if (!grid_cells_equal(&gc, &grid_default_cell)) grid_view_set_cell(ctx->s->grid, cx, cy, &gc); cx++; diff --git a/screen.c b/screen.c index c792c04afe..20616915cd 100644 --- a/screen.c +++ b/screen.c @@ -470,14 +470,5 @@ screen_select_cell(struct screen *s, struct grid_cell *dst, static void screen_reflow(struct screen *s, u_int new_x) { - struct grid *old = s->grid; - u_int change; - - s->grid = grid_create(old->sx, old->sy, old->hlimit); - - change = grid_reflow(s->grid, old, new_x); - if (change < s->cy) - s->cy -= change; - else - s->cy = 0; + grid_reflow(s->grid, new_x, &s->cy); } diff --git a/tmux.h b/tmux.h index 28fe134959..6381ff0015 100644 --- a/tmux.h +++ b/tmux.h @@ -1996,7 +1996,7 @@ char *grid_string_cells(struct grid *, u_int, u_int, u_int, struct grid_cell **, int, int, int); void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, u_int); -u_int grid_reflow(struct grid *, struct grid *, u_int); +void grid_reflow(struct grid *, u_int, u_int *); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); From 3b649d2fcdc8a15c69efbce69ae9e559481d36cb Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 15 Nov 2017 19:59:27 +0000 Subject: [PATCH 043/836] Add a common function for spreading out cells and use it for the two even layouts and to add a -E flag to select-layout to spread out cells evenly without changing parent cells. --- cmd-select-layout.c | 27 +++++++++------ key-bindings.c | 1 + layout-set.c | 82 +++++++-------------------------------------- layout.c | 58 ++++++++++++++++++++++++++++++++ tmux.1 | 6 ++-- tmux.h | 2 ++ 6 files changed, 93 insertions(+), 83 deletions(-) diff --git a/cmd-select-layout.c b/cmd-select-layout.c index e32f115de4..28737c181c 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -33,10 +33,10 @@ const struct cmd_entry cmd_select_layout_entry = { .name = "select-layout", .alias = "selectl", - .args = { "nopt:", 0, 1 }, - .usage = "[-nop] " CMD_TARGET_WINDOW_USAGE " [layout-name]", + .args = { "Enopt:", 0, 1 }, + .usage = "[-Enop] " CMD_TARGET_PANE_USAGE " [layout-name]", - .target = { 't', CMD_FIND_WINDOW, 0 }, + .target = { 't', CMD_FIND_PANE, 0 }, .flags = CMD_AFTERHOOK, .exec = cmd_select_layout_exec @@ -71,14 +71,14 @@ const struct cmd_entry cmd_previous_layout_entry = { static enum cmd_retval cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) { - struct args *args = self->args; - struct winlink *wl = item->target.wl; - struct window *w; - const char *layoutname; - char *oldlayout; - int next, previous, layout; - - w = wl->window; + struct args *args = self->args; + struct winlink *wl = item->target.wl; + struct window *w = wl->window; + struct window_pane *wp = item->target.wp; + const char *layoutname; + char *oldlayout; + int next, previous, layout; + server_unzoom_window(w); next = self->entry == &cmd_next_layout_entry; @@ -99,6 +99,11 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) goto changed; } + if (args_has(args, 'E')) { + layout_spread_out(wp); + goto changed; + } + if (!args_has(args, 'o')) { if (args->argc == 0) layout = w->lastlayout; diff --git a/key-bindings.c b/key-bindings.c index 7677800994..a13c797791 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -186,6 +186,7 @@ key_bindings_init(void) "bind = choose-buffer", "bind ? list-keys", "bind D choose-client", + "bind E select-layout -E", "bind L switch-client -l", "bind M select-pane -M", "bind [ copy-mode", diff --git a/layout-set.c b/layout-set.c index 7ba18feae0..0f01cbcce0 100644 --- a/layout-set.c +++ b/layout-set.c @@ -115,11 +115,11 @@ layout_set_previous(struct window *w) } static void -layout_set_even_h(struct window *w) +layout_set_even(struct window *w, enum layout_type type) { struct window_pane *wp; struct layout_cell *lc, *lcnew; - u_int i, n, width, xoff; + u_int n; layout_print_cell(w->layout_root, __func__, 1); @@ -128,36 +128,21 @@ layout_set_even_h(struct window *w) if (n <= 1) return; - /* How many can we fit? */ - width = (w->sx - (n - 1)) / n; - if (width < PANE_MINIMUM) - width = PANE_MINIMUM; - /* Free the old root and construct a new. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); layout_set_size(lc, w->sx, w->sy, 0, 0); - layout_make_node(lc, LAYOUT_LEFTRIGHT); + layout_make_node(lc, type); /* Build new leaf cells. */ - i = xoff = 0; TAILQ_FOREACH(wp, &w->panes, entry) { - /* Create child cell. */ lcnew = layout_create_cell(lc); - layout_set_size(lcnew, width, w->sy, xoff, 0); layout_make_leaf(lcnew, wp); TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry); - - i++; - xoff += width + 1; } - /* Allocate any remaining space. */ - if (w->sx > xoff - 1) { - lc = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, - w->sx - (xoff - 1)); - } + /* Spread out cells. */ + layout_spread_cell(w, lc); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -170,58 +155,15 @@ layout_set_even_h(struct window *w) } static void -layout_set_even_v(struct window *w) +layout_set_even_h(struct window *w) { - struct window_pane *wp; - struct layout_cell *lc, *lcnew; - u_int i, n, height, yoff; - - layout_print_cell(w->layout_root, __func__, 1); - - /* Get number of panes. */ - n = window_count_panes(w); - if (n <= 1) - return; - - /* How many can we fit? */ - height = (w->sy - (n - 1)) / n; - if (height < PANE_MINIMUM) - height = PANE_MINIMUM; - - /* Free the old root and construct a new. */ - layout_free(w); - lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); - layout_make_node(lc, LAYOUT_TOPBOTTOM); - - /* Build new leaf cells. */ - i = yoff = 0; - TAILQ_FOREACH(wp, &w->panes, entry) { - /* Create child cell. */ - lcnew = layout_create_cell(lc); - layout_set_size(lcnew, w->sx, height, 0, yoff); - layout_make_leaf(lcnew, wp); - TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry); - - i++; - yoff += height + 1; - } - - /* Allocate any remaining space. */ - if (w->sy > yoff - 1) { - lc = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, - w->sy - (yoff - 1)); - } - - /* Fix cell offsets. */ - layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); - - layout_print_cell(w->layout_root, __func__, 1); + layout_set_even(w, LAYOUT_LEFTRIGHT); +} - notify_window("window-layout-changed", w); - server_redraw_window(w); +static void +layout_set_even_v(struct window *w) +{ + layout_set_even(w, LAYOUT_TOPBOTTOM); } static void diff --git a/layout.c b/layout.c index 5c2224bbd4..2c6fe2b24b 100644 --- a/layout.c +++ b/layout.c @@ -983,3 +983,61 @@ layout_close_pane(struct window_pane *wp) } notify_window("window-layout-changed", w); } + +int +layout_spread_cell(struct window *w, struct layout_cell *parent) +{ + struct layout_cell *lc; + u_int number, each, size; + int change, changed; + + number = 0; + TAILQ_FOREACH (lc, &parent->cells, entry) + number++; + if (number <= 1) + return (0); + + if (parent->type == LAYOUT_LEFTRIGHT) + size = parent->sx; + else if (parent->type == LAYOUT_TOPBOTTOM) + size = parent->sy; + else + return (0); + each = (size - (number - 1)) / number; + + changed = 0; + TAILQ_FOREACH (lc, &parent->cells, entry) { + if (TAILQ_NEXT(lc, entry) == NULL) + each = size - (each * (number - 1)); + change = 0; + if (parent->type == LAYOUT_LEFTRIGHT) { + change = each - (int)lc->sx; + layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); + } else if (parent->type == LAYOUT_TOPBOTTOM) { + change = each - (int)lc->sy; + layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); + } + if (change != 0) + changed = 1; + } + return (changed); +} + +void +layout_spread_out(struct window_pane *wp) +{ + struct layout_cell *parent; + struct window *w = wp->window; + + parent = wp->layout_cell->parent; + if (parent == NULL) + return; + + do { + if (layout_spread_cell(w, parent)) { + layout_fix_offsets(parent); + layout_fix_panes(w, w->sx, w->sy); + break; + } + } while ((parent = parent->parent) != NULL); +} diff --git a/tmux.1 b/tmux.1 index a67a7274aa..4451283f8b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1923,8 +1923,8 @@ lower) with .Fl U or downward (numerically higher). .It Xo Ic select-layout -.Op Fl nop -.Op Fl t Ar target-window +.Op Fl Enop +.Op Fl t Ar target-pane .Op Ar layout-name .Xc .D1 (alias: Ic selectl ) @@ -1942,6 +1942,8 @@ and commands. .Fl o applies the last set layout if possible (undoes the most recent layout change). +.Fl E +spreads the current pane and any panes next to it out evenly. .It Xo Ic select-pane .Op Fl DdegLlMmRU .Op Fl P Ar style diff --git a/tmux.h b/tmux.h index 6381ff0015..43d9d8465d 100644 --- a/tmux.h +++ b/tmux.h @@ -2213,6 +2213,8 @@ void layout_assign_pane(struct layout_cell *, struct window_pane *); struct layout_cell *layout_split_pane(struct window_pane *, enum layout_type, int, int, int); void layout_close_pane(struct window_pane *); +int layout_spread_cell(struct window *, struct layout_cell *); +void layout_spread_out(struct window_pane *); /* layout-custom.c */ char *layout_dump(struct layout_cell *); From e58d16b2df52beefd5094ac61bb9e44c123df3e7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 15 Nov 2017 20:14:36 +0000 Subject: [PATCH 044/836] Add to CHANGES. --- CHANGES | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGES b/CHANGES index 8d40d396b2..1bf666a7e2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,16 @@ CHANGES FROM 2.6 TO master +* Add select-layout -E to spread panes out evenly (bound to E key). + +* Support wide characters properly when reflowing. + +* Pass PWD to new panes as a hint to shells, as well as calling chdir(). + +* Performance improvements for the various choose modes. + +* Only show first member of session groups in tree mode (-G flag to choose-tree + to show all). + * Support %else in config files to match %if; from Brad Town in GitHub issue 1071. From e5ae9dd53dbb82c9a8c5e186723fdbe4e54b0b56 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 16 Nov 2017 11:16:15 +0000 Subject: [PATCH 045/836] Add -and-cancel variants for scrolling commands to exit copy mode when the bottom is reached, from Stephen Hicks. --- tmux.1 | 12 ++++++++++-- window-copy.c | 35 +++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/tmux.1 b/tmux.1 index 4451283f8b..c0ed0e30e4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1122,9 +1122,10 @@ The following commands are supported in copy mode: .It Li "end-of-line" Ta "$" Ta "C-e" .It Li "goto-line " Ta ":" Ta "g" .It Li "halfpage-down" Ta "C-d" Ta "M-Down" +.It Li "halfpage-down-and-cancel" Ta "" Ta "" .It Li "halfpage-up" Ta "C-u" Ta "M-Up" -.It Li "history-bottom" Ta "G" Ta "M-<" -.It Li "history-top" Ta "g" Ta "M->" +.It Li "history-bottom" Ta "G" Ta "M->" +.It Li "history-top" Ta "g" Ta "M-<" .It Li "jump-again" Ta ";" Ta ";" .It Li "jump-backward " Ta "F" Ta "F" .It Li "jump-forward " Ta "f" Ta "f" @@ -1139,12 +1140,14 @@ The following commands are supported in copy mode: .It Li "next-word-end" Ta "e" Ta "M-f" .It Li "other-end" Ta "o" Ta "" .It Li "page-down" Ta "C-f" Ta "PageDown" +.It Li "page-down-and-cancel" Ta "" Ta "" .It Li "page-up" Ta "C-b" Ta "PageUp" .It Li "previous-paragraph" Ta "{" Ta "M-{" .It Li "previous-space" Ta "B" Ta "" .It Li "previous-word" Ta "b" Ta "M-b" .It Li "rectangle-toggle" Ta "v" Ta "R" .It Li "scroll-down" Ta "C-e" Ta "C-Down" +.It Li "scroll-down-and-cancel" Ta "" Ta "" .It Li "scroll-up" Ta "C-y" Ta "C-Up" .It Li "search-again" Ta "n" Ta "n" .It Li "search-backward " Ta "?" Ta "" @@ -1158,6 +1161,11 @@ The following commands are supported in copy mode: .It Li "top-line" Ta "H" Ta "M-R" .El .Pp +The +.Ql -and-cancel +variants of some commands exit copy mode after they have completed (for copy +commands) or when the cursor reaches the bottom (for scrolling commands). +.Pp The next and previous word keys use space and the .Ql - , .Ql _ diff --git a/window-copy.c b/window-copy.c index b804ffeb94..31140ab3d3 100644 --- a/window-copy.c +++ b/window-copy.c @@ -30,7 +30,7 @@ static void window_copy_command(struct window_pane *, struct client *, static struct screen *window_copy_init(struct window_pane *, struct cmd_find_state *, struct args *); static void window_copy_free(struct window_pane *); -static int window_copy_pagedown(struct window_pane *, int); +static int window_copy_pagedown(struct window_pane *, int, int); static void window_copy_next_paragraph(struct window_pane *); static void window_copy_previous_paragraph(struct window_pane *); static void window_copy_resize(struct window_pane *, u_int, u_int); @@ -392,7 +392,7 @@ window_copy_pageup(struct window_pane *wp, int half_page) } static int -window_copy_pagedown(struct window_pane *wp, int half_page) +window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; @@ -431,7 +431,7 @@ window_copy_pagedown(struct window_pane *wp, int half_page) window_copy_cursor_end_of_line(wp); } - if (data->scroll_exit && data->oy == 0) + if (scroll_exit && data->oy == 0) return (1); window_copy_update_selection(wp, 1); window_copy_redraw_screen(wp); @@ -524,7 +524,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, struct screen *sn = &data->screen; const char *command, *argument, *ws; u_int np = wp->modeprefix; - int cancel = 0, redraw = 0; + int cancel = 0, redraw = 0, scroll_exit; char prefix; if (args->argc == 0) @@ -629,9 +629,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "end-of-line") == 0) window_copy_cursor_end_of_line(wp); - if (strcmp(command, "halfpage-down") == 0) { + if (strcmp(command, "halfpage-down") == 0 || + strcmp(command, "halfpage-down-and-cancel") == 0) { + if (strcmp(command, "halfpage-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 1)) { + if (window_copy_pagedown(wp, 1, scroll_exit)) { cancel = 1; break; } @@ -727,9 +732,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if ((np % 2) != 0) window_copy_other_end(wp); } - if (strcmp(command, "page-down") == 0) { + if (strcmp(command, "page-down") == 0 || + strcmp(command, "page-down-and-cancel") == 0) { + if (strcmp(command, "page-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 0)) { + if (window_copy_pagedown(wp, 0, scroll_exit)) { cancel = 1; break; } @@ -756,10 +766,15 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, sn->sel.lineflag = LINE_SEL_NONE; window_copy_rectangle_toggle(wp); } - if (strcmp(command, "scroll-down") == 0) { + if (strcmp(command, "scroll-down") == 0 || + strcmp(command, "scroll-down-and-cancel") == 0) { + if (strcmp(command, "scroll-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) window_copy_cursor_down(wp, 1); - if (data->scroll_exit && data->oy == 0) + if (scroll_exit && data->oy == 0) cancel = 1; } if (strcmp(command, "scroll-up") == 0) { From 695dc5a15348f9ad2af5edf5119ae054bc11940a Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 17 Nov 2017 09:52:18 +0000 Subject: [PATCH 046/836] Allow formats in selectp -T, from Thomas Adam. --- cmd-select-pane.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index a7fb4428de..65b7cdbedb 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -18,6 +18,8 @@ #include +#include + #include "tmux.h" /* @@ -57,10 +59,12 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct cmd_find_state *current = &item->shared->current; + struct client *c = cmd_find_client(item, NULL, 1); struct winlink *wl = item->target.wl; struct window *w = wl->window; struct session *s = item->target.s; struct window_pane *wp = item->target.wp, *lastwp, *markedwp; + char *pane_title; const char *style; if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) { @@ -148,8 +152,11 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) } if (args_has(self->args, 'T')) { - screen_set_title(&wp->base, args_get(self->args, 'T')); - server_status_window(wp->window); + pane_title = format_single(item, args_get(self->args, 'T'), + c, s, wl, wp); + screen_set_title(&wp->base, pane_title); + server_status_window(wp->window); + free(pane_title); } if (wp == w->active) From 58f6456af7a49db69cf84f538e03c4161a1188d6 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Dec 2017 12:39:34 +0000 Subject: [PATCH 047/836] Remove unused variable from Thomas Adam. --- status.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/status.c b/status.c index 60faa42dd2..9886eebb84 100644 --- a/status.c +++ b/status.c @@ -803,7 +803,7 @@ status_prompt_redraw(struct client *c) struct screen old_status; u_int i, offset, left, start, pcursor, pwidth, width; u_int lines; - size_t len, off; + size_t len; struct grid_cell gc, cursorgc; if (c->tty.sx == 0 || c->tty.sy == 0) @@ -819,7 +819,6 @@ status_prompt_redraw(struct client *c) len = screen_write_strlen("%s", c->prompt_string); if (len > c->tty.sx) len = c->tty.sx; - off = 0; if (c->prompt_mode == PROMPT_COMMAND) style_apply(&gc, s->options, "message-command-style"); From 62144b9f57ea981ca2c35fe3466945b8234eba64 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Dec 2017 22:13:36 +0000 Subject: [PATCH 048/836] Do not try to put more in command message than will fit when sending (the server will treat as a fatal error). GitHub issue 1200. --- client.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client.c b/client.c index 743ed33a15..0a5abf3241 100644 --- a/client.c +++ b/client.c @@ -337,6 +337,10 @@ client_main(struct event_base *base, int argc, char **argv, int flags) size = 0; for (i = 0; i < argc; i++) size += strlen(argv[i]) + 1; + if (size > MAX_IMSGSIZE - (sizeof *data)) { + fprintf(stderr, "command too long\n"); + return (1); + } data = xmalloc((sizeof *data) + size); /* Prepare command for server. */ From b20a00f93e00d73786a2bf00bd8cecb8c5392e89 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 19 Dec 2017 15:00:39 +0000 Subject: [PATCH 049/836] Report better error from server when socket create fails, GitHub issue 1201. --- client.c | 1 + server-client.c | 6 +++++- server.c | 56 ++++++++++++++++++++++++++++++++++++------------- tmux.h | 2 +- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/client.c b/client.c index 0a5abf3241..6feafc9385 100644 --- a/client.c +++ b/client.c @@ -452,6 +452,7 @@ client_write(int fd, const char *data, size_t size) { ssize_t used; + log_debug("%s: %.*s", __func__, (int)size, data); while (size != 0) { used = write(fd, data, size); if (used == -1) { diff --git a/server-client.c b/server-client.c index aa0f838e25..87f4001816 100644 --- a/server-client.c +++ b/server-client.c @@ -161,7 +161,7 @@ server_client_is_default_key_table(struct client *c, struct key_table *table) } /* Create a new client. */ -void +struct client * server_client_create(int fd) { struct client *c; @@ -214,6 +214,7 @@ server_client_create(int fd) TAILQ_INSERT_TAIL(&clients, c, entry); log_debug("new client %p", c); + return (c); } /* Open client terminal if needed. */ @@ -1550,6 +1551,9 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg) int argc; char **argv, *cause; + if (c->flags & CLIENT_EXIT) + return; + if (imsg->hdr.len - IMSG_HEADER_SIZE < sizeof data) fatalx("bad MSG_COMMAND size"); memcpy(&data, imsg->data, sizeof data); diff --git a/server.c b/server.c index 82b5a6b857..77ee9c36a0 100644 --- a/server.c +++ b/server.c @@ -50,7 +50,6 @@ static struct event server_ev_accept; struct cmd_find_state marked_pane; -static int server_create_socket(void); static int server_loop(void); static void server_send_exit(void); static void server_accept(int, short, void *); @@ -99,39 +98,62 @@ server_check_marked(void) /* Create server socket. */ static int -server_create_socket(void) +server_create_socket(char **cause) { struct sockaddr_un sa; size_t size; mode_t mask; - int fd; + int fd, saved_errno; memset(&sa, 0, sizeof sa); sa.sun_family = AF_UNIX; size = strlcpy(sa.sun_path, socket_path, sizeof sa.sun_path); if (size >= sizeof sa.sun_path) { errno = ENAMETOOLONG; - return (-1); + goto fail; } unlink(sa.sun_path); if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) - return (-1); + goto fail; mask = umask(S_IXUSR|S_IXGRP|S_IRWXO); - if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) { + if (bind(fd, (struct sockaddr *)&sa, sizeof sa) == -1) { + saved_errno = errno; close(fd); - return (-1); + errno = saved_errno; + goto fail; } umask(mask); if (listen(fd, 128) == -1) { + saved_errno = errno; close(fd); - return (-1); + errno = saved_errno; + goto fail; } setblocking(fd, 0); return (fd); + +fail: + if (cause != NULL) { + xasprintf(cause, "error creating %s (%s)", socket_path, + strerror(errno)); + } + return (-1); +} + +/* Server error callback. */ +static enum cmd_retval +server_start_error(struct cmdq_item *item, void *data) +{ + char *error = data; + + cmdq_error(item, "%s", error); + free(error); + + return (CMD_RETURN_NORMAL); } /* Fork new server. */ @@ -142,6 +164,8 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, int pair[2]; struct job *job; sigset_t set, oldset; + struct client *c; + char *cause = NULL; if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) fatal("socketpair failed"); @@ -183,11 +207,10 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, gettimeofday(&start_time, NULL); - server_fd = server_create_socket(); - if (server_fd == -1) - fatal("couldn't create socket"); - server_update_socket(); - server_client_create(pair[1]); + server_fd = server_create_socket(&cause); + if (server_fd != -1) + server_update_socket(); + c = server_client_create(pair[1]); if (lockfd >= 0) { unlink(lockfile); @@ -195,6 +218,11 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, close(lockfd); } + if (cause != NULL) { + cmdq_append(c, cmdq_get_callback(server_start_error, cause)); + c->flags |= CLIENT_EXIT; + } + start_cfg(); server_add_accept(0); @@ -375,7 +403,7 @@ server_signal(int sig) break; case SIGUSR1: event_del(&server_ev_accept); - fd = server_create_socket(); + fd = server_create_socket(NULL); if (fd != -1) { close(server_fd); server_fd = fd; diff --git a/tmux.h b/tmux.h index 43d9d8465d..71fadb0888 100644 --- a/tmux.h +++ b/tmux.h @@ -1885,7 +1885,7 @@ void server_client_set_key_table(struct client *, const char *); const char *server_client_get_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); +struct client *server_client_create(int); int server_client_open(struct client *, char **); void server_client_unref(struct client *); void server_client_lost(struct client *); From 5c824322004571b40668393876e9aaac0f97eb77 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Dec 2017 10:16:36 +0000 Subject: [PATCH 050/836] Remove duplicate WheelUp/WheelDown entries in list, GitHub issue 1184. --- tmux.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index c0ed0e30e4..4e48d4a605 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3463,8 +3463,8 @@ The following mouse events are available: .It Li "MouseDown1" Ta "MouseUp1" Ta "MouseDrag1" Ta "MouseDragEnd1" .It Li "MouseDown2" Ta "MouseUp2" Ta "MouseDrag2" Ta "MouseDragEnd2" .It Li "MouseDown3" Ta "MouseUp3" Ta "MouseDrag3" Ta "MouseDragEnd3" -.It Li "DoubleClick1" Ta "DoubleClick2" Ta "DoubleClick3" Ta "WheelUp" -.It Li "TripleClick1" Ta "TripleClick2" Ta "TripleClick3" Ta "WheelDown" +.It Li "DoubleClick1" Ta "DoubleClick2" Ta "DoubleClick3" +.It Li "TripleClick1" Ta "TripleClick2" Ta "TripleClick3" .El .Pp Each should be suffixed with a location, for example From 7ba5ad4cfb49a5de3971f823ba5d08d4760480c2 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Dec 2017 10:18:51 +0000 Subject: [PATCH 051/836] Do not try to set default value on user options (they don't have one), from Charles Howard in GitHub issue 1161. --- cmd-set-option.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index d1ec6fcf31..bdc42caebf 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -192,7 +192,9 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) if (o == NULL) goto out; if (idx == -1) { - if (oo == global_options || + if (*name == '@') + options_remove(o); + else if (oo == global_options || oo == global_s_options || oo == global_w_options) options_default(oo, options_table_entry(o)); From c363c236aaea5b7a879493d8f3c85bead546f063 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Dec 2017 23:16:41 +0000 Subject: [PATCH 052/836] Fix memory leak in screen_redraw_make_pane_status. --- screen-redraw.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/screen-redraw.c b/screen-redraw.c index 7a31182a7b..1083642daa 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -18,6 +18,7 @@ #include +#include #include #include "tmux.h" @@ -299,6 +300,7 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, screen_write_cnputs(&ctx, outlen, &gc, "%s", out); screen_write_stop(&ctx); + free(out); format_free(ft); wp->status_size = outlen; From 6ce8fe0537b34abd5e12fd9455f992c2da9e924b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 27 Dec 2017 13:54:37 +0000 Subject: [PATCH 053/836] Still need to globfree on failure. --- compat/getdtablecount.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/compat/getdtablecount.c b/compat/getdtablecount.c index 3ccab6501a..1f9a0aa70e 100644 --- a/compat/getdtablecount.c +++ b/compat/getdtablecount.c @@ -30,19 +30,12 @@ getdtablecount(void) { char path[PATH_MAX]; glob_t g; - int n; + int n = 0; if (snprintf(path, sizeof path, "/proc/%ld/fd/*", (long)getpid()) < 0) fatal("snprintf overflow"); - switch (glob(path, 0, NULL, &g)) { - case GLOB_NOMATCH: - return (0); - case 0: - break; - default: - fatal("glob(\"%s\") failed", path); - } - n = g.gl_pathc; + if (glob(path, 0, NULL, &g) == 0) + n = g.gl_pathc; globfree(&g); return (n); } From 937f8ed095ea89b2ecbe7bf4e2922afc8afbf3eb Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 27 Dec 2017 13:55:42 +0000 Subject: [PATCH 054/836] Draw command prompt correctly with status line off. --- status.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/status.c b/status.c index 9886eebb84..fffdb327c8 100644 --- a/status.c +++ b/status.c @@ -659,9 +659,10 @@ status_message_redraw(struct client *c) memcpy(&old_status, &c->status, sizeof old_status); lines = status_line_size(c->session); - if (lines <= 1) + if (lines <= 1) { + lines = 1; screen_init(&c->status, c->tty.sx, 1, 0); - else + } else screen_init(&c->status, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->message_string); @@ -811,9 +812,10 @@ status_prompt_redraw(struct client *c) memcpy(&old_status, &c->status, sizeof old_status); lines = status_line_size(c->session); - if (lines <= 1) + if (lines <= 1) { + lines = 1; screen_init(&c->status, c->tty.sx, 1, 0); - else + } else screen_init(&c->status, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->prompt_string); From 299c552e33c3bb929a522dd166bee29c4617885f Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Dec 2017 12:10:50 +0000 Subject: [PATCH 055/836] Redrawing status is needed after changing window flags or title does not update if status line is off, GitHub issue 1191. --- alerts.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/alerts.c b/alerts.c index d90d0eb843..6fe88a09d1 100644 --- a/alerts.c +++ b/alerts.c @@ -200,8 +200,10 @@ alerts_check_bell(struct window *w) * not check WINLINK_BELL). */ s = wl->session; - if (s->curw != wl) + if (s->curw != wl) { wl->flags |= WINLINK_BELL; + server_status_session(s); + } if (!alerts_action_applies(wl, "bell-action")) continue; notify_winlink("alert-bell", wl); @@ -234,8 +236,10 @@ alerts_check_activity(struct window *w) if (wl->flags & WINLINK_ACTIVITY) continue; s = wl->session; - if (s->curw != wl) + if (s->curw != wl) { wl->flags |= WINLINK_ACTIVITY; + server_status_session(s); + } if (!alerts_action_applies(wl, "activity-action")) continue; notify_winlink("alert-activity", wl); @@ -268,8 +272,10 @@ alerts_check_silence(struct window *w) if (wl->flags & WINLINK_SILENCE) continue; s = wl->session; - if (s->curw != wl) + if (s->curw != wl) { wl->flags |= WINLINK_SILENCE; + server_status_session(s); + } if (!alerts_action_applies(wl, "silence-action")) continue; notify_winlink("alert-silence", wl); From c9896d9554b1d431f83ac06307451bd79fab03d8 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 31 Dec 2017 20:00:44 +0000 Subject: [PATCH 056/836] Initialize the size of new panes created by the even-* layout correctly; reported by Andreas Kahari and Anton Lindqvist. --- layout-set.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/layout-set.c b/layout-set.c index 0f01cbcce0..5055f672b9 100644 --- a/layout-set.c +++ b/layout-set.c @@ -138,6 +138,8 @@ layout_set_even(struct window *w, enum layout_type type) TAILQ_FOREACH(wp, &w->panes, entry) { lcnew = layout_create_cell(lc); layout_make_leaf(lcnew, wp); + lcnew->sx = w->sx; + lcnew->sy = w->sy; TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry); } From fe26f977e6fe81c1bedf251cc1da6cf3792a9f97 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 Jan 2018 11:03:54 +0000 Subject: [PATCH 057/836] Add C-g at command prompt for emacs people, GitHub issue 1213. --- status.c | 1 + 1 file changed, 1 insertion(+) diff --git a/status.c b/status.c index fffdb327c8..2f6fc4cbb9 100644 --- a/status.c +++ b/status.c @@ -1339,6 +1339,7 @@ status_prompt_key(struct client *c, key_code key) break; case '\033': /* Escape */ case '\003': /* C-c */ + case '\007': /* C-g */ if (c->prompt_inputcb(c, c->prompt_data, NULL, 1) == 0) status_prompt_clear(c); break; From d17c90583a2cbbb15ec1a357380b0985e6472a5f Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 Jan 2018 11:19:08 +0000 Subject: [PATCH 058/836] Prefer PWD for current directory if present in client, from Wei Zhao in GitHub issue 1183. --- client.c | 8 ++++---- tmux.c | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/client.c b/client.c index 6feafc9385..aa6b596f03 100644 --- a/client.c +++ b/client.c @@ -279,10 +279,10 @@ client_main(struct event_base *base, int argc, char **argv, int flags) client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL); /* Save these before pledge(). */ - if ((cwd = getcwd(path, sizeof path)) == NULL) { - if ((cwd = find_home()) == NULL) - cwd = "/"; - } + if ((cwd = getenv("PWD")) == NULL && + (cwd = getcwd(path, sizeof path)) == NULL && + (cwd = find_home()) == NULL) + cwd = "/"; if ((ttynam = ttyname(STDIN_FILENO)) == NULL) ttynam = ""; diff --git a/tmux.c b/tmux.c index b8a73fd9dc..b8ecfecc69 100644 --- a/tmux.c +++ b/tmux.c @@ -193,7 +193,7 @@ main(int argc, char **argv) { char *path, *label, **var; char tmp[PATH_MAX]; - const char *s, *shell; + const char *s, *shell, *cwd; int opt, flags, keys; const struct options_table_entry *oe; @@ -294,8 +294,9 @@ main(int argc, char **argv) global_environ = environ_create(); for (var = environ; *var != NULL; var++) environ_put(global_environ, *var); - if (getcwd(tmp, sizeof tmp) != NULL) - environ_set(global_environ, "PWD", "%s", tmp); + if ((cwd = getenv("PWD")) == NULL && + (cwd = getcwd(tmp, sizeof tmp)) != NULL) + environ_set(global_environ, "PWD", "%s", cwd); global_options = options_create(NULL); global_s_options = options_create(NULL); From 829fe38ab1429671044a428a2760a9746a73bff6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 12 Jan 2018 10:16:03 +0000 Subject: [PATCH 059/836] Improve logging for layout cells. --- layout.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/layout.c b/layout.c index 2c6fe2b24b..4ccd6d79b1 100644 --- a/layout.c +++ b/layout.c @@ -97,9 +97,24 @@ void layout_print_cell(struct layout_cell *lc, const char *hdr, u_int n) { struct layout_cell *lcchild; + const char *type; - log_debug("%s:%*s%p type %u [parent %p] wp=%p [%u,%u %ux%u]", hdr, n, - " ", lc, lc->type, lc->parent, lc->wp, lc->xoff, lc->yoff, lc->sx, + switch (lc->type) { + case LAYOUT_LEFTRIGHT: + type = "LEFTRIGHT"; + break; + case LAYOUT_TOPBOTTOM: + type = "TOPBOTTOM"; + break; + case LAYOUT_WINDOWPANE: + type = "WINDOWPANE"; + break; + default: + type = "UNKNOWN"; + break; + } + log_debug("%s:%*s%p type %s [parent %p] wp=%p [%u,%u %ux%u]", hdr, n, + " ", lc, type, lc->parent, lc->wp, lc->xoff, lc->yoff, lc->sx, lc->sy); switch (lc->type) { case LAYOUT_LEFTRIGHT: From f32fd2df69d4fec0476507e600a0363b35059f2b Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 12 Jan 2018 10:22:02 +0000 Subject: [PATCH 060/836] Improve error message if creating socket parent directory fails, from Thomas Adam for GitHub issue 1215. --- tmux.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/tmux.c b/tmux.c index b8ecfecc69..dd98678346 100644 --- a/tmux.c +++ b/tmux.c @@ -47,7 +47,7 @@ int ptm_fd = -1; const char *shell_command; static __dead void usage(void); -static char *make_label(const char *); +static char *make_label(const char *, char **); static const char *getshell(void); static int checkshell(const char *); @@ -109,12 +109,13 @@ areshell(const char *shell) } static char * -make_label(const char *label) +make_label(const char *label, char **cause) { char *base, resolved[PATH_MAX], *path, *s; struct stat sb; uid_t uid; - int saved_errno; + + *cause = NULL; if (label == NULL) label = "default"; @@ -124,11 +125,16 @@ make_label(const char *label) xasprintf(&base, "%s/tmux-%ld", s, (long)uid); else xasprintf(&base, "%s/tmux-%ld", _PATH_TMP, (long)uid); - - if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST) + if (realpath(base, resolved) == NULL && + strlcpy(resolved, base, sizeof resolved) >= sizeof resolved) { + errno = ERANGE; + free(base); goto fail; + } - if (lstat(base, &sb) != 0) + if (mkdir(resolved, S_IRWXU) != 0 && errno != EEXIST) + goto fail; + if (lstat(resolved, &sb) != 0) goto fail; if (!S_ISDIR(sb.st_mode)) { errno = ENOTDIR; @@ -138,18 +144,11 @@ make_label(const char *label) errno = EACCES; goto fail; } - - if (realpath(base, resolved) == NULL) - strlcpy(resolved, base, sizeof resolved); xasprintf(&path, "%s/%s", resolved, label); - - free(base); return (path); fail: - saved_errno = errno; - free(base); - errno = saved_errno; + xasprintf(cause, "error creating %s (%s)", resolved, strerror(errno)); return (NULL); } @@ -191,7 +190,7 @@ find_home(void) int main(int argc, char **argv) { - char *path, *label, **var; + char *path, *label, *cause, **var; char tmp[PATH_MAX]; const char *s, *shell, *cwd; int opt, flags, keys; @@ -341,8 +340,11 @@ main(int argc, char **argv) path[strcspn(path, ",")] = '\0'; } } - if (path == NULL && (path = make_label(label)) == NULL) { - fprintf(stderr, "can't create socket: %s\n", strerror(errno)); + if (path == NULL && (path = make_label(label, &cause)) == NULL) { + if (cause != NULL) { + fprintf(stderr, "%s\n", cause); + free(cause); + } exit(1); } socket_path = path; From c03565611e41649ce9295012faec2f0eddb2a822 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 12 Jan 2018 16:32:12 +0000 Subject: [PATCH 061/836] Simplify UTF-8 states down into one state. --- input.c | 120 +++++++++++--------------------------------------------- 1 file changed, 22 insertions(+), 98 deletions(-) diff --git a/input.c b/input.c index 42ff7f3b24..cce4df1f7e 100644 --- a/input.c +++ b/input.c @@ -85,6 +85,7 @@ struct input_ctx { u_int param_list_len; struct utf8_data utf8data; + int utf8started; int ch; int last; @@ -146,9 +147,7 @@ static void input_csi_dispatch_sgr_256(struct input_ctx *, int, u_int *); static void input_csi_dispatch_sgr_rgb(struct input_ctx *, int, u_int *); static void input_csi_dispatch_sgr(struct input_ctx *); static int input_dcs_dispatch(struct input_ctx *); -static int input_utf8_open(struct input_ctx *); -static int input_utf8_add(struct input_ctx *); -static int input_utf8_close(struct input_ctx *); +static int input_top_bit_set(struct input_ctx *); /* Command table comparison function. */ static int input_table_compare(const void *, const void *); @@ -314,9 +313,6 @@ static const struct input_transition input_state_osc_string_table[]; static const struct input_transition input_state_apc_string_table[]; static const struct input_transition input_state_rename_string_table[]; static const struct input_transition input_state_consume_st_table[]; -static const struct input_transition input_state_utf8_three_table[]; -static const struct input_transition input_state_utf8_two_table[]; -static const struct input_transition input_state_utf8_one_table[]; /* ground state definition. */ static const struct input_state input_state_ground = { @@ -437,27 +433,6 @@ static const struct input_state input_state_consume_st = { input_state_consume_st_table }; -/* utf8_three state definition. */ -static const struct input_state input_state_utf8_three = { - "utf8_three", - NULL, NULL, - input_state_utf8_three_table -}; - -/* utf8_two state definition. */ -static const struct input_state input_state_utf8_two = { - "utf8_two", - NULL, NULL, - input_state_utf8_two_table -}; - -/* utf8_one state definition. */ -static const struct input_state input_state_utf8_one = { - "utf8_one", - NULL, NULL, - input_state_utf8_one_table -}; - /* ground state table. */ static const struct input_transition input_state_ground_table[] = { INPUT_STATE_ANYWHERE, @@ -467,11 +442,7 @@ static const struct input_transition input_state_ground_table[] = { { 0x1c, 0x1f, input_c0_dispatch, NULL }, { 0x20, 0x7e, input_print, NULL }, { 0x7f, 0x7f, NULL, NULL }, - { 0x80, 0xc1, NULL, NULL }, - { 0xc2, 0xdf, input_utf8_open, &input_state_utf8_one }, - { 0xe0, 0xef, input_utf8_open, &input_state_utf8_two }, - { 0xf0, 0xf4, input_utf8_open, &input_state_utf8_three }, - { 0xf5, 0xff, NULL, NULL }, + { 0x80, 0xff, input_top_bit_set, NULL }, { -1, -1, NULL, NULL } }; @@ -717,39 +688,6 @@ static const struct input_transition input_state_consume_st_table[] = { { -1, -1, NULL, NULL } }; -/* utf8_three state table. */ -static const struct input_transition input_state_utf8_three_table[] = { - /* No INPUT_STATE_ANYWHERE */ - - { 0x00, 0x7f, NULL, &input_state_ground }, - { 0x80, 0xbf, input_utf8_add, &input_state_utf8_two }, - { 0xc0, 0xff, NULL, &input_state_ground }, - - { -1, -1, NULL, NULL } -}; - -/* utf8_two state table. */ -static const struct input_transition input_state_utf8_two_table[] = { - /* No INPUT_STATE_ANYWHERE */ - - { 0x00, 0x7f, NULL, &input_state_ground }, - { 0x80, 0xbf, input_utf8_add, &input_state_utf8_one }, - { 0xc0, 0xff, NULL, &input_state_ground }, - - { -1, -1, NULL, NULL } -}; - -/* utf8_one state table. */ -static const struct input_transition input_state_utf8_one_table[] = { - /* No INPUT_STATE_ANYWHERE */ - - { 0x00, 0x7f, NULL, &input_state_ground }, - { 0x80, 0xbf, input_utf8_close, &input_state_ground }, - { 0xc0, 0xff, NULL, &input_state_ground }, - - { -1, -1, NULL, NULL } -}; - /* Input table compare. */ static int input_table_compare(const void *key, const void *value) @@ -1059,6 +997,8 @@ input_print(struct input_ctx *ictx) { int set; + ictx->utf8started = 0; /* can't be valid UTF-8 */ + set = ictx->cell.set == 0 ? ictx->cell.g0set : ictx->cell.g1set; if (set == 1) ictx->cell.cell.attr |= GRID_ATTR_CHARSET; @@ -1132,6 +1072,8 @@ input_c0_dispatch(struct input_ctx *ictx) struct window_pane *wp = ictx->wp; struct screen *s = sctx->s; + ictx->utf8started = 0; /* can't be valid UTF-8 */ + log_debug("%s: '%c'", __func__, ictx->ch); switch (ictx->ch) { @@ -2064,47 +2006,29 @@ input_exit_rename(struct input_ctx *ictx) /* Open UTF-8 character. */ static int -input_utf8_open(struct input_ctx *ictx) +input_top_bit_set(struct input_ctx *ictx) { struct utf8_data *ud = &ictx->utf8data; - if (utf8_open(ud, ictx->ch) != UTF8_MORE) - fatalx("UTF-8 open invalid %#x", ictx->ch); - - log_debug("%s %hhu", __func__, ud->size); ictx->last = -1; - return (0); -} - -/* Append to UTF-8 character. */ -static int -input_utf8_add(struct input_ctx *ictx) -{ - struct utf8_data *ud = &ictx->utf8data; - - if (utf8_append(ud, ictx->ch) != UTF8_MORE) - fatalx("UTF-8 add invalid %#x", ictx->ch); - - log_debug("%s", __func__); - - return (0); -} - -/* Close UTF-8 string. */ -static int -input_utf8_close(struct input_ctx *ictx) -{ - struct utf8_data *ud = &ictx->utf8data; + if (!ictx->utf8started) { + if (utf8_open(ud, ictx->ch) != UTF8_MORE) + return (0); + ictx->utf8started = 1; + return (0); + } - if (utf8_append(ud, ictx->ch) != UTF8_DONE) { - /* - * An error here could be invalid UTF-8 or it could be a - * nonprintable character for which we can't get the - * width. Drop it. - */ + switch (utf8_append(ud, ictx->ch)) { + case UTF8_MORE: + return (0); + case UTF8_ERROR: + ictx->utf8started = 0; return (0); + case UTF8_DONE: + break; } + ictx->utf8started = 0; log_debug("%s %hhu '%*s' (width %hhu)", __func__, ud->size, (int)ud->size, ud->data, ud->width); From 2c5a6f9af599f09d3445dd7ac40af31013e85d77 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 12 Jan 2018 16:41:00 +0000 Subject: [PATCH 062/836] Simplify character replacement on non-UTF-8 terminals and make a common function. --- tty.c | 90 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 44 deletions(-) diff --git a/tty.c b/tty.c index 0dee5008e4..9c47ad6dbe 100644 --- a/tty.c +++ b/tty.c @@ -878,12 +878,37 @@ tty_draw_pane(struct tty *tty, const struct window_pane *wp, u_int py, u_int ox, tty_draw_line(tty, wp, wp->screen, py, ox, oy); } +static const struct grid_cell * +tty_check_codeset(struct tty *tty, const struct grid_cell *gc) +{ + static struct grid_cell new; + u_int n; + + /* Characters less than 0x7f are always fine, no matter what. */ + if (gc->data.size == 1 && *gc->data.data < 0x7f) + return (gc); + + /* UTF-8 terminal and a UTF-8 character - fine. */ + if (tty->flags & TTY_UTF8) + return (gc); + + /* Replace by the right number of underscores. */ + n = gc->data.width; + if (n > UTF8_SIZE) + n = UTF8_SIZE; + memcpy(&new, gc, sizeof new); + new.data.size = n; + memset(new.data.data, '_', n); + return (&new); +} + void tty_draw_line(struct tty *tty, const struct window_pane *wp, struct screen *s, u_int py, u_int ox, u_int oy) { struct grid *gd = s->grid; struct grid_cell gc, last; + const struct grid_cell *gcp; u_int i, j, ux, sx, nx, width; int flags, cleared = 0; char buf[512]; @@ -934,18 +959,15 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, for (i = 0; i < sx; i++) { grid_view_get_cell(gd, i, py, &gc); + gcp = tty_check_codeset(tty, &gc); if (len != 0 && - (((~tty->flags & TTY_UTF8) && - (gc.data.size != 1 || - *gc.data.data >= 0x7f || - gc.data.width != 1)) || - (gc.attr & GRID_ATTR_CHARSET) || - gc.flags != last.flags || - gc.attr != last.attr || - gc.fg != last.fg || - gc.bg != last.bg || - ux + width + gc.data.width >= screen_size_x(s) || - (sizeof buf) - len < gc.data.size)) { + ((gcp->attr & GRID_ATTR_CHARSET) || + gcp->flags != last.flags || + gcp->attr != last.attr || + gcp->fg != last.fg || + gcp->bg != last.bg || + ux + width + gcp->data.width >= screen_size_x(s) || + (sizeof buf) - len < gcp->data.size)) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); ux += width; @@ -954,35 +976,21 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, width = 0; } - if (gc.flags & GRID_FLAG_SELECTED) + if (gcp->flags & GRID_FLAG_SELECTED) screen_select_cell(s, &last, &gc); else memcpy(&last, &gc, sizeof last); - if (ux + gc.data.width > screen_size_x(s)) - for (j = 0; j < gc.data.width; j++) { + if (ux + gcp->data.width > screen_size_x(s)) + for (j = 0; j < gcp->data.width; j++) { if (ux + j > screen_size_x(s)) break; tty_putc(tty, ' '); ux++; } - else if (((~tty->flags & TTY_UTF8) && - (gc.data.size != 1 || - *gc.data.data >= 0x7f || - gc.data.width != 1)) || - (gc.attr & GRID_ATTR_CHARSET)) { - tty_attributes(tty, &last, wp); - if (~tty->flags & TTY_UTF8) { - for (j = 0; j < gc.data.width; j++) - tty_putc(tty, '_'); - } else { - for (j = 0; j < gc.data.size; j++) - tty_putc(tty, gc.data.data[j]); - } - ux += gc.data.width; - } else { - memcpy(buf + len, gc.data.data, gc.data.size); - len += gc.data.size; - width += gc.data.width; + else { + memcpy(buf + len, gcp->data.data, gcp->data.size); + len += gcp->data.size; + width += gcp->data.width; } } if (len != 0) { @@ -1409,7 +1417,7 @@ static void tty_cell(struct tty *tty, const struct grid_cell *gc, const struct window_pane *wp) { - u_int i; + const struct grid_cell *gcp; /* Skip last character if terminal is stupid. */ if ((tty->term->flags & TERM_EARLYWRAP) && @@ -1425,22 +1433,16 @@ tty_cell(struct tty *tty, const struct grid_cell *gc, tty_attributes(tty, gc, wp); /* Get the cell and if ASCII write with putc to do ACS translation. */ - if (gc->data.size == 1) { - if (*gc->data.data < 0x20 || *gc->data.data == 0x7f) + gcp = tty_check_codeset(tty, gc); + if (gcp->data.size == 1) { + if (*gcp->data.data < 0x20 || *gcp->data.data == 0x7f) return; - tty_putc(tty, *gc->data.data); - return; - } - - /* If not UTF-8, write _. */ - if (!(tty->flags & TTY_UTF8)) { - for (i = 0; i < gc->data.width; i++) - tty_putc(tty, '_'); + tty_putc(tty, *gcp->data.data); return; } /* Write the data. */ - tty_putn(tty, gc->data.data, gc->data.size, gc->data.width); + tty_putn(tty, gcp->data.data, gcp->data.size, gcp->data.width); } void From b0c1cefeda9d11910dd4a174e82c9f57ff8bc495 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 12 Jan 2018 16:43:47 +0000 Subject: [PATCH 063/836] Do not collect top-bit-set characters in case they need to be replaced. --- screen-write.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/screen-write.c b/screen-write.c index 1687e8c873..75080d8b53 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1297,10 +1297,12 @@ screen_write_collect_end(struct screen_write_ctx *ctx) grid_view_get_cell(s->grid, xx, s->cy, &gc); if (~gc.flags & GRID_FLAG_PADDING) break; - grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + grid_view_set_cell(s->grid, xx, s->cy, + &grid_default_cell); } if (gc.data.width > 1) - grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + grid_view_set_cell(s->grid, xx, s->cy, + &grid_default_cell); } memcpy(&gc, &ci->gc, sizeof gc); @@ -1333,7 +1335,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, */ collect = 1; - if (gc->data.width != 1 || gc->data.size != 1) + if (gc->data.width != 1 || gc->data.size != 1 || *gc->data.data >= 0x7f) collect = 0; else if (gc->attr & GRID_ATTR_CHARSET) collect = 0; From 481703d6698467e459d5b3ff3cd4322bd0385798 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jan 2018 15:27:03 +0000 Subject: [PATCH 064/836] Some unused code, GitHub issue 1219. --- cfg.c | 2 -- cmd-find.c | 2 -- cmd-load-buffer.c | 6 +++--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cfg.c b/cfg.c index 86901e6a01..a448c4b1ff 100644 --- a/cfg.c +++ b/cfg.c @@ -287,8 +287,6 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) } free(buf); - if (cmdlist == NULL) - continue; new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); if (item != NULL) cmdq_insert_after(item, new_item); diff --git a/cmd-find.c b/cmd-find.c index 358161a97d..3c583d7958 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -588,8 +588,6 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane) /* Try special characters. */ if (strcmp(pane, "!") == 0) { - if (fs->w->last == NULL) - return (-1); fs->wp = fs->w->last; if (fs->wp == NULL) return (-1); diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index a3cabdc04c..74f97d1d1f 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -59,7 +59,8 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) struct client *c = item->client; FILE *f; const char *path, *bufname; - char *pdata, *new_pdata, *cause, *file; + char *pdata = NULL, *new_pdata, *cause; + char *file; size_t psize; int ch, error; @@ -89,8 +90,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) f = fopen(file, "rb"); if (f == NULL) { cmdq_error(item, "%s: %s", file, strerror(errno)); - free(file); - return (CMD_RETURN_ERROR); + goto error; } pdata = NULL; From 53b25635da9656577e28a45f328798c417b50cb4 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jan 2018 15:30:03 +0000 Subject: [PATCH 065/836] Another redundant check, GitHub issue 1219. --- cmd-find.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 3c583d7958..7c52c71c8b 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -911,16 +911,12 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) */ fs->w = wp->window; if (cmd_find_best_session_with_window(fs) != 0) { - if (wp != NULL) { - /* - * The window may have been destroyed but the pane - * still on all_window_panes due to something else - * holding a reference. - */ - goto unknown_pane; - } - cmd_find_clear_state(fs, 0); - return (-1); + /* + * The window may have been destroyed but the pane + * still on all_window_panes due to something else + * holding a reference. + */ + goto unknown_pane; } fs->wl = fs->s->curw; fs->w = fs->wl->window; From 58e9d12f23be4ecc7ab6879e8d19239b430f6553 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 16 Jan 2018 08:29:15 +0000 Subject: [PATCH 066/836] msys is apparently a cygwin variant that doesn't say it is cygwin... --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index b18b381058..f6ed390eb2 100644 --- a/configure.ac +++ b/configure.ac @@ -616,7 +616,7 @@ case "$host_os" in AC_MSG_RESULT(hpux) PLATFORM=hpux ;; - *cygwin*) + *cygwin*|*msys*) AC_MSG_RESULT(cygwin) PLATFORM=cygwin ;; From 5849b73b81c1218e57e9931c44e82f0d7c468cb1 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 16 Jan 2018 09:00:38 +0000 Subject: [PATCH 067/836] Add -I to pipe-pane to connect pane stdin as well as stdout, suggested by Kristof Kovacs in GitHub issue 1186. --- cmd-pipe-pane.c | 74 +++++++++++++++++++++++++++++++++++++------------ tmux.1 | 27 +++++++++++++++--- 2 files changed, 79 insertions(+), 22 deletions(-) diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index 8e8019e180..199dd5754a 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -36,6 +36,7 @@ static enum cmd_retval cmd_pipe_pane_exec(struct cmd *, struct cmdq_item *); +static void cmd_pipe_pane_read_callback(struct bufferevent *, void *); static void cmd_pipe_pane_write_callback(struct bufferevent *, void *); static void cmd_pipe_pane_error_callback(struct bufferevent *, short, void *); @@ -43,8 +44,8 @@ const struct cmd_entry cmd_pipe_pane_entry = { .name = "pipe-pane", .alias = "pipep", - .args = { "ot:", 0, 1 }, - .usage = "[-o] " CMD_TARGET_PANE_USAGE " [command]", + .args = { "IOot:", 0, 1 }, + .usage = "[-IOo] " CMD_TARGET_PANE_USAGE " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -61,7 +62,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; char *cmd; - int old_fd, pipe_fd[2], null_fd; + int old_fd, pipe_fd[2], null_fd, in, out; struct format_tree *ft; sigset_t set, oldset; @@ -91,6 +92,15 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'o') && old_fd != -1) return (CMD_RETURN_NORMAL); + /* What do we want to do? Neither -I or -O is -O. */ + if (args_has(self->args, 'I')) { + in = 1; + out = args_has(self->args, 'O'); + } else { + in = 0; + out = 1; + } + /* Open the new pipe. */ if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe_fd) != 0) { cmdq_error(item, "socketpair error: %s", strerror(errno)); @@ -119,19 +129,25 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) sigprocmask(SIG_SETMASK, &oldset, NULL); close(pipe_fd[0]); - if (dup2(pipe_fd[1], STDIN_FILENO) == -1) - _exit(1); - if (pipe_fd[1] != STDIN_FILENO) - close(pipe_fd[1]); - null_fd = open(_PATH_DEVNULL, O_WRONLY, 0); - if (dup2(null_fd, STDOUT_FILENO) == -1) - _exit(1); + if (out) { + if (dup2(pipe_fd[1], STDIN_FILENO) == -1) + _exit(1); + } else { + if (dup2(null_fd, STDIN_FILENO) == -1) + _exit(1); + } + if (in) { + if (dup2(pipe_fd[1], STDOUT_FILENO) == -1) + _exit(1); + if (pipe_fd[1] != STDOUT_FILENO) + close(pipe_fd[1]); + } else { + if (dup2(null_fd, STDOUT_FILENO) == -1) + _exit(1); + } if (dup2(null_fd, STDERR_FILENO) == -1) _exit(1); - if (null_fd != STDOUT_FILENO && null_fd != STDERR_FILENO) - close(null_fd); - closefrom(STDERR_FILENO + 1); execl(_PATH_BSHELL, "sh", "-c", cmd, (char *) NULL); @@ -144,24 +160,46 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) wp->pipe_fd = pipe_fd[0]; wp->pipe_off = EVBUFFER_LENGTH(wp->event->input); - wp->pipe_event = bufferevent_new(wp->pipe_fd, NULL, - cmd_pipe_pane_write_callback, cmd_pipe_pane_error_callback, - wp); - bufferevent_enable(wp->pipe_event, EV_WRITE); - setblocking(wp->pipe_fd, 0); + wp->pipe_event = bufferevent_new(wp->pipe_fd, + cmd_pipe_pane_read_callback, + cmd_pipe_pane_write_callback, + cmd_pipe_pane_error_callback, + wp); + if (out) + bufferevent_enable(wp->pipe_event, EV_WRITE); + if (in) + bufferevent_enable(wp->pipe_event, EV_READ); free(cmd); return (CMD_RETURN_NORMAL); } } +static void +cmd_pipe_pane_read_callback(__unused struct bufferevent *bufev, void *data) +{ + struct window_pane *wp = data; + struct evbuffer *evb = wp->pipe_event->input; + size_t available; + + available = EVBUFFER_LENGTH(evb); + log_debug("%%%u pipe read %zu", wp->id, available); + + bufferevent_write(wp->event, EVBUFFER_DATA(evb), available); + evbuffer_drain(evb, available); + + if (window_pane_destroy_ready(wp)) + server_destroy_pane(wp, 1); +} + static void cmd_pipe_pane_write_callback(__unused struct bufferevent *bufev, void *data) { struct window_pane *wp = data; log_debug("%%%u pipe empty", wp->id); + if (window_pane_destroy_ready(wp)) server_destroy_pane(wp, 1); } diff --git a/tmux.1 b/tmux.1 index 4e48d4a605..7eb228cb16 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1800,15 +1800,15 @@ If .Fl a is used, move to the next window with an alert. .It Xo Ic pipe-pane -.Op Fl o +.Op Fl IOo .Op Fl t Ar target-pane .Op Ar shell-command .Xc .D1 (alias: Ic pipep ) -Pipe any output sent by the program in +Pipe output sent by the program in .Ar target-pane -to a shell command. -A pane may only be piped to one command at a time, any existing pipe is +to a shell command or vice versa. +A pane may only be connected to one command at a time, any existing pipe is closed before .Ar shell-command is executed. @@ -1821,6 +1821,25 @@ If no .Ar shell-command is given, the current pipe (if any) is closed. .Pp +.Fl I +and +.Fl O +specify which of the +.Ar shell-command +output streams are connected to the pane: +with +.Fl I +stdout is connected (so anything +.Ar shell-command +prints is written to the pane as if it were typed); +with +.Fl O +stdin is connected (so any output in the pane is piped to +.Ar shell-command ) . +Both may be used together and if neither are specified, +.Fl O +is used. +.Pp The .Fl o option only opens a new pipe if no previous pipe exists, allowing a pipe to From 75842bfe66d983580dddf11b676445d5b9fa9f8a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 16 Jan 2018 17:03:18 +0000 Subject: [PATCH 068/836] Fix drawing of ACS characters (they need to go character-at-a-time), accidentally broken in last commit. --- tty.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tty.c b/tty.c index 9c47ad6dbe..01208a2506 100644 --- a/tty.c +++ b/tty.c @@ -977,17 +977,23 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } if (gcp->flags & GRID_FLAG_SELECTED) - screen_select_cell(s, &last, &gc); + screen_select_cell(s, &last, gcp); else - memcpy(&last, &gc, sizeof last); - if (ux + gcp->data.width > screen_size_x(s)) + memcpy(&last, gcp, sizeof last); + if (ux + gcp->data.width > screen_size_x(s)) { + tty_attributes(tty, &last, wp); for (j = 0; j < gcp->data.width; j++) { if (ux + j > screen_size_x(s)) break; tty_putc(tty, ' '); ux++; } - else { + } else if (gcp->attr & GRID_ATTR_CHARSET) { + tty_attributes(tty, &last, wp); + for (j = 0; j < gcp->data.size; j++) + tty_putc(tty, gcp->data.data[j]); + ux += gc.data.width; + } else { memcpy(buf + len, gcp->data.data, gcp->data.size); len += gcp->data.size; width += gcp->data.width; From c9037fde1c6fd1e32988951384d2a224591867f1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Jan 2018 07:10:53 +0000 Subject: [PATCH 069/836] Remove unused hooks_run function, from Thomas Adam. --- hooks.c | 27 --------------------------- tmux.h | 2 -- 2 files changed, 29 deletions(-) diff --git a/hooks.c b/hooks.c index 832e6f8422..361f352208 100644 --- a/hooks.c +++ b/hooks.c @@ -139,33 +139,6 @@ hooks_find(struct hooks *hooks, const char *name) return (hook); } -void -hooks_run(struct hooks *hooks, struct client *c, struct cmd_find_state *fs, - const char *fmt, ...) -{ - struct hook *hook; - va_list ap; - char *name; - struct cmdq_item *new_item; - - va_start(ap, fmt); - xvasprintf(&name, fmt, ap); - va_end(ap); - - hook = hooks_find(hooks, name); - if (hook == NULL) { - free(name); - return; - } - log_debug("running hook %s", name); - - new_item = cmdq_get_command(hook->cmdlist, fs, NULL, CMDQ_NOHOOKS); - cmdq_format(new_item, "hook", "%s", name); - cmdq_append(c, new_item); - - free(name); -} - void hooks_insert(struct hooks *hooks, struct cmdq_item *item, struct cmd_find_state *fs, const char *fmt, ...) diff --git a/tmux.h b/tmux.h index 71fadb0888..b8fc0e6638 100644 --- a/tmux.h +++ b/tmux.h @@ -1581,8 +1581,6 @@ void hooks_add(struct hooks *, const char *, struct cmd_list *); void hooks_copy(struct hooks *, struct hooks *); void hooks_remove(struct hooks *, const char *); struct hook *hooks_find(struct hooks *, const char *); -void printflike(4, 5) hooks_run(struct hooks *, struct client *, - struct cmd_find_state *, const char *, ...); void printflike(4, 5) hooks_insert(struct hooks *, struct cmdq_item *, struct cmd_find_state *, const char *, ...); From 17d4c39f24be7c22e1866d1587d77dcca7e6a2d8 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Jan 2018 14:28:11 +0000 Subject: [PATCH 070/836] Discard all but the last line when reading from a #() command - the callback is just going to be fired again straight away to go through all the lines, it is better just to use the last one straight away. --- format.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 1b967c936c..be53ad9312 100644 --- a/format.c +++ b/format.c @@ -191,10 +191,15 @@ static void format_job_update(struct job *job) { struct format_job *fj = job->data; - char *line; + struct evbuffer *evb = job->event->input; + char *line = NULL, *next; time_t t; - if ((line = evbuffer_readline(job->event->input)) == NULL) + while ((next = evbuffer_readline(evb)) != NULL) { + free(line); + line = next; + } + if (line == NULL) return; fj->updated = 1; From 0407d847a424ad6cd1c691ad5dd66cec54a17948 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Jan 2018 12:44:31 +0000 Subject: [PATCH 071/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 7a15c35668..766759d0af 100644 --- a/TODO +++ b/TODO @@ -49,6 +49,7 @@ * improve word and line selection in copy mode (for example when dragging it should select by word. compare how xterm works. GitHub issue 682) + * key to search for word under cursor (GitHub issue 1240) - layout stuff * way to tag a layout as a number/name From 4e4c5008792069b3c8b0562a2411583e89b04aed Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Jan 2018 12:46:52 +0000 Subject: [PATCH 072/836] Add more to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 766759d0af..32afa1978f 100644 --- a/TODO +++ b/TODO @@ -113,6 +113,7 @@ * marker lines in history (GitHub issue 1042) * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... + * drag panes and windows around to move/swap them in choose mode - hooks * more hooks for various things From fe7a871a23ada0c71fb0886ef99a356c67bf5c0d Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 4 Feb 2018 10:10:39 +0000 Subject: [PATCH 073/836] Upstream ncurses has introduced terminfo capabilities to specify RGB colour ("true" or "direct" colour). These consist of new entries (such as "xterm-direct") which have a different setaf/setab implementation, colors and pairs set to 0x1000000 and 0x10000, and a new RGB flag. The setaf/setab definitions seem to be geared towards what ncurses (or emacs maybe) needs, in that the new versions do only ANSI and RGB colours (they can't be used for the 256 colour palette); they rely on the silly ISO colon-separated version of SGR; and they use a weird multiplication scheme so they still only need one argument. The higher values of colors and pairs require a recent ncurses to parse. tmux can use the RGB flag to detect RGB colour support (keeping the old Tc extension for backwards compatibility for now). However, as we still want to send 256 colour information unchanged when possible, the new setaf/setab are awkward. So when RGB is present, reserve setaf/setab only for ANSI colours and use the escape sequences directly for 256 and RGB colours. (To my knowledge no recent terminal uses unusual escape sequences for these in any case.) --- tmux.h | 1 + tty-term.c | 8 ++++++-- tty.c | 13 +++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/tmux.h b/tmux.h index b8fc0e6638..aab21fc48d 100644 --- a/tmux.h +++ b/tmux.h @@ -399,6 +399,7 @@ enum tty_code_code { TTYC_MS, TTYC_OP, TTYC_REV, + TTYC_RGB, TTYC_RI, TTYC_RMACS, TTYC_RMCUP, diff --git a/tty-term.c b/tty-term.c index 0807f85869..b9afd96ca5 100644 --- a/tty-term.c +++ b/tty-term.c @@ -237,6 +237,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_MS] = { TTYCODE_STRING, "Ms" }, [TTYC_OP] = { TTYCODE_STRING, "op" }, [TTYC_REV] = { TTYCODE_STRING, "rev" }, + [TTYC_RGB] = { TTYCODE_FLAG, "RGB" }, [TTYC_RI] = { TTYCODE_STRING, "ri" }, [TTYC_RMACS] = { TTYCODE_STRING, "rmacs" }, [TTYC_RMCUP] = { TTYCODE_STRING, "rmcup" }, @@ -525,8 +526,11 @@ tty_term_find(char *name, int fd, char **cause) code->type = TTYCODE_STRING; } - /* On terminals with RGB colour (TC), fill in setrgbf and setrgbb. */ - if (tty_term_flag(term, TTYC_TC) && + /* + * On terminals with RGB colour (Tc or RGB), fill in setrgbf and + * setrgbb if they are missing. + */ + if ((tty_term_flag(term, TTYC_TC) || tty_term_flag(term, TTYC_RGB)) && !tty_term_has(term, TTYC_SETRGBF) && !tty_term_has(term, TTYC_SETRGBB)) { code = &term->codes[TTYC_SETRGBF]; diff --git a/tty.c b/tty.c index 01208a2506..b293d41d06 100644 --- a/tty.c +++ b/tty.c @@ -2051,11 +2051,15 @@ tty_try_colour(struct tty *tty, int colour, const char *type) if (colour & COLOUR_FLAG_256) { /* - * If the user has specified -2 to the client, setaf and setab - * may not work (or they may not want to use them), so send the - * usual sequence. + * If the user has specified -2 to the client (meaning + * TERM_256COLOURS is set), setaf and setab may not work (or + * they may not want to use them), so send the usual sequence. + * + * Also if RGB is set, setaf and setab do not support the 256 + * colour palette so use the sequences directly there too. */ - if (tty->term_flags & TERM_256COLOURS) + if ((tty->term_flags & TERM_256COLOURS) || + tty_term_has(tty->term, TTYC_RGB)) goto fallback_256; /* @@ -2096,6 +2100,7 @@ tty_try_colour(struct tty *tty, int colour, const char *type) fallback_256: xsnprintf(s, sizeof s, "\033[%s;5;%dm", type, colour & 0xff); + log_debug("%s: 256 colour fallback: %s", tty->client->name, s); tty_puts(tty, s); return (0); } From 0817132f97bdcf475cd8641630e10133ebd8207d Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 5 Feb 2018 06:51:41 +0000 Subject: [PATCH 074/836] Show if filter is active/no matches in modes. --- mode-tree.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 662d4b1738..edc10a2bd7 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -62,6 +62,7 @@ struct mode_tree_data { int preview; char *search; char *filter; + int no_matches; }; struct mode_tree_item { @@ -357,7 +358,8 @@ mode_tree_build(struct mode_tree_data *mtd) TAILQ_INIT(&mtd->children); mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, mtd->filter); - if (TAILQ_EMPTY(&mtd->children)) + mtd->no_matches = TAILQ_EMPTY(&mtd->children); + if (mtd->no_matches) mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, NULL); mode_tree_free_items(&mtd->saved); @@ -479,7 +481,7 @@ mode_tree_draw(struct mode_tree_data *mtd) u_int w, h, i, j, sy, box_x, box_y; char *text, *start, key[7]; const char *tag, *symbol; - size_t size; + size_t size, n; int keylen; if (mtd->line_size == 0) @@ -587,11 +589,24 @@ mode_tree_draw(struct mode_tree_data *mtd) screen_write_cursormove(&ctx, 0, h); screen_write_box(&ctx, w, sy - h); - xasprintf(&text, " %s (sort: %s) ", mti->name, + xasprintf(&text, " %s (sort: %s)", mti->name, mtd->sort_list[mtd->sort_type]); if (w - 2 >= strlen(text)) { screen_write_cursormove(&ctx, 1, h); screen_write_puts(&ctx, &gc0, "%s", text); + + if (mtd->no_matches) + n = (sizeof "no matches") - 1; + else + n = (sizeof "active") - 1; + if (mtd->filter != NULL && w - 2 >= strlen(text) + 10 + n + 2) { + screen_write_puts(&ctx, &gc0, " (filter: "); + if (mtd->no_matches) + screen_write_puts(&ctx, &gc, "no matches"); + else + screen_write_puts(&ctx, &gc0, "active"); + screen_write_puts(&ctx, &gc0, ") "); + } } free(text); From 7f4513ec34862805b06b2ff776785a36fdfec796 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 5 Feb 2018 08:21:54 +0000 Subject: [PATCH 075/836] Add struct status_line to hold status line members of struct client, not used yet but will be soon. From Thomas Adam. --- screen-redraw.c | 2 +- server-client.c | 14 +++++----- status.c | 73 +++++++++++++++++++++++++------------------------ tmux.h | 12 +++++--- window-client.c | 6 ++-- 5 files changed, 57 insertions(+), 50 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 1083642daa..df966aff0d 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -563,7 +563,7 @@ screen_redraw_draw_status(struct client *c, u_int lines, u_int top) else y = tty->sy - lines; for (i = 0; i < lines; i++) - tty_draw_line(tty, NULL, &c->status, i, 0, y); + tty_draw_line(tty, NULL, &c->status.status, i, 0, y); } /* Draw number on a pane. */ diff --git a/server-client.c b/server-client.c index 87f4001816..ee9472d3a7 100644 --- a/server-client.c +++ b/server-client.c @@ -195,7 +195,7 @@ server_client_create(int fd) c->tty.sx = 80; c->tty.sy = 24; - screen_init(&c->status, c->tty.sx, 1, 0); + screen_init(&c->status.status, c->tty.sx, 1, 0); c->message_string = NULL; TAILQ_INIT(&c->message_log); @@ -272,12 +272,12 @@ server_client_lost(struct client *c) if (c->stderr_data != c->stdout_data) evbuffer_free(c->stderr_data); - if (event_initialized(&c->status_timer)) - evtimer_del(&c->status_timer); - screen_free(&c->status); - if (c->old_status != NULL) { - screen_free(c->old_status); - free(c->old_status); + if (event_initialized(&c->status.timer)) + evtimer_del(&c->status.timer); + screen_free(&c->status.status); + if (c->status.old_status != NULL) { + screen_free(c->status.old_status); + free(c->status.old_status); } free(c->title); diff --git a/status.c b/status.c index 2f6fc4cbb9..55e331facb 100644 --- a/status.c +++ b/status.c @@ -151,7 +151,7 @@ status_timer_callback(__unused int fd, __unused short events, void *arg) struct session *s = c->session; struct timeval tv; - evtimer_del(&c->status_timer); + evtimer_del(&c->status.timer); if (s == NULL) return; @@ -163,7 +163,7 @@ status_timer_callback(__unused int fd, __unused short events, void *arg) tv.tv_sec = options_get_number(s->options, "status-interval"); if (tv.tv_sec != 0) - evtimer_add(&c->status_timer, &tv); + evtimer_add(&c->status.timer, &tv); log_debug("client %p, status interval %d", c, (int)tv.tv_sec); } @@ -173,10 +173,10 @@ status_timer_start(struct client *c) { struct session *s = c->session; - if (event_initialized(&c->status_timer)) - evtimer_del(&c->status_timer); + if (event_initialized(&c->status.timer)) + evtimer_del(&c->status.timer); else - evtimer_set(&c->status_timer, status_timer_callback, c); + evtimer_set(&c->status.timer, status_timer_callback, c); if (s != NULL && options_get_number(s->options, "status")) status_timer_callback(-1, 0, c); @@ -317,10 +317,10 @@ status_redraw(struct client *c) int larrow, rarrow; /* Delete the saved status line, if any. */ - if (c->old_status != NULL) { - screen_free(c->old_status); - free(c->old_status); - c->old_status = NULL; + if (c->status.old_status != NULL) { + screen_free(c->status.old_status); + free(c->status.old_status); + c->status.old_status = NULL; } /* No status line? */ @@ -337,9 +337,9 @@ status_redraw(struct client *c) style_apply(&stdgc, s->options, "status-style"); /* Create the target screen. */ - memcpy(&old_status, &c->status, sizeof old_status); - screen_init(&c->status, c->tty.sx, lines, 0); - screen_write_start(&ctx, NULL, &c->status); + memcpy(&old_status, &c->status.status, sizeof old_status); + screen_init(&c->status.status, c->tty.sx, lines, 0); + screen_write_start(&ctx, NULL, &c->status.status); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &stdgc, ' '); screen_write_stop(&ctx); @@ -462,7 +462,7 @@ status_redraw(struct client *c) draw: /* Begin drawing. */ - screen_write_start(&ctx, NULL, &c->status); + screen_write_start(&ctx, NULL, &c->status.status); /* Draw the left string and arrow. */ screen_write_cursormove(&ctx, 0, 0); @@ -517,7 +517,7 @@ status_redraw(struct client *c) free(left); free(right); - if (grid_compare(c->status.grid, old_status.grid) == 0) { + if (grid_compare(c->status.status.grid, old_status.grid) == 0) { screen_free(&old_status); return (0); } @@ -590,10 +590,11 @@ status_message_set(struct client *c, const char *fmt, ...) status_message_clear(c); - if (c->old_status == NULL) { - c->old_status = xmalloc(sizeof *c->old_status); - memcpy(c->old_status, &c->status, sizeof *c->old_status); - screen_init(&c->status, c->tty.sx, 1, 0); + if (c->status.old_status == NULL) { + c->status.old_status = xmalloc(sizeof *c->status.old_status); + memcpy(c->status.old_status, &c->status.status, + sizeof *c->status.old_status); + screen_init(&c->status.status, c->tty.sx, 1, 0); } va_start(ap, fmt); @@ -631,7 +632,7 @@ status_message_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_REDRAW; /* screen was frozen and may have changed */ - screen_reinit(&c->status); + screen_reinit(&c->status.status); } /* Clear status line message after timer expires. */ @@ -656,14 +657,14 @@ status_message_redraw(struct client *c) if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status, sizeof old_status); + memcpy(&old_status, &c->status.status, sizeof old_status); lines = status_line_size(c->session); if (lines <= 1) { lines = 1; - screen_init(&c->status, c->tty.sx, 1, 0); + screen_init(&c->status.status, c->tty.sx, 1, 0); } else - screen_init(&c->status, c->tty.sx, lines, 0); + screen_init(&c->status.status, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->message_string); if (len > c->tty.sx) @@ -671,7 +672,7 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); - screen_write_start(&ctx, NULL, &c->status); + screen_write_start(&ctx, NULL, &c->status.status); screen_write_cursormove(&ctx, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -679,7 +680,7 @@ status_message_redraw(struct client *c) screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); screen_write_stop(&ctx); - if (grid_compare(c->status.grid, old_status.grid) == 0) { + if (grid_compare(c->status.status.grid, old_status.grid) == 0) { screen_free(&old_status); return (0); } @@ -710,10 +711,11 @@ status_prompt_set(struct client *c, const char *msg, const char *input, status_message_clear(c); status_prompt_clear(c); - if (c->old_status == NULL) { - c->old_status = xmalloc(sizeof *c->old_status); - memcpy(c->old_status, &c->status, sizeof *c->old_status); - screen_init(&c->status, c->tty.sx, 1, 0); + if (c->status.old_status == NULL) { + c->status.old_status = xmalloc(sizeof *c->status.old_status); + memcpy(c->status.old_status, &c->status.status, + sizeof *c->status.old_status); + screen_init(&c->status.status, c->tty.sx, 1, 0); } c->prompt_string = format_expand_time(ft, msg, t); @@ -763,7 +765,7 @@ status_prompt_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_REDRAW; /* screen was frozen and may have changed */ - screen_reinit(&c->status); + screen_reinit(&c->status.status); } /* Update status line prompt with a new prompt string. */ @@ -809,14 +811,14 @@ status_prompt_redraw(struct client *c) if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status, sizeof old_status); + memcpy(&old_status, &c->status.status, sizeof old_status); lines = status_line_size(c->session); if (lines <= 1) { lines = 1; - screen_init(&c->status, c->tty.sx, 1, 0); + screen_init(&c->status.status, c->tty.sx, 1, 0); } else - screen_init(&c->status, c->tty.sx, lines, 0); + screen_init(&c->status.status, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->prompt_string); if (len > c->tty.sx) @@ -834,7 +836,7 @@ status_prompt_redraw(struct client *c) if (start > c->tty.sx) start = c->tty.sx; - screen_write_start(&ctx, NULL, &c->status); + screen_write_start(&ctx, NULL, &c->status.status); screen_write_cursormove(&ctx, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -880,13 +882,14 @@ status_prompt_redraw(struct client *c) screen_write_cell(&ctx, &cursorgc); } } - if (c->status.cx < screen_size_x(&c->status) && c->prompt_index >= i) + if (c->status.status.cx < screen_size_x(&c->status.status) && + c->prompt_index >= i) screen_write_putc(&ctx, &cursorgc, ' '); finished: screen_write_stop(&ctx); - if (grid_compare(c->status.grid, old_status.grid) == 0) { + if (grid_compare(c->status.status.grid, old_status.grid) == 0) { screen_free(&old_status); return (0); } diff --git a/tmux.h b/tmux.h index aab21fc48d..61032b3f06 100644 --- a/tmux.h +++ b/tmux.h @@ -1312,6 +1312,13 @@ struct cmd_entry { enum cmd_retval (*exec)(struct cmd *, struct cmdq_item *); }; +/* Status line. */ +struct status_line { + struct event timer; + struct screen status; + struct screen *old_status; +}; + /* Client connection. */ typedef int (*prompt_input_cb)(struct client *, void *, const char *, int); typedef void (*prompt_free_cb)(void *); @@ -1354,10 +1361,7 @@ struct client { struct event click_timer; u_int click_button; - struct event status_timer; - struct screen status; - - struct screen *old_status; + struct status_line status; #define CLIENT_TERMINAL 0x1 #define CLIENT_LOGIN 0x2 diff --git a/window-client.c b/window-client.c index 76e536ece0..aae9e0b45d 100644 --- a/window-client.c +++ b/window-client.c @@ -229,10 +229,10 @@ window_client_draw(__unused void *modedata, void *itemdata, screen_write_hline(ctx, sx, 0, 0); screen_write_cursormove(ctx, cx, cy + sy - 1); - if (c->old_status != NULL) - screen_write_fast_copy(ctx, c->old_status, 0, 0, sx, 1); + if (c->status.old_status != NULL) + screen_write_fast_copy(ctx, c->status.old_status, 0, 0, sx, 1); else - screen_write_fast_copy(ctx, &c->status, 0, 0, sx, 1); + screen_write_fast_copy(ctx, &c->status.status, 0, 0, sx, 1); } static struct screen * From 320abba341311a0271e32f393afd89f1e82fc14c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Feb 2018 09:51:41 +0000 Subject: [PATCH 076/836] Reflowing the grid in-place involved way too much memmove() for a big performance cost with a large history. Instead change back to using a second grid and copying modified lines over which is much faster (this doesn't revert to the old code however which didn't support UTF-8 properly). GitHub issue 1249. --- grid.c | 198 +++++++++++++++++++++++++++++++++++++-------------------- tmux.h | 1 + 2 files changed, 130 insertions(+), 69 deletions(-) diff --git a/grid.c b/grid.c index 1cd01cbdc0..e4ba7df424 100644 --- a/grid.c +++ b/grid.c @@ -226,7 +226,10 @@ grid_create(u_int sx, u_int sy, u_int hlimit) gd->hsize = 0; gd->hlimit = hlimit; - gd->linedata = xcalloc(gd->sy, sizeof *gd->linedata); + if (gd->sy != 0) + gd->linedata = xcalloc(gd->sy, sizeof *gd->linedata); + else + gd->linedata = NULL; return (gd); } @@ -941,15 +944,66 @@ grid_duplicate_lines(struct grid *dst, u_int dy, struct grid *src, u_int sy, } } +/* Mark line as dead. */ +static void +grid_reflow_dead(struct grid_line *gl) +{ + memset(gl, 0, sizeof *gl); + gl->flags = GRID_LINE_DEAD; +} + +/* Add lines, return the first new one. */ +static struct grid_line * +grid_reflow_add(struct grid *gd, u_int n) +{ + struct grid_line *gl; + u_int sy = gd->sy + n; + + gd->linedata = xreallocarray(gd->linedata, sy, sizeof *gd->linedata); + gl = &gd->linedata[gd->sy]; + memset(gl, 0, n * (sizeof *gl)); + gd->sy = sy; + return (gl); +} + +/* Move a line across. */ +static struct grid_line * +grid_reflow_move(struct grid *gd, struct grid_line *from) +{ + struct grid_line *to; + + to = grid_reflow_add(gd, 1); + memcpy(to, from, sizeof *to); + grid_reflow_dead(from); + return (to); +} + /* Join line below onto this one. */ static void -grid_reflow_join(struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy) +grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, + u_int width, u_int *cy, int already) { - struct grid_line *gl = &gd->linedata[yy], *from; + struct grid_line *gl, *from; struct grid_cell gc; - u_int lines, want, left, i, at = gl->cellused, line; + u_int lines, want, left, i, to, line; + u_int at; int wrapped = 1; + /* + * Add a new target line. + */ + if (!already) { + to = target->sy; + gl = grid_reflow_move(target, &gd->linedata[yy]); + } else { + to = target->sy - 1; + gl = &target->linedata[to]; + } + at = gl->cellused; + + /* + * Loop until no more to consume or the target line is full. + */ lines = 0; for (;;) { /* @@ -978,7 +1032,7 @@ grid_reflow_join(struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy) if (width + gc.data.width > sx) break; width += gc.data.width; - grid_set_cell(gd, at, yy, &gc); + grid_set_cell(target, at, to, &gc); at++; /* Join as much more as possible onto the current line. */ @@ -989,7 +1043,7 @@ grid_reflow_join(struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy) break; width += gc.data.width; - grid_set_cell(gd, at, yy, &gc); + grid_set_cell(target, at, to, &gc); at++; } lines++; @@ -1018,48 +1072,39 @@ grid_reflow_join(struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy) gl->flags &= ~GRID_LINE_WRAPPED; /* Remove the lines that were completely consumed. */ - if (lines != 0) { - if (yy + lines != gd->hsize + gd->sy) { - memmove(&gd->linedata[yy + 1], - &gd->linedata[yy + lines + 1], - ((gd->hsize + gd->sy) - (yy + lines + 1)) * - (sizeof *gd->linedata)); - } - if (gd->hsize >= lines) - gd->hsize -= lines; - else { - lines -= gd->hsize; - gd->hsize = 0; - for (i = 1; i < lines + 1; i++) - grid_empty_line(gd, gd->hsize + gd->sy - i, 8); - } + for (i = yy + 1; i < yy + 1 + lines; i++) { + free(gd->linedata[i].celldata); + free(gd->linedata[i].extddata); + grid_reflow_dead(&gd->linedata[i]); } /* Adjust cursor and scroll positions. */ - if (*cy > yy + lines) + if (*cy > to + lines) *cy -= lines; - else if (*cy > yy) - *cy = yy; - if (gd->hscrolled > yy + lines) + else if (*cy > to) + *cy = to; + if (gd->hscrolled > to + lines) gd->hscrolled -= lines; - else if (gd->hscrolled > yy) - gd->hscrolled = yy; + else if (gd->hscrolled > to) + gd->hscrolled = to; } /* Split this line into several new ones */ static void -grid_reflow_split(struct grid *gd, u_int sx, u_int yy, u_int at, u_int *cy) +grid_reflow_split(struct grid *target, struct grid *gd, u_int sx, u_int yy, + u_int at, u_int *cy) { - struct grid_line *gl = &gd->linedata[yy]; + struct grid_line *gl = &gd->linedata[yy], *first; struct grid_cell gc; - u_int line, lines, width, i, used = gl->cellused, xx; + u_int line, lines, width, i, xx; + u_int used = gl->cellused; int flags = gl->flags; - /* How many lines do we need to insert? We know we need at least one. */ + /* How many lines do we need to insert? We know we need at least two. */ if (~gl->flags & GRID_LINE_EXTENDED) - lines = (gl->cellused - 1) / sx; + lines = 1 + (gl->cellused - 1) / sx; else { - lines = 1; + lines = 2; width = 0; for (i = at; i < used; i++) { grid_get_cell1(gl, i, &gc); @@ -1071,58 +1116,54 @@ grid_reflow_split(struct grid *gd, u_int sx, u_int yy, u_int at, u_int *cy) } } - /* Trim the original line size. */ - gl->cellsize = gl->cellused = at; - gl->flags |= GRID_LINE_WRAPPED; - /* Insert new lines. */ - gd->linedata = xreallocarray(gd->linedata, gd->hsize + gd->sy + lines, - sizeof *gd->linedata); - memmove(&gd->linedata[yy + lines + 1], &gd->linedata[yy + 1], - ((gd->hsize + gd->sy) - (yy + 1)) * (sizeof *gd->linedata)); - gd->hsize += lines; - for (i = 0; i < lines; i++) - grid_empty_line(gd, yy + 1 + i, 8); - gl = &gd->linedata[yy]; + line = target->sy + 1; + first = grid_reflow_add(target, lines); /* Copy sections from the original line. */ - line = yy + 1; width = 0; xx = 0; for (i = at; i < used; i++) { grid_get_cell1(gl, i, &gc); if (width + gc.data.width > sx) { - gd->linedata[line].flags |= GRID_LINE_WRAPPED; + target->linedata[line].flags |= GRID_LINE_WRAPPED; line++; width = 0; xx = 0; } width += gc.data.width; - grid_set_cell(gd, xx, line, &gc); + grid_set_cell(target, xx, line, &gc); xx++; } if (flags & GRID_LINE_WRAPPED) - gd->linedata[line].flags |= GRID_LINE_WRAPPED; + target->linedata[line].flags |= GRID_LINE_WRAPPED; + + /* Move the remainder of the original line. */ + gl->cellsize = gl->cellused = at; + gl->flags |= GRID_LINE_WRAPPED; + memcpy(first, gl, sizeof *first); + grid_reflow_dead(gl); /* Adjust the cursor and scroll positions. */ if (yy <= *cy) - (*cy) += lines; + (*cy) += lines - 1; if (yy <= gd->hscrolled) - gd->hscrolled += lines; + gd->hscrolled += lines - 1; /* * If the original line had the wrapped flag and there is still space * in the last new line, try to join with the next lines. */ if (width < sx && (flags & GRID_LINE_WRAPPED)) - grid_reflow_join(gd, sx, line, width, cy); + grid_reflow_join(target, gd, sx, yy, width, cy, 1); } /* Reflow lines on grid to new width. */ void grid_reflow(struct grid *gd, u_int sx, u_int *cursor) { + struct grid *target; struct grid_line *gl; struct grid_cell gc; u_int yy, cy, width, i, at, first; @@ -1135,14 +1176,24 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) cy = gd->hsize + (*cursor); /* - * Loop over lines from top to bottom. The size may change during the - * loop, but it is OK because we are always adding or removing lines - * below the current one. + * Create a destination grid. This is just used as a container for the + * line data and may not be fully valid. + */ + target = grid_create(gd->sx, 0, 0); + + /* + * Loop over each source line. */ for (yy = 0; yy < gd->hsize + gd->sy; yy++) { gl = &gd->linedata[yy]; + if (gl->flags & GRID_LINE_DEAD) + continue; - /* Work out the width of this line. */ + /* + * Work out the width of this line. first is the width of the + * first character, at is the point at which the available + * width is hit, and width is the full line width. + */ first = at = width = 0; if (~gl->flags & GRID_LINE_EXTENDED) { first = 1; @@ -1163,25 +1214,20 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) } /* - * If the line is exactly right, there is no need to do - * anything. + * If the line is exactly right or the first character is wider + * than the targe width, just move it across unchanged. */ - if (width == sx) - continue; - - /* - * If the first character is wider than the target width, there - * is no point in trying to do anything. - */ - if (first > sx) + if (width == sx || first > sx) { + grid_reflow_move(target, gl); continue; + } /* * If the line is too big, it needs to be split, whether or not * it was previously wrapped. */ if (width > sx) { - grid_reflow_split(gd, sx, yy, at, &cy); + grid_reflow_split(target, gd, sx, yy, at, &cy); continue; } @@ -1190,10 +1236,24 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) * of the next line. */ if (gl->flags & GRID_LINE_WRAPPED) - grid_reflow_join(gd, sx, yy, width, &cy); - + grid_reflow_join(target, gd, sx, yy, width, &cy, 0); + else + grid_reflow_move(target, gl); } + /* + * Replace the old grid with the new. + */ + if (target->sy < gd->sy) + grid_reflow_add(target, gd->sy - target->sy); + gd->hsize = target->sy - gd->sy; + free(gd->linedata); + gd->linedata = target->linedata; + free(target); + + /* + * Update scrolled and cursor positions. + */ if (gd->hscrolled > gd->hsize) gd->hscrolled = gd->hsize; if (cy < gd->hsize) diff --git a/tmux.h b/tmux.h index 61032b3f06..88a223e666 100644 --- a/tmux.h +++ b/tmux.h @@ -551,6 +551,7 @@ enum utf8_state { /* Grid line flags. */ #define GRID_LINE_WRAPPED 0x1 #define GRID_LINE_EXTENDED 0x2 +#define GRID_LINE_DEAD 0x4 /* Grid cell data. */ struct grid_cell { From 6ae04dd5a01cbdc2fe2e4908ef444faaf50656f4 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 19 Feb 2018 21:20:10 +0000 Subject: [PATCH 077/836] Support ISO colon-separated SGR. --- input.c | 297 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 226 insertions(+), 71 deletions(-) diff --git a/input.c b/input.c index cce4df1f7e..3a65165326 100644 --- a/input.c +++ b/input.c @@ -58,6 +58,19 @@ struct input_cell { int g1set; /* 1 if ACS */ }; +/* Input parser argument. */ +struct input_param { + enum { + INPUT_MISSING, + INPUT_NUMBER, + INPUT_STRING + } type; + union { + int num; + char *str; + }; +}; + /* Input parser context. */ struct input_ctx { struct window_pane *wp; @@ -81,7 +94,7 @@ struct input_ctx { size_t input_len; size_t input_space; - int param_list[24]; /* -1 not present */ + struct input_param param_list[24]; u_int param_list_len; struct utf8_data utf8data; @@ -497,7 +510,7 @@ static const struct input_transition input_state_csi_enter_table[] = { { 0x1c, 0x1f, input_c0_dispatch, NULL }, { 0x20, 0x2f, input_intermediate, &input_state_csi_intermediate }, { 0x30, 0x39, input_parameter, &input_state_csi_parameter }, - { 0x3a, 0x3a, NULL, &input_state_csi_ignore }, + { 0x3a, 0x3a, input_parameter, &input_state_csi_parameter }, { 0x3b, 0x3b, input_parameter, &input_state_csi_parameter }, { 0x3c, 0x3f, input_intermediate, &input_state_csi_parameter }, { 0x40, 0x7e, input_csi_dispatch, &input_state_ground }, @@ -515,7 +528,7 @@ static const struct input_transition input_state_csi_parameter_table[] = { { 0x1c, 0x1f, input_c0_dispatch, NULL }, { 0x20, 0x2f, input_intermediate, &input_state_csi_intermediate }, { 0x30, 0x39, input_parameter, NULL }, - { 0x3a, 0x3a, NULL, &input_state_csi_ignore }, + { 0x3a, 0x3a, input_parameter, NULL }, { 0x3b, 0x3b, input_parameter, NULL }, { 0x3c, 0x3f, NULL, &input_state_csi_ignore }, { 0x40, 0x7e, input_csi_dispatch, &input_state_ground }, @@ -760,6 +773,12 @@ void input_free(struct window_pane *wp) { struct input_ctx *ictx = wp->ictx; + u_int i; + + for (i = 0; i < ictx->param_list_len; i++) { + if (ictx->param_list[i].type == INPUT_STRING) + free(ictx->param_list[i].str); + } event_del(&ictx->timer); @@ -902,29 +921,51 @@ input_parse(struct window_pane *wp) static int input_split(struct input_ctx *ictx) { - const char *errstr; - char *ptr, *out; - int n; + const char *errstr; + char *ptr, *out; + struct input_param *ip; + u_int i; + for (i = 0; i < ictx->param_list_len; i++) { + if (ictx->param_list[i].type == INPUT_STRING) + free(ictx->param_list[i].str); + } ictx->param_list_len = 0; + if (ictx->param_len == 0) return (0); + ip = &ictx->param_list[0]; ptr = ictx->param_buf; while ((out = strsep(&ptr, ";")) != NULL) { if (*out == '\0') - n = -1; + ip->type = INPUT_MISSING; else { - n = strtonum(out, 0, INT_MAX, &errstr); - if (errstr != NULL) - return (-1); + if (strchr(out, ':') != NULL) { + ip->type = INPUT_STRING; + ip->str = xstrdup(out); + } else { + ip->type = INPUT_NUMBER; + ip->num = strtonum(out, 0, INT_MAX, &errstr); + if (errstr != NULL) + return (-1); + } } - - ictx->param_list[ictx->param_list_len++] = n; + ip = &ictx->param_list[++ictx->param_list_len]; if (ictx->param_list_len == nitems(ictx->param_list)) return (-1); } + for (i = 0; i < ictx->param_list_len; i++) { + ip = &ictx->param_list[i]; + if (ip->type == INPUT_MISSING) + log_debug("parameter %u: missing", i); + else if (ip->type == INPUT_STRING) + log_debug("parameter %u: string %s", i, ip->str); + else if (ip->type == INPUT_NUMBER) + log_debug("parameter %u: number %d", i, ip->num); + } + return (0); } @@ -932,14 +973,17 @@ input_split(struct input_ctx *ictx) static int input_get(struct input_ctx *ictx, u_int validx, int minval, int defval) { - int retval; + struct input_param *ip; + int retval; if (validx >= ictx->param_list_len) return (defval); - - retval = ictx->param_list[validx]; - if (retval == -1) + ip = &ictx->param_list[validx]; + if (ip->type == INPUT_MISSING) return (defval); + if (ip->type == INPUT_STRING) + return (-1); + retval = ip->num; if (retval < minval) return (minval); return (retval); @@ -1206,7 +1250,7 @@ input_csi_dispatch(struct input_ctx *ictx) struct screen *s = sctx->s; struct input_table_entry *entry; int i, n, m; - u_int cx; + u_int cx, bg = ictx->cell.cell.bg; if (ictx->flags & INPUT_DISCARD) return (0); @@ -1231,6 +1275,8 @@ input_csi_dispatch(struct input_ctx *ictx) if (cx > screen_size_x(s) - 1) cx = screen_size_x(s) - 1; n = input_get(ictx, 0, 1, 1); + if (n == -1) + break; while (cx > 0 && n-- > 0) { do cx--; @@ -1239,35 +1285,52 @@ input_csi_dispatch(struct input_ctx *ictx) s->cx = cx; break; case INPUT_CSI_CUB: - screen_write_cursorleft(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_cursorleft(sctx, n); break; case INPUT_CSI_CUD: - screen_write_cursordown(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_cursordown(sctx, n); break; case INPUT_CSI_CUF: - screen_write_cursorright(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_cursorright(sctx, n); break; case INPUT_CSI_CUP: n = input_get(ictx, 0, 1, 1); m = input_get(ictx, 1, 1, 1); - screen_write_cursormove(sctx, m - 1, n - 1); + if (n != -1 && m != -1) + screen_write_cursormove(sctx, m - 1, n - 1); break; case INPUT_CSI_WINOPS: input_csi_dispatch_winops(ictx); break; case INPUT_CSI_CUU: - screen_write_cursorup(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_cursorup(sctx, n); break; case INPUT_CSI_CNL: - screen_write_carriagereturn(sctx); - screen_write_cursordown(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) { + screen_write_carriagereturn(sctx); + screen_write_cursordown(sctx, n); + } break; case INPUT_CSI_CPL: - screen_write_carriagereturn(sctx); - screen_write_cursorup(sctx, input_get(ictx, 0, 1, 1)); + n = input_get(ictx, 0, 1, 1); + if (n != -1) { + screen_write_carriagereturn(sctx); + screen_write_cursorup(sctx, n); + } break; case INPUT_CSI_DA: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 0: input_reply(ictx, "\033[?1;2c"); break; @@ -1278,6 +1341,8 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_DA_TWO: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 0: input_reply(ictx, "\033[>84;0;0c"); break; @@ -1287,24 +1352,30 @@ input_csi_dispatch(struct input_ctx *ictx) } break; case INPUT_CSI_ECH: - screen_write_clearcharacter(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_clearcharacter(sctx, n, bg); break; case INPUT_CSI_DCH: - screen_write_deletecharacter(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_deletecharacter(sctx, n, bg); break; case INPUT_CSI_DECSTBM: n = input_get(ictx, 0, 1, 1); m = input_get(ictx, 1, 1, screen_size_y(s)); - screen_write_scrollregion(sctx, n - 1, m - 1); + if (n != -1 && m != -1) + screen_write_scrollregion(sctx, n - 1, m - 1); break; case INPUT_CSI_DL: - screen_write_deleteline(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_deleteline(sctx, n, bg); break; case INPUT_CSI_DSR: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 5: input_reply(ictx, "\033[0n"); break; @@ -1318,24 +1389,24 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_ED: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 0: - screen_write_clearendofscreen(sctx, ictx->cell.cell.bg); + screen_write_clearendofscreen(sctx, bg); break; case 1: - screen_write_clearstartofscreen(sctx, ictx->cell.cell.bg); + screen_write_clearstartofscreen(sctx, bg); break; case 2: - screen_write_clearscreen(sctx, ictx->cell.cell.bg); + screen_write_clearscreen(sctx, bg); break; case 3: - switch (input_get(ictx, 1, 0, 0)) { - case 0: + if (input_get(ictx, 1, 0, 0) == 0) { /* * Linux console extension to clear history * (for example before locking the screen). */ screen_write_clearhistory(sctx); - break; } break; default: @@ -1345,14 +1416,16 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_EL: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 0: - screen_write_clearendofline(sctx, ictx->cell.cell.bg); + screen_write_clearendofline(sctx, bg); break; case 1: - screen_write_clearstartofline(sctx, ictx->cell.cell.bg); + screen_write_clearstartofline(sctx, bg); break; case 2: - screen_write_clearline(sctx, ictx->cell.cell.bg); + screen_write_clearline(sctx, bg); break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); @@ -1361,22 +1434,28 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_HPA: n = input_get(ictx, 0, 1, 1); - screen_write_cursormove(sctx, n - 1, s->cy); + if (n != -1) + screen_write_cursormove(sctx, n - 1, s->cy); break; case INPUT_CSI_ICH: - screen_write_insertcharacter(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_insertcharacter(sctx, n, bg); break; case INPUT_CSI_IL: - screen_write_insertline(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_insertline(sctx, n, bg); break; case INPUT_CSI_REP: + n = input_get(ictx, 0, 1, 1); + if (n == -1) + break; + if (ictx->last == -1) break; ictx->ch = ictx->last; - n = input_get(ictx, 0, 1, 1); for (i = 0; i < n; i++) input_print(ictx); break; @@ -1405,11 +1484,14 @@ input_csi_dispatch(struct input_ctx *ictx) input_csi_dispatch_sm_private(ictx); break; case INPUT_CSI_SU: - screen_write_scrollup(sctx, input_get(ictx, 0, 1, 1), - ictx->cell.cell.bg); + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_scrollup(sctx, n, bg); break; case INPUT_CSI_TBC: switch (input_get(ictx, 0, 0, 0)) { + case -1: + break; case 0: if (s->cx < screen_size_x(s)) bit_clear(s->tabs, s->cx); @@ -1424,11 +1506,13 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_VPA: n = input_get(ictx, 0, 1, 1); - screen_write_cursormove(sctx, s->cx, n - 1); + if (n != -1) + screen_write_cursormove(sctx, s->cx, n - 1); break; case INPUT_CSI_DECSCUSR: n = input_get(ictx, 0, 0, 0); - screen_set_cursor_style(s, n); + if (n != -1) + screen_set_cursor_style(s, n); break; } @@ -1444,6 +1528,8 @@ input_csi_dispatch_rm(struct input_ctx *ictx) for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { + case -1: + break; case 4: /* IRM */ screen_write_mode_clear(&ictx->ctx, MODE_INSERT); break; @@ -1466,6 +1552,8 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { + case -1: + break; case 1: /* DECCKM */ screen_write_mode_clear(&ictx->ctx, MODE_KCURSOR); break; @@ -1523,6 +1611,8 @@ input_csi_dispatch_sm(struct input_ctx *ictx) for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { + case -1: + break; case 4: /* IRM */ screen_write_mode_set(&ictx->ctx, MODE_INSERT); break; @@ -1545,6 +1635,8 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { + case -1: + break; case 1: /* DECCKM */ screen_write_mode_set(&ictx->ctx, MODE_KCURSOR); break; @@ -1673,16 +1765,13 @@ input_csi_dispatch_winops(struct input_ctx *ictx) } } -/* Handle CSI SGR for 256 colours. */ -static void -input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i) +/* Helper for 256 colour SGR. */ +static int +input_csi_dispatch_sgr_256_do(struct input_ctx *ictx, int fgbg, int c) { struct grid_cell *gc = &ictx->cell.cell; - int c; - (*i)++; - c = input_get(ictx, *i, 0, -1); - if (c == -1) { + if (c == -1 || c > 255) { if (fgbg == 38) gc->fg = 8; else if (fgbg == 48) @@ -1693,32 +1782,92 @@ input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i) else if (fgbg == 48) gc->bg = c | COLOUR_FLAG_256; } + return (1); } -/* Handle CSI SGR for RGB colours. */ +/* Handle CSI SGR for 256 colours. */ static void -input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i) +input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i) +{ + int c; + + c = input_get(ictx, (*i) + 1, 0, -1); + if (input_csi_dispatch_sgr_256_do(ictx, fgbg, c)) + (*i)++; +} + +/* Helper for RGB colour SGR. */ +static int +input_csi_dispatch_sgr_rgb_do(struct input_ctx *ictx, int fgbg, int r, int g, + int b) { struct grid_cell *gc = &ictx->cell.cell; - int r, g, b; - (*i)++; - r = input_get(ictx, *i, 0, -1); if (r == -1 || r > 255) - return; - (*i)++; - g = input_get(ictx, *i, 0, -1); + return (0); if (g == -1 || g > 255) - return; - (*i)++; - b = input_get(ictx, *i, 0, -1); + return (0); if (b == -1 || b > 255) - return; + return (0); if (fgbg == 38) gc->fg = colour_join_rgb(r, g, b); else if (fgbg == 48) gc->bg = colour_join_rgb(r, g, b); + return (1); +} + +/* Handle CSI SGR for RGB colours. */ +static void +input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i) +{ + int r, g, b; + + r = input_get(ictx, (*i) + 1, 0, -1); + g = input_get(ictx, (*i) + 2, 0, -1); + b = input_get(ictx, (*i) + 3, 0, -1); + if (input_csi_dispatch_sgr_rgb_do(ictx, fgbg, r, g, b)) + (*i) += 3; +} + +/* Handle CSI SGR with a ISO parameter. */ +static void +input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) +{ + char *s = ictx->param_list[i].str, *copy, *ptr, *out; + int p[8]; + u_int n; + const char *errstr; + + for (n = 0; n < nitems(p); n++) + p[n] = -1; + n = 0; + + ptr = copy = xstrdup(s); + while ((out = strsep(&ptr, ":")) != NULL) { + p[n++] = strtonum(out, 0, INT_MAX, &errstr); + if (errstr != NULL || n == nitems(p)) { + free(copy); + return; + } + log_debug("%s: %u = %d", __func__, n - 1, p[n - 1]); + } + free(copy); + + if (n == 0 || (p[0] != 38 && p[0] != 48)) + return; + switch (p[1]) { + case 2: + if (n != 5) + break; + input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[2], p[3], p[4]); + break; + case 5: + if (n != 3) + break; + input_csi_dispatch_sgr_256_do(ictx, p[0], p[2]); + break; + } } /* Handle CSI SGR. */ @@ -1735,7 +1884,13 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) } for (i = 0; i < ictx->param_list_len; i++) { + if (ictx->param_list[i].type == INPUT_STRING) { + input_csi_dispatch_sgr_colon(ictx, i); + continue; + } n = input_get(ictx, i, 0, 0); + if (n == -1) + continue; if (n == 38 || n == 48) { i++; From d81aec24399d195d7b6731a08ad73c5c280b000f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 19 Feb 2018 21:24:17 +0000 Subject: [PATCH 078/836] Update CHANGES. --- CHANGES | 9 +++++++++ tools/24-bit-color.sh | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 1bf666a7e2..97d50e776d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,14 @@ CHANGES FROM 2.6 TO master +* Show if a filter is present in choose modes. + +* Add pipe-pane -I to to connect stdin of the child process. + +* Use RGB terminfo(5) capability to detect RGB colour terminals (the existing + Tc extension remains unchanged). + +* Support for ISO colon-separated SGR sequences. + * Add select-layout -E to spread panes out evenly (bound to E key). * Support wide characters properly when reflowing. diff --git a/tools/24-bit-color.sh b/tools/24-bit-color.sh index 81d7cd4121..73cff60aca 100644 --- a/tools/24-bit-color.sh +++ b/tools/24-bit-color.sh @@ -20,7 +20,7 @@ then else SEQ=seq fi -SEPARATOR=';' +SEPARATOR=':' setBackgroundColor() { From ab6f0bb3485f6626bad6f585e4d17059fe4f7152 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 20 Feb 2018 10:43:46 +0000 Subject: [PATCH 079/836] Do not leak memory when working out job name in formats. --- format.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/format.c b/format.c index be53ad9312..0cd3503ccf 100644 --- a/format.c +++ b/format.c @@ -1121,7 +1121,7 @@ format_expand_time(struct format_tree *ft, const char *fmt, time_t t) char * format_expand(struct format_tree *ft, const char *fmt) { - char *buf, *out; + char *buf, *out, *name; const char *ptr, *s, *saved = fmt; size_t off, len, n, outlen; int ch, brackets; @@ -1160,8 +1160,11 @@ format_expand(struct format_tree *ft, const char *fmt) if (ft->flags & FORMAT_NOJOBS) out = xstrdup(""); - else - out = format_job_get(ft, xstrndup(fmt, n)); + else { + name = xstrndup(fmt, n); + out = format_job_get(ft, name); + free(name); + } outlen = strlen(out); while (len - off < outlen + 1) { From 623f4b12d3af7c6908c6abab1e95589c59f554ef Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 22 Feb 2018 10:54:51 +0000 Subject: [PATCH 080/836] Add exit-empty option to exit server if no sessions (defaults to on). --- options-table.c | 6 ++++++ server.c | 3 +++ tmux.1 | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/options-table.c b/options-table.c index c3363e480b..20ac5d6f99 100644 --- a/options-table.c +++ b/options-table.c @@ -97,6 +97,12 @@ const struct options_table_entry options_table[] = { .default_num = 500 }, + { .name = "exit-empty", + .type = OPTIONS_TABLE_FLAG, + .scope = OPTIONS_TABLE_SERVER, + .default_num = 1 + }, + { .name = "exit-unattached", .type = OPTIONS_TABLE_FLAG, .scope = OPTIONS_TABLE_SERVER, diff --git a/server.c b/server.c index 77ee9c36a0..b1d3312ab8 100644 --- a/server.c +++ b/server.c @@ -255,6 +255,9 @@ server_loop(void) server_client_loop(); + if (!options_get_number(global_options, "exit-empty") && !server_exit) + return (0); + if (!options_get_number(global_options, "exit-unattached")) { if (!RB_EMPTY(&sessions)) return (0); diff --git a/tmux.1 b/tmux.1 index 7eb228cb16..428c1016a4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2503,6 +2503,11 @@ Set the time in milliseconds for which waits after an escape is input to determine if it is part of a function or meta key sequences. The default is 500 milliseconds. +.It Xo Ic exit-empty +.Op Ic on | off +.Xc +If enabled (the default), the server will exit when there are no active +sessions. .It Xo Ic exit-unattached .Op Ic on | off .Xc From e97daead43800aedb3c1f1d50c92099d94e5ce13 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 22 Feb 2018 10:58:12 +0000 Subject: [PATCH 081/836] Check prefix when retrying so it is checked while repeat flag is set. GitHub issue 1239. --- server-client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-client.c b/server-client.c index ee9472d3a7..d2c6ebf931 100644 --- a/server-client.c +++ b/server-client.c @@ -907,6 +907,7 @@ server_client_handle_key(struct client *c, key_code key) * The prefix always takes precedence and forces a switch to the prefix * table, unless we are already there. */ +retry: key0 = (key & ~KEYC_XTERM); if ((key0 == (key_code)options_get_number(s->options, "prefix") || key0 == (key_code)options_get_number(s->options, "prefix2")) && @@ -917,7 +918,6 @@ server_client_handle_key(struct client *c, key_code key) } flags = c->flags; -retry: /* Log key table. */ if (wp == NULL) log_debug("key table %s (no pane)", table->name); From 3f3f13fbd79d6b847aa52d0cbba8c6a07b013b0e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 22 Feb 2018 11:42:41 +0000 Subject: [PATCH 082/836] Remove an unused variable. --- status.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/status.c b/status.c index 55e331facb..d0b66ca949 100644 --- a/status.c +++ b/status.c @@ -806,7 +806,6 @@ status_prompt_redraw(struct client *c) struct screen old_status; u_int i, offset, left, start, pcursor, pwidth, width; u_int lines; - size_t len; struct grid_cell gc, cursorgc; if (c->tty.sx == 0 || c->tty.sy == 0) @@ -820,10 +819,6 @@ status_prompt_redraw(struct client *c) } else screen_init(&c->status.status, c->tty.sx, lines, 0); - len = screen_write_strlen("%s", c->prompt_string); - if (len > c->tty.sx) - len = c->tty.sx; - if (c->prompt_mode == PROMPT_COMMAND) style_apply(&gc, s->options, "message-command-style"); else From 4d72b8fff7dfc170268af5a4c5323a8d9b815f74 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 26 Feb 2018 08:09:56 +0000 Subject: [PATCH 083/836] C-g for modes too, from Mike Hamrick. --- mode-tree.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mode-tree.c b/mode-tree.c index edc10a2bd7..cbef4f6a13 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -801,6 +801,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, switch (*key) { case 'q': case '\033': /* Escape */ + case '\007': /* C-g */ return (1); case KEYC_UP: case 'k': From 508e2f0b3aaf2db9b692863738e7ca75765fc70c Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 28 Feb 2018 08:55:44 +0000 Subject: [PATCH 084/836] Add -Z flag to choose-tree, choose-client, choose-buffer to automatically zoom the pane when the mode is entered and unzoom when it exits, assuming the pane is not already zoomed. Add -Z to the default key bindings. --- cmd-choose-tree.c | 6 +++--- key-bindings.c | 8 ++++---- mode-tree.c | 19 +++++++++++++++++++ server-fn.c | 4 +--- tmux.1 | 12 +++++++++--- tmux.h | 1 + window-buffer.c | 1 + window-client.c | 1 + window-tree.c | 1 + 9 files changed, 40 insertions(+), 13 deletions(-) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index 815c2a0341..23914178b8 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -30,7 +30,7 @@ const struct cmd_entry cmd_choose_tree_entry = { .name = "choose-tree", .alias = NULL, - .args = { "F:Gf:NO:st:w", 0, 1 }, + .args = { "F:Gf:NO:st:wZ", 0, 1 }, .usage = "[-GNsw] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE, @@ -44,7 +44,7 @@ const struct cmd_entry cmd_choose_client_entry = { .name = "choose-client", .alias = NULL, - .args = { "F:f:NO:t:", 0, 1 }, + .args = { "F:f:NO:t:Z", 0, 1 }, .usage = "[-N] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE, @@ -58,7 +58,7 @@ const struct cmd_entry cmd_choose_buffer_entry = { .name = "choose-buffer", .alias = NULL, - .args = { "F:f:NO:t:", 0, 1 }, + .args = { "F:f:NO:t:Z", 0, 1 }, .usage = "[-N] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE, diff --git a/key-bindings.c b/key-bindings.c index a13c797791..83670d2d0a 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -183,9 +183,9 @@ key_bindings_init(void) "bind 9 select-window -t:=9", "bind : command-prompt", "bind \\; last-pane", - "bind = choose-buffer", + "bind = choose-buffer -Z", "bind ? list-keys", - "bind D choose-client", + "bind D choose-client -Z", "bind E select-layout -E", "bind L switch-client -l", "bind M select-pane -M", @@ -202,9 +202,9 @@ key_bindings_init(void) "bind p previous-window", "bind q display-panes", "bind r refresh-client", - "bind s choose-tree -s", + "bind s choose-tree -Zs", "bind t clock-mode", - "bind w choose-tree -w", + "bind w choose-tree -Zw", "bind x confirm-before -p\"kill-pane #P? (y/n)\" kill-pane", "bind z resize-pane -Z", "bind { swap-pane -U", diff --git a/mode-tree.c b/mode-tree.c index cbef4f6a13..05ec492de2 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -31,6 +31,7 @@ TAILQ_HEAD(mode_tree_list, mode_tree_item); struct mode_tree_data { int dead; u_int references; + int zoomed; struct window_pane *wp; void *modedata; @@ -343,6 +344,19 @@ mode_tree_start(struct window_pane *wp, struct args *args, return (mtd); } +void +mode_tree_zoom(struct mode_tree_data *mtd, struct args *args) +{ + struct window_pane *wp = mtd->wp; + + if (args_has(args, 'Z')) { + mtd->zoomed = (wp->window->flags & WINDOW_ZOOMED); + if (!mtd->zoomed && window_zoom(wp) == 0) + server_redraw_window(wp->window); + } else + mtd->zoomed = -1; +} + void mode_tree_build(struct mode_tree_data *mtd) { @@ -394,6 +408,11 @@ mode_tree_remove_ref(struct mode_tree_data *mtd) void mode_tree_free(struct mode_tree_data *mtd) { + struct window_pane *wp = mtd->wp; + + if (mtd->zoomed == 0) + server_unzoom_window(wp->window); + mode_tree_free_items(&mtd->children); mode_tree_clear_lines(mtd); screen_free(&mtd->screen); diff --git a/server-fn.c b/server-fn.c index 713e85b7f8..ef96bf58cc 100644 --- a/server-fn.c +++ b/server-fn.c @@ -455,8 +455,6 @@ server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, void server_unzoom_window(struct window *w) { - if (window_unzoom(w) == 0) { + if (window_unzoom(w) == 0) server_redraw_window(w); - server_status_window(w); - } } diff --git a/tmux.1 b/tmux.1 index 428c1016a4..3db237864c 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1377,7 +1377,7 @@ the end of the visible pane. The default is to capture only the visible contents of the pane. .It Xo .Ic choose-client -.Op Fl N +.Op Fl NZ .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -1386,6 +1386,8 @@ The default is to capture only the visible contents of the pane. .Xc Put a pane into client mode, allowing a client to be selected interactively from a list. +.Fl Z +zooms the pane. The following keys may be used in client mode: .Bl -column "Key" "Function" -offset indent .It Sy "Key" Ta Sy "Function" @@ -1436,7 +1438,7 @@ starts without the preview. This command works only if at least one client is attached. .It Xo .Ic choose-tree -.Op Fl GNsw +.Op Fl GNswZ .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -1449,6 +1451,8 @@ interactively from a list. starts with sessions collapsed and .Fl w with windows collapsed. +.Fl Z +zooms the pane. The following keys may be used in tree mode: .Bl -column "Key" "Function" -offset indent .It Sy "Key" Ta Sy "Function" @@ -4129,7 +4133,7 @@ The buffer commands are as follows: .Bl -tag -width Ds .It Xo .Ic choose-buffer -.Op Fl N +.Op Fl NZ .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -4138,6 +4142,8 @@ The buffer commands are as follows: .Xc Put a pane into buffer mode, where a buffer may be chosen interactively from a list. +.Fl Z +zooms the pane. The following keys may be used in buffer mode: .Bl -column "Key" "Function" -offset indent .It Sy "Key" Ta Sy "Function" diff --git a/tmux.h b/tmux.h index 88a223e666..d7b9f3341a 100644 --- a/tmux.h +++ b/tmux.h @@ -2247,6 +2247,7 @@ void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, void *, const char **, u_int, struct screen **); +void mode_tree_zoom(struct mode_tree_data *, struct args *); void mode_tree_build(struct mode_tree_data *); void mode_tree_free(struct mode_tree_data *); void mode_tree_resize(struct mode_tree_data *, u_int, u_int); diff --git a/window-buffer.c b/window-buffer.c index d416e39f9e..e0352be25d 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -273,6 +273,7 @@ window_buffer_init(struct window_pane *wp, __unused struct cmd_find_state *fs, data->data = mode_tree_start(wp, args, window_buffer_build, window_buffer_draw, window_buffer_search, data, window_buffer_sort_list, nitems(window_buffer_sort_list), &s); + mode_tree_zoom(data->data, args); mode_tree_build(data->data); mode_tree_draw(data->data); diff --git a/window-client.c b/window-client.c index aae9e0b45d..69f9990470 100644 --- a/window-client.c +++ b/window-client.c @@ -256,6 +256,7 @@ window_client_init(struct window_pane *wp, __unused struct cmd_find_state *fs, data->data = mode_tree_start(wp, args, window_client_build, window_client_draw, NULL, data, window_client_sort_list, nitems(window_client_sort_list), &s); + mode_tree_zoom(data->data, args); mode_tree_build(data->data); mode_tree_draw(data->data); diff --git a/window-tree.c b/window-tree.c index 4165047bb9..8a327bb69f 100644 --- a/window-tree.c +++ b/window-tree.c @@ -841,6 +841,7 @@ window_tree_init(struct window_pane *wp, struct cmd_find_state *fs, data->data = mode_tree_start(wp, args, window_tree_build, window_tree_draw, window_tree_search, data, window_tree_sort_list, nitems(window_tree_sort_list), &s); + mode_tree_zoom(data->data, args); mode_tree_build(data->data); mode_tree_draw(data->data); From 182357f24bc7e16d7d7c85cab0c61974f18df2e7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Mar 2018 12:53:08 +0000 Subject: [PATCH 085/836] Expand formats in window and session names. --- cmd-new-session.c | 47 +++++++++++++++++++++++++------------------- cmd-new-window.c | 29 ++++++++++++++++----------- cmd-rename-session.c | 19 +++++++++++------- cmd-rename-window.c | 7 ++++++- cmd-split-window.c | 20 +++++++++---------- 5 files changed, 71 insertions(+), 51 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 2d671275ed..26cb08ba56 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -73,14 +73,15 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct environ *env; struct termios tio, *tiop; struct session_group *sg; - const char *newname, *errstr, *template, *group, *prefix; - const char *path, *cmd, *cwd; - char **argv, *cause, *cp, *to_free = NULL; + const char *errstr, *template, *group, *prefix; + const char *path, *cmd, *tmp; + char **argv, *cause, *cp, *newname, *cwd = NULL; int detached, already_attached, idx, argc; int is_control = 0; u_int sx, sy; struct environ_entry *envent; struct cmd_find_state fs; + enum cmd_retval retval; if (self->entry == &cmd_has_session_entry) { /* @@ -95,20 +96,24 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - newname = args_get(args, 's'); - if (newname != NULL) { + newname = NULL; + if (args_has(args, 's')) { + newname = format_single(item, args_get(args, 's'), c, NULL, + NULL, NULL); if (!session_check_name(newname)) { cmdq_error(item, "bad session name: %s", newname); - return (CMD_RETURN_ERROR); + goto error; } if ((as = session_find(newname)) != NULL) { if (args_has(args, 'A')) { - return (cmd_attach_session(item, + retval = cmd_attach_session(item, newname, args_has(args, 'D'), - 0, NULL, args_has(args, 'E'))); + 0, NULL, args_has(args, 'E')); + free(newname); + return (retval); } cmdq_error(item, "duplicate session: %s", newname); - return (CMD_RETURN_ERROR); + goto error; } } @@ -149,14 +154,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) already_attached = 1; /* Get the new session working directory. */ - if (args_has(args, 'c')) { - cwd = args_get(args, 'c'); - to_free = format_single(item, cwd, c, NULL, NULL, NULL); - cwd = to_free; - } else if (c != NULL && c->session == NULL && c->cwd != NULL) - cwd = c->cwd; + if ((tmp = args_get(args, 'c')) != NULL) + cwd = format_single(item, tmp, c, NULL, NULL, NULL); + else if (c != NULL && c->session == NULL && c->cwd != NULL) + cwd = xstrdup(c->cwd); else - cwd = "."; + cwd = xstrdup("."); /* * If this is a new client, check for nesting and save the termios @@ -261,10 +264,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) } /* Set the initial window name if one given. */ - if (argc >= 0 && args_has(args, 'n')) { + if (argc >= 0 && (tmp = args_get(args, 'n')) != NULL) { + cp = format_single(item, tmp, c, s, NULL, NULL); w = s->curw->window; - window_set_name(w, args_get(args, 'n')); + window_set_name(w, cp); options_set_number(w->options, "automatic-rename", 0); + free(cp); } /* @@ -331,10 +336,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_session(&fs, s, 0); hooks_insert(s->hooks, item, &fs, "after-new-session"); - free(to_free); + free(cwd); + free(newname); return (CMD_RETURN_NORMAL); error: - free(to_free); + free(cwd); + free(newname); return (CMD_RETURN_ERROR); } diff --git a/cmd-new-window.c b/cmd-new-window.c index 4baf8f0cfb..4c9878ed2f 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -57,8 +57,8 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) struct winlink *wl = item->target.wl; struct client *c = cmd_find_client(item, NULL, 1); int idx = item->target.idx; - const char *cmd, *path, *template, *cwd; - char **argv, *cause, *cp, *to_free = NULL; + const char *cmd, *path, *template, *tmp; + char **argv, *cause, *cp, *cwd, *name; int argc, detached; struct environ_entry *envent; struct cmd_find_state fs; @@ -93,14 +93,17 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) if (envent != NULL) path = envent->value; - if (args_has(args, 'c')) { - cwd = args_get(args, 'c'); - to_free = format_single(item, cwd, c, s, NULL, NULL); - cwd = to_free; - } else if (item->client != NULL && item->client->session == NULL) - cwd = item->client->cwd; + if ((tmp = args_get(args, 'c')) != NULL) + cwd = format_single(item, tmp, c, s, NULL, NULL); + else if (item->client != NULL && item->client->session == NULL) + cwd = xstrdup(item->client->cwd); else - cwd = s->cwd; + cwd = xstrdup(s->cwd); + + if ((tmp = args_get(args, 'n')) != NULL) + name = format_single(item, tmp, c, s, NULL, NULL); + else + name = NULL; wl = NULL; if (idx != -1) @@ -124,7 +127,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) if (idx == -1) idx = -1 - options_get_number(s->options, "base-index"); - wl = session_new(s, args_get(args, 'n'), argc, argv, path, cwd, idx, + wl = session_new(s, name, argc, argv, path, cwd, idx, &cause); if (wl == NULL) { cmdq_error(item, "create window failed: %s", cause); @@ -149,10 +152,12 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_winlink(&fs, wl, 0); hooks_insert(s->hooks, item, &fs, "after-new-window"); - free(to_free); + free(name); + free(cwd); return (CMD_RETURN_NORMAL); error: - free(to_free); + free(name); + free(cwd); return (CMD_RETURN_ERROR); } diff --git a/cmd-rename-session.c b/cmd-rename-session.c index e7586e0bb0..5dbc38d976 100644 --- a/cmd-rename-session.c +++ b/cmd-rename-session.c @@ -46,26 +46,31 @@ const struct cmd_entry cmd_rename_session_entry = { static enum cmd_retval cmd_rename_session_exec(struct cmd *self, struct cmdq_item *item) { - struct args *args = self->args; - struct session *s = item->target.s; - const char *newname; - - newname = args->argv[0]; - if (strcmp(newname, s->name) == 0) + struct args *args = self->args; + struct client *c = cmd_find_client(item, NULL, 0); + struct session *s = item->target.s; + char *newname; + + newname = format_single(item, args->argv[0], c, s, NULL, NULL); + if (strcmp(newname, s->name) == 0) { + free(newname); return (CMD_RETURN_NORMAL); + } if (!session_check_name(newname)) { cmdq_error(item, "bad session name: %s", newname); + free(newname); return (CMD_RETURN_ERROR); } if (session_find(newname) != NULL) { cmdq_error(item, "duplicate session: %s", newname); + free(newname); return (CMD_RETURN_ERROR); } RB_REMOVE(sessions, &sessions, s); free(s->name); - s->name = xstrdup(newname); + s->name = newname; RB_INSERT(sessions, &sessions, s); server_status_session(s); diff --git a/cmd-rename-window.c b/cmd-rename-window.c index 802eab7d7c..3393fb86e4 100644 --- a/cmd-rename-window.c +++ b/cmd-rename-window.c @@ -46,12 +46,17 @@ static enum cmd_retval cmd_rename_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; + struct client *c = cmd_find_client(item, NULL, 0); + struct session *s = item->target.s; struct winlink *wl = item->target.wl; + char *newname; - window_set_name(wl->window, args->argv[0]); + newname = format_single(item, args->argv[0], c, s, wl, NULL); + window_set_name(wl->window, newname); options_set_number(wl->window->options, "automatic-rename", 0); server_status_window(wl->window); + free(newname); return (CMD_RETURN_NORMAL); } diff --git a/cmd-split-window.c b/cmd-split-window.c index 8d47e3500f..b75eaa6f1e 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -61,8 +61,8 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) struct window *w = wl->window; struct window_pane *wp = item->target.wp, *new_wp = NULL; struct environ *env; - const char *cmd, *path, *shell, *template, *cwd; - char **argv, *cause, *new_cause, *cp, *to_free = NULL; + const char *cmd, *path, *shell, *template, *tmp; + char **argv, *cause, *new_cause, *cp, *cwd; u_int hlimit; int argc, size, percentage; enum layout_type type; @@ -86,14 +86,12 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) argv = args->argv; } - if (args_has(args, 'c')) { - cwd = args_get(args, 'c'); - to_free = format_single(item, cwd, c, s, NULL, NULL); - cwd = to_free; - } else if (item->client != NULL && item->client->session == NULL) - cwd = item->client->cwd; + if ((tmp = args_get(args, 'c')) != NULL) + cwd = format_single(item, tmp, c, s, NULL, NULL); + else if (item->client != NULL && item->client->session == NULL) + cwd = xstrdup(item->client->cwd); else - cwd = s->cwd; + cwd = xstrdup(s->cwd); type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) @@ -175,7 +173,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); hooks_insert(s->hooks, item, &fs, "after-split-window"); - free(to_free); + free(cwd); return (CMD_RETURN_NORMAL); error: @@ -186,6 +184,6 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "create pane failed: %s", cause); free(cause); - free(to_free); + free(cwd); return (CMD_RETURN_ERROR); } From 61ea49c6dd19f1319644d2204a3e3d9b446a9798 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 2 Mar 2018 15:08:17 +0000 Subject: [PATCH 086/836] Fix cmp use. --- regress/control-client-size.sh | 8 ++++---- regress/new-session-size.sh | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/regress/control-client-size.sh b/regress/control-client-size.sh index cef48a0ed0..55f7eed1ad 100644 --- a/regress/control-client-size.sh +++ b/regress/control-client-size.sh @@ -13,7 +13,7 @@ $TMUX kill-server 2>/dev/null TMP=$(mktemp) OUT=$(mktemp) -trap "rm -f $TMP $OUT" 0 1 15 +#trap "rm -f $TMP $OUT" 0 1 15 $TMUX -f/dev/null new -d || exit 1 sleep 1 @@ -23,7 +23,7 @@ refresh -C 100,50 ls -F':#{session_width} #{session_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:100 50\n"|cmp -s $OUT || exit 1 +printf ":80 24\n:100 50\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d || exit 1 @@ -34,7 +34,7 @@ refresh -C 80,24 ls -F':#{session_width} #{session_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:80 24\n"|cmp -s $OUT || exit 1 +printf ":80 24\n:80 24\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null cat <$TMP @@ -43,7 +43,7 @@ refresh -C 80,24 ls -F':#{session_width} #{session_height}' EOF grep ^: $TMP >$OUT -printf ":100 50\n:80 24\n"|cmp -s $OUT || exit 1 +printf ":100 50\n:80 24\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null exit 0 diff --git a/regress/new-session-size.sh b/regress/new-session-size.sh index f9394f35b1..5493054b6b 100644 --- a/regress/new-session-size.sh +++ b/regress/new-session-size.sh @@ -15,13 +15,13 @@ trap "rm -f $TMP" 0 1 15 $TMUX -f/dev/null new -d $TMP -printf "80 24\n"|cmp -s $TMP || exit 1 +printf "80 24\n"|cmp -s $TMP - || exit 1 $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d -x 100 -y 50 $TMP -printf "100 50\n"|cmp -s $TMP || exit 1 +printf "100 50\n"|cmp -s $TMP - || exit 1 $TMUX kill-server 2>/dev/null exit 0 From 85c48aafffd4e520eea2e598ea199e7b16f787cc Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 5 Mar 2018 12:32:28 +0000 Subject: [PATCH 087/836] For some reason tmux treats SGR 10 as SGR 0. It has done since the first version and I'm not sure why since no other terminal appears to. Change to just ignore SGR 10 instead. --- input.c | 1 - 1 file changed, 1 deletion(-) diff --git a/input.c b/input.c index 3a65165326..b53c39f691 100644 --- a/input.c +++ b/input.c @@ -1907,7 +1907,6 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) switch (n) { case 0: - case 10: memcpy(gc, &grid_default_cell, sizeof *gc); break; case 1: From 19f3a5c6120c5d845eb942e67413c03c0c008a87 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 8 Mar 2018 08:09:10 +0000 Subject: [PATCH 088/836] Add a missing client-detached hook when the server shuts down, and do not exit until jobs started from run-shell/if-shell have finished (add a job flags member and a flag to indicate other jobs). GitHub issue 1245. --- cmd-if-shell.c | 2 +- cmd-run-shell.c | 2 +- format.c | 2 +- job.c | 3 ++- server-client.c | 2 ++ server.c | 11 ++++++++++- tmux.h | 5 ++++- window-copy.c | 2 +- 8 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 2400b3b4ac..304fe91026 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -129,7 +129,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse); job_run(shellcmd, s, cwd, NULL, cmd_if_shell_callback, - cmd_if_shell_free, cdata); + cmd_if_shell_free, cdata, 0); free(shellcmd); if (args_has(args, 'b')) diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 0d73dd2b95..8de8736af5 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -111,7 +111,7 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->item = item; job_run(cdata->cmd, s, cwd, NULL, cmd_run_shell_callback, - cmd_run_shell_free, cdata); + cmd_run_shell_free, cdata, 0); if (args_has(args, 'b')) return (CMD_RETURN_NORMAL); diff --git a/format.c b/format.c index 0cd3503ccf..bf76fcf0a9 100644 --- a/format.c +++ b/format.c @@ -295,7 +295,7 @@ format_job_get(struct format_tree *ft, const char *cmd) t = time(NULL); if (fj->job == NULL && (force || fj->last != t)) { fj->job = job_run(expanded, NULL, NULL, format_job_update, - format_job_complete, NULL, fj); + format_job_complete, NULL, fj, JOB_NOWAIT); if (fj->job == NULL) { free(fj->out); xasprintf(&fj->out, "<'%s' didn't start>", fj->cmd); diff --git a/job.c b/job.c index 866e36c739..5cbe31cde0 100644 --- a/job.c +++ b/job.c @@ -44,7 +44,7 @@ struct joblist all_jobs = LIST_HEAD_INITIALIZER(all_jobs); struct job * job_run(const char *cmd, struct session *s, const char *cwd, job_update_cb updatecb, job_complete_cb completecb, job_free_cb freecb, - void *data) + void *data, int flags) { struct job *job; struct environ *env; @@ -111,6 +111,7 @@ job_run(const char *cmd, struct session *s, const char *cwd, job = xmalloc(sizeof *job); job->state = JOB_RUNNING; + job->flags = flags; job->cmd = xstrdup(cmd); job->pid = pid; diff --git a/server-client.c b/server-client.c index d2c6ebf931..4da9f08a15 100644 --- a/server-client.c +++ b/server-client.c @@ -1279,6 +1279,8 @@ server_client_check_exit(struct client *c) if (EVBUFFER_LENGTH(c->stderr_data) != 0) return; + if (c->flags & CLIENT_ATTACHED) + notify_client("client-detached", c); proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval); c->flags &= ~CLIENT_EXIT; } diff --git a/server.c b/server.c index b1d3312ab8..5d321ccbc2 100644 --- a/server.c +++ b/server.c @@ -244,6 +244,7 @@ server_loop(void) { struct client *c; u_int items; + struct job *job; do { items = cmdq_next(NULL); @@ -276,6 +277,11 @@ server_loop(void) if (!TAILQ_EMPTY(&clients)) return (0); + LIST_FOREACH(job, &all_jobs, entry) { + if ((~job->flags & JOB_NOWAIT) && job->state == JOB_RUNNING) + return (0); + } + return (1); } @@ -291,8 +297,11 @@ server_send_exit(void) TAILQ_FOREACH_SAFE(c, &clients, entry, c1) { if (c->flags & CLIENT_SUSPENDED) server_client_lost(c); - else + else { + if (c->flags & CLIENT_ATTACHED) + notify_client("client-detached", c); proc_send(c->peer, MSG_SHUTDOWN, -1, NULL, 0); + } c->session = NULL; } diff --git a/tmux.h b/tmux.h index d7b9f3341a..5d5be8bbd4 100644 --- a/tmux.h +++ b/tmux.h @@ -622,6 +622,9 @@ struct job { JOB_CLOSED } state; + int flags; +#define JOB_NOWAIT 0x1 + char *cmd; pid_t pid; int status; @@ -1649,7 +1652,7 @@ extern const struct options_table_entry options_table[]; /* job.c */ extern struct joblist all_jobs; struct job *job_run(const char *, struct session *, const char *, - job_update_cb, job_complete_cb, job_free_cb, void *); + job_update_cb, job_complete_cb, job_free_cb, void *, int); void job_free(struct job *); void job_died(struct job *, int); diff --git a/window-copy.c b/window-copy.c index 31140ab3d3..6eb3d435b8 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1677,7 +1677,7 @@ window_copy_copy_pipe(struct window_pane *wp, struct session *s, return; expanded = format_single(NULL, arg, NULL, s, NULL, wp); - job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL); + job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT); bufferevent_write(job->event, buf, len); free(expanded); From f87d80737ebeffa302f3e0f9ea2efab98d747825 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Mar 2018 15:15:39 +0000 Subject: [PATCH 089/836] Insert full size panes at the right position, from KOIE Hidetaka in GitHub issue 1284. --- cmd-split-window.c | 8 ++++---- tmux.h | 2 +- window.c | 14 ++++++++++---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cmd-split-window.c b/cmd-split-window.c index b75eaa6f1e..ab7f9bc54a 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -64,7 +64,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) const char *cmd, *path, *shell, *template, *tmp; char **argv, *cause, *new_cause, *cp, *cwd; u_int hlimit; - int argc, size, percentage; + int argc, size, percentage, before; enum layout_type type; struct layout_cell *lc; struct environ_entry *envent; @@ -96,6 +96,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; + before = args_has(args, 'b'); size = -1; if (args_has(args, 'l')) { @@ -125,13 +126,12 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) if (*shell == '\0' || areshell(shell)) shell = _PATH_BSHELL; - lc = layout_split_pane(wp, type, size, args_has(args, 'b'), - args_has(args, 'f')); + lc = layout_split_pane(wp, type, size, before, args_has(args, 'f')); if (lc == NULL) { cause = xstrdup("pane too small"); goto error; } - new_wp = window_add_pane(w, wp, args_has(args, 'b'), hlimit); + new_wp = window_add_pane(w, wp, before, args_has(args, 'f'), hlimit); layout_make_leaf(lc, new_wp); path = NULL; diff --git a/tmux.h b/tmux.h index 5d5be8bbd4..aa3ba3d1d4 100644 --- a/tmux.h +++ b/tmux.h @@ -2145,7 +2145,7 @@ int window_has_pane(struct window *, struct window_pane *); int window_set_active_pane(struct window *, struct window_pane *); void window_redraw_active_switch(struct window *, struct window_pane *); -struct window_pane *window_add_pane(struct window *, struct window_pane *, +struct window_pane *window_add_pane(struct window *, struct window_pane *, int, int, u_int); void window_resize(struct window *, u_int, u_int); int window_zoom(struct window_pane *); diff --git a/window.c b/window.c index 78e81269ab..8a5c1c7e9f 100644 --- a/window.c +++ b/window.c @@ -341,7 +341,7 @@ window_create_spawn(const char *name, int argc, char **argv, const char *path, struct window_pane *wp; w = window_create(sx, sy); - wp = window_add_pane(w, NULL, 0, hlimit); + wp = window_add_pane(w, NULL, 0, 0, hlimit); layout_init(w, wp); if (window_pane_spawn(wp, argc, argv, path, shell, cwd, @@ -610,7 +610,7 @@ window_unzoom(struct window *w) struct window_pane * window_add_pane(struct window *w, struct window_pane *other, int before, - u_int hlimit) + int full_size, u_int hlimit) { struct window_pane *wp; @@ -623,10 +623,16 @@ window_add_pane(struct window *w, struct window_pane *other, int before, TAILQ_INSERT_HEAD(&w->panes, wp, entry); } else if (before) { log_debug("%s: @%u before %%%u", __func__, w->id, wp->id); - TAILQ_INSERT_BEFORE(other, wp, entry); + if (full_size) + TAILQ_INSERT_HEAD(&w->panes, wp, entry); + else + TAILQ_INSERT_BEFORE(other, wp, entry); } else { log_debug("%s: @%u after %%%u", __func__, w->id, wp->id); - TAILQ_INSERT_AFTER(&w->panes, other, wp, entry); + if (full_size) + TAILQ_INSERT_TAIL(&w->panes, wp, entry); + else + TAILQ_INSERT_AFTER(&w->panes, other, wp, entry); } return (wp); } From 0b3911631bf48272d0517248795d4f0734c38123 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 17 Mar 2018 16:48:17 +0000 Subject: [PATCH 090/836] Fix negative window index range check (> not <). Reported by Juan Pablo in GitHub issue 1283. --- cmd-find.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-find.c b/cmd-find.c index 7c52c71c8b..84b131262d 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -390,7 +390,7 @@ cmd_find_get_window_with_session(struct cmd_find_state *fs, const char *window) return (-1); fs->idx = s->curw->idx + n; } else { - if (n < s->curw->idx) + if (n > s->curw->idx) return (-1); fs->idx = s->curw->idx - n; } From 50e3e3e72f97c32cf868efb580ffed4772e61b2d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 21 Mar 2018 08:15:15 +0000 Subject: [PATCH 091/836] Remove EVENT_* variables from environment after initializing libevent so they are not carried into child processes; from Henry Qin. --- osdep-darwin.c | 8 +++++++- osdep-freebsd.c | 7 ++++++- osdep-linux.c | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/osdep-darwin.c b/osdep-darwin.c index 9956ab4588..5d69cddae4 100644 --- a/osdep-darwin.c +++ b/osdep-darwin.c @@ -88,11 +88,17 @@ osdep_get_cwd(int fd) struct event_base * osdep_event_init(void) { + struct event_base *base; + /* * On OS X, kqueue and poll are both completely broken and don't * work on anything except socket file descriptors (yes, really). */ setenv("EVENT_NOKQUEUE", "1", 1); setenv("EVENT_NOPOLL", "1", 1); - return (event_init()); + + base = event_init(); + unsetenv("EVENT_NOKQUEUE"); + unsetenv("EVENT_NOPOLL"); + return (base); } diff --git a/osdep-freebsd.c b/osdep-freebsd.c index 067ba56533..61f3f5071d 100644 --- a/osdep-freebsd.c +++ b/osdep-freebsd.c @@ -193,10 +193,15 @@ osdep_get_cwd(int fd) struct event_base * osdep_event_init(void) { + struct event_base *base; + /* * On some versions of FreeBSD, kqueue doesn't work properly on tty * file descriptors. This is fixed in recent FreeBSD versions. */ setenv("EVENT_NOKQUEUE", "1", 1); - return (event_init()); + + base = event_init(); + unsetenv("EVENT_NOKQUEUE"); + return (base); } diff --git a/osdep-linux.c b/osdep-linux.c index 42712dea30..5f0d9352ce 100644 --- a/osdep-linux.c +++ b/osdep-linux.c @@ -92,7 +92,12 @@ osdep_get_cwd(int fd) struct event_base * osdep_event_init(void) { + struct event_base *base; + /* On Linux, epoll doesn't work on /dev/null (yes, really). */ setenv("EVENT_NOEPOLL", "1", 1); - return (event_init()); + + base = event_init(); + unsetenv("EVENT_NOEPOLL"); + return (base); } From ced74bd72c7f7cbf702d2351b11cb8d7c6af64e4 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 22 Mar 2018 11:18:05 +0000 Subject: [PATCH 092/836] 2.7-rc. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f6ed390eb2..4eee0eaead 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, master) +AC_INIT(tmux, 2.7-rc) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 80283f99fbb959d579449b69e11a34cc49b82579 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 22 Mar 2018 11:18:26 +0000 Subject: [PATCH 093/836] Revert "2.7-rc." This reverts commit ced74bd72c7f7cbf702d2351b11cb8d7c6af64e4. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4eee0eaead..f6ed390eb2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.7-rc) +AC_INIT(tmux, master) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 2cd0ba5057dcab24aa0b671ad38332074b75c8e7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 22 Mar 2018 11:25:58 +0000 Subject: [PATCH 094/836] CHANGES for 2.7. --- CHANGES | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 97d50e776d..fc68e97335 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,29 @@ -CHANGES FROM 2.6 TO master +CHANGES FROM 2.6 TO 2.7 + +* Remove EVENT_* variables from environment on platforms where tmux uses them + so they do not pass on to panes. + +* Fixed for hooks at server exit. + +* Remove SGR 10 (was equivalent to SGR 0 but no other terminal seems to do + this). + +* Expand formats in window and session names. + +* Add -Z flag to choose-tree, choose-client, choose-buffer to automatically + zoom the pane when the mode is entered and unzoom when it exits, assuming the + pane is not already zoomed. This is now part of the default key bindings. + +* Add C-g to exit modes with emacs keys. + +* Add exit-empty option to exit server if no sessions (defaults to on). * Show if a filter is present in choose modes. * Add pipe-pane -I to to connect stdin of the child process. +* Performance improvements for reflow. + * Use RGB terminfo(5) capability to detect RGB colour terminals (the existing Tc extension remains unchanged). From 26792b90357213b98a990b97fd6dc4333a00adcb Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 23 Mar 2018 07:44:44 +0000 Subject: [PATCH 095/836] Fix size calculation when spreading out panes. --- layout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layout.c b/layout.c index 4ccd6d79b1..bab9586826 100644 --- a/layout.c +++ b/layout.c @@ -1023,7 +1023,7 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { if (TAILQ_NEXT(lc, entry) == NULL) - each = size - (each * (number - 1)); + each = size - ((each + 1) * (number - 1)); change = 0; if (parent->type == LAYOUT_LEFTRIGHT) { change = each - (int)lc->sx; From ea295ac397cdcb033697b4c3dd841762cab8955d Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 23 Mar 2018 07:44:44 +0000 Subject: [PATCH 096/836] Fix size calculation when spreading out panes. --- layout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layout.c b/layout.c index 4ccd6d79b1..bab9586826 100644 --- a/layout.c +++ b/layout.c @@ -1023,7 +1023,7 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { if (TAILQ_NEXT(lc, entry) == NULL) - each = size - (each * (number - 1)); + each = size - ((each + 1) * (number - 1)); change = 0; if (parent->type == LAYOUT_LEFTRIGHT) { change = each - (int)lc->sx; From 194e9f611bf275ec36e50c82cca129cde7e9eb18 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 23 Mar 2018 19:17:03 +0000 Subject: [PATCH 097/836] Fix a regression: do not warn about no client in rename-window. --- cmd-rename-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-rename-window.c b/cmd-rename-window.c index 3393fb86e4..4d2ebb756c 100644 --- a/cmd-rename-window.c +++ b/cmd-rename-window.c @@ -46,7 +46,7 @@ static enum cmd_retval cmd_rename_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct client *c = cmd_find_client(item, NULL, 0); + struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; char *newname; From 785ce66ab9fd68ce4b2ba8d26ed6dba4c17bf714 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 23 Mar 2018 19:17:03 +0000 Subject: [PATCH 098/836] Fix a regression: do not warn about no client in rename-window. --- cmd-rename-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-rename-window.c b/cmd-rename-window.c index 3393fb86e4..4d2ebb756c 100644 --- a/cmd-rename-window.c +++ b/cmd-rename-window.c @@ -46,7 +46,7 @@ static enum cmd_retval cmd_rename_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct client *c = cmd_find_client(item, NULL, 0); + struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; char *newname; From 803b8815bd7a61fb050f4dde83f0f3446e045c09 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 29 Mar 2018 08:03:51 +0000 Subject: [PATCH 099/836] Do not crash on empty window, reported by Jamie Macdonald in GitHub issue 1299. Patch from Thomas Adam. --- window-tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/window-tree.c b/window-tree.c index 8a327bb69f..926eaec176 100644 --- a/window-tree.c +++ b/window-tree.c @@ -296,7 +296,8 @@ window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, free(text); free(name); - wp = TAILQ_FIRST(&wl->window->panes); + if ((wp = TAILQ_FIRST(&wl->window->panes)) == NULL) + goto empty; if (TAILQ_NEXT(wp, entry) == NULL) { if (!window_tree_filter_pane(s, wl, wp, filter)) goto empty; From 8a81993ae156a898740947d3bd57ddc9f37567c1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 29 Mar 2018 08:03:51 +0000 Subject: [PATCH 100/836] Do not crash on empty window, reported by Jamie Macdonald in GitHub issue 1299. Patch from Thomas Adam. --- window-tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/window-tree.c b/window-tree.c index 3c587cb933..2c466b3622 100644 --- a/window-tree.c +++ b/window-tree.c @@ -296,7 +296,8 @@ window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, free(text); free(name); - wp = TAILQ_FIRST(&wl->window->panes); + if ((wp = TAILQ_FIRST(&wl->window->panes)) == NULL) + goto empty; if (TAILQ_NEXT(wp, entry) == NULL) { if (!window_tree_filter_pane(s, wl, wp, filter)) goto empty; From 5d616f4c729d295f85c35696dd31975bbf670566 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 6 Apr 2018 09:09:38 +0000 Subject: [PATCH 101/836] Fix link, from Eliran Gonen. --- input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input.c b/input.c index b53c39f691..bdfb5a7dcd 100644 --- a/input.c +++ b/input.c @@ -30,7 +30,7 @@ /* * Based on the description by Paul Williams at: * - * http://vt100.net/emu/dec_ansi_parser + * https://vt100.net/emu/dec_ansi_parser * * With the following changes: * From c6975b3bb46c35f8b41d934fd622033aa79a828c Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 10 Apr 2018 10:48:44 +0000 Subject: [PATCH 102/836] Add x and X to choose-tree (with a confirmation prompt) to kill an item. Suggested by Matt Zagrabelny. --- cmd-kill-pane.c | 12 +---- server-fn.c | 16 +++++++ tmux.1 | 2 + tmux.h | 1 + window-tree.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 140 insertions(+), 15 deletions(-) diff --git a/cmd-kill-pane.c b/cmd-kill-pane.c index a8a423d081..01b1f51883 100644 --- a/cmd-kill-pane.c +++ b/cmd-kill-pane.c @@ -47,9 +47,8 @@ cmd_kill_pane_exec(struct cmd *self, struct cmdq_item *item) struct winlink *wl = item->target.wl; struct window_pane *loopwp, *tmpwp, *wp = item->target.wp; - server_unzoom_window(wl->window); - if (args_has(self->args, 'a')) { + server_unzoom_window(wl->window); TAILQ_FOREACH_SAFE(loopwp, &wl->window->panes, entry, tmpwp) { if (loopwp == wp) continue; @@ -60,13 +59,6 @@ cmd_kill_pane_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } - if (window_count_panes(wl->window) == 1) { - server_kill_window(wl->window); - recalculate_sizes(); - } else { - layout_close_pane(wp); - window_remove_pane(wl->window, wp); - server_redraw_window(wl->window); - } + server_kill_pane(wp); return (CMD_RETURN_NORMAL); } diff --git a/server-fn.c b/server-fn.c index ef96bf58cc..b4defdd4f6 100644 --- a/server-fn.c +++ b/server-fn.c @@ -177,6 +177,22 @@ server_lock_client(struct client *c) proc_send(c->peer, MSG_LOCK, -1, cmd, strlen(cmd) + 1); } +void +server_kill_pane(struct window_pane *wp) +{ + struct window *w = wp->window; + + if (window_count_panes(w) == 1) { + server_kill_window(w); + recalculate_sizes(); + } else { + server_unzoom_window(w); + layout_close_pane(wp); + window_remove_pane(w, wp); + server_redraw_window(w); + } +} + void server_kill_window(struct window *w) { diff --git a/tmux.1 b/tmux.1 index 3db237864c..31faa1f616 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1459,6 +1459,8 @@ The following keys may be used in tree mode: .It Li "Enter" Ta "Choose selected item" .It Li "Up" Ta "Select previous item" .It Li "Down" Ta "Select next item" +.It Li "x" Ta "Kill selected item" +.It Li "X" Ta "Kill tagged items" .It Li "<" Ta "Scroll list of previews left" .It Li ">" Ta "Scroll list of previews right" .It Li "C-s" Ta "Search by name" diff --git a/tmux.h b/tmux.h index aa3ba3d1d4..9c901bd523 100644 --- a/tmux.h +++ b/tmux.h @@ -1920,6 +1920,7 @@ void server_status_window(struct window *); void server_lock(void); void server_lock_session(struct session *); void server_lock_client(struct client *); +void server_kill_pane(struct window_pane *); void server_kill_window(struct window *); int server_link_window(struct session *, struct winlink *, struct session *, int, int, int, char **); diff --git a/window-tree.c b/window-tree.c index 926eaec176..52ab195ee4 100644 --- a/window-tree.c +++ b/window-tree.c @@ -18,6 +18,7 @@ #include +#include #include #include @@ -860,8 +861,6 @@ window_tree_destroy(struct window_tree_modedata *data) if (--data->references != 0) return; - mode_tree_free(data->data); - for (i = 0; i < data->item_size; i++) window_tree_free_item(data->item_list[i]); free(data->item_list); @@ -881,6 +880,7 @@ window_tree_free(struct window_pane *wp) return; data->dead = 1; + mode_tree_free(data->data); window_tree_destroy(data); } @@ -965,7 +965,7 @@ window_tree_command_callback(struct client *c, void *modedata, const char *s, { struct window_tree_modedata *data = modedata; - if (s == NULL || data->dead) + if (s == NULL || *s == '\0' || data->dead) return (0); data->entered = s; @@ -987,6 +987,77 @@ window_tree_command_free(void *modedata) window_tree_destroy(data); } +static void +window_tree_kill_each(__unused void* modedata, void* itemdata, + __unused struct client *c, __unused key_code key) +{ + struct window_tree_itemdata *item = itemdata; + struct session *s; + struct winlink *wl; + struct window_pane *wp; + + window_tree_pull_item(item, &s, &wl, &wp); + + switch (item->type) { + case WINDOW_TREE_NONE: + break; + case WINDOW_TREE_SESSION: + if (s != NULL) { + server_destroy_session(s); + session_destroy(s, __func__); + } + break; + case WINDOW_TREE_WINDOW: + if (wl != NULL) + server_kill_window(wl->window); + break; + case WINDOW_TREE_PANE: + if (wp != NULL) + server_kill_pane(wp); + break; + } +} + +static int +window_tree_kill_current_callback(struct client *c, void *modedata, + const char *s, __unused int done) +{ + struct window_tree_modedata *data = modedata; + struct mode_tree_data *mtd = data->data; + + if (s == NULL || *s == '\0' || data->dead) + return (0); + if (tolower((u_char) s[0]) != 'y' || s[1] != '\0') + return (0); + + window_tree_kill_each(data, mode_tree_get_current(mtd), c, KEYC_NONE); + + data->references++; + cmdq_append(c, cmdq_get_callback(window_tree_command_done, data)); + + return (0); +} + +static int +window_tree_kill_tagged_callback(struct client *c, void *modedata, + const char *s, __unused int done) +{ + struct window_tree_modedata *data = modedata; + struct mode_tree_data *mtd = data->data; + + if (s == NULL || *s == '\0' || data->dead) + return (0); + if (tolower((u_char) s[0]) != 'y' || s[1] != '\0') + return (0); + + mode_tree_each_tagged(mtd, window_tree_kill_each, c, KEYC_NONE, 1); + + data->references++; + cmdq_append(c, cmdq_get_callback(window_tree_command_done, data)); + + return (0); +} + static key_code window_tree_mouse(struct window_tree_modedata *data, key_code key, u_int x, struct window_tree_itemdata *item) @@ -1054,10 +1125,13 @@ window_tree_key(struct window_pane *wp, struct client *c, { struct window_tree_modedata *data = wp->modedata; struct window_tree_itemdata *item, *new_item; - char *name, *prompt; + char *name, *prompt = NULL; struct cmd_find_state fs; int finished; - u_int tagged, x, y; + u_int tagged, x, y, idx; + struct session *ns; + struct winlink *nwl; + struct window_pane *nwp; item = mode_tree_get_current(data->data); finished = mode_tree_key(data->data, c, &key, m, &x, &y); @@ -1074,6 +1148,46 @@ window_tree_key(struct window_pane *wp, struct client *c, case '>': data->offset++; break; + case 'x': + window_tree_pull_item(item, &ns, &nwl, &nwp); + switch (item->type) { + case WINDOW_TREE_NONE: + break; + case WINDOW_TREE_SESSION: + if (ns == NULL) + break; + xasprintf(&prompt, "Kill session %s? ", ns->name); + break; + case WINDOW_TREE_WINDOW: + if (nwl == NULL) + break; + xasprintf(&prompt, "Kill window %u? ", nwl->idx); + break; + case WINDOW_TREE_PANE: + if (nwp == NULL || window_pane_index(nwp, &idx) != 0) + break; + xasprintf(&prompt, "Kill pane %u? ", idx); + break; + } + if (prompt == NULL) + break; + data->references++; + status_prompt_set(c, prompt, "", + window_tree_kill_current_callback, window_tree_command_free, + data, PROMPT_SINGLE|PROMPT_NOFORMAT); + free(prompt); + break; + case 'X': + tagged = mode_tree_count_tagged(data->data); + if (tagged == 0) + break; + xasprintf(&prompt, "Kill %u tagged? ", tagged); + data->references++; + status_prompt_set(c, prompt, "", + window_tree_kill_tagged_callback, window_tree_command_free, + data, PROMPT_SINGLE|PROMPT_NOFORMAT); + free(prompt); + break; case ':': tagged = mode_tree_count_tagged(data->data); if (tagged != 0) From 051a29ca03718c8fedd5918ba86556f29672348e Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 10 Apr 2018 11:20:15 +0000 Subject: [PATCH 103/836] A couple of fixes to the : form of SGR. Apparently there is an extra argument that nobody knew about, so skip that if it exists. Also there are a bunch of useless optional arguments at the end, so ignore those. --- input.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/input.c b/input.c index bdfb5a7dcd..df8b6ec7dc 100644 --- a/input.c +++ b/input.c @@ -1845,10 +1845,12 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) ptr = copy = xstrdup(s); while ((out = strsep(&ptr, ":")) != NULL) { - p[n++] = strtonum(out, 0, INT_MAX, &errstr); - if (errstr != NULL || n == nitems(p)) { - free(copy); - return; + if (*out != '\0') { + p[n++] = strtonum(out, 0, INT_MAX, &errstr); + if (errstr != NULL || n == nitems(p)) { + free(copy); + return; + } } log_debug("%s: %u = %d", __func__, n - 1, p[n - 1]); } @@ -1856,16 +1858,21 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) if (n == 0 || (p[0] != 38 && p[0] != 48)) return; - switch (p[1]) { + if (p[1] == -1) + i = 2; + else + i = 1; + switch (p[i]) { case 2: - if (n != 5) + if (n < i + 4) break; - input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[2], p[3], p[4]); + input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[i + 1], p[i + 2], + p[i + 3]); break; case 5: - if (n != 3) + if (n < i + 2) break; - input_csi_dispatch_sgr_256_do(ictx, p[0], p[2]); + input_csi_dispatch_sgr_256_do(ictx, p[0], p[i + 1]); break; } } From 14ecb5032e8e75f317acd00ede030f9aae37bea4 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Apr 2018 09:54:45 +0000 Subject: [PATCH 104/836] Allow no client for rename-session, from Ryan Freeman. --- cmd-rename-session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-rename-session.c b/cmd-rename-session.c index 5dbc38d976..8385434abb 100644 --- a/cmd-rename-session.c +++ b/cmd-rename-session.c @@ -47,7 +47,7 @@ static enum cmd_retval cmd_rename_session_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct client *c = cmd_find_client(item, NULL, 0); + struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; char *newname; From b95d1de8fd571eaf964c02ce4e3d8742ca70c5e8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 13 Apr 2018 17:47:36 +0100 Subject: [PATCH 105/836] 2.7. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4eee0eaead..0e462ed9d5 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.7-rc) +AC_INIT(tmux, 2.7) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From ae0b7c7d7292d83ab46b327c4c428ca0eebbc966 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 13 Apr 2018 17:59:11 +0100 Subject: [PATCH 106/836] Some changes. --- CHANGES | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index b8de02135e..2c2e06a472 100644 --- a/CHANGES +++ b/CHANGES @@ -1,13 +1,15 @@ CHANGES FROM 2.7 to master -* +* Fixes to : form of SGR. + +* Add x and X to choose-tree to kill sessions, windows or panes. CHANGES FROM 2.6 TO 2.7 * Remove EVENT_* variables from environment on platforms where tmux uses them so they do not pass on to panes. -* Fixed for hooks at server exit. +* Fixes for hooks at server exit. * Remove SGR 10 (was equivalent to SGR 0 but no other terminal seems to do this). From e64d078a4c9fc0286f5a882fcc526ae8783055ed Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Apr 2018 12:50:11 +0000 Subject: [PATCH 107/836] Fix || example. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 31faa1f616..5a6103a11a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3596,7 +3596,7 @@ and .Ql && evaluate to true if either or both of two comma-separated alternatives are true, for example -.Ql #{||,#{pane_in_mode},#{alternate_on}} . +.Ql #{||:#{pane_in_mode},#{alternate_on}} . A .Ql C performs a search for an From 2595718dd39a2aa66885b202c8ab04e0549370a4 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Apr 2018 14:31:42 +0000 Subject: [PATCH 108/836] Include source function name in grid_check_y logging. --- grid.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/grid.c b/grid.c index e4ba7df424..f1facc4c89 100644 --- a/grid.c +++ b/grid.c @@ -166,10 +166,10 @@ grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) /* Check grid y position. */ static int -grid_check_y(struct grid *gd, u_int py) +grid_check_y(struct grid *gd, const char* from, u_int py) { if (py >= gd->hsize + gd->sy) { - log_debug("y out of range: %u", py); + log_debug("%s: y out of range: %u", from, py); return (-1); } return (0); @@ -407,7 +407,7 @@ grid_empty_line(struct grid *gd, u_int py, u_int bg) const struct grid_line * grid_peek_line(struct grid *gd, u_int py) { - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return (NULL); return (&gd->linedata[py]); } @@ -441,7 +441,8 @@ grid_get_cell1(struct grid_line *gl, u_int px, struct grid_cell *gc) void grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) { - if (grid_check_y(gd, py) != 0 || px >= gd->linedata[py].cellsize) { + if (grid_check_y(gd, __func__, py) != 0 || + px >= gd->linedata[py].cellsize) { memcpy(gc, &grid_default_cell, sizeof *gc); return; } @@ -455,7 +456,7 @@ grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc) struct grid_line *gl; struct grid_cell_entry *gce; - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; grid_expand_line(gd, py, px + 1, 8); @@ -481,7 +482,7 @@ grid_set_cells(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc, struct grid_cell *gcp; u_int i; - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; grid_expand_line(gd, py, px + slen, 8); @@ -514,9 +515,9 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) return; } - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; - if (grid_check_y(gd, py + ny - 1) != 0) + if (grid_check_y(gd, __func__, py + ny - 1) != 0) return; for (yy = py; yy < py + ny; yy++) { @@ -543,9 +544,9 @@ grid_clear_lines(struct grid *gd, u_int py, u_int ny, u_int bg) if (ny == 0) return; - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; - if (grid_check_y(gd, py + ny - 1) != 0) + if (grid_check_y(gd, __func__, py + ny - 1) != 0) return; for (yy = py; yy < py + ny; yy++) { @@ -563,13 +564,13 @@ grid_move_lines(struct grid *gd, u_int dy, u_int py, u_int ny, u_int bg) if (ny == 0 || py == dy) return; - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; - if (grid_check_y(gd, py + ny - 1) != 0) + if (grid_check_y(gd, __func__, py + ny - 1) != 0) return; - if (grid_check_y(gd, dy) != 0) + if (grid_check_y(gd, __func__, dy) != 0) return; - if (grid_check_y(gd, dy + ny - 1) != 0) + if (grid_check_y(gd, __func__, dy + ny - 1) != 0) return; /* Free any lines which are being replaced. */ @@ -603,7 +604,7 @@ grid_move_cells(struct grid *gd, u_int dx, u_int px, u_int py, u_int nx, if (nx == 0 || px == dx) return; - if (grid_check_y(gd, py) != 0) + if (grid_check_y(gd, __func__, py) != 0) return; gl = &gd->linedata[py]; From 3dceddd70ea8491aed082efbb551ca352e97e03d Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Apr 2018 14:35:37 +0000 Subject: [PATCH 109/836] Change how display-message uses the client. Originally it was only intended as the target client where the message should be displayed but at some point (perhaps when -p was added), it was used for format expansion too. This means it can get a bit weird where you have client formats expanding for a client with a different current session than the target session. However, it is nice that display-message can be used to show information about a specific client. So change so that the -c client will be used if the session matches the target session (-t or default), otherwise the best client will be chosen. --- cmd-display-message.c | 22 +++++++++++++++++----- cmd-find.c | 2 +- format.c | 3 +++ tmux.h | 1 + 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index eef6ad84ae..59f25543cb 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -53,7 +53,7 @@ static enum cmd_retval cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct client *c; + struct client *c, *target_c; struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; @@ -65,7 +65,6 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "only one of -F or argument must be given"); return (CMD_RETURN_ERROR); } - c = cmd_find_client(item, args_get(args, 'c'), 1); template = args_get(args, 'F'); if (args->argc != 0) @@ -73,14 +72,27 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) if (template == NULL) template = DISPLAY_MESSAGE_TEMPLATE; + /* + * -c is intended to be the client where the message should be + * displayed if -p is not given. But it makes sense to use it for the + * formats too, assuming it matches the session. If it doesn't, use the + * best client for the session. + */ + c = cmd_find_client(item, args_get(args, 'c'), 1); + if (c != NULL && c->session == s) + target_c = c; + else + target_c = cmd_find_best_client(s); ft = format_create(item->client, item, FORMAT_NONE, 0); - format_defaults(ft, c, s, wl, wp); + format_defaults(ft, target_c, s, wl, wp); msg = format_expand_time(ft, template, time(NULL)); if (args_has(self->args, 'p')) cmdq_print(item, "%s", msg); - else if (c != NULL) - status_message_set(c, "%s", msg); + else { + if (c != NULL) + status_message_set(c, "%s", msg); + } free(msg); format_free(ft); diff --git a/cmd-find.c b/cmd-find.c index 84b131262d..8e631575a0 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -122,7 +122,7 @@ cmd_find_client_better(struct client *c, struct client *than) } /* Find best client for session. */ -static struct client * +struct client * cmd_find_best_client(struct session *s) { struct client *c_loop, *c; diff --git a/format.c b/format.c index bf76fcf0a9..8f5ec063b8 100644 --- a/format.c +++ b/format.c @@ -1254,6 +1254,9 @@ void format_defaults(struct format_tree *ft, struct client *c, struct session *s, struct winlink *wl, struct window_pane *wp) { + if (c != NULL && s != NULL && c->session != s) + log_debug("%s: session does not match", __func__); + format_add(ft, "session_format", "%d", s != NULL); format_add(ft, "window_format", "%d", wl != NULL); format_add(ft, "pane_format", "%d", wp != NULL); diff --git a/tmux.h b/tmux.h index 9c901bd523..d66b19d74a 100644 --- a/tmux.h +++ b/tmux.h @@ -1772,6 +1772,7 @@ long long args_strtonum(struct args *, u_char, long long, long long, /* cmd-find.c */ int cmd_find_target(struct cmd_find_state *, struct cmdq_item *, const char *, enum cmd_find_type, int); +struct client *cmd_find_best_client(struct session *); struct client *cmd_find_client(struct cmdq_item *, const char *, int); void cmd_find_clear_state(struct cmd_find_state *, int); int cmd_find_empty_state(struct cmd_find_state *); From 1afe71cc0ade7a29241de52b290d1e139cf98f7c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Apr 2018 07:41:30 +0000 Subject: [PATCH 110/836] rxvt-unicode has some funny behaviour when scrolling with the cursor not at column 1, so move it back there first if possible. GitHub issue 1318. --- tty.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tty.c b/tty.c index b293d41d06..a006fb276d 100644 --- a/tty.c +++ b/tty.c @@ -1244,13 +1244,18 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) tty_margin_pane(tty, ctx); /* - * If we want to wrap a pane, the cursor needs to be exactly on the - * right of the region. But if the pane isn't on the right, it may be - * off the edge - if so, move the cursor back to the right. + * If we want to wrap a pane while using margins, the cursor needs to + * be exactly on the right of the region. If the cursor is entirely off + * the edge - move it back to the right. Some terminals are funny about + * this and insert extra spaces, so only use the right if margins are + * enabled. */ - if (ctx->xoff + ctx->ocx > tty->rright) - tty_cursor(tty, tty->rright, ctx->yoff + ctx->ocy); - else + if (ctx->xoff + ctx->ocx > tty->rright) { + if (!tty_use_margin(tty)) + tty_cursor(tty, 0, ctx->yoff + ctx->ocy); + else + tty_cursor(tty, tty->rright, ctx->yoff + ctx->ocy); + } else tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); tty_putc(tty, '\n'); @@ -1275,11 +1280,16 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) tty_margin_pane(tty, ctx); if (ctx->num == 1 || !tty_term_has(tty->term, TTYC_INDN)) { - tty_cursor(tty, tty->rright, tty->rlower); + if (!tty_use_margin(tty)) + tty_cursor(tty, 0, tty->rlower); + else + tty_cursor(tty, tty->rright, tty->rlower); for (i = 0; i < ctx->num; i++) tty_putc(tty, '\n'); - } else + } else { + tty_cursor(tty, 0, tty->cy); tty_putcode1(tty, TTYC_INDN, ctx->num); + } } void From 9f39652d87e649ca7456df9e5b67899a3181792e Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Apr 2018 13:43:08 +0000 Subject: [PATCH 111/836] Remove unnecessary brackets. --- cmd-display-message.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 59f25543cb..5856e2d85a 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -89,10 +89,8 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) msg = format_expand_time(ft, template, time(NULL)); if (args_has(self->args, 'p')) cmdq_print(item, "%s", msg); - else { - if (c != NULL) - status_message_set(c, "%s", msg); - } + else if (c != NULL) + status_message_set(c, "%s", msg); free(msg); format_free(ft); From 4bf6f2706ee9cb0310cfc4756a50c11072795734 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Apr 2018 13:46:34 +0000 Subject: [PATCH 112/836] Check whether cursor is at start or end when copying rectangular selections, from tb@. --- window-copy.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/window-copy.c b/window-copy.c index 6eb3d435b8..090254973b 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1548,7 +1548,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) char *buf; size_t off; u_int i, xx, yy, sx, sy, ex, ey, ey_last; - u_int firstsx, lastex, restex, restsx; + u_int firstsx, lastex, restex, restsx, selx; int keys; if (!s->sel.flag && s->sel.lineflag == LINE_SEL_NONE) @@ -1599,7 +1599,11 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) * Need to ignore the column with the cursor in it, which for * rectangular copy means knowing which side the cursor is on. */ - if (data->selx < data->cx) { + if (data->cursordrag == CURSORDRAG_ENDSEL) + selx = data->selx; + else + selx = data->endselx; + if (selx < data->cx) { /* Selection start is on the left. */ if (keys == MODEKEY_EMACS) { lastex = data->cx; @@ -1609,12 +1613,12 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) lastex = data->cx + 1; restex = data->cx + 1; } - firstsx = data->selx; - restsx = data->selx; + firstsx = selx; + restsx = selx; } else { /* Cursor is on the left. */ - lastex = data->selx + 1; - restex = data->selx + 1; + lastex = selx + 1; + restex = selx + 1; firstsx = data->cx; restsx = data->cx; } From 068d1b97b225f2914e6e7c14b20ae2b77e016a28 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Apr 2018 13:51:21 +0000 Subject: [PATCH 113/836] #aabbcc will use RGB if supported so don't say it is closest match. --- tmux.1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index 5a6103a11a..2d8edff942 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2751,8 +2751,7 @@ to from the 256-colour set, .Ic default , or a hexadecimal RGB string such as -.Ql #ffffff , -which chooses the closest match from the default 256-colour set. +.Ql #ffffff . .Pp The attributes is either .Ic none From d9d2f84a4b143d4f45dc11ed31573f667868e5eb Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Apr 2018 14:03:06 +0000 Subject: [PATCH 114/836] Add KRB5CCNAME to update-environment. --- options-table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/options-table.c b/options-table.c index 20ac5d6f99..03ee530f7c 100644 --- a/options-table.c +++ b/options-table.c @@ -514,8 +514,8 @@ const struct options_table_entry options_table[] = { { .name = "update-environment", .type = OPTIONS_TABLE_ARRAY, .scope = OPTIONS_TABLE_SESSION, - .default_str = "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID " - "SSH_CONNECTION WINDOWID XAUTHORITY" + .default_str = "DISPLAY KRB5CCNAME SSH_ASKPASS SSH_AUTH_SOCK " + "SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY" }, { .name = "visual-activity", From aebb17dc75f60edc1817d670f978b71d8f327228 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 23 Apr 2018 15:39:53 +0100 Subject: [PATCH 115/836] Sync imsg from OpenBSD. --- compat/imsg-buffer.c | 14 +++++++------- compat/imsg.c | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/compat/imsg-buffer.c b/compat/imsg-buffer.c index a302fa2775..814591f45a 100644 --- a/compat/imsg-buffer.c +++ b/compat/imsg-buffer.c @@ -1,4 +1,4 @@ -/* $OpenBSD: imsg-buffer.c,v 1.10 2017/04/11 09:57:19 reyk Exp $ */ +/* $OpenBSD: imsg-buffer.c,v 1.11 2017/12/14 09:27:44 kettenis Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -29,9 +29,9 @@ #include "compat.h" #include "imsg.h" -int ibuf_realloc(struct ibuf *, size_t); -void ibuf_enqueue(struct msgbuf *, struct ibuf *); -void ibuf_dequeue(struct msgbuf *, struct ibuf *); +static int ibuf_realloc(struct ibuf *, size_t); +static void ibuf_enqueue(struct msgbuf *, struct ibuf *); +static void ibuf_dequeue(struct msgbuf *, struct ibuf *); struct ibuf * ibuf_open(size_t len) @@ -67,7 +67,7 @@ ibuf_dynamic(size_t len, size_t max) return (buf); } -int +static int ibuf_realloc(struct ibuf *buf, size_t len) { u_char *b; @@ -289,14 +289,14 @@ msgbuf_write(struct msgbuf *msgbuf) return (1); } -void +static void ibuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf) { TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry); msgbuf->queued++; } -void +static void ibuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf) { TAILQ_REMOVE(&msgbuf->bufs, buf, entry); diff --git a/compat/imsg.c b/compat/imsg.c index 85f13370a4..54ac7e566c 100644 --- a/compat/imsg.c +++ b/compat/imsg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: imsg.c,v 1.15 2017/04/11 09:57:19 reyk Exp $ */ +/* $OpenBSD: imsg.c,v 1.16 2017/12/14 09:27:44 kettenis Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -30,7 +30,7 @@ int imsg_fd_overhead = 0; -int imsg_get_fd(struct imsgbuf *); +static int imsg_get_fd(struct imsgbuf *); void imsg_init(struct imsgbuf *ibuf, int fd) @@ -266,7 +266,7 @@ imsg_free(struct imsg *imsg) freezero(imsg->data, imsg->hdr.len - IMSG_HEADER_SIZE); } -int +static int imsg_get_fd(struct imsgbuf *ibuf) { int fd; From 896c1da7da82e2dab6957bc0ce0327176735b631 Mon Sep 17 00:00:00 2001 From: guenther Date: Thu, 26 Apr 2018 12:42:51 +0000 Subject: [PATCH 116/836] Use instead of for open() and friends. Delete a bunch of unnecessary #includes and sort to match style(9) while doing the above cleanup. ok deraadt@ krw@ --- client.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/client.c b/client.c index aa6b596f03..7e8bd7345d 100644 --- a/client.c +++ b/client.c @@ -17,9 +17,7 @@ */ #include -#include #include -#include #include #include From e24a077752106189e932be29eb71fe7fc40089b6 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 3 May 2018 16:56:59 +0000 Subject: [PATCH 117/836] Use window target if specified and exists even when looking for an index, fixes neww -a with -t as well. --- cmd-find.c | 11 ++++++----- cmd-new-window.c | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 8e631575a0..8f2d88260b 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -437,15 +437,15 @@ cmd_find_get_window_with_session(struct cmd_find_state *fs, const char *window) if (window[0] != '+' && window[0] != '-') { idx = strtonum(window, 0, INT_MAX, &errstr); if (errstr == NULL) { - if (fs->flags & CMD_FIND_WINDOW_INDEX) { - fs->idx = idx; - return (0); - } fs->wl = winlink_find_by_index(&fs->s->windows, idx); if (fs->wl != NULL) { fs->w = fs->wl->window; return (0); } + if (fs->flags & CMD_FIND_WINDOW_INDEX) { + fs->idx = idx; + return (0); + } } } @@ -1182,7 +1182,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, /* This will fill in session, winlink and window. */ if (cmd_find_get_window(fs, window, window_only) != 0) goto no_window; - fs->wp = fs->wl->window->active; + if (fs->wl != NULL) /* can be NULL if index only */ + fs->wp = fs->wl->window->active; goto found; } diff --git a/cmd-new-window.c b/cmd-new-window.c index 4c9878ed2f..6517e99e70 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -63,7 +63,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) struct environ_entry *envent; struct cmd_find_state fs; - if (args_has(args, 'a')) { + if (args_has(args, 'a') && wl != NULL) { if ((idx = winlink_shuffle_up(s, wl)) == -1) { cmdq_error(item, "no free window indexes"); return (CMD_RETURN_ERROR); From 988c6bc433afe23b3883a0be54b8efa9d7d744f6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 4 May 2018 08:21:42 +0000 Subject: [PATCH 118/836] Improve logging of sessions. --- cmd-find.c | 23 ++++++++++++++++++++--- session.c | 7 ++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 8f2d88260b..7ce811a79e 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -83,6 +83,7 @@ cmd_find_try_TMUX(struct client *c) char tmp[256]; long long pid; u_int session; + struct session *s; envent = environ_find(c->environ, "TMUX"); if (envent == NULL) @@ -92,8 +93,13 @@ cmd_find_try_TMUX(struct client *c) return (NULL); if (pid != getpid()) return (NULL); - log_debug("client %p TMUX %s (session @%u)", c, envent->value, session); - return (session_find_by_id(session)); + log_debug("%s: client %p TMUX %s (session $%u)", __func__, c, + envent->value, session); + + s = session_find_by_id(session); + if (s != NULL) + log_debug("%s: session $%u still exists", __func__, s->id); + return (s); } /* Find pane containing client if any. */ @@ -109,6 +115,8 @@ cmd_find_inside_pane(struct client *c) if (strcmp(wp->tty, c->ttyname) == 0) break; } + if (wp != NULL) + log_debug("%s: got pane %%%u (%s)", __func__, wp->id, wp->tty); return (wp); } @@ -167,6 +175,8 @@ cmd_find_best_session(struct session **slist, u_int ssize, int flags) struct session *s_loop, *s; u_int i; + log_debug("%s: %u sessions to try", __func__, ssize); + s = NULL; if (slist != NULL) { for (i = 0; i < ssize; i++) { @@ -190,6 +200,8 @@ cmd_find_best_session_with_window(struct cmd_find_state *fs) u_int ssize; struct session *s; + log_debug("%s: window is @%u", __func__, fs->w->id); + ssize = 0; RB_FOREACH(s, sessions, &sessions) { if (!session_has(s, fs->w)) @@ -219,6 +231,8 @@ cmd_find_best_winlink_with_window(struct cmd_find_state *fs) { struct winlink *wl, *wl_loop; + log_debug("%s: window is @%u", __func__, fs->w->id); + wl = NULL; if (fs->s->curw != NULL && fs->s->curw->window == fs->w) wl = fs->s->curw; @@ -706,7 +720,7 @@ void cmd_find_log_state(const char *prefix, struct cmd_find_state *fs) { if (fs->s != NULL) - log_debug("%s: s=$%u", prefix, fs->s->id); + log_debug("%s: s=$%u %s", prefix, fs->s->id, fs->s->name); else log_debug("%s: s=none", prefix); if (fs->wl != NULL) { @@ -895,6 +909,9 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) break; } if (wl != NULL) { + log_debug("%s: session $%u has pane %%%u", __func__, + s->id, wp->id); + fs->s = s; fs->wl = s->curw; /* use current session */ fs->w = fs->wl->window; diff --git a/session.c b/session.c index 11493181b2..3085f2489d 100644 --- a/session.c +++ b/session.c @@ -291,9 +291,10 @@ session_update_activity(struct session *s, struct timeval *from) else memcpy(&s->activity_time, from, sizeof s->activity_time); - log_debug("session %s activity %lld.%06d (last %lld.%06d)", s->name, - (long long)s->activity_time.tv_sec, (int)s->activity_time.tv_usec, - (long long)last->tv_sec, (int)last->tv_usec); + log_debug("session $%u %s activity %lld.%06d (last %lld.%06d)", s->id, + s->name, (long long)s->activity_time.tv_sec, + (int)s->activity_time.tv_usec, (long long)last->tv_sec, + (int)last->tv_usec); if (evtimer_initialized(&s->lock_timer)) evtimer_del(&s->lock_timer); From f915a4bf0c035968b07d5660760cf7f6503b016c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 7 May 2018 13:39:09 +0000 Subject: [PATCH 119/836] Handle terminfo colors > 256 correctly, GitHub issue 1337. --- tty-term.c | 5 +++-- tty.c | 6 ++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tty-term.c b/tty-term.c index b9afd96ca5..b75364877f 100644 --- a/tty-term.c +++ b/tty-term.c @@ -488,8 +488,9 @@ tty_term_find(char *name, int fd, char **cause) goto error; } - /* Figure out if we have 256. */ - if (tty_term_number(term, TTYC_COLORS) == 256) + /* Figure out if we have 256 colours (or more). */ + if (tty_term_number(term, TTYC_COLORS) >= 256 || + tty_term_has(term, TTYC_RGB)) term->flags |= TERM_256COLOURS; /* diff --git a/tty.c b/tty.c index a006fb276d..e8ab471480 100644 --- a/tty.c +++ b/tty.c @@ -2000,8 +2000,7 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) char s[32]; /* Is this a 24-bit or 256-colour colour? */ - if (gc->fg & COLOUR_FLAG_RGB || - gc->fg & COLOUR_FLAG_256) { + if (gc->fg & COLOUR_FLAG_RGB || gc->fg & COLOUR_FLAG_256) { if (tty_try_colour(tty, gc->fg, "38") == 0) goto save_fg; /* Should not get here, already converted in tty_check_fg. */ @@ -2030,8 +2029,7 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) char s[32]; /* Is this a 24-bit or 256-colour colour? */ - if (gc->bg & COLOUR_FLAG_RGB || - gc->bg & COLOUR_FLAG_256) { + if (gc->bg & COLOUR_FLAG_RGB || gc->bg & COLOUR_FLAG_256) { if (tty_try_colour(tty, gc->bg, "48") == 0) goto save_bg; /* Should not get here, already converted in tty_check_bg. */ From f2029f9d9e12e65b9ac575136b70b90d8fef8b5b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 9 May 2018 07:50:03 +0000 Subject: [PATCH 120/836] Another check for NULL window if looking for index. --- cmd-find.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd-find.c b/cmd-find.c index 7ce811a79e..5ecd4311c8 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -1159,7 +1159,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, /* This will fill in winlink and window. */ if (cmd_find_get_window_with_session(fs, window) != 0) goto no_window; - fs->wp = fs->wl->window->active; + if (fs->wl != NULL) /* can be NULL if index only */ + fs->wp = fs->wl->window->active; goto found; } From 80994a8de160be7b949bda326eea4d097ef5cab0 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 9 May 2018 16:20:50 +0000 Subject: [PATCH 121/836] Mention allow-rename with \033k. --- tmux.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 2d8edff942..87ab94a07a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3821,7 +3821,9 @@ for or .Ic new-session ) . .It -An escape sequence: +An escape sequence (if the +.Ic allow-rename +option is turned on): .Bd -literal -offset indent $ printf '\e033kWINDOW_NAME\e033\e\e' .Ed From e3b034fac776b564301dbde17ac900005324f45e Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 15 May 2018 14:58:09 +0000 Subject: [PATCH 122/836] Fix switch-client -l, from Jean-Marc Eurin in GitHub issue 1343. --- cmd-attach-session.c | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 38d9f8a2af..0db0d855cb 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -100,6 +100,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, s->cwd = format_single(item, cflag, c, s, wl, wp); } + c->last_session = c->session; if (c->session != NULL) { if (dflag) { TAILQ_FOREACH(c_loop, &clients, entry) { From f2f9605c632b7cc953e50fa4e2394ce06b081334 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 20 May 2018 11:48:34 +0000 Subject: [PATCH 123/836] -T should not actually select the pane. --- cmd-select-pane.c | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 65b7cdbedb..790a1a5bdd 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -157,6 +157,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) screen_set_title(&wp->base, pane_title); server_status_window(wp->window); free(pane_title); + return (CMD_RETURN_NORMAL); } if (wp == w->active) From 07c0970f541f88d5969d967d03f8f7371d69b0f7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 22 May 2018 08:02:06 +0100 Subject: [PATCH 124/836] Sync tmux description with manual. --- README | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 2503ba8226..010111b60c 100644 --- a/README +++ b/README @@ -1,8 +1,8 @@ Welcome to tmux! -tmux is a "terminal multiplexer", it enables a number of terminals (or windows) -to be accessed and controlled from a single terminal. tmux is intended to be a -simple, modern, BSD-licensed alternative to programs such as GNU screen. +tmux is a terminal multiplexer: it enables a number of terminals to be created, +accessed, and controlled from a single screen. tmux may be detached from a +screen and continue running in the background, then later reattached. This release runs on OpenBSD, FreeBSD, NetBSD, Linux, OS X and Solaris. From 2a04665626959dd57a88db2fd42813877e7f7fde Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 22 May 2018 08:49:12 +0000 Subject: [PATCH 125/836] Allow escaping , and } with # in #{}; GitHub issue 1332. --- format.c | 46 ++++++++++++++++++++++++++++++---------------- tmux.1 | 12 +++++++++--- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/format.c b/format.c index 8f5ec063b8..7af0994287 100644 --- a/format.c +++ b/format.c @@ -837,18 +837,22 @@ format_find(struct format_tree *ft, const char *key, int modifiers) return (copy); } -/* Skip until comma. */ -static char * -format_skip(char *s) +/* Skip until end. */ +static const char * +format_skip(const char *s, char end) { int brackets = 0; for (; *s != '\0'; s++) { - if (*s == '{') + if (*s == '#' && s[1] == '{') brackets++; + if (*s == '#' && strchr(",#{}", s[1]) != NULL) { + s++; + continue; + } if (*s == '}') brackets--; - if (*s == ',' && brackets == 0) + if (*s == end && brackets == 0) break; } if (*s == '\0') @@ -862,7 +866,7 @@ format_choose(char *s, char **left, char **right) { char *cp; - cp = format_skip(s); + cp = (char *)format_skip(s, ','); if (cp == NULL) return (-1); *cp = '\0'; @@ -892,6 +896,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, size_t valuelen, newlen, fromlen, tolen, used; long limit = 0; int modifiers = 0, compare = 0, search = 0; + int literal = 0; /* Make a copy of the key. */ copy0 = copy = xmalloc(keylen + 1); @@ -900,6 +905,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Is there a length limit or whatnot? */ switch (copy[0]) { + case 'l': + if (copy[1] != ':') + break; + literal = 1; + copy += 2; + break; case 'm': if (copy[1] != ':') break; @@ -988,6 +999,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, break; } + /* Is this a literal string? */ + if (literal) { + value = xstrdup(copy); + goto done; + } + /* Is this a comparison or a conditional? */ if (search) { /* Search in pane. */ @@ -1019,7 +1036,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, free(left); } else if (*copy == '?') { /* Conditional: check first and choose second or third. */ - ptr = format_skip(copy); + ptr = (char *)format_skip(copy, ','); if (ptr == NULL) goto fail; *ptr = '\0'; @@ -1082,6 +1099,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, } /* Expand the buffer and copy in the value. */ +done: valuelen = strlen(value); while (*len - *off < valuelen + 1) { *buf = xreallocarray(*buf, 2, *len); @@ -1179,14 +1197,8 @@ format_expand(struct format_tree *ft, const char *fmt) fmt += n + 1; continue; case '{': - brackets = 1; - for (ptr = fmt; *ptr != '\0'; ptr++) { - if (*ptr == '{') - brackets++; - if (*ptr == '}' && --brackets == 0) - break; - } - if (*ptr != '}' || brackets != 0) + ptr = format_skip(fmt - 2, '}'); + if (ptr == NULL) break; n = ptr - fmt; @@ -1194,12 +1206,14 @@ format_expand(struct format_tree *ft, const char *fmt) break; fmt += n + 1; continue; + case '}': case '#': + case ',': while (len - off < 2) { buf = xreallocarray(buf, 2, len); len *= 2; } - buf[off++] = '#'; + buf[off++] = ch; continue; default: s = NULL; diff --git a/tmux.1 b/tmux.1 index 87ab94a07a..ee50a9fa11 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3542,11 +3542,17 @@ The possible variables are listed in the table below, or the name of a .Nm option may be used for an option's value. Some variables have a shorter alias such as -.Ql #S , -and +.Ql #S ; .Ql ## is replaced by a single -.Ql # . +.Ql # , +.Ql #, +by a +.Ql \&, +and +.Ql #} +by a +.Ql } . .Pp Conditionals are available by prefixing with .Ql \&? From 8f5903d7c3d75763ed5dc37ff49a39fe3b3b7831 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 24 May 2018 09:34:54 +0000 Subject: [PATCH 126/836] Improve logging of the environment etc for new panes. --- window.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/window.c b/window.c index 8a5c1c7e9f..79a5b30cae 100644 --- a/window.c +++ b/window.c @@ -917,10 +917,11 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); cmd = cmd_stringify_argv(wp->argc, wp->argv); - log_debug("spawn: %s -- %s", wp->shell, cmd); + log_debug("%s: shell=%s", __func__, wp->shell); + log_debug("%s: command=%s", __func__, cmd); for (i = 0; i < wp->argc; i++) - log_debug("spawn: argv[%d] = %s", i, wp->argv[i]); - environ_log(env, "spawn: "); + log_debug("%s: argv[%d]=%s", __func__, i, wp->argv[i]); + environ_log(env, "%s: environment ", __func__); memset(&ws, 0, sizeof ws); ws.ws_col = screen_size_x(&wp->base); @@ -998,6 +999,8 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, execl(wp->shell, argv0, (char *)NULL); fatal("execl failed"); } + log_debug("%s: master=%s", __func__, ttyname(wp->fd)); + log_debug("%s: slave=%s", __func__, wp->tty); sigprocmask(SIG_SETMASK, &oldset, NULL); setblocking(wp->fd, 0); From b9a6162d2f9bea63c3ad421e9c3969eea2852b00 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 24 May 2018 09:42:49 +0000 Subject: [PATCH 127/836] Make server_client_get_cwd used (almost) everywhere we need to work out the cwd, and do not fall back to "." as it is pretty useless. GitHub issue 1331. --- cmd-if-shell.c | 12 ++---------- cmd-new-session.c | 4 +--- cmd-new-window.c | 4 +--- cmd-run-shell.c | 12 ++---------- cmd-source-file.c | 2 +- cmd-split-window.c | 4 +--- server-client.c | 12 ++++++++---- tmux.h | 2 +- window.c | 3 ++- 9 files changed, 19 insertions(+), 36 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 304fe91026..d7ce3039b7 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -73,14 +73,6 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; - const char *cwd; - - if (item->client != NULL && item->client->session == NULL) - cwd = item->client->cwd; - else if (s != NULL) - cwd = s->cwd; - else - cwd = NULL; shellcmd = format_single(item, args->argv[0], c, s, wl, wp); if (args_has(args, 'F')) { @@ -128,8 +120,8 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->item = NULL; memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse); - job_run(shellcmd, s, cwd, NULL, cmd_if_shell_callback, - cmd_if_shell_free, cdata, 0); + job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, + cmd_if_shell_callback, cmd_if_shell_free, cdata, 0); free(shellcmd); if (args_has(args, 'b')) diff --git a/cmd-new-session.c b/cmd-new-session.c index 26cb08ba56..7af67a11fc 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -156,10 +156,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) /* Get the new session working directory. */ if ((tmp = args_get(args, 'c')) != NULL) cwd = format_single(item, tmp, c, NULL, NULL, NULL); - else if (c != NULL && c->session == NULL && c->cwd != NULL) - cwd = xstrdup(c->cwd); else - cwd = xstrdup("."); + cwd = xstrdup(server_client_get_cwd(c, NULL)); /* * If this is a new client, check for nesting and save the termios diff --git a/cmd-new-window.c b/cmd-new-window.c index 6517e99e70..6a7cf0b843 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -95,10 +95,8 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) if ((tmp = args_get(args, 'c')) != NULL) cwd = format_single(item, tmp, c, s, NULL, NULL); - else if (item->client != NULL && item->client->session == NULL) - cwd = xstrdup(item->client->cwd); else - cwd = xstrdup(s->cwd); + cwd = xstrdup(server_client_get_cwd(item->client, s)); if ((tmp = args_get(args, 'n')) != NULL) name = format_single(item, tmp, c, s, NULL, NULL); diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 8de8736af5..a99619880e 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -90,14 +90,6 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; - const char *cwd; - - if (item->client != NULL && item->client->session == NULL) - cwd = item->client->cwd; - else if (s != NULL) - cwd = s->cwd; - else - cwd = NULL; cdata = xcalloc(1, sizeof *cdata); cdata->cmd = format_single(item, args->argv[0], c, s, wl, wp); @@ -110,8 +102,8 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) if (!args_has(args, 'b')) cdata->item = item; - job_run(cdata->cmd, s, cwd, NULL, cmd_run_shell_callback, - cmd_run_shell_free, cdata, 0); + job_run(cdata->cmd, s, server_client_get_cwd(item->client, s), NULL, + cmd_run_shell_callback, cmd_run_shell_free, cdata, 0); if (args_has(args, 'b')) return (CMD_RETURN_NORMAL); diff --git a/cmd-source-file.c b/cmd-source-file.c index 0328089f64..ffb7f42387 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -61,7 +61,7 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) if (*path == '/') pattern = xstrdup(path); else { - utf8_stravis(&tmp, server_client_get_cwd(c), VIS_GLOB); + utf8_stravis(&tmp, server_client_get_cwd(c, NULL), VIS_GLOB); xasprintf(&pattern, "%s/%s", tmp, path); free(tmp); } diff --git a/cmd-split-window.c b/cmd-split-window.c index ab7f9bc54a..7b58f81f14 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -88,10 +88,8 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) if ((tmp = args_get(args, 'c')) != NULL) cwd = format_single(item, tmp, c, s, NULL, NULL); - else if (item->client != NULL && item->client->session == NULL) - cwd = xstrdup(item->client->cwd); else - cwd = xstrdup(s->cwd); + cwd = xstrdup(server_client_get_cwd(item->client, s)); type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) diff --git a/server-client.c b/server-client.c index 4da9f08a15..6a94bb569a 100644 --- a/server-client.c +++ b/server-client.c @@ -1847,15 +1847,19 @@ server_client_add_message(struct client *c, const char *fmt, ...) /* Get client working directory. */ const char * -server_client_get_cwd(struct client *c) +server_client_get_cwd(struct client *c, struct session *s) { - struct session *s; + const char *home; if (c != NULL && c->session == NULL && c->cwd != NULL) return (c->cwd); + if (s != NULL && s->cwd != NULL) + return (s->cwd); if (c != NULL && (s = c->session) != NULL && s->cwd != NULL) return (s->cwd); - return ("."); + if ((home = find_home()) != NULL) + return (home); + return ("/"); } /* Resolve an absolute path or relative to client working directory. */ @@ -1867,7 +1871,7 @@ server_client_get_path(struct client *c, const char *file) if (*file == '/') path = xstrdup(file); else - xasprintf(&path, "%s/%s", server_client_get_cwd(c), file); + xasprintf(&path, "%s/%s", server_client_get_cwd(c, NULL), file); if (realpath(path, resolved) == NULL) return (path); free(path); diff --git a/tmux.h b/tmux.h index d66b19d74a..d46dca2ef8 100644 --- a/tmux.h +++ b/tmux.h @@ -1906,7 +1906,7 @@ void server_client_push_stderr(struct client *); void printflike(2, 3) server_client_add_message(struct client *, const char *, ...); char *server_client_get_path(struct client *, const char *); -const char *server_client_get_cwd(struct client *); +const char *server_client_get_cwd(struct client *, struct session *); /* server-fn.c */ void server_redraw_client(struct client *); diff --git a/window.c b/window.c index 79a5b30cae..3b9469fe62 100644 --- a/window.c +++ b/window.c @@ -918,7 +918,8 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, cmd = cmd_stringify_argv(wp->argc, wp->argv); log_debug("%s: shell=%s", __func__, wp->shell); - log_debug("%s: command=%s", __func__, cmd); + log_debug("%s: cmd=%s", __func__, cmd); + log_debug("%s: cwd=%s", __func__, cwd); for (i = 0; i < wp->argc; i++) log_debug("%s: argv[%d]=%s", __func__, i, wp->argv[i]); environ_log(env, "%s: environment ", __func__); From b602c1fb9a9c12ce9876e21e28ddf7ad8b6556e6 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 28 May 2018 11:45:26 +0000 Subject: [PATCH 128/836] Document escaping inside conditionals, from "sadie-parayno" in GitHub issue 1359. --- tmux.1 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tmux.1 b/tmux.1 index ee50a9fa11..f9d7cb98e7 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3574,6 +3574,21 @@ if is enabled, or .Ql no if not. +Conditionals can be nested arbitrarily. +Inside a conditional, +.Ql \&, +and +.Ql } +must be escaped as +.Ql #, +and +.Ql #} , +unless they are part of a +.Ql #{...} +replacement. For example: +.Bd -literal -offset indent +#{?pane_in_mode,#[fg=white#,bg=red],#[fg=red#,bg=white]}#W . +.Ed .Pp Comparisons may be expressed by prefixing two comma-separated alternatives by From 8f8e0975f1427f24cc1a129edc7116261ef78cb1 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 28 May 2018 12:48:15 +0100 Subject: [PATCH 129/836] Add format string test, from "sadie-parayno" in GitHub issue 1358. --- regress/format-strings.sh | 183 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 regress/format-strings.sh diff --git a/regress/format-strings.sh b/regress/format-strings.sh new file mode 100644 index 0000000000..726b46bc8e --- /dev/null +++ b/regress/format-strings.sh @@ -0,0 +1,183 @@ +#!/bin/sh + +# Tests of formats as described in tmux(1) FORMATS + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" + +# test_format $format $expected_result +test_format() +{ + fmt="$1" + exp="$2" + + out=$($TMUX display-message -p "$fmt") + + if [ "$out" != "$exp" ]; then + echo "Format test failed for '$fmt'." + echo "Expected: '$exp'" + echo "But got '$out'" + exit 1 + fi +} + +# test_conditional_with_pane_in_mode $format $exp1 $exp2 +# +# Tests the format string $format to yield $exp1 if #{pane_in_mode} is true and +# $exp2 when #{pane_in_mode} is false. +test_conditional_with_pane_in_mode() +{ + fmt="$1" + exp_true="$2" + exp_false="$3" + + $TMUX copy-mode # enter copy mode + test_format "$fmt" "$exp_true" + $TMUX send-keys -X cancel # leave copy mode + test_format "$fmt" "$exp_false" +} + +# test_conditional_with_session_name #format $exp_summer $exp_winter +# +# Tests the format string $format to yield $exp_summer if the session name is +# 'Summer' and $exp_winter if the session name is 'Winter'. +test_conditional_with_session_name() +{ + fmt="$1" + exp_summer="$2" + exp_winter="$3" + + $TMUX rename-session "Summer" + test_format "$fmt" "$exp_summer" + $TMUX rename-session "Winter" + test_format "$fmt" "$exp_winter" + $TMUX rename-session "Summer" # restore default +} + + +$TMUX kill-server 2>/dev/null +$TMUX -f/dev/null new-session -d || exit 1 +$TMUX rename-session "Summer" || exit 1 # used later in conditionals + +# Plain string without substitutions et al +test_format "abc xyz" "abc xyz" + +# Test basic escapes for "#", "{", "#{" "}", "#}", "," +test_format "##" "#" +test_format "#," "," +test_format "{" "{" +test_format "##{" "#{" +test_format "#}" "}" +test_format "###}" "#}" # not a "basic" one but interesting nevertheless + +# Simple expansion +test_format "#{pane_in_mode}" "0" + +# Simple conditionals +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,xyz}" "abc" "xyz" + +# Expansion in conditionals +test_conditional_with_pane_in_mode "#{?pane_in_mode,#{session_name},xyz}" "Summer" "xyz" + +# Basic escapes in conditionals +# First argument +test_conditional_with_pane_in_mode "#{?pane_in_mode,##,xyz}" "#" "xyz" +test_conditional_with_pane_in_mode "#{?pane_in_mode,#,,xyz}" "," "xyz" +test_conditional_with_pane_in_mode "#{?pane_in_mode,{,xyz}" "{" "xyz" +test_conditional_with_pane_in_mode "#{?pane_in_mode,##{,xyz}" "#{" "xyz" +test_conditional_with_pane_in_mode "#{?pane_in_mode,#},xyz}" "}" "xyz" +# not a "basic" one but interesting nevertheless +test_conditional_with_pane_in_mode "#{?pane_in_mode,###},xyz}" "#}" "xyz" +# Second argument +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,##}" "abc" "#" +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,#,}" "abc" "," +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,{}" "abc" "{" +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,##{}" "abc" "#{" +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,#}}" "abc" "}" +# not a "basic" one but interesting nevertheless +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,###}}" "abc" "#}" +# mixed +test_conditional_with_pane_in_mode "#{?pane_in_mode,{,#}}" "{" "}" +test_conditional_with_pane_in_mode "#{?pane_in_mode,#},{}" "}" "{" +test_conditional_with_pane_in_mode "#{?pane_in_mode,##{,###}}" "#{" "#}" +test_conditional_with_pane_in_mode "#{?pane_in_mode,###},##{}" "#}" "#{" + +# Conditionals split on the second comma (this is not documented) +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,xyz,bonus}" "abc" "xyz,bonus" + +# Curly brackets {...} do not capture a comma inside of conditionals as the +# conditional ends on the first '}' +test_conditional_with_pane_in_mode "#{?pane_in_mode,{abc,xyz},bonus}" "{abc,bonus}" "xyz,bonus}" + +# Substitutions '#{...}' capture the comma +# invalid format: #{abc,xyz} is not a known variable name. +#test_conditional_with_pane_in_mode "#{?pane_in_mode,#{abc,xyz},bonus}" "" "bonus" + +# Parenthesis (...) do not captura a comma +test_conditional_with_pane_in_mode "#{?pane_in_mode,(abc,xyz),bonus}" "(abc" "xyz),bonus" +test_conditional_with_pane_in_mode "#{?pane_in_mode,(abc#,xyz),bonus}" "(abc,xyz)" "bonus" + +# Brackets [...] do not captura a comma +test_conditional_with_pane_in_mode "#{?pane_in_mode,[abc,xyz],bonus}" "[abc" "xyz],bonus" +test_conditional_with_pane_in_mode "#{?pane_in_mode,[abc#,xyz],bonus}" "[abc,xyz]" "bonus" + + +# Escape comma inside of #(...) +# Note: #() commands are run asynchronous and are substituted with result of the +# *previous* run or a placeholder (like "<'echo ,' not ready") if the command +# has not been run before. The format is updated as soon as the command +# finishes. As we are printing the message only once it never gets updated +# and the displayed message is "<'echo ,' not ready>" +test_format "#{?pane_in_mode,#(echo #,),xyz}" "xyz" +test_conditional_with_pane_in_mode "#{?pane_in_mode,#(echo #,),xyz}" "<'echo ,' not ready>" "xyz" +# This caching does not work :-( +#$TMUX display-message -p "#(echo #,)" > /dev/null +#test_conditional_with_pane_in_mode "#{?pane_in_mode,#(echo #,),xyz}" "," "xyz" +#test_conditional_with_pane_in_mode "#{?pane_in_mode,#(echo #,),xyz}" "," "xyz" + +# invalid format: '#(' is not closed in the first argument of #{?,,}. +#test_conditional_with_pane_in_mode "#{?pane_in_mode,#(echo ,),xyz}" "" "),xyz" + +# Escape comma inside of #[...] +test_conditional_with_pane_in_mode "#{?pane_in_mode,#[fg=default#,bg=default]abc,xyz}" "#[fg=default,bg=default]abc" "xyz" +# invalid format: '#[' is not closed in the first argument of #{?,,} +#test_conditional_with_pane_in_mode "#{?pane_in_mode,#[fg=default,bg=default]abc,xyz}" "" "bg=default]abc,xyz" + +# Conditionals with comparison +test_conditional_with_session_name "#{?#{==:#{session_name},Summer},abc,xyz}" "abc" "xyz" +# Conditionals with comparison and escaped commas +$TMUX rename-session "," +test_format "#{?#{==:#,,#{session_name}},abc,xyz}" "abc" +$TMUX rename-session "Summer" # reset to default + +# Conditional in conditional +test_conditional_with_pane_in_mode "#{?pane_in_mode,#{?#{==:#{session_name},Summer},ABC,XYZ},xyz}" "ABC" "xyz" +test_conditional_with_session_name "#{?pane_in_mode,#{?#{==:#{session_name},Summer},ABC,XYZ},xyz}" "xyz" "xyz" + +test_conditional_with_pane_in_mode "#{?pane_in_mode,abc,#{?#{==:#{session_name},Summer},ABC,XYZ}}" "abc" "ABC" +test_conditional_with_session_name "#{?pane_in_mode,abc,#{?#{==:#{session_name},Summer},ABC,XYZ}}" "ABC" "XYZ" + +# Some fancy stackings +test_conditional_with_pane_in_mode "#{?#{==:#{?pane_in_mode,#{session_name},#(echo Spring)},Summer},abc,xyz}" "abc" "xyz" + + + +# Format test for the literal option +# Note: The behavior for #{l:...} with escapes is sometimes weird as #{l:...} +# respects the escapes. +test_format "#{l:#{}}" "#{}" +test_format "#{l:#{pane_in_mode}}" "#{pane_in_mode}" +test_format "#{l:#{?pane_in_mode,#{?#{==:#{session_name},Summer},ABC,XYZ},xyz}}" "#{?pane_in_mode,#{?#{==:#{session_name},Summer},ABC,XYZ},xyz}" + +# With escapes (which escape but are returned literally) +test_format "#{l:##{}" "##{" +test_format "#{l:#{#}}}" "#{#}}" + +# Invalid formats: +#test_format "#{l:#{}" "" +#test_format "#{l:#{#}}" "" + +exit 0 From c177a627d26d0e254390d27ad6348ea681ff0f7d Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 28 May 2018 11:50:47 +0000 Subject: [PATCH 130/836] When looking for panes, ignore dead ones (with -1 file descriptor). GitHub issue 1354. --- cmd-find.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 5ecd4311c8..da4fe1e520 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -112,7 +112,7 @@ cmd_find_inside_pane(struct client *c) return (NULL); RB_FOREACH(wp, window_pane_tree, &all_window_panes) { - if (strcmp(wp->tty, c->ttyname) == 0) + if (wp->fd != -1 && strcmp(wp->tty, c->ttyname) == 0) break; } if (wp != NULL) @@ -223,7 +223,7 @@ cmd_find_best_session_with_window(struct cmd_find_state *fs) } /* - * Find the best winlink for a window (the current if it contains the pane, + * Find the best winlink for a window (the current if it contains the window, * otherwise the first). */ static int @@ -920,6 +920,10 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) cmd_find_log_state(__func__, fs); return (0); } + else { + log_debug("%s: session $%u does not have pane %%%u", + __func__, s->id, wp->id); + } } /* From d1f5142daba11baf77f7ec1753b5a660585e96f9 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 29 May 2018 09:10:30 +0000 Subject: [PATCH 131/836] If foo doesn't exist and can't be expanded in #{?foo,a,b} then assume it is false. --- format.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 7af0994287..b8aa16060c 100644 --- a/format.c +++ b/format.c @@ -1042,8 +1042,18 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, *ptr = '\0'; found = format_find(ft, copy + 1, modifiers); - if (found == NULL) + if (found == NULL) { + /* + * If the conditional not found, try to expand it. If + * the expansion doesn't have any effect, then assume + * false. + */ found = format_expand(ft, copy + 1); + if (strcmp(found, copy + 1) == 0) { + free(found); + found = xstrdup(""); + } + } if (format_choose(ptr + 1, &left, &right) != 0) goto fail; @@ -1098,8 +1108,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = new; } - /* Expand the buffer and copy in the value. */ done: + /* Expand the buffer and copy in the value. */ valuelen = strlen(value); while (*len - *off < valuelen + 1) { *buf = xreallocarray(*buf, 2, *len); From ba31d3a88c8c76ec3c76d9a91373fa24e64797cd Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 3 Jun 2018 10:17:30 +0000 Subject: [PATCH 132/836] Increment the lines counter when skipping a line to avoid an infinite loop, and fix a check to avoid a potential out-of-bounds access. Problem reported by Yuxiang Qin and tracked down by Karl Beldan; GitHub issue 1352. Also a man page fix request by jmc@. --- grid.c | 3 ++- tmux.1 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/grid.c b/grid.c index f1facc4c89..c88a451b63 100644 --- a/grid.c +++ b/grid.c @@ -1011,7 +1011,7 @@ grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, * If this is now the last line, there is nothing more to be * done. */ - if (yy + lines == gd->hsize + gd->sy) + if (yy + 1 + lines == gd->hsize + gd->sy) break; line = yy + 1 + lines; @@ -1021,6 +1021,7 @@ grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, if (gd->linedata[line].cellused == 0) { if (!wrapped) break; + lines++; continue; } diff --git a/tmux.1 b/tmux.1 index f9d7cb98e7..ac5e9b44a9 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3585,7 +3585,8 @@ and .Ql #} , unless they are part of a .Ql #{...} -replacement. For example: +replacement. +For example: .Bd -literal -offset indent #{?pane_in_mode,#[fg=white#,bg=red],#[fg=red#,bg=white]}#W . .Ed From 91280f1fcaf956cb92fbdc8991b1e58d28f5d243 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 7 Jun 2018 09:17:05 +0100 Subject: [PATCH 133/836] Linux: include sys/file.h for flock() --- client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client.c b/client.c index 8c5fd19a6e..2ea88f7bfe 100644 --- a/client.c +++ b/client.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include From ff45b2d343fea6b0c477ed2cb5bbe2d30922ea3e Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Jun 2018 09:43:58 +0000 Subject: [PATCH 134/836] Tweak previous - check for a NULL client and simplify manual text. --- cmd-new-session.c | 28 ++++++++++++++++++++-------- tmux.1 | 2 ++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 7af67a11fc..e809de244d 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -202,17 +202,29 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) sy = 24; } if ((is_control || detached) && args_has(args, 'x')) { - sx = strtonum(args_get(args, 'x'), 1, USHRT_MAX, &errstr); - if (errstr != NULL) { - cmdq_error(item, "width %s", errstr); - goto error; + tmp = args_get(args, 'x'); + if (strcmp(tmp, "-") == 0) { + if (c != NULL) + sx = c->tty.sx; + } else { + sx = strtonum(tmp, 1, USHRT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "width %s", errstr); + goto error; + } } } if ((is_control || detached) && args_has(args, 'y')) { - sy = strtonum(args_get(args, 'y'), 1, USHRT_MAX, &errstr); - if (errstr != NULL) { - cmdq_error(item, "height %s", errstr); - goto error; + tmp = args_get(args, 'y'); + if (strcmp(tmp, "-") == 0) { + if (c != NULL) + sy = c->tty.sy; + } else { + sy = strtonum(tmp, 1, USHRT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "height %s", errstr); + goto error; + } } } if (sx == 0) diff --git a/tmux.1 b/tmux.1 index ac5e9b44a9..329279fd86 100644 --- a/tmux.1 +++ b/tmux.1 @@ -851,6 +851,8 @@ the initial size is 80 x 24; and .Fl y can be used to specify a different size. +.Ql - +uses the size of the current client if any. .Pp If run from a terminal, any .Xr termios 4 From f6bad7efd76109de122bb3b670d0e18f86ec38bb Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Jun 2018 20:54:22 +0000 Subject: [PATCH 135/836] Instead of working out which pane to resize with the mouse by walking the panes list, look through the layout cells for the nearest border and resize that cell. From Dan Aloni in GitHub issue 1374. --- cmd-resize-pane.c | 49 ++++++++------------------ layout.c | 87 +++++++++++++++++++++++++++++++++++------------ tmux.h | 3 ++ 3 files changed, 83 insertions(+), 56 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index bbb78de73d..cfde83b322 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -129,14 +129,16 @@ static void cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) { struct winlink *wl; - struct window_pane *loop, *wp_x, *wp_y; - u_int y, ly, x, lx, sx, sy, ex, ey; + struct window *w; + u_int y, ly, x, lx; + struct layout_cell *lc; wl = cmd_mouse_window(m, NULL); if (wl == NULL) { c->tty.mouse_drag_update = NULL; return; } + w = wl->window; y = m->y; x = m->x; if (m->statusat == 0 && y > 0) @@ -149,37 +151,16 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) else if (m->statusat > 0 && ly >= (u_int)m->statusat) ly = m->statusat - 1; - wp_x = wp_y = NULL; - TAILQ_FOREACH(loop, &wl->window->panes, entry) { - if (!window_pane_visible(loop)) - continue; - - sx = loop->xoff; - if (sx != 0) - sx--; - ex = loop->xoff + loop->sx; - - sy = loop->yoff; - if (sy != 0) - sy--; - ey = loop->yoff + loop->sy; - - if ((lx == sx || lx == ex) && - (ly >= sy && ly <= ey) && - (wp_x == NULL || loop->sy > wp_x->sy)) - wp_x = loop; - if ((ly == sy || ly == ey) && - (lx >= sx && lx <= ex) && - (wp_y == NULL || loop->sx > wp_y->sx)) - wp_y = loop; - } - if (wp_x == NULL && wp_y == NULL) { - c->tty.mouse_drag_update = NULL; + lc = layout_search_by_border(w->layout_root, lx, ly); + if (lc == NULL) return; - } - if (wp_x != NULL) - layout_resize_pane(wp_x, LAYOUT_LEFTRIGHT, x - lx, 0); - if (wp_y != NULL) - layout_resize_pane(wp_y, LAYOUT_TOPBOTTOM, y - ly, 0); - server_redraw_window(wl->window); + + if (y != ly && lc->parent->type == LAYOUT_TOPBOTTOM) + layout_resize_layout(w, lc, LAYOUT_TOPBOTTOM, y - ly, 0); + else if (x != lx && lc->parent->type == LAYOUT_LEFTRIGHT) + layout_resize_layout(w, lc, LAYOUT_LEFTRIGHT, x - lx, 0); + else + return; + + server_redraw_window(w); } diff --git a/layout.c b/layout.c index bab9586826..e1112ffa2b 100644 --- a/layout.c +++ b/layout.c @@ -127,6 +127,42 @@ layout_print_cell(struct layout_cell *lc, const char *hdr, u_int n) } } +struct layout_cell * +layout_search_by_border(struct layout_cell *lc, u_int x, u_int y) +{ + struct layout_cell *lcchild, *last = NULL; + + TAILQ_FOREACH(lcchild, &lc->cells, entry) { + if (x >= lcchild->xoff && x < lcchild->xoff + lcchild->sx && + y >= lcchild->yoff && y < lcchild->yoff + lcchild->sy) { + /* Inside the cell - recurse. */ + return (layout_search_by_border(lcchild, x, y)); + } + + if (last == NULL) { + last = lcchild; + continue; + } + + switch (lc->type) { + case LAYOUT_LEFTRIGHT: + if (x < lcchild->xoff && x >= last->xoff + last->sx) + return (last); + break; + case LAYOUT_TOPBOTTOM: + if (y < lcchild->yoff && y >= last->yoff + last->sy) + return (last); + break; + case LAYOUT_WINDOWPANE: + break; + } + + last = lcchild; + } + + return (NULL); +} + void layout_set_size(struct layout_cell *lc, u_int sx, u_int sy, u_int xoff, u_int yoff) @@ -550,14 +586,40 @@ layout_resize_pane_to(struct window_pane *wp, enum layout_type type, layout_resize_pane(wp, type, change, 1); } +void +layout_resize_layout(struct window *w, struct layout_cell *lc, + enum layout_type type, int change, int opposite) +{ + int needed, size; + + /* Grow or shrink the cell. */ + needed = change; + while (needed != 0) { + if (change > 0) { + size = layout_resize_pane_grow(w, lc, type, needed, + opposite); + needed -= size; + } else { + size = layout_resize_pane_shrink(w, lc, type, needed); + needed += size; + } + + if (size == 0) /* no more change possible */ + break; + } + + /* Fix cell offsets. */ + layout_fix_offsets(w->layout_root); + layout_fix_panes(w, w->sx, w->sy); + notify_window("window-layout-changed", w); +} + /* Resize a single pane within the layout. */ void layout_resize_pane(struct window_pane *wp, enum layout_type type, int change, int opposite) { - struct window *w = wp->window; struct layout_cell *lc, *lcparent; - int needed, size; lc = wp->layout_cell; @@ -574,26 +636,7 @@ layout_resize_pane(struct window_pane *wp, enum layout_type type, int change, if (lc == TAILQ_LAST(&lcparent->cells, layout_cells)) lc = TAILQ_PREV(lc, layout_cells, entry); - /* Grow or shrink the cell. */ - needed = change; - while (needed != 0) { - if (change > 0) { - size = layout_resize_pane_grow(w, lc, type, needed, - opposite); - needed -= size; - } else { - size = layout_resize_pane_shrink(w, lc, type, needed); - needed += size; - } - - if (size == 0) /* no more change possible */ - break; - } - - /* Fix cell offsets. */ - layout_fix_offsets(wp->window->layout_root); - layout_fix_panes(wp->window, wp->window->sx, wp->window->sy); - notify_window("window-layout-changed", wp->window); + layout_resize_layout(wp->window, lc, type, change, opposite); } /* Helper function to grow pane. */ diff --git a/tmux.h b/tmux.h index d46dca2ef8..d6e4ae0bd7 100644 --- a/tmux.h +++ b/tmux.h @@ -2203,6 +2203,9 @@ void layout_free_cell(struct layout_cell *); void layout_print_cell(struct layout_cell *, const char *, u_int); void layout_destroy_cell(struct window *, struct layout_cell *, struct layout_cell **); +void layout_resize_layout(struct window *, struct layout_cell *, + enum layout_type, int, int); +struct layout_cell *layout_search_by_border(struct layout_cell *, u_int, u_int); void layout_set_size(struct layout_cell *, u_int, u_int, u_int, u_int); void layout_make_leaf(struct layout_cell *, struct window_pane *); From e6cbeb4f38d5e38df1b6b9b46145c9a2b7dd11a1 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 9 Jun 2018 17:05:52 +0000 Subject: [PATCH 136/836] Make it possible to resize multiple panes by dragging corners, from Dan Aloni in GitHub issue 1376. --- cmd-resize-pane.c | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index cfde83b322..7e4c58cfef 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -131,7 +131,12 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) struct winlink *wl; struct window *w; u_int y, ly, x, lx; - struct layout_cell *lc; + struct layout_cell *cells[5], *lc; + u_int ncells = 0, i, j, resizes = 0; + enum layout_type type; + static const int offsets[nitems(cells)][2] = { + { 0, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 }, + }; wl = cmd_mouse_window(m, NULL); if (wl == NULL) { @@ -151,16 +156,37 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) else if (m->statusat > 0 && ly >= (u_int)m->statusat) ly = m->statusat - 1; - lc = layout_search_by_border(w->layout_root, lx, ly); - if (lc == NULL) - return; + for (i = 0; i < nitems(cells); i++) { + lc = layout_search_by_border(w->layout_root, lx + offsets[i][0], + ly + offsets[i][1]); + if (lc == NULL) + continue; + + for (j = 0; j < ncells; j++) { + if (cells[j] == lc) { + lc = NULL; + break; + } + } + if (lc == NULL) + continue; - if (y != ly && lc->parent->type == LAYOUT_TOPBOTTOM) - layout_resize_layout(w, lc, LAYOUT_TOPBOTTOM, y - ly, 0); - else if (x != lx && lc->parent->type == LAYOUT_LEFTRIGHT) - layout_resize_layout(w, lc, LAYOUT_LEFTRIGHT, x - lx, 0); - else + cells[ncells] = lc; + ncells++; + } + if (ncells == 0) return; - server_redraw_window(w); + for (i = 0; i < ncells; i++) { + type = cells[i]->parent->type; + if (y != ly && type == LAYOUT_TOPBOTTOM) { + layout_resize_layout(w, cells[i], type, y - ly, 0); + resizes++; + } else if (x != lx && type == LAYOUT_LEFTRIGHT) { + layout_resize_layout(w, cells[i], type, x - lx, 0); + resizes++; + } + } + if (resizes != 0) + server_redraw_window(w); } From d0c992306d4a01804d3649648f8a1ef59cdda351 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 11 Jun 2018 11:14:10 +0000 Subject: [PATCH 137/836] Fix some compiler warnings; from Thomas Adam. --- grid.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grid.c b/grid.c index c88a451b63..e71cc08ab0 100644 --- a/grid.c +++ b/grid.c @@ -984,9 +984,9 @@ static void grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, u_int width, u_int *cy, int already) { - struct grid_line *gl, *from; + struct grid_line *gl, *from = NULL; struct grid_cell gc; - u_int lines, want, left, i, to, line; + u_int lines, left, i, to, line, want = 0; u_int at; int wrapped = 1; From dec6ec9e29033cb4739b9eec5f3a5c68dece878a Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 24 Jun 2018 21:24:09 +0000 Subject: [PATCH 138/836] Minor cosmetic improvement from KOIE Hidetaka. --- cmd-resize-pane.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 7e4c58cfef..6b991aa623 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -131,12 +131,12 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) struct winlink *wl; struct window *w; u_int y, ly, x, lx; - struct layout_cell *cells[5], *lc; - u_int ncells = 0, i, j, resizes = 0; - enum layout_type type; - static const int offsets[nitems(cells)][2] = { + static const int offsets[][2] = { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 }, }; + struct layout_cell *cells[nitems(offsets)], *lc; + u_int ncells = 0, i, j, resizes = 0; + enum layout_type type; wl = cmd_mouse_window(m, NULL); if (wl == NULL) { From 0c94c3fbee3df39293de8b7fd957392251113a74 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Jun 2018 17:23:16 +0000 Subject: [PATCH 139/836] If there are only two panes, always use the other pane as the last pane. Based on a change from Duy Nguyen in GitHub issue 1377. --- cmd-select-pane.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 790a1a5bdd..a2345fe161 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -69,6 +69,11 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) { lastwp = w->last; + if (lastwp == NULL && window_count_panes(w) == 2) { + lastwp = TAILQ_PREV(w->active, window_panes, entry); + if (lastwp == NULL) + lastwp = TAILQ_NEXT(w->active, entry); + } if (lastwp == NULL) { cmdq_error(item, "no last pane"); return (CMD_RETURN_ERROR); From 8fb6666f1733ebd4dcb90ba01dbcfc750190c9df Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 26 Jun 2018 11:14:05 +0000 Subject: [PATCH 140/836] Do not take address of a member of a NULL pointer. GitHub issue 1382 from Kamil Rytarowski. --- window-copy.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/window-copy.c b/window-copy.c index 090254973b..7bb7c7fbfc 100644 --- a/window-copy.c +++ b/window-copy.c @@ -2438,12 +2438,11 @@ void window_copy_add_formats(struct window_pane *wp, struct format_tree *ft) { struct window_copy_mode_data *data = wp->modedata; - struct screen *s = &data->screen; if (wp->mode != &window_copy_mode) return; - format_add(ft, "selection_present", "%d", s->sel.flag); + format_add(ft, "selection_present", "%d", data->screen.sel.flag); format_add(ft, "scroll_position", "%d", data->oy); } From 97738921cda24dd9444f4f94c0fef8a2d2ddec22 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 26 Jun 2018 13:21:28 +0000 Subject: [PATCH 141/836] Style nit. --- cmd-find.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index da4fe1e520..cb0c411ba8 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -919,8 +919,7 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) cmd_find_log_state(__func__, fs); return (0); - } - else { + } else { log_debug("%s: session $%u does not have pane %%%u", __func__, s->id, wp->id); } From a14aa788d4e8b1155107a2b82bf60177b0c8e3bb Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 27 Jun 2018 17:36:10 +0000 Subject: [PATCH 142/836] Allow any punctuation (except :) as separator in s/x/y/, not only /. From JINNOUCHI Yasushi in GitHub issue 1386. --- format.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/format.c b/format.c index b8aa16060c..986b27e31b 100644 --- a/format.c +++ b/format.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -891,7 +892,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { struct window_pane *wp = ft->wp; - char *copy, *copy0, *endptr, *ptr, *found, *new; + char *copy, *copy0, *endptr, *ptr, *found, *new, sep; char *value, *from = NULL, *to = NULL, *left, *right; size_t valuelen, newlen, fromlen, tolen, used; long limit = 0; @@ -975,20 +976,21 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, copy += 2; break; case 's': - if (copy[1] != '/') + sep = copy[1]; + if (sep == ':' || !ispunct((u_char)sep)) break; from = copy + 2; - for (copy = from; *copy != '\0' && *copy != '/'; copy++) + for (copy = from; *copy != '\0' && *copy != sep; copy++) /* nothing */; - if (copy[0] != '/' || copy == from) { + if (copy[0] != sep || copy == from) { copy = copy0; break; } copy[0] = '\0'; to = copy + 1; - for (copy = to; *copy != '\0' && *copy != '/'; copy++) + for (copy = to; *copy != '\0' && *copy != sep; copy++) /* nothing */; - if (copy[0] != '/' || copy[1] != ':') { + if (copy[0] != sep || copy[1] != ':') { copy = copy0; break; } From ffebf005854b6308485fd375944995730e146be4 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 2 Jul 2018 13:36:44 +0100 Subject: [PATCH 143/836] Solaris 11.4 and later prefers mdoc, from Alan Coopersmith. --- configure.ac | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f6ed390eb2..5b4bc4a2fe 100644 --- a/configure.ac +++ b/configure.ac @@ -610,7 +610,16 @@ case "$host_os" in *solaris*) AC_MSG_RESULT(sunos) PLATFORM=sunos - MANFORMAT=man + case `/usr/bin/nroff --version 2>&1` in + *GNU*) + # Solaris 11.4 and later use GNU groff. + MANFORMAT=mdoc + ;; + *) + # Solaris 2.0 to 11.3 use AT&T nroff. + MANFORMAT=man + ;; + esac ;; *hpux*) AC_MSG_RESULT(hpux) From 42935bde71df2bc4ae765a27571f5dadff542e70 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 2 Jul 2018 12:39:14 +0000 Subject: [PATCH 144/836] Fire notify for select-layout, from George Nachman. --- cmd-select-layout.c | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-select-layout.c b/cmd-select-layout.c index 28737c181c..d8fc1aebfa 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -136,6 +136,7 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) changed: free(oldlayout); server_redraw_window(w); + notify_window("window-layout-changed", w); return (CMD_RETURN_NORMAL); error: From 2fae6a57618e1cef47b65e73504d7d5570ca6a8e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 4 Jul 2018 09:44:07 +0000 Subject: [PATCH 145/836] Add accessors for grid linedata member, for some future work. From Dan Aloni. --- format.c | 4 ++-- grid-view.c | 2 +- grid.c | 12 ++++++++++++ screen-write.c | 12 ++++++------ screen.c | 7 +++---- tmux.h | 2 ++ tty.c | 9 ++++++--- window-copy.c | 19 +++++++++++-------- 8 files changed, 43 insertions(+), 24 deletions(-) diff --git a/format.c b/format.c index 986b27e31b..0ad8f836ab 100644 --- a/format.c +++ b/format.c @@ -548,11 +548,11 @@ format_cb_history_bytes(struct format_tree *ft, struct format_entry *fe) size = 0; for (i = 0; i < gd->hsize; i++) { - gl = &gd->linedata[i]; + gl = grid_get_line(gd, i); size += gl->cellsize * sizeof *gl->celldata; size += gl->extdsize * sizeof *gl->extddata; } - size += gd->hsize * sizeof *gd->linedata; + size += gd->hsize * sizeof *gl; xasprintf(&fe->value, "%llu", size); } diff --git a/grid-view.c b/grid-view.c index 1bb773178f..a4bd5ba2fc 100644 --- a/grid-view.c +++ b/grid-view.c @@ -64,7 +64,7 @@ grid_view_clear_history(struct grid *gd, u_int bg) /* Find the last used line. */ last = 0; for (yy = 0; yy < gd->sy; yy++) { - gl = &gd->linedata[grid_view_y(gd, yy)]; + gl = grid_get_line(gd, grid_view_y(gd, yy)); if (gl->cellused != 0) last = yy + 1; } diff --git a/grid.c b/grid.c index e71cc08ab0..df7b2f659a 100644 --- a/grid.c +++ b/grid.c @@ -145,6 +145,18 @@ grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce, return (gcp); } +struct grid_line * +grid_get_line(struct grid *gd, u_int line) +{ + return (&gd->linedata[line]); +} + +void +grid_adjust_lines(struct grid *gd, u_int lines) +{ + gd->linedata = xreallocarray(gd->linedata, lines, sizeof *gd->linedata); +} + /* Copy default into a cell. */ static void grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) diff --git a/screen-write.c b/screen-write.c index 75080d8b53..842d27cfa9 100644 --- a/screen-write.c +++ b/screen-write.c @@ -408,7 +408,7 @@ screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, break; cx = s->cx; for (xx = px; xx < px + nx; xx++) { - if (xx >= gd->linedata[yy].cellsize) + if (xx >= grid_get_line(gd, yy)->cellsize) break; grid_get_cell(gd, xx, yy, &gc); if (xx + gc.data.width > px + nx) @@ -694,7 +694,7 @@ screen_write_backspace(struct screen_write_ctx *ctx) if (s->cx == 0) { if (s->cy == 0) return; - gl = &s->grid->linedata[s->grid->hsize + s->cy - 1]; + gl = grid_get_line(s->grid, s->grid->hsize + s->cy - 1); if (gl->flags & GRID_LINE_WRAPPED) { s->cy--; s->cx = screen_size_x(s) - 1; @@ -917,7 +917,7 @@ screen_write_clearline(struct screen_write_ctx *ctx, u_int bg) struct tty_ctx ttyctx; u_int sx = screen_size_x(s); - gl = &s->grid->linedata[s->grid->hsize + s->cy]; + gl = grid_get_line(s->grid, s->grid->hsize + s->cy); if (gl->cellsize == 0 && bg == 8) return; @@ -940,7 +940,7 @@ screen_write_clearendofline(struct screen_write_ctx *ctx, u_int bg) struct tty_ctx ttyctx; u_int sx = screen_size_x(s); - gl = &s->grid->linedata[s->grid->hsize + s->cy]; + gl = grid_get_line(s->grid, s->grid->hsize + s->cy); if (s->cx > sx - 1 || (s->cx >= gl->cellsize && bg == 8)) return; @@ -1043,7 +1043,7 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped, u_int bg) struct grid *gd = s->grid; struct grid_line *gl; - gl = &gd->linedata[gd->hsize + s->cy]; + gl = grid_get_line(gd, gd->hsize + s->cy); if (wrapped) gl->flags |= GRID_LINE_WRAPPED; else @@ -1433,7 +1433,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) screen_write_initctx(ctx, &ttyctx); /* Handle overwriting of UTF-8 characters. */ - gl = &s->grid->linedata[s->grid->hsize + s->cy]; + gl = grid_get_line(s->grid, s->grid->hsize + s->cy); if (gl->flags & GRID_LINE_EXTENDED) { grid_view_get_cell(gd, s->cx, s->cy, &now_gc); if (screen_write_overwrite(ctx, &now_gc, width)) diff --git a/screen.c b/screen.c index 20616915cd..d2cf07246a 100644 --- a/screen.c +++ b/screen.c @@ -281,9 +281,8 @@ screen_resize_y(struct screen *s, u_int sy) s->cy -= needed; } - /* Resize line arrays. */ - gd->linedata = xreallocarray(gd->linedata, gd->hsize + sy, - sizeof *gd->linedata); + /* Resize line array. */ + grid_adjust_lines(gd, gd->hsize + sy); /* Size increasing. */ if (sy > oldy) { @@ -306,7 +305,7 @@ screen_resize_y(struct screen *s, u_int sy) /* Then fill the rest in with blanks. */ for (i = gd->hsize + sy - needed; i < gd->hsize + sy; i++) - memset(&gd->linedata[i], 0, sizeof gd->linedata[i]); + memset(grid_get_line(gd, i), 0, sizeof(struct grid_line)); } /* Set the new size, and reset the scroll region. */ diff --git a/tmux.h b/tmux.h index d6e4ae0bd7..7d3171c103 100644 --- a/tmux.h +++ b/tmux.h @@ -2006,6 +2006,8 @@ char *grid_string_cells(struct grid *, u_int, u_int, u_int, void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, u_int); void grid_reflow(struct grid *, u_int, u_int *); +struct grid_line *grid_get_line(struct grid *, u_int); +void grid_adjust_lines(struct grid *, u_int); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); diff --git a/tty.c b/tty.c index e8ab471480..4d54353766 100644 --- a/tty.c +++ b/tty.c @@ -913,6 +913,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, int flags, cleared = 0; char buf[512]; size_t len, old_len; + u_int cellsize; flags = (tty->flags & TTY_NOCURSOR); tty->flags |= TTY_NOCURSOR; @@ -926,15 +927,17 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, * there may be empty background cells after it (from BCE). */ sx = screen_size_x(s); - if (sx > gd->linedata[gd->hsize + py].cellsize) - sx = gd->linedata[gd->hsize + py].cellsize; + + cellsize = grid_get_line(gd, gd->hsize + py)->cellsize; + if (sx > cellsize) + sx = cellsize; if (sx > tty->sx) sx = tty->sx; ux = 0; if (wp == NULL || py == 0 || - (~gd->linedata[gd->hsize + py - 1].flags & GRID_LINE_WRAPPED) || + (~grid_get_line(gd, gd->hsize + py - 1)->flags & GRID_LINE_WRAPPED) || ox != 0 || tty->cx < tty->sx || screen_size_x(s) < tty->sx) { diff --git a/window-copy.c b/window-copy.c index 7bb7c7fbfc..93e7dc69b2 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1755,7 +1755,7 @@ window_copy_copy_line(struct window_pane *wp, char **buf, size_t *off, u_int sy, * Work out if the line was wrapped at the screen edge and all of it is * on screen. */ - gl = &gd->linedata[sy]; + gl = grid_get_line(gd, sy); if (gl->flags & GRID_LINE_WRAPPED && gl->cellsize <= gd->sx) wrapped = 1; @@ -1843,7 +1843,7 @@ window_copy_find_length(struct window_pane *wp, u_int py) * width of the grid, and screen_write_copy treats them as spaces, so * ignore them here too. */ - px = s->grid->linedata[py].cellsize; + px = grid_get_line(s->grid, py)->cellsize; if (px > screen_size_x(s)) px = screen_size_x(s); while (px > 0) { @@ -1867,7 +1867,7 @@ window_copy_cursor_start_of_line(struct window_pane *wp) if (data->cx == 0 && s->sel.lineflag == LINE_SEL_NONE) { py = screen_hsize(back_s) + data->cy - data->oy; while (py > 0 && - gd->linedata[py-1].flags & GRID_LINE_WRAPPED) { + grid_get_line(gd, py - 1)->flags & GRID_LINE_WRAPPED) { window_copy_cursor_up(wp, 0); py = screen_hsize(back_s) + data->cy - data->oy; } @@ -1907,6 +1907,7 @@ window_copy_cursor_end_of_line(struct window_pane *wp) struct screen *back_s = data->backing; struct screen *s = &data->screen; struct grid *gd = back_s->grid; + struct grid_line *gl; u_int px, py; py = screen_hsize(back_s) + data->cy - data->oy; @@ -1915,12 +1916,14 @@ window_copy_cursor_end_of_line(struct window_pane *wp) if (data->cx == px && s->sel.lineflag == LINE_SEL_NONE) { if (data->screen.sel.flag && data->rectflag) px = screen_size_x(back_s); - if (gd->linedata[py].flags & GRID_LINE_WRAPPED) { - while (py < gd->sy + gd->hsize && - gd->linedata[py].flags & GRID_LINE_WRAPPED) { + gl = grid_get_line(gd, py); + if (gl->flags & GRID_LINE_WRAPPED) { + while (py < gd->sy + gd->hsize) { + gl = grid_get_line(gd, py); + if (~gl->flags & GRID_LINE_WRAPPED) + break; window_copy_cursor_down(wp, 0); - py = screen_hsize(back_s) - + data->cy - data->oy; + py = screen_hsize(back_s) + data->cy - data->oy; } px = window_copy_find_length(wp, py); } From db07f338863eea6a8eda2b0efafb7e2b2500e14e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 4 Jul 2018 10:46:26 +0100 Subject: [PATCH 146/836] Japanese README from Kohei Takada. --- README.ja | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 README.ja diff --git a/README.ja b/README.ja new file mode 100644 index 0000000000..1580df5268 --- /dev/null +++ b/README.ja @@ -0,0 +1,62 @@ +tmuxへようこそ! + +tmuxはターミナルマルチプレクサーです。複数のターミナルを一つのスクリーン内に作成し、操作することができます。 +バックグラウンドで処理を実行中に一度スクリーンから離れて後から復帰することも可能です。 + +OpenBSD、FreeBSD、NetBSD、Linux、OS X、Solarisで実行できます。 + +tmuxはlibevent 2.x.に依存します。 下記からダウンロードしてください。 + + http://libevent.org + +また、ncursesも必要です。こちらからどうぞ。 + + http://invisible-island.net/ncurses/ + +tarballでのtmuxのビルドとインストール方法。 + + $ ./configure && make + $ sudo make install + +tmuxはutmp(5)をアップデートするためにutempterを使うことができます。もしインストール済みであればオプション「--enable-utempter」をつけて実行してください。 + +リポジトリから最新バージョンを手に入れるためには下記を実行。 + + $ git clone https://github.com/tmux/tmux.git + $ cd tmux + $ sh autogen.sh + $ ./configure && make + +(ビルドのためにはlibevent、ncurses libraries、headersに加えて、C compiler、make、autoconf、automake、pkg-configが必要です。) + +詳しい情報はhttp://git-scm.comをご覧ください。修正はメール宛、もしくはhttps://github.com/tmux/tmux/issuesにて受け付けています。 + +tmuxのドキュメントについてはtmux.1マニュアルをご覧ください。こちらのコマンドで参照可能です。 + + $ nroff -mdoc tmux.1|less + +サンプル設定は本リポジトリのexample_tmux.confに +また、bash-completionファイルは下記にあります。 + + https://github.com/imomaliev/tmux-bash-completion + +「-v」や「-vv」を指定することでデバッグモードでの起動が可能です。カレントディレクトリにサーバーやクライアントのログファイルが生成されます。 + +議論やバグレポート用のメーリングリストにはこちらから参加可能です。 + + https://groups.google.com/forum/#!forum/tmux-users + +gitコミットについての連絡先 + + https://groups.google.com/forum/#!forum/tmux-git + +購読はまでメールをお願いします。 + +バグレポートや機能追加(特にコードへの貢献)は大歓迎です。こちらにご連絡ください。 + + tmux-users@googlegroups.com + +本ファイル、CHANGES、 FAQ、SYNCINGそしてTODOはISC licenseで保護されています。 +その他のファイルのライセンスや著作権については、ファイルの上部に明記されています。 + +-- Nicholas Marriott From d254293a6d406db4b1d1d4cac36cd4225fa0d8a7 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 4 Jul 2018 12:25:26 +0000 Subject: [PATCH 147/836] Add pane focus hooks. --- server-client.c | 18 ++++++++++-------- tmux.1 | 8 ++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/server-client.c b/server-client.c index 6a94bb569a..cec305f037 100644 --- a/server-client.c +++ b/server-client.c @@ -1148,10 +1148,6 @@ server_client_check_focus(struct window_pane *wp) push = wp->flags & PANE_FOCUSPUSH; wp->flags &= ~PANE_FOCUSPUSH; - /* If we don't care about focus, forget it. */ - if (!(wp->base.mode & MODE_FOCUSON)) - return; - /* If we're not the active pane in our window, we're not focused. */ if (wp->window->active != wp) goto not_focused; @@ -1175,14 +1171,20 @@ server_client_check_focus(struct window_pane *wp) } not_focused: - if (push || (wp->flags & PANE_FOCUSED)) - bufferevent_write(wp->event, "\033[O", 3); + if (push || (wp->flags & PANE_FOCUSED)) { + if (wp->base.mode & MODE_FOCUSON) + bufferevent_write(wp->event, "\033[O", 3); + notify_pane("pane-focus-out", wp); + } wp->flags &= ~PANE_FOCUSED; return; focused: - if (push || !(wp->flags & PANE_FOCUSED)) - bufferevent_write(wp->event, "\033[I", 3); + if (push || !(wp->flags & PANE_FOCUSED)) { + if (wp->base.mode & MODE_FOCUSON) + bufferevent_write(wp->event, "\033[I", 3); + notify_pane("pane-focus-in", wp); + } wp->flags |= PANE_FOCUSED; } diff --git a/tmux.1 b/tmux.1 index 329279fd86..303a4a30d4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3423,6 +3423,14 @@ Run when the program running in a pane exits, but is on so the pane has not closed. .It pane-exited Run when the program running in a pane exits. +.It pane-focus-in +Run when the focus enters a pane, if the +.Ic focus-events +option is on. +.It pane-focus-out +Run when the focus exits a pane, if the +.Ic focus-events +option is on. .It pane-set-clipboard Run when the terminal clipboard is set using the .Xr xterm 1 From cc743dc296f9f8b5505ee217f15748f8d7c2b343 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 4 Jul 2018 12:30:52 +0000 Subject: [PATCH 148/836] Add set-hook -R to run a hook immediately (useful to set multiple hooks to the same thing). --- cmd-set-hook.c | 19 +++++++++++-------- notify.c | 22 ++++++++++++++++++++-- tmux.1 | 12 ++++++++++-- tmux.h | 1 + 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/cmd-set-hook.c b/cmd-set-hook.c index d0cd98db5e..b04e63359d 100644 --- a/cmd-set-hook.c +++ b/cmd-set-hook.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_set_hook_entry = { .name = "set-hook", .alias = NULL, - .args = { "gt:u", 1, 2 }, - .usage = "[-gu] " CMD_TARGET_SESSION_USAGE " hook-name [command]", + .args = { "gRt:u", 1, 2 }, + .usage = "[-gRu] " CMD_TARGET_SESSION_USAGE " hook-name [command]", .target = { 't', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, @@ -101,18 +101,21 @@ cmd_set_hook_exec(struct cmd *self, struct cmdq_item *item) else cmd = args->argv[1]; + if (cmd != NULL && (args_has(args, 'R') || args_has(args, 'u'))) { + cmdq_error(item, "no command allowed"); + return (CMD_RETURN_ERROR); + } + if (args_has(args, 'R')) { + notify_hook(item, name); + return (CMD_RETURN_NORMAL); + } if (args_has(args, 'u')) { - if (cmd != NULL) { - cmdq_error(item, "command passed to unset hook: %s", - name); - return (CMD_RETURN_ERROR); - } hooks_remove(hooks, name); return (CMD_RETURN_NORMAL); } if (cmd == NULL) { - cmdq_error(item, "no command to set hook: %s", name); + cmdq_error(item, "no command given"); return (CMD_RETURN_ERROR); } cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); diff --git a/notify.c b/notify.c index 0dc8c5cf2e..96c0e5901c 100644 --- a/notify.c +++ b/notify.c @@ -36,7 +36,7 @@ struct notify_entry { }; static void -notify_hook(struct cmdq_item *item, struct notify_entry *ne) +notify_hook1(struct cmdq_item *item, struct notify_entry *ne) { struct cmd_find_state fs; struct hook *hook; @@ -102,7 +102,7 @@ notify_callback(struct cmdq_item *item, void *data) if (strcmp(ne->name, "session-window-changed") == 0) control_notify_session_window_changed(ne->session); - notify_hook(item, ne); + notify_hook1(item, ne); if (ne->client != NULL) server_client_unref(ne->client); @@ -154,6 +154,24 @@ notify_add(const char *name, struct cmd_find_state *fs, struct client *c, cmdq_append(NULL, new_item); } +void +notify_hook(struct cmdq_item *item, const char *name) +{ + struct notify_entry ne; + + memset(&ne, 0, sizeof ne); + + ne.name = name; + cmd_find_copy_state(&ne.fs, &item->target); + + ne.client = item->client; + ne.session = item->target.s; + ne.window = item->target.w; + ne.pane = item->target.wp->id; + + notify_hook1(item, &ne); +} + void notify_input(struct window_pane *wp, struct evbuffer *input) { diff --git a/tmux.1 b/tmux.1 index 303a4a30d4..3b7bda34f4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3452,12 +3452,14 @@ Run when a window is unlinked from a session. Hooks are managed with these commands: .Bl -tag -width Ds .It Xo Ic set-hook -.Op Fl gu +.Op Fl gRu .Op Fl t Ar target-session .Ar hook-name .Ar command .Xc -Sets (or with +Without +.Fl R, +sets (or with .Fl u unsets) hook .Ar hook-name @@ -3473,6 +3475,12 @@ hooks (for with .Fl t ) . Like options, session hooks inherit from the global ones. +.Pp +With +.Fl R , +run +.Ar hook-name +immediately. .It Xo Ic show-hooks .Op Fl g .Op Fl t Ar target-session diff --git a/tmux.h b/tmux.h index 7d3171c103..aaafd2e72f 100644 --- a/tmux.h +++ b/tmux.h @@ -1594,6 +1594,7 @@ void printflike(4, 5) hooks_insert(struct hooks *, struct cmdq_item *, struct cmd_find_state *, const char *, ...); /* notify.c */ +void notify_hook(struct cmdq_item *, const char *); void notify_input(struct window_pane *, struct evbuffer *); void notify_client(const char *, struct client *); void notify_session(const char *, struct session *); From 5c0ce192ed313c988f7d67e4911ef602a894cea0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 4 Jul 2018 13:45:30 +0100 Subject: [PATCH 149/836] +README.ja. --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 4951a00e3c..a57baa4297 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,7 +6,7 @@ CLEANFILES = tmux.1.mdoc tmux.1.man # Distribution tarball options. EXTRA_DIST = \ - CHANGES README COPYING example_tmux.conf compat/*.[ch] \ + CHANGES README README.ja COPYING example_tmux.conf compat/*.[ch] \ osdep-*.c mdoc2man.awk tmux.1 # Preprocessor flags. From 98c4291df2201271a0d70fc141cfaf744021ff35 Mon Sep 17 00:00:00 2001 From: jmc Date: Wed, 4 Jul 2018 13:27:32 +0000 Subject: [PATCH 150/836] whitespace needed between macro args and punctuation; --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 3b7bda34f4..9dd2065eca 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3458,7 +3458,7 @@ Hooks are managed with these commands: .Ar command .Xc Without -.Fl R, +.Fl R , sets (or with .Fl u unsets) hook From 28a5bc8faeb2866ae8db29d05783326871a9938b Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 6 Jul 2018 07:11:23 +0000 Subject: [PATCH 151/836] Add a rectangle_toggle format, from Hirokazu Hata. --- tmux.1 | 1 + window-copy.c | 1 + 2 files changed, 2 insertions(+) diff --git a/tmux.1 b/tmux.1 index 9dd2065eca..7cb880ed4a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3781,6 +3781,7 @@ The following variables are available, where appropriate: .It Li "pane_tty" Ta "" Ta "Pseudo terminal of pane" .It Li "pane_width" Ta "" Ta "Width of pane" .It Li "pid" Ta "" Ta "Server PID" +.It Li "rectangle_toggle" Ta "" Ta "1 if rectangle selection is activated" .It Li "scroll_region_lower" Ta "" Ta "Bottom of scroll region in pane" .It Li "scroll_region_upper" Ta "" Ta "Top of scroll region in pane" .It Li "scroll_position" Ta "" Ta "Scroll position in copy mode" diff --git a/window-copy.c b/window-copy.c index 93e7dc69b2..59c7023045 100644 --- a/window-copy.c +++ b/window-copy.c @@ -2447,6 +2447,7 @@ window_copy_add_formats(struct window_pane *wp, struct format_tree *ft) format_add(ft, "selection_present", "%d", data->screen.sel.flag); format_add(ft, "scroll_position", "%d", data->oy); + format_add(ft, "rectangle_toggle", "%d", data->rectflag); } static void From 03519021b92cacfe053f13efb0e0657075215619 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Jul 2018 06:43:45 +0000 Subject: [PATCH 152/836] Add function comments. --- grid.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grid.c b/grid.c index df7b2f659a..dcbb5a48a1 100644 --- a/grid.c +++ b/grid.c @@ -145,12 +145,14 @@ grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce, return (gcp); } +/* Get line data. */ struct grid_line * grid_get_line(struct grid *gd, u_int line) { return (&gd->linedata[line]); } +/* Adjust number of lines. */ void grid_adjust_lines(struct grid *gd, u_int lines) { From e7d53020b44c33dfee9080db142e973c434ba8a5 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Jul 2018 06:51:39 +0000 Subject: [PATCH 153/836] Helper function to shorten history. --- grid.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/grid.c b/grid.c index dcbb5a48a1..dcfd95fe21 100644 --- a/grid.c +++ b/grid.c @@ -286,6 +286,15 @@ grid_compare(struct grid *ga, struct grid *gb) return (0); } +/* Trim lines from the history. */ +static void +grid_trim_history(struct grid *gd, u_int ny) +{ + grid_free_lines(gd, 0, ny); + memmove(&gd->linedata[0], &gd->linedata[ny], + (gd->hsize + gd->sy - ny) * (sizeof *gd->linedata)); +} + /* * Collect lines from the history if at the limit. Free the top (oldest) 10% * and shift up. @@ -308,9 +317,7 @@ grid_collect_history(struct grid *gd) * Free the lines from 0 to ny then move the remaining lines over * them. */ - grid_free_lines(gd, 0, ny); - memmove(&gd->linedata[0], &gd->linedata[ny], - (gd->hsize + gd->sy - ny) * (sizeof *gd->linedata)); + grid_trim_history(gd, ny); gd->hsize -= ny; if (gd->hscrolled > gd->hsize) @@ -340,9 +347,7 @@ grid_scroll_history(struct grid *gd, u_int bg) void grid_clear_history(struct grid *gd) { - grid_free_lines(gd, 0, gd->hsize); - memmove(&gd->linedata[0], &gd->linedata[gd->hsize], - gd->sy * (sizeof *gd->linedata)); + grid_trim_history(gd, gd->hsize); gd->hscrolled = 0; gd->hsize = 0; From cfc81692e64fee9b64ae72dbd978096bed435ab1 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Jul 2018 08:29:21 +0000 Subject: [PATCH 154/836] Expand formats in load-buffer and save-buffer. --- cmd-load-buffer.c | 14 ++++++++++---- cmd-save-buffer.c | 17 +++++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 74f97d1d1f..6920a21a79 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -56,11 +56,14 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct cmd_load_buffer_data *cdata; - struct client *c = item->client; + struct client *c = cmd_find_client(item, NULL, 1); + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; + struct window_pane *wp = item->target.wp; FILE *f; - const char *path, *bufname; + const char *bufname; char *pdata = NULL, *new_pdata, *cause; - char *file; + char *path, *file; size_t psize; int ch, error; @@ -68,8 +71,11 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'b')) bufname = args_get(args, 'b'); - path = args->argv[0]; + path = format_single(item, args->argv[0], c, s, wl, wp); if (strcmp(path, "-") == 0) { + free(path); + c = item->client; + cdata = xcalloc(1, sizeof *cdata); cdata->item = item; diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index be98117c69..6d5ddafd80 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -60,11 +60,13 @@ static enum cmd_retval cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct client *c = item->client; + struct client *c = cmd_find_client(item, NULL, 1); + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; + struct window_pane *wp = item->target.wp; struct paste_buffer *pb; - const char *path, *bufname, *bufdata, *start, *end; - const char *flags; - char *msg, *file; + const char *bufname, *bufdata, *start, *end, *flags; + char *msg, *path, *file; size_t size, used, msglen, bufsize; FILE *f; @@ -84,10 +86,12 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) bufdata = paste_buffer_data(pb, &bufsize); if (self->entry == &cmd_show_buffer_entry) - path = "-"; + path = xstrdup("-"); else - path = args->argv[0]; + path = format_single(item, args->argv[0], c, s, wl, wp); if (strcmp(path, "-") == 0) { + free(path); + c = item->client; if (c == NULL) { cmdq_error(item, "can't write to stdout"); return (CMD_RETURN_ERROR); @@ -118,6 +122,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) fclose(f); free(file); + free(path); return (CMD_RETURN_NORMAL); From 35985c0add4760300a339c82a9ceb4609044d84e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 11 Jul 2018 09:51:18 +0100 Subject: [PATCH 155/836] Updates to CHANGES. --- CHANGES | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGES b/CHANGES index 2c2e06a472..b89530c488 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,23 @@ CHANGES FROM 2.7 to master +* Add a rectangle_toggle format. + +* Add set-hook -R to run a hook immediately. + +* Add README.ja. + +* Allow any punctuation as separator for s/x/y not only /. + +* Improve resizing with the mouse (fix resizing the wrong pane in some + layouts, and allow resizing multiple panes at the same time). + +* Allow , and } to be escaped in formats as #, and #}. + +* Add KRB5CCNAME to update-environment. + +* Change meaning of -c to display-message so the client is used if it + matches the session given to -t. + * Fixes to : form of SGR. * Add x and X to choose-tree to kill sessions, windows or panes. From ff67ef945dd9b93b7d62ea1ec8077d86f3c57d12 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 15 Jul 2018 06:57:13 +0000 Subject: [PATCH 156/836] Fix new-window -k, GitHub issue 1403. --- cmd-new-window.c | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd-new-window.c b/cmd-new-window.c index 6a7cf0b843..5baeff6506 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -103,7 +103,6 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) else name = NULL; - wl = NULL; if (idx != -1) wl = winlink_find_by_index(&s->windows, idx); if (wl != NULL && args_has(args, 'k')) { From 0d88f8a78bc0d91ab6fa53c9109f7316bfe5ffbb Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 16 Jul 2018 08:48:22 +0000 Subject: [PATCH 157/836] Add an "Any" key to run a command if a key is pressed that is not bound in the current key table. GitHub issue 1404. --- key-string.c | 6 +++++- server-client.c | 6 +++++- tmux.h | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/key-string.c b/key-string.c index d630d7789a..45073efd6d 100644 --- a/key-string.c +++ b/key-string.c @@ -166,9 +166,11 @@ key_string_lookup_string(const char *string) enum utf8_state more; wchar_t wc; - /* Is this no key? */ + /* Is this no key or any key? */ if (strcasecmp(string, "None") == 0) return (KEYC_NONE); + if (strcasecmp(string, "Any") == 0) + return (KEYC_ANY); /* Is this a hexadecimal value? */ if (string[0] == '0' && string[1] == 'x') { @@ -251,6 +253,8 @@ key_string_lookup_key(key_code key) /* Handle special keys. */ if (key == KEYC_UNKNOWN) return ("Unknown"); + if (key == KEYC_ANY) + return ("Any"); if (key == KEYC_FOCUS_IN) return ("FocusIn"); if (key == KEYC_FOCUS_OUT) diff --git a/server-client.c b/server-client.c index cec305f037..c81edcc74d 100644 --- a/server-client.c +++ b/server-client.c @@ -907,8 +907,8 @@ server_client_handle_key(struct client *c, key_code key) * The prefix always takes precedence and forces a switch to the prefix * table, unless we are already there. */ -retry: key0 = (key & ~KEYC_XTERM); +retry: if ((key0 == (key_code)options_get_number(s->options, "prefix") || key0 == (key_code)options_get_number(s->options, "prefix2")) && strcmp(table->name, "prefix") != 0) { @@ -980,6 +980,10 @@ server_client_handle_key(struct client *c, key_code key) * switch the client back to the root table and try again. */ log_debug("not found in key table %s", table->name); + if (key0 != KEYC_ANY) { + key0 = KEYC_ANY; + goto retry; + } if (!server_client_is_default_key_table(c, table) || (c->flags & CLIENT_REPEAT)) { server_client_set_key_table(c, NULL); diff --git a/tmux.h b/tmux.h index aaafd2e72f..e71f948129 100644 --- a/tmux.h +++ b/tmux.h @@ -136,6 +136,9 @@ enum { KEYC_FOCUS_IN = KEYC_BASE, KEYC_FOCUS_OUT, + /* "Any" key, used if not found in key table. */ + KEYC_ANY, + /* Paste brackets. */ KEYC_PASTE_START, KEYC_PASTE_END, From 969af935f33b5850e64ec9f5b8f9d0acf83bb32d Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 17 Jul 2018 18:02:40 +0000 Subject: [PATCH 158/836] When a key isn't in the first table, we need to try the same key again not the any key. Also rename some labels. Fixes GitHub issue 1406 reeported by Mark Kelly. --- server-client.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/server-client.c b/server-client.c index c81edcc74d..46b90ccbfd 100644 --- a/server-client.c +++ b/server-client.c @@ -884,11 +884,11 @@ server_client_handle_key(struct client *c, key_code key) /* Forward mouse keys if disabled. */ if (KEYC_IS_MOUSE(key) && !options_get_number(s->options, "mouse")) - goto forward; + goto forward_key; /* Treat everything as a regular key when pasting is detected. */ if (!KEYC_IS_MOUSE(key) && server_client_assume_paste(s)) - goto forward; + goto forward_key; /* * Work out the current key table. If the pane is in a mode, use @@ -903,12 +903,12 @@ server_client_handle_key(struct client *c, key_code key) table = c->keytable; first = table; +table_changed: /* * The prefix always takes precedence and forces a switch to the prefix * table, unless we are already there. */ key0 = (key & ~KEYC_XTERM); -retry: if ((key0 == (key_code)options_get_number(s->options, "prefix") || key0 == (key_code)options_get_number(s->options, "prefix2")) && strcmp(table->name, "prefix") != 0) { @@ -926,6 +926,7 @@ server_client_handle_key(struct client *c, key_code key) if (c->flags & CLIENT_REPEAT) log_debug("currently repeating"); +try_again: /* Try to see if there is a key binding in the current table. */ bd_find.key = key0; bd = RB_FIND(key_bindings, &table->key_bindings, &bd_find); @@ -941,7 +942,7 @@ server_client_handle_key(struct client *c, key_code key) c->flags &= ~CLIENT_REPEAT; server_status_client(c); table = c->keytable; - goto retry; + goto table_changed; } log_debug("found in key table %s", table->name); @@ -976,21 +977,25 @@ server_client_handle_key(struct client *c, key_code key) } /* - * No match in this table. If not in the root table or if repeating, - * switch the client back to the root table and try again. + * No match, try the ANY key. */ - log_debug("not found in key table %s", table->name); if (key0 != KEYC_ANY) { key0 = KEYC_ANY; - goto retry; + goto try_again; } + + /* + * No match in this table. If not in the root table or if repeating, + * switch the client back to the root table and try again. + */ + log_debug("not found in key table %s", table->name); if (!server_client_is_default_key_table(c, table) || (c->flags & CLIENT_REPEAT)) { server_client_set_key_table(c, NULL); c->flags &= ~CLIENT_REPEAT; server_status_client(c); table = c->keytable; - goto retry; + goto table_changed; } /* @@ -1003,7 +1008,7 @@ server_client_handle_key(struct client *c, key_code key) return; } -forward: +forward_key: if (c->flags & CLIENT_READONLY) return; if (wp != NULL) From 5c78b48cdf268274d68f6f8bdad3bccf9d2dcfb9 Mon Sep 17 00:00:00 2001 From: kn Date: Mon, 23 Jul 2018 19:02:49 +0000 Subject: [PATCH 159/836] Point to glob in section 7 for the actual list of special characters instead the C API in section 3. OK millert jmc nicm, "the right idea" deraadt --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 7cb880ed4a..69e9baaa11 100644 --- a/tmux.1 +++ b/tmux.1 @@ -964,7 +964,7 @@ show debugging information about jobs and terminals. Execute commands from .Ar path (which may be a -.Xr glob 3 +.Xr glob 7 pattern). If .Fl q From b21a710de7344132fb9f770e20965a34dacd8696 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 30 Jul 2018 11:24:55 +0000 Subject: [PATCH 160/836] Remove a leftover unused struct. --- tmux.h | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/tmux.h b/tmux.h index e71f948129..76ea5a5a5e 100644 --- a/tmux.h +++ b/tmux.h @@ -735,28 +735,6 @@ struct window_mode { }; #define WINDOW_MODE_TIMEOUT 180 -/* Structures for choose mode. */ -struct window_choose_data { - struct client *start_client; - struct session *start_session; - - u_int idx; - int type; -#define TREE_OTHER 0x0 -#define TREE_WINDOW 0x1 -#define TREE_SESSION 0x2 - - struct session *tree_session; /* session of items in tree */ - - struct winlink *wl; - int pane_id; - - char *ft_template; - struct format_tree *ft; - - char *command; -}; - /* Child window structure. */ struct window_pane { u_int id; From 80bdd898560db81baa1430e0b093b896a09b542e Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 31 Jul 2018 10:32:19 +0000 Subject: [PATCH 161/836] Clear history on RIS like most other terminals do. --- input.c | 1 + 1 file changed, 1 insertion(+) diff --git a/input.c b/input.c index df8b6ec7dc..741e83d624 100644 --- a/input.c +++ b/input.c @@ -1188,6 +1188,7 @@ input_esc_dispatch(struct input_ctx *ictx) window_pane_reset_palette(ictx->wp); input_reset_cell(ictx); screen_write_reset(sctx); + screen_write_clearhistory(sctx); break; case INPUT_ESC_IND: screen_write_linefeed(sctx, 0, ictx->cell.cell.bg); From 82776c456e1ad4ba2c9466e90f51179d07a4c9c2 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 31 Jul 2018 11:49:26 +0000 Subject: [PATCH 162/836] Move struct screen_sel into screen.c and tidy up members that are only used by copy mode. --- screen-write.c | 2 +- screen.c | 64 +++++++++++++++++++------------ tmux.h | 30 ++------------- window-copy.c | 102 +++++++++++++++++++++++++++---------------------- 4 files changed, 102 insertions(+), 96 deletions(-) diff --git a/screen-write.c b/screen-write.c index 842d27cfa9..fac5229e99 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1343,7 +1343,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, collect = 0; else if (s->mode & MODE_INSERT) collect = 0; - else if (s->sel.flag) + else if (s->sel != NULL) collect = 0; if (!collect) { screen_write_collect_end(ctx); diff --git a/screen.c b/screen.c index d2cf07246a..6fbd86f476 100644 --- a/screen.c +++ b/screen.c @@ -25,6 +25,22 @@ #include "tmux.h" +/* Selected area in screen. */ +struct screen_sel { + int hidden; + int rectangle; + int modekeys; + + u_int sx; + u_int sy; + + u_int ex; + u_int ey; + + struct grid_cell cell; +}; + +/* Entry on title stack. */ struct screen_title_entry { char *text; @@ -67,6 +83,7 @@ screen_init(struct screen *s, u_int sx, u_int sy, u_int hlimit) s->cstyle = 0; s->ccolour = xstrdup(""); s->tabs = NULL; + s->sel = NULL; screen_reinit(s); } @@ -95,6 +112,7 @@ screen_reinit(struct screen *s) void screen_free(struct screen *s) { + free(s->sel); free(s->tabs); free(s->title); free(s->ccolour); @@ -317,51 +335,49 @@ screen_resize_y(struct screen *s, u_int sy) /* Set selection. */ void screen_set_selection(struct screen *s, u_int sx, u_int sy, - u_int ex, u_int ey, u_int rectflag, struct grid_cell *gc) + u_int ex, u_int ey, u_int rectangle, int modekeys, struct grid_cell *gc) { - struct screen_sel *sel = &s->sel; - - memcpy(&sel->cell, gc, sizeof sel->cell); - sel->flag = 1; - sel->hidden = 0; - - sel->rectflag = rectflag; - - sel->sx = sx; sel->sy = sy; - sel->ex = ex; sel->ey = ey; + if (s->sel == NULL) + s->sel = xcalloc(1, sizeof *s->sel); + + memcpy(&s->sel->cell, gc, sizeof s->sel->cell); + s->sel->hidden = 0; + s->sel->rectangle = rectangle; + s->sel->modekeys = modekeys; + + s->sel->sx = sx; + s->sel->sy = sy; + s->sel->ex = ex; + s->sel->ey = ey; } /* Clear selection. */ void screen_clear_selection(struct screen *s) { - struct screen_sel *sel = &s->sel; - - sel->flag = 0; - sel->hidden = 0; - sel->lineflag = LINE_SEL_NONE; + free(s->sel); + s->sel = NULL; } /* Hide selection. */ void screen_hide_selection(struct screen *s) { - struct screen_sel *sel = &s->sel; - - sel->hidden = 1; + if (s->sel != NULL) + s->sel->hidden = 1; } /* Check if cell in selection. */ int screen_check_selection(struct screen *s, u_int px, u_int py) { - struct screen_sel *sel = &s->sel; + struct screen_sel *sel = s->sel; u_int xx; - if (!sel->flag || sel->hidden) + if (sel == NULL || sel->hidden) return (0); - if (sel->rectflag) { + if (sel->rectangle) { if (sel->sy < sel->ey) { /* start line < end line -- downward selection. */ if (py < sel->sy || py > sel->ey) @@ -454,10 +470,10 @@ void screen_select_cell(struct screen *s, struct grid_cell *dst, const struct grid_cell *src) { - if (!s->sel.flag || s->sel.hidden) + if (s->sel == NULL || s->sel->hidden) return; - memcpy(dst, &s->sel.cell, sizeof *dst); + memcpy(dst, &s->sel->cell, sizeof *dst); utf8_copy(&dst->data, &src->data); dst->attr = dst->attr & ~GRID_ATTR_CHARSET; diff --git a/tmux.h b/tmux.h index 76ea5a5a5e..af3dddb976 100644 --- a/tmux.h +++ b/tmux.h @@ -644,30 +644,8 @@ struct job { }; LIST_HEAD(joblist, job); -/* Screen selection. */ -struct screen_sel { - int flag; - int hidden; - - int rectflag; - enum { - LINE_SEL_NONE, - LINE_SEL_LEFT_RIGHT, - LINE_SEL_RIGHT_LEFT, - } lineflag; - - int modekeys; - - u_int sx; - u_int sy; - - u_int ex; - u_int ey; - - struct grid_cell cell; -}; - /* Virtual screen. */ +struct screen_sel; struct screen_titles; struct screen { char *title; @@ -688,7 +666,7 @@ struct screen { bitstr_t *tabs; - struct screen_sel sel; + struct screen_sel *sel; }; /* Screen write context. */ @@ -2086,8 +2064,8 @@ void screen_set_title(struct screen *, const char *); void screen_push_title(struct screen *); void screen_pop_title(struct screen *); void screen_resize(struct screen *, u_int, u_int, int); -void screen_set_selection(struct screen *, - u_int, u_int, u_int, u_int, u_int, struct grid_cell *); +void screen_set_selection(struct screen *, u_int, u_int, u_int, u_int, + u_int, int, struct grid_cell *); void screen_clear_selection(struct screen *); void screen_hide_selection(struct screen *); int screen_check_selection(struct screen *, u_int, u_int); diff --git a/window-copy.c b/window-copy.c index 59c7023045..a36d2d48f0 100644 --- a/window-copy.c +++ b/window-copy.c @@ -65,8 +65,9 @@ static void window_copy_update_cursor(struct window_pane *, u_int, u_int); static void window_copy_start_selection(struct window_pane *); static int window_copy_adjust_selection(struct window_pane *, u_int *, u_int *); +static int window_copy_set_selection(struct window_pane *, int); static int window_copy_update_selection(struct window_pane *, int); -static void window_copy_synchronize_cursor(struct window_pane *wp); +static void window_copy_synchronize_cursor(struct window_pane *); static void *window_copy_get_selection(struct window_pane *, size_t *); static void window_copy_copy_buffer(struct window_pane *, const char *, void *, size_t); @@ -151,12 +152,12 @@ struct window_copy_mode_data { struct screen *backing; int backing_written; /* backing display started */ - u_int oy; /* number of lines scrolled up */ + u_int oy; /* number of lines scrolled up */ - u_int selx; /* beginning of selection */ + u_int selx; /* beginning of selection */ u_int sely; - u_int endselx; /* end of selection */ + u_int endselx; /* end of selection */ u_int endsely; enum { @@ -165,14 +166,20 @@ struct window_copy_mode_data { CURSORDRAG_SEL, /* start is synchronized with cursor */ } cursordrag; + int modekeys; + enum { + LINE_SEL_NONE, + LINE_SEL_LEFT_RIGHT, + LINE_SEL_RIGHT_LEFT, + } lineflag; /* line selection mode */ int rectflag; /* in rectangle copy mode? */ int scroll_exit; /* exit on scroll to end? */ u_int cx; u_int cy; - u_int lastcx; /* position in last line w/ content */ - u_int lastsx; /* size of last line w/ content */ + u_int lastcx; /* position in last line w/ content */ + u_int lastsx; /* size of last line w/ content */ int searchtype; char *searchstr; @@ -228,7 +235,7 @@ window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, s = &data->screen; screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); - s->sel.modekeys = options_get_number(wp->window->options, "mode-keys"); + data->modekeys = options_get_number(wp->window->options, "mode-keys"); data->backing = NULL; @@ -357,7 +364,7 @@ window_copy_pageup(struct window_pane *wp, int half_page) oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wp, oy); - if (s->sel.lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) + if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) window_copy_other_end(wp); if (data->cx != ox) { @@ -379,7 +386,7 @@ window_copy_pageup(struct window_pane *wp, int half_page) else data->oy += n; - if (!data->screen.sel.flag || !data->rectflag) { + if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); if ((data->cx >= data->lastsx && data->cx != px) || @@ -401,7 +408,7 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wp, oy); - if (s->sel.lineflag == LINE_SEL_RIGHT_LEFT && oy == data->sely) + if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->sely) window_copy_other_end(wp); if (data->cx != ox) { @@ -423,7 +430,7 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) else data->oy -= n; - if (!data->screen.sel.flag || !data->rectflag) { + if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); if ((data->cx >= data->lastsx && data->cx != px) || @@ -554,7 +561,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (m != NULL) window_copy_start_drag(c, m); else { - sn->sel.lineflag = LINE_SEL_NONE; + data->lineflag = LINE_SEL_NONE; window_copy_start_selection(wp); redraw = 1; } @@ -763,7 +770,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, window_copy_cursor_previous_word(wp, ws); } if (strcmp(command, "rectangle-toggle") == 0) { - sn->sel.lineflag = LINE_SEL_NONE; + data->lineflag = LINE_SEL_NONE; window_copy_rectangle_toggle(wp); } if (strcmp(command, "scroll-down") == 0 || @@ -800,7 +807,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } } if (strcmp(command, "select-line") == 0) { - sn->sel.lineflag = LINE_SEL_LEFT_RIGHT; + data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; window_copy_cursor_start_of_line(wp); window_copy_start_selection(wp); @@ -810,7 +817,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; } if (strcmp(command, "select-word") == 0) { - sn->sel.lineflag = LINE_SEL_LEFT_RIGHT; + data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; ws = options_get_string(s->options, "word-separators"); window_copy_cursor_previous_word(wp, ws); @@ -1434,7 +1441,6 @@ static void window_copy_start_selection(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; - struct screen *s = &data->screen; data->selx = data->cx; data->sely = screen_hsize(data->backing) + data->cy - data->oy; @@ -1444,8 +1450,7 @@ window_copy_start_selection(struct window_pane *wp) data->cursordrag = CURSORDRAG_ENDSEL; - s->sel.flag = 1; - window_copy_update_selection(wp, 1); + window_copy_set_selection(wp, 1); } static int @@ -1482,6 +1487,17 @@ window_copy_adjust_selection(struct window_pane *wp, u_int *selx, u_int *sely) static int window_copy_update_selection(struct window_pane *wp, int may_redraw) +{ + struct window_copy_mode_data *data = wp->modedata; + struct screen *s = &data->screen; + + if (s->sel == NULL && data->lineflag == LINE_SEL_NONE) + return (0); + return (window_copy_set_selection(wp, may_redraw)); +} + +static int +window_copy_set_selection(struct window_pane *wp, int may_redraw) { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; @@ -1490,9 +1506,6 @@ window_copy_update_selection(struct window_pane *wp, int may_redraw) u_int sx, sy, cy, endsx, endsy; int startrelpos, endrelpos; - if (!s->sel.flag && s->sel.lineflag == LINE_SEL_NONE) - return (0); - window_copy_synchronize_cursor(wp); /* Adjust the selection. */ @@ -1515,7 +1528,8 @@ window_copy_update_selection(struct window_pane *wp, int may_redraw) /* Set colours and selection. */ style_apply(&gc, oo, "mode-style"); gc.flags |= GRID_FLAG_NOPALETTE; - screen_set_selection(s, sx, sy, endsx, endsy, data->rectflag, &gc); + screen_set_selection(s, sx, sy, endsx, endsy, data->rectflag, + data->modekeys, &gc); if (data->rectflag && may_redraw) { /* @@ -1551,7 +1565,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) u_int firstsx, lastex, restex, restsx, selx; int keys; - if (!s->sel.flag && s->sel.lineflag == LINE_SEL_NONE) + if (data->screen.sel == NULL && data->lineflag == LINE_SEL_NONE) return (NULL); buf = xmalloc(1); @@ -1860,11 +1874,10 @@ window_copy_cursor_start_of_line(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; struct screen *back_s = data->backing; - struct screen *s = &data->screen; struct grid *gd = back_s->grid; u_int py; - if (data->cx == 0 && s->sel.lineflag == LINE_SEL_NONE) { + if (data->cx == 0 && data->lineflag == LINE_SEL_NONE) { py = screen_hsize(back_s) + data->cy - data->oy; while (py > 0 && grid_get_line(gd, py - 1)->flags & GRID_LINE_WRAPPED) { @@ -1905,7 +1918,6 @@ window_copy_cursor_end_of_line(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; struct screen *back_s = data->backing; - struct screen *s = &data->screen; struct grid *gd = back_s->grid; struct grid_line *gl; u_int px, py; @@ -1913,8 +1925,8 @@ window_copy_cursor_end_of_line(struct window_pane *wp) py = screen_hsize(back_s) + data->cy - data->oy; px = window_copy_find_length(wp, py); - if (data->cx == px && s->sel.lineflag == LINE_SEL_NONE) { - if (data->screen.sel.flag && data->rectflag) + if (data->cx == px && data->lineflag == LINE_SEL_NONE) { + if (data->screen.sel != NULL && data->rectflag) px = screen_size_x(back_s); gl = grid_get_line(gd, py); if (gl->flags & GRID_LINE_WRAPPED) { @@ -1941,13 +1953,13 @@ window_copy_other_end(struct window_pane *wp) struct screen *s = &data->screen; u_int selx, sely, cy, yy, hsize; - if (!s->sel.flag && s->sel.lineflag == LINE_SEL_NONE) + if (s->sel == NULL && data->lineflag == LINE_SEL_NONE) return; - if (s->sel.lineflag == LINE_SEL_LEFT_RIGHT) - s->sel.lineflag = LINE_SEL_RIGHT_LEFT; - else if (s->sel.lineflag == LINE_SEL_RIGHT_LEFT) - s->sel.lineflag = LINE_SEL_LEFT_RIGHT; + if (data->lineflag == LINE_SEL_LEFT_RIGHT) + data->lineflag = LINE_SEL_RIGHT_LEFT; + else if (data->lineflag == LINE_SEL_RIGHT_LEFT) + data->lineflag = LINE_SEL_LEFT_RIGHT; switch (data->cursordrag) { case CURSORDRAG_NONE: @@ -2019,7 +2031,7 @@ window_copy_cursor_right(struct window_pane *wp) py = screen_hsize(data->backing) + data->cy - data->oy; yy = screen_hsize(data->backing) + screen_size_y(data->backing) - 1; - if (data->screen.sel.flag && data->rectflag) + if (data->screen.sel != NULL && data->rectflag) px = screen_size_x(&data->screen); else px = window_copy_find_length(wp, py); @@ -2056,7 +2068,7 @@ window_copy_cursor_up(struct window_pane *wp, int scroll_only) data->lastsx = ox; } - if (s->sel.lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) + if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) window_copy_other_end(wp); data->cx = data->lastcx; @@ -2078,7 +2090,7 @@ window_copy_cursor_up(struct window_pane *wp, int scroll_only) } } - if (!data->screen.sel.flag || !data->rectflag) { + if (data->screen.sel != NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); if ((data->cx >= data->lastsx && data->cx != px) || @@ -2086,9 +2098,9 @@ window_copy_cursor_up(struct window_pane *wp, int scroll_only) window_copy_cursor_end_of_line(wp); } - if (s->sel.lineflag == LINE_SEL_LEFT_RIGHT) + if (data->lineflag == LINE_SEL_LEFT_RIGHT) window_copy_cursor_end_of_line(wp); - else if (s->sel.lineflag == LINE_SEL_RIGHT_LEFT) + else if (data->lineflag == LINE_SEL_RIGHT_LEFT) window_copy_cursor_start_of_line(wp); } @@ -2106,7 +2118,7 @@ window_copy_cursor_down(struct window_pane *wp, int scroll_only) data->lastsx = ox; } - if (s->sel.lineflag == LINE_SEL_RIGHT_LEFT && oy == data->endsely) + if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->endsely) window_copy_other_end(wp); data->cx = data->lastcx; @@ -2120,7 +2132,7 @@ window_copy_cursor_down(struct window_pane *wp, int scroll_only) window_copy_redraw_lines(wp, data->cy - 1, 2); } - if (!data->screen.sel.flag || !data->rectflag) { + if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); if ((data->cx >= data->lastsx && data->cx != px) || @@ -2128,9 +2140,9 @@ window_copy_cursor_down(struct window_pane *wp, int scroll_only) window_copy_cursor_end_of_line(wp); } - if (s->sel.lineflag == LINE_SEL_LEFT_RIGHT) + if (data->lineflag == LINE_SEL_LEFT_RIGHT) window_copy_cursor_end_of_line(wp); - else if (s->sel.lineflag == LINE_SEL_RIGHT_LEFT) + else if (data->lineflag == LINE_SEL_RIGHT_LEFT) window_copy_cursor_start_of_line(wp); } @@ -2401,7 +2413,7 @@ window_copy_scroll_up(struct window_pane *wp, u_int ny) window_copy_write_line(wp, &ctx, 1); if (screen_size_y(s) > 3) window_copy_write_line(wp, &ctx, screen_size_y(s) - 2); - if (s->sel.flag && screen_size_y(s) > ny) + if (s->sel != NULL && screen_size_y(s) > ny) window_copy_write_line(wp, &ctx, screen_size_y(s) - ny - 1); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); @@ -2429,7 +2441,7 @@ window_copy_scroll_down(struct window_pane *wp, u_int ny) screen_write_cursormove(&ctx, 0, 0); screen_write_insertline(&ctx, ny, 8); window_copy_write_lines(wp, &ctx, 0, ny); - if (s->sel.flag && screen_size_y(s) > ny) + if (s->sel != NULL && screen_size_y(s) > ny) window_copy_write_line(wp, &ctx, ny); else if (ny == 1) /* nuke position */ window_copy_write_line(wp, &ctx, 1); @@ -2445,7 +2457,7 @@ window_copy_add_formats(struct window_pane *wp, struct format_tree *ft) if (wp->mode != &window_copy_mode) return; - format_add(ft, "selection_present", "%d", data->screen.sel.flag); + format_add(ft, "selection_present", "%d", data->screen.sel != NULL); format_add(ft, "scroll_position", "%d", data->oy); format_add(ft, "rectangle_toggle", "%d", data->rectflag); } From 5f07da6227cecf3d66aa9f28579f48396373d9e4 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 31 Jul 2018 13:06:44 +0000 Subject: [PATCH 163/836] Do not leak path or use it after free. --- cmd-load-buffer.c | 4 +++- cmd-save-buffer.c | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 6920a21a79..b7c299b78b 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -85,7 +85,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) error = server_set_stdin_callback(c, cmd_load_buffer_callback, cdata, &cause); if (error != 0) { - cmdq_error(item, "%s: %s", path, cause); + cmdq_error(item, "-: %s", cause); free(cause); return (CMD_RETURN_ERROR); } @@ -93,6 +93,8 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) } file = server_client_get_path(c, path); + free(path); + f = fopen(file, "rb"); if (f == NULL) { cmdq_error(item, "%s: %s", file, strerror(errno)); diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index 6d5ddafd80..f6ac93a637 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -106,6 +106,8 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) flags = "ab"; file = server_client_get_path(c, path); + free(path); + f = fopen(file, flags); if (f == NULL) { cmdq_error(item, "%s: %s", file, strerror(errno)); @@ -122,7 +124,6 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) fclose(f); free(file); - free(path); return (CMD_RETURN_NORMAL); From fe7486d43bfddbaaa8dff12f9d14e13b0d254a28 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 1 Aug 2018 15:22:40 +0000 Subject: [PATCH 164/836] Initialize new lineflag member. --- window-copy.c | 1 + 1 file changed, 1 insertion(+) diff --git a/window-copy.c b/window-copy.c index a36d2d48f0..d865287a7c 100644 --- a/window-copy.c +++ b/window-copy.c @@ -214,6 +214,7 @@ window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, data->backing_written = 0; + data->lineflag = LINE_SEL_NONE; data->rectflag = 0; data->scroll_exit = 0; From 21f8ac2766012a24322c31f3d2e01514bd02fb0c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Aug 2018 07:55:16 +0000 Subject: [PATCH 165/836] Make display-panes block the client until a pane is chosen or it times out. --- cmd-display-panes.c | 29 ++++++++++++++++------------- tmux.h | 1 + 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index c124a63133..ea20caa2a1 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -55,6 +55,7 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) return (CMD_RETURN_ERROR); + s = c->session; if (c->identify_callback != NULL) return (CMD_RETURN_NORMAL); @@ -64,7 +65,7 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) c->identify_callback_data = xstrdup(args->argv[0]); else c->identify_callback_data = xstrdup("select-pane -t '%%'"); - s = c->session; + c->identify_callback_item = item; if (args_has(args, 'd')) { delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause); @@ -77,7 +78,7 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) delay = options_get_number(s->options, "display-panes-time"); server_client_set_identify(c, delay); - return (CMD_RETURN_NORMAL); + return (CMD_RETURN_WAIT); } static enum cmd_retval @@ -96,34 +97,36 @@ cmd_display_panes_callback(struct client *c, struct window_pane *wp) { struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *template, *cmd, *expanded, *cause; + char *cmd, *expanded, *cause; - template = c->identify_callback_data; if (wp == NULL) goto out; + xasprintf(&expanded, "%%%u", wp->id); - cmd = cmd_template_replace(template, expanded, 1); + cmd = cmd_template_replace(c->identify_callback_data, expanded, 1); cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) { - new_item = cmdq_get_callback(cmd_display_panes_error, - cause); - } else - new_item = NULL; - } else { + if (cmdlist == NULL && cause != NULL) + new_item = cmdq_get_callback(cmd_display_panes_error, cause); + else if (cmdlist == NULL) + new_item = NULL; + else { new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); } if (new_item != NULL) - cmdq_append(c, new_item); + cmdq_insert_after(c->identify_callback_item, new_item); free(cmd); free(expanded); out: + c->identify_callback_item->flags &= ~CMDQ_WAITING; + c->identify_callback_item = NULL; + free(c->identify_callback_data); c->identify_callback_data = NULL; + c->identify_callback = NULL; } diff --git a/tmux.h b/tmux.h index af3dddb976..61bb717c27 100644 --- a/tmux.h +++ b/tmux.h @@ -1357,6 +1357,7 @@ struct client { void (*identify_callback)(struct client *, struct window_pane *); void *identify_callback_data; + struct cmdq_item *identify_callback_item; char *message_string; struct event message_timer; From f12b8574155b12313afc63f7b6dd9baa261c9710 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Aug 2018 11:18:34 +0000 Subject: [PATCH 166/836] Minor tidying. --- tmux.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tmux.h b/tmux.h index 61bb717c27..8b0aba87e1 100644 --- a/tmux.h +++ b/tmux.h @@ -19,8 +19,6 @@ #ifndef TMUX_H #define TMUX_H -#define PROTOCOL_VERSION 8 - #include #include #include @@ -54,6 +52,9 @@ struct session; struct tmuxpeer; struct tmuxproc; +/* Client-server protocol version. */ +#define PROTOCOL_VERSION 8 + /* Default global configuration file. */ #define TMUX_CONF "/etc/tmux.conf" @@ -821,12 +822,11 @@ struct window { int flags; #define WINDOW_BELL 0x1 #define WINDOW_ACTIVITY 0x2 -/* 0x4 unused */ -#define WINDOW_SILENCE 0x8 -#define WINDOW_ZOOMED 0x1000 -#define WINDOW_FORCEWIDTH 0x2000 -#define WINDOW_FORCEHEIGHT 0x4000 -#define WINDOW_STYLECHANGED 0x8000 +#define WINDOW_SILENCE 0x4 +#define WINDOW_ZOOMED 0x8 +#define WINDOW_FORCEWIDTH 0x10 +#define WINDOW_FORCEHEIGHT 0x20 +#define WINDOW_STYLECHANGED 0x40 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) int alerts_queued; @@ -1403,7 +1403,7 @@ struct key_binding { RB_HEAD(key_bindings, key_binding); struct key_table { - const char *name; + const char *name; struct key_bindings key_bindings; u_int references; @@ -1424,6 +1424,7 @@ enum options_table_type { OPTIONS_TABLE_STYLE, OPTIONS_TABLE_ARRAY, }; + enum options_table_scope { OPTIONS_TABLE_NONE, OPTIONS_TABLE_SERVER, From 6048b0f48337b8d2359d9996a59665640278677c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Aug 2018 11:44:07 +0000 Subject: [PATCH 167/836] Make key trees and some other bits static. --- cmd-find.c | 3 ++- cmd-list-keys.c | 25 ++++++++++++++++++------ cmd-send-keys.c | 5 ++--- key-bindings.c | 51 +++++++++++++++++++++++++++++++++++++++++-------- mode-tree.c | 2 +- server-client.c | 9 +++++---- 6 files changed, 72 insertions(+), 23 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index cb0c411ba8..ff95ae1f6d 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -35,6 +35,7 @@ static int cmd_find_best_winlink_with_window(struct cmd_find_state *); static const char *cmd_find_map_table(const char *[][2], const char *); +static void cmd_find_log_state(const char *, struct cmd_find_state *); static int cmd_find_get_session(struct cmd_find_state *, const char *); static int cmd_find_get_window(struct cmd_find_state *, const char *, int); static int cmd_find_get_window_with_session(struct cmd_find_state *, @@ -716,7 +717,7 @@ cmd_find_copy_state(struct cmd_find_state *dst, struct cmd_find_state *src) } /* Log the result. */ -void +static void cmd_find_log_state(const char *prefix, struct cmd_find_state *fs) { if (fs->s != NULL) diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 9e0cac6291..5efb0cd232 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -75,10 +75,14 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) repeat = 0; tablewidth = keywidth = 0; - RB_FOREACH(table, key_tables, &key_tables) { - if (tablename != NULL && strcmp(table->name, tablename) != 0) + table = key_bindings_first_table (); + while (table != NULL) { + if (tablename != NULL && strcmp(table->name, tablename) != 0) { + table = key_bindings_next_table(table); continue; - RB_FOREACH(bd, key_bindings, &table->key_bindings) { + } + bd = key_bindings_first(table); + while (bd != NULL) { key = key_string_lookup_key(bd->key); if (bd->flags & KEY_BINDING_REPEAT) @@ -90,13 +94,20 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) width = utf8_cstrwidth(key); if (width > keywidth) keywidth = width; + + bd = key_bindings_next(table, bd); } + table = key_bindings_next_table(table); } - RB_FOREACH(table, key_tables, &key_tables) { - if (tablename != NULL && strcmp(table->name, tablename) != 0) + table = key_bindings_first_table (); + while (table != NULL) { + if (tablename != NULL && strcmp(table->name, tablename) != 0) { + table = key_bindings_next_table(table); continue; - RB_FOREACH(bd, key_bindings, &table->key_bindings) { + } + bd = key_bindings_first(table); + while (bd != NULL) { key = key_string_lookup_key(bd->key); if (!repeat) @@ -122,7 +133,9 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) free(cp); cmdq_print(item, "bind-key %s", tmp); + bd = key_bindings_next(table, bd); } + table = key_bindings_next_table(table); } return (CMD_RETURN_NORMAL); diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 8d2c26088a..6230ecf766 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -61,7 +61,7 @@ cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) struct window_pane *wp = item->target.wp; struct session *s = item->target.s; struct key_table *table; - struct key_binding *bd, bd_find; + struct key_binding *bd; if (wp->mode == NULL || wp->mode->key_table == NULL) { if (options_get_number(wp->window->options, "xterm-keys")) @@ -71,8 +71,7 @@ cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) } table = key_bindings_get_table(wp->mode->key_table(wp), 1); - bd_find.key = (key & ~KEYC_XTERM); - bd = RB_FIND(key_bindings, &table->key_bindings, &bd_find); + bd = key_bindings_get(table, key & ~KEYC_XTERM); if (bd != NULL) { table->references++; key_bindings_dispatch(bd, item, c, NULL, &item->target); diff --git a/key-bindings.c b/key-bindings.c index 83670d2d0a..41afd99c35 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -24,17 +24,19 @@ #include "tmux.h" -RB_GENERATE(key_bindings, key_binding, entry, key_bindings_cmp); -RB_GENERATE(key_tables, key_table, entry, key_table_cmp); -struct key_tables key_tables = RB_INITIALIZER(&key_tables); - -int -key_table_cmp(struct key_table *e1, struct key_table *e2) +static int key_bindings_cmp(struct key_binding *, struct key_binding *); +RB_GENERATE_STATIC(key_bindings, key_binding, entry, key_bindings_cmp); +static int key_table_cmp(struct key_table *, struct key_table *); +RB_GENERATE_STATIC(key_tables, key_table, entry, key_table_cmp); +static struct key_tables key_tables = RB_INITIALIZER(&key_tables); + +static int +key_table_cmp(struct key_table *table1, struct key_table *table2) { - return (strcmp(e1->name, e2->name)); + return (strcmp(table1->name, table2->name)); } -int +static int key_bindings_cmp(struct key_binding *bd1, struct key_binding *bd2) { if (bd1->key < bd2->key) @@ -64,6 +66,18 @@ key_bindings_get_table(const char *name, int create) return (table); } +struct key_table * +key_bindings_first_table(void) +{ + return (RB_MIN(key_tables, &key_tables)); +} + +struct key_table * +key_bindings_next_table(struct key_table *table) +{ + return (RB_NEXT(key_tables, &key_tables, table)); +} + void key_bindings_unref_table(struct key_table *table) { @@ -83,6 +97,27 @@ key_bindings_unref_table(struct key_table *table) free(table); } +struct key_binding * +key_bindings_get(struct key_table *table, key_code key) +{ + struct key_binding bd; + + bd.key = key; + return (RB_FIND(key_bindings, &table->key_bindings, &bd)); +} + +struct key_binding * +key_bindings_first(struct key_table *table) +{ + return (RB_MIN(key_bindings, &table->key_bindings)); +} + +struct key_binding * +key_bindings_next(__unused struct key_table *table, struct key_binding *bd) +{ + return (RB_NEXT(key_bindings, &table->key_bindings, bd)); +} + void key_bindings_add(const char *name, key_code key, int repeat, struct cmd_list *cmdlist) diff --git a/mode-tree.c b/mode-tree.c index 05ec492de2..2e4b907238 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -192,7 +192,7 @@ mode_tree_clear_tagged(struct mode_tree_list *mtl) } } -void +static void mode_tree_up(struct mode_tree_data *mtd, int wrap) { if (mtd->current == 0) { diff --git a/server-client.c b/server-client.c index 46b90ccbfd..3822675868 100644 --- a/server-client.c +++ b/server-client.c @@ -43,6 +43,8 @@ static void server_client_check_redraw(struct client *); static void server_client_set_title(struct client *); static void server_client_reset_state(struct client *); static int server_client_assume_paste(struct session *); +static void server_client_clear_identify(struct client *, + struct window_pane *); static void server_client_dispatch(struct imsg *, void *); static void server_client_dispatch_command(struct client *, struct imsg *); @@ -93,7 +95,7 @@ server_client_set_identify(struct client *c, u_int delay) } /* Clear identify mode on client. */ -void +static void server_client_clear_identify(struct client *c, struct window_pane *wp) { if (~c->flags & CLIENT_IDENTIFY) @@ -815,7 +817,7 @@ server_client_handle_key(struct client *c, key_code key) struct window_pane *wp; struct timeval tv; struct key_table *table, *first; - struct key_binding bd_find, *bd; + struct key_binding *bd; int xtimeout, flags; struct cmd_find_state fs; key_code key0; @@ -928,8 +930,7 @@ server_client_handle_key(struct client *c, key_code key) try_again: /* Try to see if there is a key binding in the current table. */ - bd_find.key = key0; - bd = RB_FIND(key_bindings, &table->key_bindings, &bd_find); + bd = key_bindings_get(table, key0); if (bd != NULL) { /* * Key was matched in this table. If currently repeating but a From fb1f0fee5af3da964ec359ae2b543353ce47f996 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Aug 2018 11:56:12 +0000 Subject: [PATCH 168/836] session_groups can be static also. --- server.c | 1 - session.c | 10 ++++------ tmux.h | 16 +++++----------- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/server.c b/server.c index 5d321ccbc2..41b107017d 100644 --- a/server.c +++ b/server.c @@ -202,7 +202,6 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, RB_INIT(&all_window_panes); TAILQ_INIT(&clients); RB_INIT(&sessions); - RB_INIT(&session_groups); key_bindings_init(); gettimeofday(&start_time, NULL); diff --git a/session.c b/session.c index 3085f2489d..c2e7fe198f 100644 --- a/session.c +++ b/session.c @@ -29,7 +29,7 @@ struct sessions sessions; static u_int next_session_id; -struct session_groups session_groups; +struct session_groups session_groups = RB_INITIALIZER(&session_groups); static void session_free(int, short, void *); @@ -41,21 +41,19 @@ static struct winlink *session_previous_alert(struct winlink *); static void session_group_remove(struct session *); static void session_group_synchronize1(struct session *, struct session *); -RB_GENERATE(sessions, session, entry, session_cmp); - int session_cmp(struct session *s1, struct session *s2) { return (strcmp(s1->name, s2->name)); } +RB_GENERATE(sessions, session, entry, session_cmp); -RB_GENERATE(session_groups, session_group, entry, session_group_cmp); - -int +static int session_group_cmp(struct session_group *s1, struct session_group *s2) { return (strcmp(s1->name, s2->name)); } +RB_GENERATE_STATIC(session_groups, session_group, entry, session_group_cmp); /* * Find if session is still alive. This is true if it is still on the global diff --git a/tmux.h b/tmux.h index 8b0aba87e1..423189f277 100644 --- a/tmux.h +++ b/tmux.h @@ -1741,7 +1741,6 @@ int cmd_find_empty_state(struct cmd_find_state *); int cmd_find_valid_state(struct cmd_find_state *); void cmd_find_copy_state(struct cmd_find_state *, struct cmd_find_state *); -void cmd_find_log_state(const char *, struct cmd_find_state *); void cmd_find_from_session(struct cmd_find_state *, struct session *, int); void cmd_find_from_winlink(struct cmd_find_state *, @@ -1810,13 +1809,13 @@ void cmd_wait_for_flush(void); int client_main(struct event_base *, int, char **, int); /* key-bindings.c */ -RB_PROTOTYPE(key_bindings, key_binding, entry, key_bindings_cmp); -RB_PROTOTYPE(key_tables, key_table, entry, key_table_cmp); -extern struct key_tables key_tables; -int key_table_cmp(struct key_table *, struct key_table *); -int key_bindings_cmp(struct key_binding *, struct key_binding *); struct key_table *key_bindings_get_table(const char *, int); +struct key_table *key_bindings_first_table(void); +struct key_table *key_bindings_next_table(struct key_table *); void key_bindings_unref_table(struct key_table *); +struct key_binding *key_bindings_get(struct key_table *, key_code); +struct key_binding *key_bindings_first(struct key_table *); +struct key_binding *key_bindings_next(struct key_table *, struct key_binding *); void key_bindings_add(const char *, key_code, int, struct cmd_list *); void key_bindings_remove(const char *, key_code); void key_bindings_remove_table(const char *); @@ -1850,7 +1849,6 @@ void server_add_accept(int); /* server-client.c */ u_int server_client_how_many(void); void server_client_set_identify(struct client *, u_int); -void server_client_clear_identify(struct client *, struct window_pane *); void server_client_set_key_table(struct client *, const char *); const char *server_client_get_key_table(struct client *); int server_client_check_nested(struct client *); @@ -2214,7 +2212,6 @@ void mode_tree_expand_current(struct mode_tree_data *); void mode_tree_set_current(struct mode_tree_data *, uint64_t); void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, struct client *, key_code, int); -void mode_tree_up(struct mode_tree_data *, int); void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, @@ -2284,11 +2281,8 @@ void control_notify_session_window_changed(struct session *); /* session.c */ extern struct sessions sessions; -extern struct session_groups session_groups; int session_cmp(struct session *, struct session *); RB_PROTOTYPE(sessions, session, entry, session_cmp); -int session_group_cmp(struct session_group *, struct session_group *); -RB_PROTOTYPE(session_groups, session_group, entry, session_group_cmp); int session_alive(struct session *); struct session *session_find(const char *); struct session *session_find_by_id_str(const char *); From d6ff630498bbbeb4cd7d28ba4b540724f7c7ed86 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 Aug 2018 18:35:21 +0000 Subject: [PATCH 169/836] Log command arguments. --- cmd.c | 13 +++++++++++++ tmux.h | 1 + window.c | 3 +-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cmd.c b/cmd.c index ff32d5dd74..b90d5ea246 100644 --- a/cmd.c +++ b/cmd.c @@ -201,6 +201,15 @@ const struct cmd_entry *cmd_table[] = { NULL }; +void +cmd_log_argv(int argc, char **argv, const char *prefix) +{ + int i; + + for (i = 0; i < argc; i++) + log_debug("%s: argv[%d]=%s", prefix, i, argv[i]); +} + int cmd_pack_argv(int argc, char **argv, char *buf, size_t len) { @@ -209,6 +218,7 @@ cmd_pack_argv(int argc, char **argv, char *buf, size_t len) if (argc == 0) return (0); + cmd_log_argv(argc, argv, __func__); *buf = '\0'; for (i = 0; i < argc; i++) { @@ -241,9 +251,11 @@ cmd_unpack_argv(char *buf, size_t len, int argc, char ***argv) arglen = strlen(buf) + 1; (*argv)[i] = xstrdup(buf); + buf += arglen; len -= arglen; } + cmd_log_argv(argc, *argv, __func__); return (0); } @@ -402,6 +414,7 @@ cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) xasprintf(cause, "unknown command: %s", name); return (NULL); } + cmd_log_argv(argc, argv, entry->name); args = args_parse(entry->args.template, argc, argv); if (args == NULL) diff --git a/tmux.h b/tmux.h index 423189f277..8c3a236404 100644 --- a/tmux.h +++ b/tmux.h @@ -1760,6 +1760,7 @@ int cmd_find_from_mouse(struct cmd_find_state *, int cmd_find_from_nothing(struct cmd_find_state *, int); /* cmd.c */ +void cmd_log_argv(int, char **, const char *); int cmd_pack_argv(int, char **, char *, size_t); int cmd_unpack_argv(char *, size_t, int, char ***); char **cmd_copy_argv(int, char **); diff --git a/window.c b/window.c index 3b9469fe62..db6ff8c906 100644 --- a/window.c +++ b/window.c @@ -920,8 +920,7 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, log_debug("%s: shell=%s", __func__, wp->shell); log_debug("%s: cmd=%s", __func__, cmd); log_debug("%s: cwd=%s", __func__, cwd); - for (i = 0; i < wp->argc; i++) - log_debug("%s: argv[%d]=%s", __func__, i, wp->argv[i]); + cmd_log_argv(wp->argc, wp->argv, __func__); environ_log(env, "%s: environment ", __func__); memset(&ws, 0, sizeof ws); From f5d7a80272ca2d091c5a511019ac4b8d98ca7167 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 5 Aug 2018 08:59:30 +0000 Subject: [PATCH 170/836] calloc the mode data instead of malloc and initialize everything. --- window-copy.c | 14 +------------- window.c | 1 - 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/window-copy.c b/window-copy.c index d865287a7c..c2d9b9ade4 100644 --- a/window-copy.c +++ b/window-copy.c @@ -201,22 +201,10 @@ window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, struct window_copy_mode_data *data; struct screen *s; - wp->modedata = data = xmalloc(sizeof *data); - - data->oy = 0; - data->cx = 0; - data->cy = 0; + wp->modedata = data = xcalloc(1, sizeof *data); data->cursordrag = CURSORDRAG_NONE; - - data->lastcx = 0; - data->lastsx = 0; - - data->backing_written = 0; - data->lineflag = LINE_SEL_NONE; - data->rectflag = 0; - data->scroll_exit = 0; if (wp->searchstr != NULL) { data->searchtype = WINDOW_COPY_SEARCHUP; diff --git a/window.c b/window.c index db6ff8c906..019718f26d 100644 --- a/window.c +++ b/window.c @@ -894,7 +894,6 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, char *argv0, *cmd, **argvp; const char *ptr, *first, *home; struct termios tio2; - int i; sigset_t set, oldset; if (wp->fd != -1) { From a5ef1f2ed6f830aa25e4fcab9618c3ccea17d8db Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 Aug 2018 09:53:44 +0000 Subject: [PATCH 171/836] Bump the UTF-8 character array up to 18 to allow for more combining characters (some languages use up to five). This size doesn't make as much difference now that UTF-8 goes into an extended cell. GitHub issue 1430. --- tmux.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tmux.h b/tmux.h index 8c3a236404..a612fa46bb 100644 --- a/tmux.h +++ b/tmux.h @@ -511,10 +511,11 @@ struct msg_stderr_data { #define ALL_MOUSE_MODES (MODE_MOUSE_STANDARD|MODE_MOUSE_BUTTON|MODE_MOUSE_ALL) /* - * A single UTF-8 character. UTF8_SIZE must be big enough to hold at least one - * combining character as well. + * A single UTF-8 character. UTF8_SIZE must be big enough to hold + * combining characters as well, currently at most five (of three + * bytes) are supported. */ -#define UTF8_SIZE 9 +#define UTF8_SIZE 18 struct utf8_data { u_char data[UTF8_SIZE]; From 87e87030fe8b5d7f25404e21f4dfdf1dfe7fa632 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 Aug 2018 09:54:22 +0000 Subject: [PATCH 172/836] Whoops, didn't mean to commit this. From 13fe06a459f8dd62f9c3ee394e65a0fa7b1ee029 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 10 Aug 2018 10:21:40 +0100 Subject: [PATCH 173/836] Update CHANGES. --- CHANGES | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGES b/CHANGES index b89530c488..dc0a804a7c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,11 +1,23 @@ CHANGES FROM 2.7 to master +* Make display-panes block the client until a pane is chosen or it + times out + +* Clear history on RIS like most other terminals do. + +* Add an "Any" key to run a command if a key is pressed that is not + bound in the current key table. + +* Expand formats in load-buffer and save-buffer. + * Add a rectangle_toggle format. * Add set-hook -R to run a hook immediately. * Add README.ja. +* Add pane focus hooks. + * Allow any punctuation as separator for s/x/y not only /. * Improve resizing with the mouse (fix resizing the wrong pane in some From d0a600ccaa42a9c27b8ca1071c9a37e426f8b92a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 14 Aug 2018 11:31:34 +0000 Subject: [PATCH 174/836] Some tidying, use a struct for arguments (there will be more later) and add a helper function. --- screen-redraw.c | 176 ++++++++++++++++++++++++++++-------------------- 1 file changed, 102 insertions(+), 74 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index df966aff0d..89f6cd3b9c 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -23,6 +23,15 @@ #include "tmux.h" +struct screen_redraw_ctx { + struct client *c; + + u_int lines; + int top; + + int pane_status; +}; + static int screen_redraw_cell_border1(struct window_pane *, u_int, u_int); static int screen_redraw_cell_border(struct client *, u_int, u_int); static int screen_redraw_check_cell(struct client *, u_int, u_int, int, @@ -34,11 +43,11 @@ static int screen_redraw_make_pane_status(struct client *, struct window *, struct window_pane *); static void screen_redraw_draw_pane_status(struct client *, int); -static void screen_redraw_draw_borders(struct client *, int, u_int, u_int); -static void screen_redraw_draw_panes(struct client *, u_int, u_int); -static void screen_redraw_draw_status(struct client *, u_int, u_int); -static void screen_redraw_draw_number(struct client *, struct window_pane *, - u_int, u_int); +static void screen_redraw_draw_borders(struct screen_redraw_ctx *); +static void screen_redraw_draw_panes(struct screen_redraw_ctx *); +static void screen_redraw_draw_status(struct screen_redraw_ctx *); +static void screen_redraw_draw_number(struct screen_redraw_ctx *, + struct window_pane *); #define CELL_INSIDE 0 #define CELL_LEFTRIGHT 1 @@ -375,42 +384,41 @@ void screen_redraw_screen(struct client *c, int draw_panes, int draw_status, int draw_borders) { - struct options *oo = c->session->options; - struct tty *tty = &c->tty; - struct window *w = c->session->curw->window; - struct options *wo = w->options; - u_int top, lines; - int position, pane_status; + struct options *oo = c->session->options; + struct tty *tty = &c->tty; + struct window *w = c->session->curw->window; + struct options *wo = w->options; + struct screen_redraw_ctx ctx; if (c->flags & CLIENT_SUSPENDED) return; + memset (&ctx, 0, sizeof ctx); + ctx.c = c; + if (c->flags & CLIENT_STATUSOFF) - lines = 0; + ctx.lines = 0; else - lines = status_line_size(c->session); + ctx.lines = status_line_size(c->session); if (c->message_string != NULL || c->prompt_string != NULL) - lines = (lines == 0) ? 1 : lines; + ctx.lines = (ctx.lines == 0) ? 1 : ctx.lines; - position = options_get_number(oo, "status-position"); - if (lines != 0 && position == 0) - top = 1; - else - top = 0; + if (ctx.lines != 0 && options_get_number(oo, "status-position") == 0) + ctx.top = 1; + ctx.pane_status = options_get_number(wo, "pane-border-status"); - if (lines == 0) + if (ctx.lines == 0) draw_status = 0; if (draw_borders) { - pane_status = options_get_number(wo, "pane-border-status"); - screen_redraw_draw_borders(c, pane_status, lines, top); - if (pane_status != CELL_STATUS_OFF) - screen_redraw_draw_pane_status(c, pane_status); + if (ctx.pane_status != CELL_STATUS_OFF) + screen_redraw_draw_pane_status(c, ctx.pane_status); + screen_redraw_draw_borders(&ctx); } if (draw_panes) - screen_redraw_draw_panes(c, lines, top); + screen_redraw_draw_panes(&ctx); if (draw_status) - screen_redraw_draw_status(c, lines, top); + screen_redraw_draw_status(&ctx); tty_reset(tty); } @@ -435,25 +443,65 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) tty_reset(&c->tty); } +/* Draw a border cell. */ +static void +screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, + int small, u_int msgx, u_int msgy, struct grid_cell *m_active_gc, + struct grid_cell *active_gc, struct grid_cell *m_other_gc, + struct grid_cell *other_gc) +{ + struct client *c = ctx->c; + struct session *s = c->session; + struct window *w = s->curw->window; + struct tty *tty = &c->tty; + struct window_pane *wp; + struct window_pane *active = w->active; + struct window_pane *marked = marked_pane.wp; + u_int type; + int flag, pane_status = ctx->pane_status; + + type = screen_redraw_check_cell(c, x, y, pane_status, &wp); + if (type == CELL_INSIDE) + return; + if (type == CELL_OUTSIDE && small && x > msgx && y == msgy) + return; + flag = screen_redraw_check_is(x, y, type, pane_status, w, active, wp); + + if (server_is_marked(s, s->curw, marked_pane.wp) && + screen_redraw_check_is(x, y, type, pane_status, w, marked, wp)) { + if (flag) + tty_attributes(tty, m_active_gc, NULL); + else + tty_attributes(tty, m_other_gc, NULL); + } else if (flag) + tty_attributes(tty, active_gc, NULL); + else + tty_attributes(tty, other_gc, NULL); + if (ctx->top) + tty_cursor(tty, x, ctx->lines + y); + else + tty_cursor(tty, x, y); + tty_putc(tty, CELL_BORDERS[type]); +} + /* Draw the borders. */ static void -screen_redraw_draw_borders(struct client *c, int pane_status, u_int lines, - u_int top) +screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) { + struct client *c = ctx->c; struct session *s = c->session; struct window *w = s->curw->window; struct options *oo = w->options; struct tty *tty = &c->tty; - struct window_pane *wp; struct grid_cell m_active_gc, active_gc, m_other_gc, other_gc; struct grid_cell msg_gc; - u_int i, j, type, msgx = 0, msgy = 0; - int active, small, flags; + u_int i, j, msgx = 0, msgy = 0; + int small, flags; char msg[256]; const char *tmp; size_t msglen = 0; - small = (tty->sy - lines + top > w->sy) || (tty->sx > w->sx); + small = (tty->sy - ctx->lines + ctx->top > w->sy) || (tty->sx > w->sx); if (small) { flags = w->flags & (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); if (flags == (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT)) @@ -470,12 +518,13 @@ screen_redraw_draw_borders(struct client *c, int pane_status, u_int lines, w->sx, w->sy, tmp); msglen = strlen(msg); - if (tty->sy - 1 - lines + top > w->sy && tty->sx >= msglen) { + if (tty->sy - 1 - ctx->lines + ctx->top > w->sy && + tty->sx >= msglen) { msgx = tty->sx - msglen; - msgy = tty->sy - 1 - lines + top; + msgy = tty->sy - 1 - ctx->lines + ctx->top; } else if (tty->sx - w->sx > msglen) { msgx = tty->sx - msglen; - msgy = tty->sy - 1 - lines + top; + msgy = tty->sy - 1 - ctx->lines + ctx->top; } else small = 0; } @@ -489,33 +538,11 @@ screen_redraw_draw_borders(struct client *c, int pane_status, u_int lines, memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < tty->sy - lines; j++) { + for (j = 0; j < tty->sy - ctx->lines; j++) { for (i = 0; i < tty->sx; i++) { - type = screen_redraw_check_cell(c, i, j, pane_status, - &wp); - if (type == CELL_INSIDE) - continue; - if (type == CELL_OUTSIDE && small && - i > msgx && j == msgy) - continue; - active = screen_redraw_check_is(i, j, type, pane_status, - w, w->active, wp); - if (server_is_marked(s, s->curw, marked_pane.wp) && - screen_redraw_check_is(i, j, type, pane_status, w, - marked_pane.wp, wp)) { - if (active) - tty_attributes(tty, &m_active_gc, NULL); - else - tty_attributes(tty, &m_other_gc, NULL); - } else if (active) - tty_attributes(tty, &active_gc, NULL); - else - tty_attributes(tty, &other_gc, NULL); - if (top) - tty_cursor(tty, i, lines + j); - else - tty_cursor(tty, i, j); - tty_putc(tty, CELL_BORDERS[type]); + screen_redraw_draw_borders_cell(ctx, i, j, small, + msgx, msgy, &m_active_gc, &active_gc, &m_other_gc, + &other_gc); } } @@ -529,48 +556,49 @@ screen_redraw_draw_borders(struct client *c, int pane_status, u_int lines, /* Draw the panes. */ static void -screen_redraw_draw_panes(struct client *c, u_int lines, u_int top) +screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) { + struct client *c = ctx->c; struct window *w = c->session->curw->window; struct tty *tty = &c->tty; struct window_pane *wp; u_int i, y; - if (top) - y = lines; + if (ctx->top) + y = ctx->lines; else y = 0; - TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; for (i = 0; i < wp->sy; i++) tty_draw_pane(tty, wp, i, wp->xoff, y + wp->yoff); if (c->flags & CLIENT_IDENTIFY) - screen_redraw_draw_number(c, wp, lines, top); + screen_redraw_draw_number(ctx, wp); } } /* Draw the status line. */ static void -screen_redraw_draw_status(struct client *c, u_int lines, u_int top) +screen_redraw_draw_status(struct screen_redraw_ctx *ctx) { + struct client *c = ctx->c; struct tty *tty = &c->tty; u_int i, y; - if (top) + if (ctx->top) y = 0; else - y = tty->sy - lines; - for (i = 0; i < lines; i++) + y = tty->sy - ctx->lines; + for (i = 0; i < ctx->lines; i++) tty_draw_line(tty, NULL, &c->status.status, i, 0, y); } /* Draw number on a pane. */ static void -screen_redraw_draw_number(struct client *c, struct window_pane *wp, - u_int lines, u_int top) +screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) { + struct client *c = ctx->c; struct tty *tty = &c->tty; struct session *s = c->session; struct options *oo = s->options; @@ -593,8 +621,8 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, px = wp->sx / 2; py = wp->sy / 2; xoff = wp->xoff; yoff = wp->yoff; - if (top) - yoff += lines; + if (ctx->top) + yoff += ctx->lines; if (wp->sx < len * 6 || wp->sy < 5) { tty_cursor(tty, xoff + px - len / 2, yoff + py); From 14b97fc88944305c80a4182a3dd5fb554a4d0b0a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 14 Aug 2018 11:38:05 +0000 Subject: [PATCH 175/836] Add size to arguments struct too. --- screen-redraw.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 89f6cd3b9c..931bb20f28 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -30,6 +30,9 @@ struct screen_redraw_ctx { int top; int pane_status; + + u_int sx; + u_int sy; }; static int screen_redraw_cell_border1(struct window_pane *, u_int, u_int); @@ -393,7 +396,7 @@ screen_redraw_screen(struct client *c, int draw_panes, int draw_status, if (c->flags & CLIENT_SUSPENDED) return; - memset (&ctx, 0, sizeof ctx); + memset(&ctx, 0, sizeof ctx); ctx.c = c; if (c->flags & CLIENT_STATUSOFF) @@ -407,6 +410,9 @@ screen_redraw_screen(struct client *c, int draw_panes, int draw_status, ctx.top = 1; ctx.pane_status = options_get_number(wo, "pane-border-status"); + ctx.sx = tty->sx; + ctx.sy = tty->sy - ctx.lines; + if (ctx.lines == 0) draw_status = 0; @@ -501,7 +507,7 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) const char *tmp; size_t msglen = 0; - small = (tty->sy - ctx->lines + ctx->top > w->sy) || (tty->sx > w->sx); + small = (ctx->sy + ctx->top > w->sy) || (ctx->sx > w->sx); if (small) { flags = w->flags & (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); if (flags == (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT)) @@ -518,13 +524,12 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) w->sx, w->sy, tmp); msglen = strlen(msg); - if (tty->sy - 1 - ctx->lines + ctx->top > w->sy && - tty->sx >= msglen) { - msgx = tty->sx - msglen; - msgy = tty->sy - 1 - ctx->lines + ctx->top; - } else if (tty->sx - w->sx > msglen) { - msgx = tty->sx - msglen; - msgy = tty->sy - 1 - ctx->lines + ctx->top; + if (ctx->sy - 1 + ctx->top > w->sy && ctx->sx >= msglen) { + msgx = ctx->sx - msglen; + msgy = ctx->sy - 1 + ctx->top; + } else if (ctx->sx - w->sx > msglen) { + msgx = ctx->sx - msglen; + msgy = ctx->sy - 1 + ctx->top; } else small = 0; } @@ -538,8 +543,8 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < tty->sy - ctx->lines; j++) { - for (i = 0; i < tty->sx; i++) { + for (j = 0; j < ctx->sy; j++) { + for (i = 0; i < ctx->sx; i++) { screen_redraw_draw_borders_cell(ctx, i, j, small, msgx, msgy, &m_active_gc, &active_gc, &m_other_gc, &other_gc); @@ -589,7 +594,7 @@ screen_redraw_draw_status(struct screen_redraw_ctx *ctx) if (ctx->top) y = 0; else - y = tty->sy - ctx->lines; + y = ctx->sy; for (i = 0; i < ctx->lines; i++) tty_draw_line(tty, NULL, &c->status.status, i, 0, y); } From a9ffb56b65bca68bc3f31d1ed9b6765ae4e523b9 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 16 Aug 2018 14:04:03 +0000 Subject: [PATCH 176/836] Add the KEYC_XTERM flag to all function keys that imply a modifier so that they are correctly translated into xterm(1)-style keys. GitHub issue 1437. --- input.c | 2 +- tty-keys.c | 122 +++++++++++++++++++++++++++-------------------------- 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/input.c b/input.c index 741e83d624..254d0e5de2 100644 --- a/input.c +++ b/input.c @@ -2235,7 +2235,7 @@ input_osc_4(struct window_pane *wp, const char *p) free(copy); } -/* Handle the OSC 10 sequence for setting background colour. */ +/* Handle the OSC 10 sequence for setting foreground colour. */ static void input_osc_10(struct window_pane *wp, const char *p) { diff --git a/tty-keys.c b/tty-keys.c index febf57f1ba..69d01fafd9 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -171,7 +171,12 @@ static const struct tty_default_key_raw tty_default_raw_keys[] = { { "\033[201~", KEYC_PASTE_END }, }; -/* Default terminfo(5) keys. */ +/* + * Default terminfo(5) keys. Any keys that have builtin modifiers + * (that is, where the key itself contains the modifiers) has the + * KEYC_XTERM flag set so a leading escape is not treated as meta (and + * probably removed). + */ struct tty_default_key_code { enum tty_code_code code; key_code key; @@ -191,61 +196,61 @@ static const struct tty_default_key_code tty_default_code_keys[] = { { TTYC_KF11, KEYC_F11 }, { TTYC_KF12, KEYC_F12 }, - { TTYC_KF13, KEYC_F1|KEYC_SHIFT }, - { TTYC_KF14, KEYC_F2|KEYC_SHIFT }, - { TTYC_KF15, KEYC_F3|KEYC_SHIFT }, - { TTYC_KF16, KEYC_F4|KEYC_SHIFT }, - { TTYC_KF17, KEYC_F5|KEYC_SHIFT }, - { TTYC_KF18, KEYC_F6|KEYC_SHIFT }, - { TTYC_KF19, KEYC_F7|KEYC_SHIFT }, - { TTYC_KF20, KEYC_F8|KEYC_SHIFT }, - { TTYC_KF21, KEYC_F9|KEYC_SHIFT }, - { TTYC_KF22, KEYC_F10|KEYC_SHIFT }, - { TTYC_KF23, KEYC_F11|KEYC_SHIFT }, - { TTYC_KF24, KEYC_F12|KEYC_SHIFT }, - - { TTYC_KF25, KEYC_F1|KEYC_CTRL }, - { TTYC_KF26, KEYC_F2|KEYC_CTRL }, - { TTYC_KF27, KEYC_F3|KEYC_CTRL }, - { TTYC_KF28, KEYC_F4|KEYC_CTRL }, - { TTYC_KF29, KEYC_F5|KEYC_CTRL }, - { TTYC_KF30, KEYC_F6|KEYC_CTRL }, - { TTYC_KF31, KEYC_F7|KEYC_CTRL }, - { TTYC_KF32, KEYC_F8|KEYC_CTRL }, - { TTYC_KF33, KEYC_F9|KEYC_CTRL }, - { TTYC_KF34, KEYC_F10|KEYC_CTRL }, - { TTYC_KF35, KEYC_F11|KEYC_CTRL }, - { TTYC_KF36, KEYC_F12|KEYC_CTRL }, - - { TTYC_KF37, KEYC_F1|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF38, KEYC_F2|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF39, KEYC_F3|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF40, KEYC_F4|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF41, KEYC_F5|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF42, KEYC_F6|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF43, KEYC_F7|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF44, KEYC_F8|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF45, KEYC_F9|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF46, KEYC_F10|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF47, KEYC_F11|KEYC_SHIFT|KEYC_CTRL }, - { TTYC_KF48, KEYC_F12|KEYC_SHIFT|KEYC_CTRL }, - - { TTYC_KF49, KEYC_F1|KEYC_ESCAPE }, - { TTYC_KF50, KEYC_F2|KEYC_ESCAPE }, - { TTYC_KF51, KEYC_F3|KEYC_ESCAPE }, - { TTYC_KF52, KEYC_F4|KEYC_ESCAPE }, - { TTYC_KF53, KEYC_F5|KEYC_ESCAPE }, - { TTYC_KF54, KEYC_F6|KEYC_ESCAPE }, - { TTYC_KF55, KEYC_F7|KEYC_ESCAPE }, - { TTYC_KF56, KEYC_F8|KEYC_ESCAPE }, - { TTYC_KF57, KEYC_F9|KEYC_ESCAPE }, - { TTYC_KF58, KEYC_F10|KEYC_ESCAPE }, - { TTYC_KF59, KEYC_F11|KEYC_ESCAPE }, - { TTYC_KF60, KEYC_F12|KEYC_ESCAPE }, - - { TTYC_KF61, KEYC_F1|KEYC_ESCAPE|KEYC_SHIFT }, - { TTYC_KF62, KEYC_F2|KEYC_ESCAPE|KEYC_SHIFT }, - { TTYC_KF63, KEYC_F3|KEYC_ESCAPE|KEYC_SHIFT }, + { TTYC_KF13, KEYC_F1|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF14, KEYC_F2|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF15, KEYC_F3|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF16, KEYC_F4|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF17, KEYC_F5|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF18, KEYC_F6|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF19, KEYC_F7|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF20, KEYC_F8|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF21, KEYC_F9|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF22, KEYC_F10|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF23, KEYC_F11|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF24, KEYC_F12|KEYC_SHIFT|KEYC_XTERM }, + + { TTYC_KF25, KEYC_F1|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF26, KEYC_F2|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF27, KEYC_F3|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF28, KEYC_F4|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF29, KEYC_F5|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF30, KEYC_F6|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF31, KEYC_F7|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF32, KEYC_F8|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF33, KEYC_F9|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF34, KEYC_F10|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF35, KEYC_F11|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF36, KEYC_F12|KEYC_CTRL|KEYC_XTERM }, + + { TTYC_KF37, KEYC_F1|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF38, KEYC_F2|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF39, KEYC_F3|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF40, KEYC_F4|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF41, KEYC_F5|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF42, KEYC_F6|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF43, KEYC_F7|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF44, KEYC_F8|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF45, KEYC_F9|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF46, KEYC_F10|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF47, KEYC_F11|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KF48, KEYC_F12|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, + + { TTYC_KF49, KEYC_F1|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF50, KEYC_F2|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF51, KEYC_F3|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF52, KEYC_F4|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF53, KEYC_F5|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF54, KEYC_F6|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF55, KEYC_F7|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF56, KEYC_F8|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF57, KEYC_F9|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF58, KEYC_F10|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF59, KEYC_F11|KEYC_ESCAPE|KEYC_XTERM }, + { TTYC_KF60, KEYC_F12|KEYC_ESCAPE|KEYC_XTERM }, + + { TTYC_KF61, KEYC_F1|KEYC_ESCAPE|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF62, KEYC_F2|KEYC_ESCAPE|KEYC_SHIFT|KEYC_XTERM }, + { TTYC_KF63, KEYC_F3|KEYC_ESCAPE|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KICH1, KEYC_IC }, { TTYC_KDCH1, KEYC_DC }, @@ -261,10 +266,7 @@ static const struct tty_default_key_code tty_default_code_keys[] = { { TTYC_KCUB1, KEYC_LEFT }, { TTYC_KCUF1, KEYC_RIGHT }, - /* - * Key and modifier capabilities. We set the xterm flag to mark that - * any leading escape means an escape key press and not the modifier. - */ + /* Key and modifier capabilities. */ { TTYC_KDC2, KEYC_DC|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KDC3, KEYC_DC|KEYC_ESCAPE|KEYC_XTERM }, { TTYC_KDC4, KEYC_DC|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, From de2ddddd6059094353b5a32d701a62fbb179e4eb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 17 Aug 2018 10:30:04 +0100 Subject: [PATCH 177/836] Add a full stop. --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index dc0a804a7c..a36a365719 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,7 @@ CHANGES FROM 2.7 to master * Make display-panes block the client until a pane is chosen or it - times out + times out. * Clear history on RIS like most other terminals do. From 9bdbe171b7f1d57b70419bb2b80996a60280d44f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 17 Aug 2018 11:31:16 +0100 Subject: [PATCH 178/836] 2.8-rc. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 5b4bc4a2fe..f96c53c9aa 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, master) +AC_INIT(tmux, 2.8-rc) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From aa6e6fa0f2a6ad5f5fbec4ab55a6bc52df56df1a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 17 Aug 2018 11:45:40 +0100 Subject: [PATCH 179/836] 2.8. --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a36a365719..519fde840d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.7 to master +CHANGES FROM 2.7 to 2.8 * Make display-panes block the client until a pane is chosen or it times out. From af679326b207eb36fb84814a28760fc2e582c2b4 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 17 Aug 2018 11:46:08 +0100 Subject: [PATCH 180/836] Now master again. --- CHANGES | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 519fde840d..9e630b3835 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +CHANGES FROM 2.8 to master + +* ... + CHANGES FROM 2.7 to 2.8 * Make display-panes block the client until a pane is chosen or it diff --git a/configure.ac b/configure.ac index f96c53c9aa..5b4bc4a2fe 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.8-rc) +AC_INIT(tmux, master) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 3bc08b0dc0c9868ba5acaa7b8f12159a9a66cf4a Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 18 Aug 2018 16:14:03 +0000 Subject: [PATCH 181/836] Some tidying and helper functions. --- cmd-resize-pane.c | 18 ++++++------- format.c | 11 ++++---- screen-redraw.c | 67 ++++++++++++++++++++--------------------------- tmux.h | 1 + tty.c | 15 +++++++++++ 5 files changed, 59 insertions(+), 53 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 6b991aa623..31474f3f0b 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -91,9 +91,8 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) } } - if (args_has(self->args, 'x')) { - x = args_strtonum(self->args, 'x', PANE_MINIMUM, INT_MAX, - &cause); + if (args_has(args, 'x')) { + x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause); if (cause != NULL) { cmdq_error(item, "width %s", cause); free(cause); @@ -101,9 +100,8 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) } layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x); } - if (args_has(self->args, 'y')) { - y = args_strtonum(self->args, 'y', PANE_MINIMUM, INT_MAX, - &cause); + if (args_has(args, 'y')) { + y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause); if (cause != NULL) { cmdq_error(item, "height %s", cause); free(cause); @@ -112,13 +110,13 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y); } - if (args_has(self->args, 'L')) + if (args_has(args, 'L')) layout_resize_pane(wp, LAYOUT_LEFTRIGHT, -adjust, 1); - else if (args_has(self->args, 'R')) + else if (args_has(args, 'R')) layout_resize_pane(wp, LAYOUT_LEFTRIGHT, adjust, 1); - else if (args_has(self->args, 'U')) + else if (args_has(args, 'U')) layout_resize_pane(wp, LAYOUT_TOPBOTTOM, -adjust, 1); - else if (args_has(self->args, 'D')) + else if (args_has(args, 'D')) layout_resize_pane(wp, LAYOUT_TOPBOTTOM, adjust, 1); server_redraw_window(wl->window); diff --git a/format.c b/format.c index 0ad8f836ab..ccf6c1caef 100644 --- a/format.c +++ b/format.c @@ -1447,12 +1447,13 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) void format_defaults_pane(struct format_tree *ft, struct window_pane *wp) { + struct window *w = wp->window; struct grid *gd = wp->base.grid; int status = wp->status; u_int idx; if (ft->w == NULL) - ft->w = wp->window; + ft->w = w; ft->wp = wp; format_add(ft, "history_size", "%u", gd->hsize); @@ -1467,7 +1468,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_height", "%u", wp->sy); format_add(ft, "pane_title", "%s", wp->base.title); format_add(ft, "pane_id", "%%%u", wp->id); - format_add(ft, "pane_active", "%d", wp == wp->window->active); + format_add(ft, "pane_active", "%d", wp == w->active); format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1); @@ -1483,9 +1484,9 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_at_left", "%d", wp->xoff == 0); format_add(ft, "pane_at_top", "%d", wp->yoff == 0); format_add(ft, "pane_at_right", "%d", - wp->xoff + wp->sx == wp->window->sx); + wp->xoff + wp->sx == w->sx); format_add(ft, "pane_at_bottom", "%d", - wp->yoff + wp->sy == wp->window->sy); + wp->yoff + wp->sy == w->sy); } format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); @@ -1493,7 +1494,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_mode", "%s", wp->mode->name); format_add(ft, "pane_synchronized", "%d", - !!options_get_number(wp->window->options, "synchronize-panes")); + !!options_get_number(w->options, "synchronize-panes")); if (wp->searchstr != NULL) format_add(ft, "pane_search_string", "%s", wp->searchstr); diff --git a/screen-redraw.c b/screen-redraw.c index 931bb20f28..3aa0c22a43 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -35,17 +35,6 @@ struct screen_redraw_ctx { u_int sy; }; -static int screen_redraw_cell_border1(struct window_pane *, u_int, u_int); -static int screen_redraw_cell_border(struct client *, u_int, u_int); -static int screen_redraw_check_cell(struct client *, u_int, u_int, int, - struct window_pane **); -static int screen_redraw_check_is(u_int, u_int, int, int, struct window *, - struct window_pane *, struct window_pane *); - -static int screen_redraw_make_pane_status(struct client *, struct window *, - struct window_pane *); -static void screen_redraw_draw_pane_status(struct client *, int); - static void screen_redraw_draw_borders(struct screen_redraw_ctx *); static void screen_redraw_draw_panes(struct screen_redraw_ctx *); static void screen_redraw_draw_status(struct screen_redraw_ctx *); @@ -327,8 +316,9 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, /* Draw pane status. */ static void -screen_redraw_draw_pane_status(struct client *c, int pane_status) +screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) { + struct client *c = ctx->c; struct window *w = c->session->curw->window; struct options *oo = c->session->options; struct tty *tty = &c->tty; @@ -340,7 +330,7 @@ screen_redraw_draw_pane_status(struct client *c, int pane_status) TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; - if (pane_status == CELL_STATUS_TOP) + if (ctx->pane_status == CELL_STATUS_TOP) yoff = wp->yoff - 1; else yoff = wp->yoff + wp->sy; @@ -382,50 +372,51 @@ screen_redraw_update(struct client *c) } } +/* Set up redraw context. */ +static void +screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) +{ + struct session *s = c->session; + struct options *oo = s->options; + struct window *w = s->curw->window; + struct options *wo = w->options; + + memset(ctx, 0, sizeof *ctx); + ctx->c = c; + + ctx->lines = tty_status_lines(c); + if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) + ctx->top = 1; + ctx->pane_status = options_get_number(wo, "pane-border-status"); + + ctx->sx = c->tty.sx; + ctx->sy = c->tty.sy - ctx->lines; +} + /* Redraw entire screen. */ void screen_redraw_screen(struct client *c, int draw_panes, int draw_status, int draw_borders) { - struct options *oo = c->session->options; - struct tty *tty = &c->tty; - struct window *w = c->session->curw->window; - struct options *wo = w->options; struct screen_redraw_ctx ctx; if (c->flags & CLIENT_SUSPENDED) return; - memset(&ctx, 0, sizeof ctx); - ctx.c = c; - - if (c->flags & CLIENT_STATUSOFF) - ctx.lines = 0; - else - ctx.lines = status_line_size(c->session); - if (c->message_string != NULL || c->prompt_string != NULL) - ctx.lines = (ctx.lines == 0) ? 1 : ctx.lines; - - if (ctx.lines != 0 && options_get_number(oo, "status-position") == 0) - ctx.top = 1; - ctx.pane_status = options_get_number(wo, "pane-border-status"); - - ctx.sx = tty->sx; - ctx.sy = tty->sy - ctx.lines; + screen_redraw_set_context(c, &ctx); if (ctx.lines == 0) draw_status = 0; - if (draw_borders) { - if (ctx.pane_status != CELL_STATUS_OFF) - screen_redraw_draw_pane_status(c, ctx.pane_status); + if (draw_borders) screen_redraw_draw_borders(&ctx); - } + if (draw_borders && ctx.pane_status != CELL_STATUS_OFF) + screen_redraw_draw_pane_status(&ctx); if (draw_panes) screen_redraw_draw_panes(&ctx); if (draw_status) screen_redraw_draw_status(&ctx); - tty_reset(tty); + tty_reset(&c->tty); } /* Draw a single pane. */ diff --git a/tmux.h b/tmux.h index a612fa46bb..711b3ec660 100644 --- a/tmux.h +++ b/tmux.h @@ -1638,6 +1638,7 @@ struct environ *environ_for_session(struct session *, int); /* tty.c */ void tty_create_log(void); +u_int tty_status_lines(struct client *); void tty_raw(struct tty *, const char *); void tty_attributes(struct tty *, const struct grid_cell *, const struct window_pane *); diff --git a/tty.c b/tty.c index 4d54353766..b02cefc7a6 100644 --- a/tty.c +++ b/tty.c @@ -698,6 +698,21 @@ tty_repeat_space(struct tty *tty, u_int n) tty_putn(tty, s, n, n); } +/* How many lines are taken up by the status line on this client? */ +u_int +tty_status_lines(struct client *c) +{ + u_int lines; + + if (c->flags & CLIENT_STATUSOFF) + lines = 0; + else + lines = status_line_size(c->session); + if (c->message_string != NULL || c->prompt_string != NULL) + lines = (lines == 0) ? 1 : lines; + return (lines); +} + /* * Is the region large enough to be worth redrawing once later rather than * probably several times now? Currently yes if it is more than 50% of the From bd2896b65e8fd205e3207ed70558d9ebfd106909 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 18 Aug 2018 20:08:52 +0000 Subject: [PATCH 182/836] SESSION_UNATTACHED flag is no longer necessary now we have an attached count instead. --- cmd-find.c | 8 ++++---- resize.c | 11 ++--------- server-client.c | 2 +- server-fn.c | 2 +- server.c | 2 +- session.c | 4 ++-- tmux.h | 5 ++--- 7 files changed, 13 insertions(+), 21 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index ff95ae1f6d..fe5bb3e030 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -136,7 +136,7 @@ cmd_find_best_client(struct session *s) { struct client *c_loop, *c; - if (s->flags & SESSION_UNATTACHED) + if (s->attached == 0) s = NULL; c = NULL; @@ -160,10 +160,10 @@ cmd_find_session_better(struct session *s, struct session *than, int flags) if (than == NULL) return (1); if (flags & CMD_FIND_PREFER_UNATTACHED) { - attached = (~than->flags & SESSION_UNATTACHED); - if (attached && (s->flags & SESSION_UNATTACHED)) + attached = (than->attached != 0); + if (attached && s->attached == 0) return (1); - else if (!attached && (~s->flags & SESSION_UNATTACHED)) + else if (!attached && s->attached != 0) return (0); } return (timercmp(&s->activity_time, &than->activity_time, >)); diff --git a/resize.c b/resize.c index 8ed359b457..1c9694da2d 100644 --- a/resize.c +++ b/resize.c @@ -36,10 +36,6 @@ * * This is quite inefficient - better/additional data structures are needed * to make it better. - * - * As a side effect, this function updates the SESSION_UNATTACHED flag. This - * flag is necessary to make sure unattached sessions do not limit the size of - * windows that are attached both to them and to other (attached) sessions. */ void @@ -79,11 +75,8 @@ recalculate_sizes(void) s->attached++; } } - if (ssx == UINT_MAX || ssy == UINT_MAX) { - s->flags |= SESSION_UNATTACHED; + if (ssx == UINT_MAX || ssy == UINT_MAX) continue; - } - s->flags &= ~SESSION_UNATTACHED; if (lines != 0 && ssy == 0) ssy = lines; @@ -107,7 +100,7 @@ recalculate_sizes(void) ssx = ssy = UINT_MAX; RB_FOREACH(s, sessions, &sessions) { - if (s->flags & SESSION_UNATTACHED) + if (s->attached == 0) continue; if (flag) has = s->curw->window == w; diff --git a/server-client.c b/server-client.c index 3822675868..a83073dc4e 100644 --- a/server-client.c +++ b/server-client.c @@ -1173,7 +1173,7 @@ server_client_check_focus(struct window_pane *wp) TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL || !(c->flags & CLIENT_FOCUSED)) continue; - if (c->session->flags & SESSION_UNATTACHED) + if (c->session->attached == 0) continue; if (c->session->curw->window == wp->window) diff --git a/server-fn.c b/server-fn.c index b4defdd4f6..a9446bc5ab 100644 --- a/server-fn.c +++ b/server-fn.c @@ -430,7 +430,7 @@ server_check_unattached(void) * set, collect them. */ RB_FOREACH(s, sessions, &sessions) { - if (!(s->flags & SESSION_UNATTACHED)) + if (s->attached != 0) continue; if (options_get_number (s->options, "destroy-unattached")) session_destroy(s, __func__); diff --git a/server.c b/server.c index 41b107017d..e897e76521 100644 --- a/server.c +++ b/server.c @@ -319,7 +319,7 @@ server_update_socket(void) n = 0; RB_FOREACH(s, sessions, &sessions) { - if (!(s->flags & SESSION_UNATTACHED)) { + if (s->attached != 0) { n++; break; } diff --git a/session.c b/session.c index c2e7fe198f..1a109a8336 100644 --- a/session.c +++ b/session.c @@ -266,7 +266,7 @@ session_lock_timer(__unused int fd, __unused short events, void *arg) { struct session *s = arg; - if (s->flags & SESSION_UNATTACHED) + if (s->attached == 0) return; log_debug("session %s locked, activity time %lld", s->name, @@ -299,7 +299,7 @@ session_update_activity(struct session *s, struct timeval *from) else evtimer_set(&s->lock_timer, session_lock_timer, s); - if (~s->flags & SESSION_UNATTACHED) { + if (s->attached != 0) { timerclear(&tv); tv.tv_sec = options_get_number(s->options, "lock-after-time"); if (tv.tv_sec != 0) diff --git a/tmux.h b/tmux.h index 711b3ec660..2f104e2263 100644 --- a/tmux.h +++ b/tmux.h @@ -938,9 +938,8 @@ struct session { struct hooks *hooks; struct options *options; -#define SESSION_UNATTACHED 0x1 /* not attached to any clients */ -#define SESSION_PASTING 0x2 -#define SESSION_ALERTED 0x4 +#define SESSION_PASTING 0x1 +#define SESSION_ALERTED 0x2 int flags; u_int attached; From 88327c7698fc45a16d1a5235d71a078d419febb4 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 19 Aug 2018 16:45:03 +0000 Subject: [PATCH 183/836] Add a client redraw-window flag instead of the redraw-all flag and for all just use the three flags together (window, borders, status). --- screen-redraw.c | 58 ++++++++++++++++++++++++------------------------- server-client.c | 39 ++++++++++++--------------------- server-fn.c | 6 ++--- status.c | 24 ++++++++++---------- tmux.h | 11 +++++----- tty.c | 4 ++-- 6 files changed, 65 insertions(+), 77 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 3aa0c22a43..04ea6d3c9b 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -318,7 +318,7 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, static void screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) { - struct client *c = ctx->c; + struct client *c = ctx->c; struct window *w = c->session->curw->window; struct options *oo = c->session->options; struct tty *tty = &c->tty; @@ -344,7 +344,7 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) } /* Update status line and change flags if unchanged. */ -void +static void screen_redraw_update(struct client *c) { struct window *w = c->session->curw->window; @@ -359,7 +359,7 @@ screen_redraw_update(struct client *c) else redraw = status_redraw(c); if (!redraw) - c->flags &= ~CLIENT_STATUS; + c->flags &= ~CLIENT_REDRAWSTATUS; if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) { redraw = 0; @@ -368,7 +368,7 @@ screen_redraw_update(struct client *c) redraw = 1; } if (redraw) - c->flags |= CLIENT_BORDERS; + c->flags |= CLIENT_REDRAWBORDERS; } } @@ -376,10 +376,10 @@ screen_redraw_update(struct client *c) static void screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) { - struct session *s = c->session; - struct options *oo = s->options; - struct window *w = s->curw->window; - struct options *wo = w->options; + struct session *s = c->session; + struct options *oo = s->options; + struct window *w = s->curw->window; + struct options *wo = w->options; memset(ctx, 0, sizeof *ctx); ctx->c = c; @@ -395,26 +395,24 @@ screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) /* Redraw entire screen. */ void -screen_redraw_screen(struct client *c, int draw_panes, int draw_status, - int draw_borders) +screen_redraw_screen(struct client *c) { - struct screen_redraw_ctx ctx; + struct screen_redraw_ctx ctx; if (c->flags & CLIENT_SUSPENDED) return; + screen_redraw_update(c); screen_redraw_set_context(c, &ctx); - if (ctx.lines == 0) - draw_status = 0; - - if (draw_borders) + if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) { + if (ctx.pane_status != CELL_STATUS_OFF) + screen_redraw_draw_pane_status(&ctx); screen_redraw_draw_borders(&ctx); - if (draw_borders && ctx.pane_status != CELL_STATUS_OFF) - screen_redraw_draw_pane_status(&ctx); - if (draw_panes) + } + if (c->flags & CLIENT_REDRAWWINDOW) screen_redraw_draw_panes(&ctx); - if (draw_status) + if (ctx.lines != 0 && (c->flags & CLIENT_REDRAWSTATUS)) screen_redraw_draw_status(&ctx); tty_reset(&c->tty); } @@ -447,15 +445,15 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, struct grid_cell *active_gc, struct grid_cell *m_other_gc, struct grid_cell *other_gc) { - struct client *c = ctx->c; - struct session *s = c->session; - struct window *w = s->curw->window; - struct tty *tty = &c->tty; - struct window_pane *wp; - struct window_pane *active = w->active; - struct window_pane *marked = marked_pane.wp; - u_int type; - int flag, pane_status = ctx->pane_status; + struct client *c = ctx->c; + struct session *s = c->session; + struct window *w = s->curw->window; + struct tty *tty = &c->tty; + struct window_pane *wp; + struct window_pane *active = w->active; + struct window_pane *marked = marked_pane.wp; + u_int type; + int flag, pane_status = ctx->pane_status; type = screen_redraw_check_cell(c, x, y, pane_status, &wp); if (type == CELL_INSIDE) @@ -492,7 +490,7 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) struct tty *tty = &c->tty; struct grid_cell m_active_gc, active_gc, m_other_gc, other_gc; struct grid_cell msg_gc; - u_int i, j, msgx = 0, msgy = 0; + u_int i, j, msgx = 0, msgy = 0; int small, flags; char msg[256]; const char *tmp; @@ -558,7 +556,7 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) struct window *w = c->session->curw->window; struct tty *tty = &c->tty; struct window_pane *wp; - u_int i, y; + u_int i, y; if (ctx->top) y = ctx->lines; diff --git a/server-client.c b/server-client.c index a83073dc4e..dcf0e496ab 100644 --- a/server-client.c +++ b/server-client.c @@ -1312,7 +1312,7 @@ server_client_check_redraw(struct client *c) struct session *s = c->session; struct tty *tty = &c->tty; struct window_pane *wp; - int needed, flags, masked; + int needed, flags; struct timeval tv = { .tv_usec = 1000 }; static struct event ev; size_t left; @@ -1326,7 +1326,7 @@ server_client_check_redraw(struct client *c) * end up back here. */ needed = 0; - if (c->flags & CLIENT_REDRAW) + if (c->flags & CLIENT_ALLREDRAWFLAGS) needed = 1; else { TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) { @@ -1349,25 +1349,19 @@ server_client_check_redraw(struct client *c) * We may have got here for a single pane redraw, but force a * full redraw next time in case other panes have been updated. */ - c->flags |= CLIENT_REDRAW; + c->flags |= CLIENT_ALLREDRAWFLAGS; return; } else if (needed) log_debug("%s: redraw needed", c->name); - if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) { - if (options_get_number(s->options, "set-titles")) - server_client_set_title(c); - screen_redraw_update(c); /* will adjust flags */ - } - flags = tty->flags & (TTY_BLOCK|TTY_FREEZE|TTY_NOCURSOR); tty->flags = (tty->flags & ~(TTY_BLOCK|TTY_FREEZE)) | TTY_NOCURSOR; - if (c->flags & CLIENT_REDRAW) { - tty_update_mode(tty, tty->mode, NULL); - screen_redraw_screen(c, 1, 1, 1); - c->flags &= ~(CLIENT_STATUS|CLIENT_BORDERS); - } else { + if (~c->flags & CLIENT_REDRAWWINDOW) { + /* + * If not redrawing the entire window, check whether each pane + * needs to be redrawn. + */ TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) { if (wp->flags & PANE_REDRAW) { tty_update_mode(tty, tty->mode, NULL); @@ -1376,21 +1370,16 @@ server_client_check_redraw(struct client *c) } } - masked = c->flags & (CLIENT_BORDERS|CLIENT_STATUS); - if (masked != 0) - tty_update_mode(tty, tty->mode, NULL); - if (masked == CLIENT_BORDERS) - screen_redraw_screen(c, 0, 0, 1); - else if (masked == CLIENT_STATUS) - screen_redraw_screen(c, 0, 1, 0); - else if (masked != 0) - screen_redraw_screen(c, 0, 1, 1); + if (c->flags & CLIENT_ALLREDRAWFLAGS) { + if (options_get_number(s->options, "set-titles")) + server_client_set_title(c); + screen_redraw_screen(c); + } tty->flags = (tty->flags & ~(TTY_FREEZE|TTY_NOCURSOR)) | flags; tty_update_mode(tty, tty->mode, NULL); - c->flags &= ~(CLIENT_REDRAW|CLIENT_BORDERS|CLIENT_STATUS| - CLIENT_STATUSFORCE); + c->flags &= ~(CLIENT_ALLREDRAWFLAGS|CLIENT_STATUSFORCE); if (needed) { /* diff --git a/server-fn.c b/server-fn.c index a9446bc5ab..c44290337c 100644 --- a/server-fn.c +++ b/server-fn.c @@ -35,13 +35,13 @@ static void server_destroy_session_group(struct session *); void server_redraw_client(struct client *c) { - c->flags |= CLIENT_REDRAW; + c->flags |= CLIENT_ALLREDRAWFLAGS; } void server_status_client(struct client *c) { - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; } void @@ -110,7 +110,7 @@ server_redraw_window_borders(struct window *w) TAILQ_FOREACH(c, &clients, entry) { if (c->session != NULL && c->session->curw->window == w) - c->flags |= CLIENT_BORDERS; + c->flags |= CLIENT_REDRAWBORDERS; } } diff --git a/status.c b/status.c index d0b66ca949..e8f890e895 100644 --- a/status.c +++ b/status.c @@ -157,7 +157,7 @@ status_timer_callback(__unused int fd, __unused short events, void *arg) return; if (c->message_string == NULL && c->prompt_string == NULL) - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; timerclear(&tv); tv.tv_sec = options_get_number(s->options, "status-interval"); @@ -615,7 +615,7 @@ status_message_set(struct client *c, const char *fmt, ...) } c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; } /* Clear status line message. */ @@ -630,7 +630,7 @@ status_message_clear(struct client *c) if (c->prompt_string == NULL) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); - c->flags |= CLIENT_REDRAW; /* screen was frozen and may have changed */ + c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ screen_reinit(&c->status.status); } @@ -734,7 +734,7 @@ status_prompt_set(struct client *c, const char *msg, const char *input, if (~flags & PROMPT_INCREMENTAL) c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; if ((flags & PROMPT_INCREMENTAL) && *tmp != '\0') { xasprintf(&cp, "=%s", tmp); @@ -763,7 +763,7 @@ status_prompt_clear(struct client *c) c->prompt_buffer = NULL; c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); - c->flags |= CLIENT_REDRAW; /* screen was frozen and may have changed */ + c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ screen_reinit(&c->status.status); } @@ -791,7 +791,7 @@ status_prompt_update(struct client *c, const char *msg, const char *input) c->prompt_hindex = 0; - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; free(tmp); format_free(ft); @@ -938,7 +938,7 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) return (1); case '\033': /* Escape */ c->prompt_mode = PROMPT_COMMAND; - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; return (0); } *new_key = key; @@ -952,17 +952,17 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) case 's': case 'a': c->prompt_mode = PROMPT_ENTRY; - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; break; /* switch mode and... */ case 'S': c->prompt_mode = PROMPT_ENTRY; - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; *new_key = '\025'; /* C-u */ return (1); case 'i': case '\033': /* Escape */ c->prompt_mode = PROMPT_ENTRY; - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; return (0); } @@ -1357,7 +1357,7 @@ status_prompt_key(struct client *c, key_code key) goto append_key; } - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; return (0); append_key: @@ -1392,7 +1392,7 @@ status_prompt_key(struct client *c, key_code key) } changed: - c->flags |= CLIENT_STATUS; + c->flags |= CLIENT_REDRAWSTATUS; if (c->prompt_flags & PROMPT_INCREMENTAL) { s = utf8_tocstr(c->prompt_buffer); xasprintf(&cp, "%c%s", prefix, s); diff --git a/tmux.h b/tmux.h index 2f104e2263..f2baca38a2 100644 --- a/tmux.h +++ b/tmux.h @@ -1329,14 +1329,14 @@ struct client { #define CLIENT_TERMINAL 0x1 #define CLIENT_LOGIN 0x2 #define CLIENT_EXIT 0x4 -#define CLIENT_REDRAW 0x8 -#define CLIENT_STATUS 0x10 +#define CLIENT_REDRAWWINDOW 0x8 +#define CLIENT_REDRAWSTATUS 0x10 #define CLIENT_REPEAT 0x20 #define CLIENT_SUSPENDED 0x40 #define CLIENT_ATTACHED 0x80 #define CLIENT_IDENTIFY 0x100 #define CLIENT_DEAD 0x200 -#define CLIENT_BORDERS 0x400 +#define CLIENT_REDRAWBORDERS 0x400 #define CLIENT_READONLY 0x800 #define CLIENT_DETACHING 0x1000 #define CLIENT_CONTROL 0x2000 @@ -1350,6 +1350,8 @@ struct client { #define CLIENT_TRIPLECLICK 0x200000 #define CLIENT_SIZECHANGED 0x400000 #define CLIENT_STATUSOFF 0x800000 +#define CLIENT_ALLREDRAWFLAGS \ + (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS|CLIENT_REDRAWBORDERS) int flags; struct key_table *keytable; @@ -2051,8 +2053,7 @@ void screen_write_setselection(struct screen_write_ctx *, u_char *, u_int); void screen_write_rawstring(struct screen_write_ctx *, u_char *, u_int); /* screen-redraw.c */ -void screen_redraw_update(struct client *); -void screen_redraw_screen(struct client *, int, int, int); +void screen_redraw_screen(struct client *); void screen_redraw_pane(struct client *, struct window_pane *); /* screen.c */ diff --git a/tty.c b/tty.c index b02cefc7a6..2397f8c461 100644 --- a/tty.c +++ b/tty.c @@ -179,7 +179,7 @@ tty_timer_callback(__unused int fd, __unused short events, void *data) log_debug("%s: %zu discarded", c->name, tty->discarded); - c->flags |= CLIENT_REDRAW; + c->flags |= CLIENT_ALLREDRAWFLAGS; c->discarded += tty->discarded; if (tty->discarded < TTY_BLOCK_STOP(tty)) { @@ -1049,7 +1049,7 @@ tty_client_ready(struct client *c, struct window_pane *wp) { if (c->session == NULL || c->tty.term == NULL) return (0); - if (c->flags & (CLIENT_REDRAW|CLIENT_SUSPENDED)) + if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_SUSPENDED)) return (0); if (c->tty.flags & TTY_FREEZE) return (0); From d95fad3d5f945c8047cd35de65cf59c60499f306 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 19 Aug 2018 19:03:46 +0000 Subject: [PATCH 184/836] Expand \u and \U escape sequences in command strings, from Christopher Hunt in GitHub issue 1443. --- cmd-string.c | 39 +++++++++++++++++++++++++++++++++------ window-tree.c | 1 - 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/cmd-string.c b/cmd-string.c index 9c8f10c15e..440a02317c 100644 --- a/cmd-string.c +++ b/cmd-string.c @@ -54,6 +54,22 @@ cmd_string_ungetc(size_t *p) (*p)--; } +static int +cmd_string_unicode(wchar_t *wc, const char *s, size_t *p, char ch) +{ + int size = (ch == 'u') ? 4 : 8; + u_int tmp; + + if (size == 4 && sscanf(s + *p, "%4x", &tmp) != 1) + return (-1); + if (size == 8 && sscanf(s + *p, "%8x", &tmp) != 1) + return (-1); + *p += size; + + *wc = (wchar_t)tmp; + return (0); +} + int cmd_string_split(const char *s, int *rargc, char ***rargv) { @@ -191,12 +207,11 @@ cmd_string_copy(char **dst, char *src, size_t *len) static char * cmd_string_string(const char *s, size_t *p, char endch, int esc) { - int ch; - char *buf, *t; - size_t len; - - buf = NULL; - len = 0; + int ch; + wchar_t wc; + struct utf8_data ud; + char *buf = NULL, *t; + size_t len = 0; while ((ch = cmd_string_getc(s, p)) != endch) { switch (ch) { @@ -220,6 +235,18 @@ cmd_string_string(const char *s, size_t *p, char endch, int esc) case 't': ch = '\t'; break; + case 'u': + case 'U': + if (cmd_string_unicode(&wc, s, p, ch) != 0) + goto error; + if (utf8_split(wc, &ud) != UTF8_DONE) + goto error; + if (len >= SIZE_MAX - ud.size - 1) + goto error; + buf = xrealloc(buf, len + ud.size); + memcpy(buf + len, ud.data, ud.size); + len += ud.size; + continue; } break; case '$': diff --git a/window-tree.c b/window-tree.c index 52ab195ee4..2eb31612bb 100644 --- a/window-tree.c +++ b/window-tree.c @@ -461,7 +461,6 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, } } - static void window_tree_draw_label(struct screen_write_ctx *ctx, u_int px, u_int py, u_int sx, u_int sy, const struct grid_cell *gc, const char *label) From cac4eadca01d669d31345993d5067b33a4311fdc Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 19 Aug 2018 20:13:07 +0000 Subject: [PATCH 185/836] Add a flag to force redrawing of the status line even if the content hasn't changed, needed for resizing. --- screen-redraw.c | 21 ++++++++++++--------- server-client.c | 6 ++++++ tmux.h | 6 +++++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 04ea6d3c9b..957746338a 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -344,8 +344,8 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) } /* Update status line and change flags if unchanged. */ -static void -screen_redraw_update(struct client *c) +static int +screen_redraw_update(struct client *c, int flags) { struct window *w = c->session->curw->window; struct window_pane *wp; @@ -358,8 +358,8 @@ screen_redraw_update(struct client *c) redraw = status_prompt_redraw(c); else redraw = status_redraw(c); - if (!redraw) - c->flags &= ~CLIENT_REDRAWSTATUS; + if (!redraw && (~flags & CLIENT_REDRAWSTATUSALWAYS)) + flags &= ~CLIENT_REDRAWSTATUS; if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) { redraw = 0; @@ -368,8 +368,9 @@ screen_redraw_update(struct client *c) redraw = 1; } if (redraw) - c->flags |= CLIENT_REDRAWBORDERS; + flags |= CLIENT_REDRAWBORDERS; } + return (flags); } /* Set up redraw context. */ @@ -398,21 +399,23 @@ void screen_redraw_screen(struct client *c) { struct screen_redraw_ctx ctx; + int flags; if (c->flags & CLIENT_SUSPENDED) return; - screen_redraw_update(c); + flags = screen_redraw_update(c, c->flags); screen_redraw_set_context(c, &ctx); - if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) { + if (flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) { if (ctx.pane_status != CELL_STATUS_OFF) screen_redraw_draw_pane_status(&ctx); screen_redraw_draw_borders(&ctx); } - if (c->flags & CLIENT_REDRAWWINDOW) + if (flags & CLIENT_REDRAWWINDOW) screen_redraw_draw_panes(&ctx); - if (ctx.lines != 0 && (c->flags & CLIENT_REDRAWSTATUS)) + if (ctx.lines != 0 && + (flags & (CLIENT_REDRAWSTATUS|CLIENT_REDRAWSTATUSALWAYS))) screen_redraw_draw_status(&ctx); tty_reset(&c->tty); } diff --git a/server-client.c b/server-client.c index dcf0e496ab..418af6486b 100644 --- a/server-client.c +++ b/server-client.c @@ -1319,6 +1319,12 @@ server_client_check_redraw(struct client *c) if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; + if (c->flags & CLIENT_ALLREDRAWFLAGS) { + log_debug("%s: redraw%s%s%s", c->name, + (c->flags & CLIENT_REDRAWWINDOW) ? " window" : "", + (c->flags & CLIENT_REDRAWSTATUS) ? " status" : "", + (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : ""); + } /* * If there is outstanding data, defer the redraw until it has been diff --git a/tmux.h b/tmux.h index f2baca38a2..9884f60a45 100644 --- a/tmux.h +++ b/tmux.h @@ -1350,8 +1350,12 @@ struct client { #define CLIENT_TRIPLECLICK 0x200000 #define CLIENT_SIZECHANGED 0x400000 #define CLIENT_STATUSOFF 0x800000 +#define CLIENT_REDRAWSTATUSALWAYS 0x1000000 #define CLIENT_ALLREDRAWFLAGS \ - (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS|CLIENT_REDRAWBORDERS) + (CLIENT_REDRAWWINDOW| \ + CLIENT_REDRAWSTATUS| \ + CLIENT_REDRAWSTATUSALWAYS| \ + CLIENT_REDRAWBORDERS) int flags; struct key_table *keytable; From 9f2db6a0af92cb88a029ef8fad003923c0b32936 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 Aug 2018 13:51:09 +0000 Subject: [PATCH 186/836] Fix problems with page scrolling in copy mode, GitHub issue 1440 from Amos Bird. --- window-copy.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/window-copy.c b/window-copy.c index c2d9b9ade4..5d533931fc 100644 --- a/window-copy.c +++ b/window-copy.c @@ -353,9 +353,6 @@ window_copy_pageup(struct window_pane *wp, int half_page) oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wp, oy); - if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) - window_copy_other_end(wp); - if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; @@ -370,9 +367,13 @@ window_copy_pageup(struct window_pane *wp, int half_page) n = screen_size_y(s) - 2; } - if (data->oy + n > screen_hsize(data->backing)) + if (data->oy + n > screen_hsize(data->backing)) { data->oy = screen_hsize(data->backing); - else + if (data->cy < n) + data->cy = 0; + else + data->cy -= n; + } else data->oy += n; if (data->screen.sel == NULL || !data->rectflag) { @@ -397,9 +398,6 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wp, oy); - if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->sely) - window_copy_other_end(wp); - if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; @@ -414,9 +412,13 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) n = screen_size_y(s) - 2; } - if (data->oy < n) + if (data->oy < n) { data->oy = 0; - else + if (data->cy + (n - data->oy) >= screen_size_y(data->backing)) + data->cy = screen_size_y(data->backing) - 1; + else + data->cy += n - data->oy; + } else data->oy -= n; if (data->screen.sel == NULL || !data->rectflag) { From 641191ab2047d1437d46dc0ae787346b74fddca5 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 20 Aug 2018 15:22:14 +0100 Subject: [PATCH 187/836] Support for windows larger than the client. This adds two new options, window-size and default-size, and a new command, resize-window. The force-width and force-height options, and the session_width and session_height formats have been removed. The new window-size option tells tmux how to work out the size of windows: largest means it picks the size of the largest session, smallest the smallest session (similar to the old behaviour) and manual means that it does not automatically resize windows. aggressive-resize modifies the choice of session for largest and smallest as it did before. If a window is in a session attached to a client that is too small, only part of the window is shown. tmux attempts to keep the cursor visible, so the part of the window displayed is changed as the cursor moves (with a small delay, to try and avoid excess redrawing when applications redraw status lines or similar that are not currently visible). Drawing windows which are larger than the client is not as efficient as those which fit, particularly when the cursor moves, so it is recommended to avoid using this on slow machines or networks (set window-size to smallest or manual). The resize-window command can be used to resize a window manually. If it is used, the window-size option is automatically set to manual for the window (undo this with "setw -u window-size"). resize-window works in a similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the window to the size of the smallest client (what it would be if window-size was smallest) and -A the largest. For the same behaviour as force-width or force-height, use resize-width -x or -y. If the global window-size option is set to manual, the default-size option is used for new windows. If -x or -y is used with new-session, that sets the default-size option for the new session. The maximum size of a window is 10000x10000. But expect applications to complain and higher memory use if you make a window that big. The minimum size is the size required for the current layout including borders. This change allows some code improvements, most notably that since windows can now never be cropped, that code can be removed from the layout code, and since panes can now never be outside the size of the window, window_pane_visible can be removed. --- Makefile.am | 1 + TODO | 12 +- cmd-attach-session.c | 2 + cmd-break-pane.c | 2 +- cmd-list-sessions.c | 3 +- cmd-new-session.c | 60 +++--- cmd-resize-window.c | 109 +++++++++++ cmd-select-pane.c | 37 +++- cmd-set-option.c | 15 +- cmd-split-window.c | 2 +- cmd-swap-pane.c | 2 - cmd-switch-client.c | 1 + cmd.c | 2 + format.c | 22 +-- input-keys.c | 2 - layout-custom.c | 2 +- layout-set.c | 8 +- layout.c | 65 ++----- options-table.c | 33 ++-- resize.c | 306 ++++++++++++++++++----------- screen-redraw.c | 294 +++++++++++++++++----------- screen-write.c | 142 +++++++++----- server-client.c | 48 +++-- server-fn.c | 1 + session.c | 15 +- tmux.1 | 104 ++++++++-- tmux.h | 53 +++-- tty.c | 448 ++++++++++++++++++++++++++++++++++++------- window.c | 54 ++---- 29 files changed, 1276 insertions(+), 569 deletions(-) create mode 100644 cmd-resize-window.c diff --git a/Makefile.am b/Makefile.am index a57baa4297..e62a161a41 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,6 +100,7 @@ dist_tmux_SOURCES = \ cmd-rename-session.c \ cmd-rename-window.c \ cmd-resize-pane.c \ + cmd-resize-window.c \ cmd-respawn-pane.c \ cmd-respawn-window.c \ cmd-rotate-window.c \ diff --git a/TODO b/TODO index 32afa1978f..4a92eee9cf 100644 --- a/TODO +++ b/TODO @@ -61,7 +61,6 @@ not attached to a cell at all. this could be the time to introduce panelink to replace layout_cell * way to set hints/limits about pane size for resizing - * panning over window (window larger than visible) * a mode where one application can cross two panes (ie x|y, width = COLUMNS/2 but height = ROWS * 2) * separate active panes for different clients @@ -131,3 +130,14 @@ * finish hooks for notifys * for session_closed, if no sessions at all, perhaps fake up a temporary one + +- pan + * tty_window_offset should try to keep as much as active pane + visible as possible + * rather than centering cursor it might be better if only + moved offset when it gets close to an edge? + * a way to force offset to a particular part of window, scroll + around the window -- command resize-window -d -l -r -u to + move offset and a flag to go back to tracking - but there + is no per-client window data structure so it will have + to forget when the window is changed diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 0db0d855cb..73ff530da6 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -115,6 +115,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); @@ -142,6 +143,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, c->session = s; server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd-break-pane.c b/cmd-break-pane.c index 74ecce6f7b..3b929deecb 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -76,7 +76,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item) window_lost_pane(w, wp); layout_close_pane(wp); - w = wp->window = window_create(dst_s->sx, dst_s->sy); + w = wp->window = window_create(w->sx, w->sy); TAILQ_INSERT_HEAD(&w->panes, wp, entry); w->active = wp; diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index df8a25bc7f..72ff47e8bd 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -30,8 +30,7 @@ #define LIST_SESSIONS_TEMPLATE \ "#{session_name}: #{session_windows} windows " \ - "(created #{t:session_created}) " \ - "[#{session_width}x#{session_height}]" \ + "(created #{t:session_created})" \ "#{?session_grouped, (group ,}" \ "#{session_group}#{?session_grouped,),}" \ "#{?session_attached, (attached),}" diff --git a/cmd-new-session.c b/cmd-new-session.c index e809de244d..162a50bd13 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -71,14 +71,15 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct session *s, *as, *groupwith; struct window *w; struct environ *env; + struct options *oo; struct termios tio, *tiop; struct session_group *sg; const char *errstr, *template, *group, *prefix; - const char *path, *cmd, *tmp; + const char *path, *cmd, *tmp, *value; char **argv, *cause, *cp, *newname, *cwd = NULL; int detached, already_attached, idx, argc; int is_control = 0; - u_int sx, sy; + u_int sx, sy, dsx = 80, dsy = 24; struct environ_entry *envent; struct cmd_find_state fs; enum cmd_retval retval; @@ -189,44 +190,53 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) } } - /* Find new session size. */ - if (!detached) { - sx = c->tty.sx; - sy = c->tty.sy; - if (!is_control && - sy > 0 && - options_get_number(global_s_options, "status")) - sy--; - } else { - sx = 80; - sy = 24; - } - if ((is_control || detached) && args_has(args, 'x')) { + /* Get default session size. */ + if (args_has(args, 'x')) { tmp = args_get(args, 'x'); if (strcmp(tmp, "-") == 0) { if (c != NULL) - sx = c->tty.sx; + dsx = c->tty.sx; } else { - sx = strtonum(tmp, 1, USHRT_MAX, &errstr); + dsx = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "width %s", errstr); goto error; } } } - if ((is_control || detached) && args_has(args, 'y')) { + if (args_has(args, 'y')) { tmp = args_get(args, 'y'); if (strcmp(tmp, "-") == 0) { if (c != NULL) - sy = c->tty.sy; + dsy = c->tty.sy; } else { - sy = strtonum(tmp, 1, USHRT_MAX, &errstr); + dsy = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "height %s", errstr); goto error; } } } + + /* Find new session size. */ + if (!detached && !is_control) { + sx = c->tty.sx; + sy = c->tty.sy; + if (!is_control && + sy > 0 && + options_get_number(global_s_options, "status")) + sy--; + } else { + value = options_get_string(global_s_options, "default-size"); + if (sscanf(value, "%ux%u", &sx, &sy) != 2) { + sx = 80; + sy = 24; + } + if (args_has(args, 'x')) + sx = dsx; + if (args_has(args, 'y')) + sy = dsy; + } if (sx == 0) sx = 1; if (sy == 0) @@ -262,10 +272,15 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); + /* Set up the options. */ + oo = options_create(global_s_options); + if (args_has(args, 'x') || args_has(args, 'y')) + options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + /* Create the new session. */ idx = -1 - options_get_number(global_s_options, "base-index"); - s = session_create(prefix, newname, argc, argv, path, cwd, env, tiop, - idx, sx, sy, &cause); + s = session_create(prefix, newname, argc, argv, path, cwd, env, oo, + tiop, idx, &cause); environ_free(env); if (s == NULL) { cmdq_error(item, "create session failed: %s", cause); @@ -313,6 +328,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd-resize-window.c b/cmd-resize-window.c new file mode 100644 index 0000000000..8c4bc3f611 --- /dev/null +++ b/cmd-resize-window.c @@ -0,0 +1,109 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2018 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include + +#include "tmux.h" + +/* + * Increase or decrease window size. + */ + +static enum cmd_retval cmd_resize_window_exec(struct cmd *, + struct cmdq_item *); + +const struct cmd_entry cmd_resize_window_entry = { + .name = "resize-window", + .alias = "resizew", + + .args = { "aADLRt:Ux:y:", 0, 1 }, + .usage = "[-aADLRU] [-x width] [-y height] " CMD_TARGET_PANE_USAGE " " + "[adjustment]", + + .target = { 't', CMD_FIND_WINDOW, 0 }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_resize_window_exec +}; + +static enum cmd_retval +cmd_resize_window_exec(struct cmd *self, struct cmdq_item *item) +{ + struct args *args = self->args; + struct winlink *wl = item->target.wl; + struct window *w = wl->window; + struct session *s = item->target.s; + const char *errstr; + char *cause; + u_int adjust, sx, sy; + + if (args->argc == 0) + adjust = 1; + else { + adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "adjustment %s", errstr); + return (CMD_RETURN_ERROR); + } + } + + sx = w->sx; + sy = w->sy; + + if (args_has(args, 'x')) { + sx = args_strtonum(args, 'x', WINDOW_MINIMUM, WINDOW_MAXIMUM, + &cause); + if (cause != NULL) { + cmdq_error(item, "width %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + } + if (args_has(args, 'y')) { + sy = args_strtonum(args, 'y', WINDOW_MINIMUM, WINDOW_MAXIMUM, + &cause); + if (cause != NULL) { + cmdq_error(item, "height %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + } + + if (args_has(args, 'L')) { + if (sx >= adjust) + sx -= adjust; + } else if (args_has(args, 'R')) + sx += adjust; + else if (args_has(args, 'U')) { + if (sy >= adjust) + sy -= adjust; + } else if (args_has(args, 'D')) + sy += adjust; + + if (args_has(args, 'A')) + default_window_size(s, w, &sx, &sy, WINDOW_SIZE_LARGEST); + else if (args_has(args, 'a')) + default_window_size(s, w, &sx, &sy, WINDOW_SIZE_SMALLEST); + + options_set_number(w->options, "window-size", WINDOW_SIZE_MANUAL); + resize_window(w, sx, sy); + + return (CMD_RETURN_NORMAL); +} diff --git a/cmd-select-pane.c b/cmd-select-pane.c index a2345fe161..5cec82f269 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -54,6 +54,31 @@ const struct cmd_entry cmd_last_pane_entry = { .exec = cmd_select_pane_exec }; +static void +cmd_select_pane_redraw(struct window *w) +{ + struct client *c; + + /* + * Redraw entire window if it is bigger than the client (the + * offset may change), otherwise just draw borders. + */ + + TAILQ_FOREACH(c, &clients, entry) { + if (c->session == NULL) + continue; + if (c->session->curw->window == w && tty_window_bigger(&c->tty)) + server_redraw_client(c); + else { + if (c->session->curw->window == w) + c->flags |= CLIENT_REDRAWBORDERS; + if (session_has(c->session, w)) + c->flags |= CLIENT_REDRAWSTATUS; + } + + } +} + static enum cmd_retval cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) { @@ -87,15 +112,14 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) window_redraw_active_switch(w, lastwp); if (window_set_active_pane(w, lastwp)) { cmd_find_from_winlink(current, wl, 0); - server_status_window(w); - server_redraw_window_borders(w); + cmd_select_pane_redraw(w); } } return (CMD_RETURN_NORMAL); } if (args_has(args, 'm') || args_has(args, 'M')) { - if (args_has(args, 'm') && !window_pane_visible(wp)) + if (args_has(args, 'm')) return (CMD_RETURN_NORMAL); lastwp = marked_pane.wp; @@ -168,16 +192,11 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (wp == w->active) return (CMD_RETURN_NORMAL); server_unzoom_window(wp->window); - if (!window_pane_visible(wp)) { - cmdq_error(item, "pane not visible"); - return (CMD_RETURN_ERROR); - } window_redraw_active_switch(w, wp); if (window_set_active_pane(w, wp)) { cmd_find_from_winlink_pane(current, wl, wp, 0); hooks_insert(s->hooks, item, current, "after-select-pane"); - server_status_window(w); - server_redraw_window_borders(w); + cmd_select_pane_redraw(w); } return (CMD_RETURN_NORMAL); diff --git a/cmd-set-option.c b/cmd-set-option.c index bdc42caebf..c4b82004de 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -18,6 +18,7 @@ #include +#include #include #include @@ -260,7 +261,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) } if (strcmp(name, "pane-border-status") == 0) { RB_FOREACH(w, windows, &windows) - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } RB_FOREACH(s, sessions, &sessions) status_update_saved(s); @@ -297,7 +298,8 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, int append = args_has(args, 'a'); struct options_entry *o; long long number; - const char *errstr; + const char *errstr, *new; + char *old; key_code key; oe = options_table_entry(parent); @@ -310,7 +312,16 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, switch (oe->type) { case OPTIONS_TABLE_STRING: + old = xstrdup(options_get_string(oo, oe->name)); options_set_string(oo, oe->name, append, "%s", value); + new = options_get_string(oo, oe->name); + if (oe->pattern != NULL && fnmatch(oe->pattern, new, 0) != 0) { + options_set_string(oo, oe->name, 0, "%s", old); + free(old); + cmdq_error(item, "value is invalid: %s", value); + return (-1); + } + free(old); return (0); case OPTIONS_TABLE_NUMBER: number = strtonum(value, oe->minimum, oe->maximum, &errstr); diff --git a/cmd-split-window.c b/cmd-split-window.c index 378576ff6f..f5dde7512c 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -147,7 +147,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) } environ_free(env); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); server_redraw_window(w); if (!args_has(args, 'd')) { diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 7283bf53ab..1de272c4ca 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -105,8 +105,6 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) window_set_active_pane(dst_w, src_wp); } else { tmp_wp = dst_wp; - if (!window_pane_visible(tmp_wp)) - tmp_wp = src_wp; window_set_active_pane(src_w, tmp_wp); } } else { diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 180635df46..6181073dca 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -128,6 +128,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd.c b/cmd.c index e432ae4a76..5df30798cd 100644 --- a/cmd.c +++ b/cmd.c @@ -80,6 +80,7 @@ extern const struct cmd_entry cmd_refresh_client_entry; extern const struct cmd_entry cmd_rename_session_entry; extern const struct cmd_entry cmd_rename_window_entry; extern const struct cmd_entry cmd_resize_pane_entry; +extern const struct cmd_entry cmd_resize_window_entry; extern const struct cmd_entry cmd_respawn_pane_entry; extern const struct cmd_entry cmd_respawn_window_entry; extern const struct cmd_entry cmd_rotate_window_entry; @@ -166,6 +167,7 @@ const struct cmd_entry *cmd_table[] = { &cmd_rename_session_entry, &cmd_rename_window_entry, &cmd_resize_pane_entry, + &cmd_resize_window_entry, &cmd_respawn_pane_entry, &cmd_respawn_window_entry, &cmd_rotate_window_entry, diff --git a/format.c b/format.c index d3da9eb7eb..cea338a1fe 100644 --- a/format.c +++ b/format.c @@ -1330,8 +1330,6 @@ format_defaults_session(struct format_tree *ft, struct session *s) format_add(ft, "session_name", "%s", s->name); format_add(ft, "session_windows", "%u", winlink_count(&s->windows)); - format_add(ft, "session_width", "%u", s->sx); - format_add(ft, "session_height", "%u", s->sy); format_add(ft, "session_id", "$%u", s->id); sg = session_group_contains(s); @@ -1492,18 +1490,14 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_dead_status", "%d", WEXITSTATUS(status)); format_add(ft, "pane_dead", "%d", wp->fd == -1); - if (window_pane_visible(wp)) { - format_add(ft, "pane_left", "%u", wp->xoff); - format_add(ft, "pane_top", "%u", wp->yoff); - format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); - format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); - format_add(ft, "pane_at_left", "%d", wp->xoff == 0); - format_add(ft, "pane_at_top", "%d", wp->yoff == 0); - format_add(ft, "pane_at_right", "%d", - wp->xoff + wp->sx == w->sx); - format_add(ft, "pane_at_bottom", "%d", - wp->yoff + wp->sy == w->sy); - } + format_add(ft, "pane_left", "%u", wp->xoff); + format_add(ft, "pane_top", "%u", wp->yoff); + format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); + format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); + format_add(ft, "pane_at_left", "%d", wp->xoff == 0); + format_add(ft, "pane_at_top", "%d", wp->yoff == 0); + format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == w->sx); + format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == w->sy); format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); if (wp->mode != NULL) diff --git a/input-keys.c b/input-keys.c index 85dc25912d..d3ff0dc072 100644 --- a/input-keys.c +++ b/input-keys.c @@ -247,8 +247,6 @@ input_key_mouse(struct window_pane *wp, struct mouse_event *m) if ((mode & ALL_MOUSE_MODES) == 0) return; - if (!window_pane_visible(wp)) - return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; diff --git a/layout-custom.c b/layout-custom.c index 1b8f576efe..9886afe121 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -167,7 +167,7 @@ layout_parse(struct window *w, const char *layout) /* Update pane offsets and sizes. */ layout_fix_offsets(lc); - layout_fix_panes(w, lc->sx, lc->sy); + layout_fix_panes(w); /* Then resize the layout back to the original window size. */ layout_resize(w, sx, sy); diff --git a/layout-set.c b/layout-set.c index 5055f672b9..b9769ed53a 100644 --- a/layout-set.c +++ b/layout-set.c @@ -148,7 +148,7 @@ layout_set_even(struct window *w, enum layout_type type) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -284,7 +284,7 @@ layout_set_main_h(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -408,7 +408,7 @@ layout_set_main_v(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -511,7 +511,7 @@ layout_set_tiled(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); diff --git a/layout.c b/layout.c index e1112ffa2b..c71dc7e564 100644 --- a/layout.c +++ b/layout.c @@ -253,71 +253,29 @@ layout_need_status(struct layout_cell *lc, int at_top) /* Update pane offsets and sizes based on their cells. */ void -layout_fix_panes(struct window *w, u_int wsx, u_int wsy) +layout_fix_panes(struct window *w) { struct window_pane *wp; struct layout_cell *lc; - u_int sx, sy; - int shift, status, at_top; + int shift, status; status = options_get_number(w->options, "pane-border-status"); - at_top = (status == 1); TAILQ_FOREACH(wp, &w->panes, entry) { if ((lc = wp->layout_cell) == NULL) continue; if (status != 0) - shift = layout_need_status(lc, at_top); + shift = layout_need_status(lc, status == 1); else shift = 0; wp->xoff = lc->xoff; wp->yoff = lc->yoff; - if (shift && at_top) + if (shift && status == 1) wp->yoff += 1; - /* - * Layout cells are limited by the smallest size of other cells - * within the same row or column; if this isn't the case - * resizing becomes difficult. - * - * However, panes do not have to take up their entire cell, so - * they can be cropped to the window edge if the layout - * overflows and they are partly visible. - * - * This stops cells being hidden unnecessarily. - */ - - /* - * Work out the horizontal size. If the pane is actually - * outside the window or the entire pane is already visible, - * don't crop. - */ - if (lc->xoff >= wsx || lc->xoff + lc->sx < wsx) - sx = lc->sx; - else { - sx = wsx - lc->xoff; - if (sx < 1) - sx = lc->sx; - } - - /* - * Similarly for the vertical size; the minimum vertical size - * is two because scroll regions cannot be one line. - */ - if (lc->yoff >= wsy || lc->yoff + lc->sy < wsy) - sy = lc->sy; - else { - sy = wsy - lc->yoff; - if (sy < 2) - sy = lc->sy; - } - - if (shift) - sy -= 1; - - window_pane_resize(wp, sx, sy); + window_pane_resize(wp, lc->sx, lc->sy - shift); } } @@ -491,8 +449,7 @@ layout_init(struct window *w, struct window_pane *wp) lc = w->layout_root = layout_create_cell(NULL); layout_set_size(lc, w->sx, w->sy, 0, 0); layout_make_leaf(lc, wp); - - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } void @@ -550,7 +507,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, sx, sy); + layout_fix_panes(w); } /* Resize a pane to an absolute size. */ @@ -610,7 +567,7 @@ layout_resize_layout(struct window *w, struct layout_cell *lc, /* Fix cell offsets. */ layout_fix_offsets(w->layout_root); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); notify_window("window-layout-changed", w); } @@ -717,7 +674,7 @@ void layout_assign_pane(struct layout_cell *lc, struct window_pane *wp) { layout_make_leaf(lc, wp); - layout_fix_panes(wp->window, wp->window->sx, wp->window->sy); + layout_fix_panes(wp->window); } /* Calculate the new pane size for resized parent. */ @@ -1037,7 +994,7 @@ layout_close_pane(struct window_pane *wp) /* Fix pane offsets and sizes. */ if (w->layout_root != NULL) { layout_fix_offsets(w->layout_root); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } notify_window("window-layout-changed", w); } @@ -1094,7 +1051,7 @@ layout_spread_out(struct window_pane *wp) do { if (layout_spread_cell(w, parent)) { layout_fix_offsets(parent); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); break; } } while ((parent = parent->parent) != NULL); diff --git a/options-table.c b/options-table.c index 2b6b794ba7..0776f0b772 100644 --- a/options-table.c +++ b/options-table.c @@ -59,6 +59,9 @@ static const char *options_table_pane_status_list[] = { static const char *options_table_set_clipboard_list[] = { "off", "external", "on", NULL }; +static const char *options_table_window_size_list[] = { + "largest", "smallest", "manual", NULL +}; /* Top-level options. */ const struct options_table_entry options_table[] = { @@ -193,6 +196,13 @@ const struct options_table_entry options_table[] = { .default_str = _PATH_BSHELL }, + { .name = "default-size", + .type = OPTIONS_TABLE_STRING, + .scope = OPTIONS_TABLE_SESSION, + .pattern = "[0-9]*x[0-9]*", + .default_str = "80x24" + }, + { .name = "destroy-unattached", .type = OPTIONS_TABLE_FLAG, .scope = OPTIONS_TABLE_SESSION, @@ -588,22 +598,6 @@ const struct options_table_entry options_table[] = { .default_num = 1 }, - { .name = "force-height", - .type = OPTIONS_TABLE_NUMBER, - .scope = OPTIONS_TABLE_WINDOW, - .minimum = 0, - .maximum = INT_MAX, - .default_num = 0 - }, - - { .name = "force-width", - .type = OPTIONS_TABLE_NUMBER, - .scope = OPTIONS_TABLE_WINDOW, - .minimum = 0, - .maximum = INT_MAX, - .default_num = 0 - }, - { .name = "main-pane-height", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_WINDOW, @@ -770,6 +764,13 @@ const struct options_table_entry options_table[] = { .default_str = "default" }, + { .name = "window-size", + .type = OPTIONS_TABLE_CHOICE, + .scope = OPTIONS_TABLE_WINDOW, + .choices = options_table_window_size_list, + .default_num = WINDOW_SIZE_LARGEST + }, + { .name = "window-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, diff --git a/resize.c b/resize.c index 1c9694da2d..faaa044de7 100644 --- a/resize.c +++ b/resize.c @@ -22,144 +22,224 @@ #include "tmux.h" -/* - * Recalculate window and session sizes. - * - * Every session has the size of the smallest client it is attached to and - * every window the size of the smallest session it is attached to. - * - * So, when a client is resized or a session attached to or detached from a - * client, the window sizes must be recalculated. For each session, find the - * smallest client it is attached to, and resize it to that size. Then for - * every window, find the smallest session it is attached to, resize it to that - * size and clear and redraw every client with it as the current window. - * - * This is quite inefficient - better/additional data structures are needed - * to make it better. - */ +void +resize_window(struct window *w, u_int sx, u_int sy) +{ + int zoomed; + + /* Check size limits. */ + if (sx < WINDOW_MINIMUM) + sx = WINDOW_MINIMUM; + if (sx > WINDOW_MAXIMUM) + sx = WINDOW_MAXIMUM; + if (sy < WINDOW_MINIMUM) + sy = WINDOW_MINIMUM; + if (sy > WINDOW_MAXIMUM) + sy = WINDOW_MAXIMUM; + + /* If the window is zoomed, unzoom. */ + zoomed = w->flags & WINDOW_ZOOMED; + if (zoomed) + window_unzoom(w); + + /* Resize the layout first. */ + layout_resize(w, sx, sy); + + /* Resize the window, it can be no smaller than the layout. */ + if (sx < w->layout_root->sx) + sx = w->layout_root->sx; + if (sy < w->layout_root->sy) + sy = w->layout_root->sy; + window_resize(w, sx, sy); + + /* Restore the window zoom state. */ + if (zoomed) + window_zoom(w->active); + + tty_update_window_offset(w); + server_redraw_window(w); + notify_window("window-layout-changed", w); +} void -recalculate_sizes(void) +default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, + int type) { - struct session *s; - struct client *c; - struct window *w; - struct window_pane *wp; - u_int ssx, ssy, has, limit, lines; - int flag, is_zoomed, forced; + struct client *c; + u_int cx, cy; + const char *value; - RB_FOREACH(s, sessions, &sessions) { - lines = status_line_size(s); + if (type == -1) + type = options_get_number(global_w_options, "window-size"); + if (type == WINDOW_SIZE_MANUAL) + goto manual; - s->attached = 0; - ssx = ssy = UINT_MAX; + if (type == WINDOW_SIZE_LARGEST) { + *sx = *sy = 0; TAILQ_FOREACH(c, &clients, entry) { - if (c->flags & CLIENT_SUSPENDED) + if (c->session == NULL) continue; - if ((c->flags & (CLIENT_CONTROL|CLIENT_SIZECHANGED)) == - CLIENT_CONTROL) + if (w != NULL && !session_has(c->session, w)) continue; - if (c->session == s) { - if (c->tty.sx < ssx) - ssx = c->tty.sx; - c->flags &= ~CLIENT_STATUSOFF; - if (lines != 0 && lines + PANE_MINIMUM > c->tty.sy) - c->flags |= CLIENT_STATUSOFF; - if ((~c->flags & CLIENT_STATUSOFF) && - !(c->flags & CLIENT_CONTROL) && - c->tty.sy > lines && - c->tty.sy - lines < ssy) - ssy = c->tty.sy - lines; - else if (c->tty.sy < ssy) - ssy = c->tty.sy; - s->attached++; - } + if (w == NULL && c->session != s) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - tty_status_lines(&c->tty); + + if (cx > *sx) + *sx = cx; + if (cy > *sy) + *sy = cy; } - if (ssx == UINT_MAX || ssy == UINT_MAX) - continue; + if (*sx == 0 || *sy == 0) + goto manual; + } else if (type == WINDOW_SIZE_SMALLEST) { + *sx = *sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if (c->session == NULL) + continue; + if (w != NULL && !session_has(c->session, w)) + continue; + if (w == NULL && c->session != s) + continue; - if (lines != 0 && ssy == 0) - ssy = lines; + cx = c->tty.sx; + cy = c->tty.sy - tty_status_lines(&c->tty); - if (s->sx == ssx && s->sy == ssy) - continue; + if (cx < *sx) + *sx = cx; + if (cy < *sy) + *sy = cy; + } + if (*sx == UINT_MAX || *sy == UINT_MAX) + goto manual; + } + goto done; - log_debug("session $%u size %u,%u (was %u,%u)", s->id, ssx, ssy, - s->sx, s->sy); +manual: + value = options_get_string(s->options, "default-size"); + if (sscanf(value, "%ux%u", sx, sy) != 2) { + *sx = 80; + *sy = 24; + } - s->sx = ssx; - s->sy = ssy; +done: + if (*sx < WINDOW_MINIMUM) + *sx = WINDOW_MINIMUM; + if (*sx > WINDOW_MAXIMUM) + *sx = WINDOW_MAXIMUM; + if (*sy < WINDOW_MINIMUM) + *sy = WINDOW_MINIMUM; + if (*sy > WINDOW_MAXIMUM) + *sy = WINDOW_MAXIMUM; +} +void +recalculate_sizes(void) +{ + struct session *s; + struct client *c; + struct window *w; + u_int sx, sy, cx, cy; + int flags, type, current, has, changed; + + /* + * Clear attached count and update saved status line information for + * each session. + */ + RB_FOREACH(s, sessions, &sessions) { + s->attached = 0; status_update_saved(s); } + /* + * Increment attached count and check the status line size for each + * client. + */ + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + + flags = c->flags; + if (flags & CLIENT_SUSPENDED) + continue; + if ((flags & CLIENT_CONTROL) && (~flags & CLIENT_SIZECHANGED)) + continue; + + if (c->tty.sy <= tty_status_lines(&c->tty)) + c->flags |= CLIENT_STATUSOFF; + else + c->flags &= ~CLIENT_STATUSOFF; + + s->attached++; + } + + /* Walk each window and adjust the size. */ RB_FOREACH(w, windows, &windows) { if (w->active == NULL) continue; - flag = options_get_number(w->options, "aggressive-resize"); + log_debug("%s: @%u is %u,%u", __func__, w->id, w->sx, w->sy); - ssx = ssy = UINT_MAX; - RB_FOREACH(s, sessions, &sessions) { - if (s->attached == 0) - continue; - if (flag) - has = s->curw->window == w; - else - has = session_has(s, w); - if (has) { - if (s->sx < ssx) - ssx = s->sx; - if (s->sy < ssy) - ssy = s->sy; - } - } - if (ssx == UINT_MAX || ssy == UINT_MAX) + type = options_get_number(w->options, "window-size"); + if (type == WINDOW_SIZE_MANUAL) continue; - - forced = 0; - limit = options_get_number(w->options, "force-width"); - if (limit >= PANE_MINIMUM && ssx > limit) { - ssx = limit; - forced |= WINDOW_FORCEWIDTH; - } - limit = options_get_number(w->options, "force-height"); - if (limit >= PANE_MINIMUM && ssy > limit) { - ssy = limit; - forced |= WINDOW_FORCEHEIGHT; + current = !options_get_number(w->options, "aggressive-resize"); + + changed = 1; + if (type == WINDOW_SIZE_LARGEST) { + sx = sy = 0; + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - tty_status_lines(&c->tty); + + if (cx > sx) + sx = cx; + if (cy > sy) + sy = cy; + } + if (sx == 0 || sy == 0) + changed = 0; + } else if (type == WINDOW_SIZE_SMALLEST) { + sx = sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - tty_status_lines(&c->tty); + + if (cx < sx) + sx = cx; + if (cy < sy) + sy = cy; + } + if (sx == UINT_MAX || sy == UINT_MAX) + changed = 0; } + if (w->sx == sx && w->sy == sy) + changed = 0; - if (w->sx == ssx && w->sy == ssy) + if (!changed) { + tty_update_window_offset(w); continue; - log_debug("window @%u size %u,%u (was %u,%u)", w->id, ssx, ssy, - w->sx, w->sy); - - w->flags &= ~(WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); - w->flags |= forced; - - is_zoomed = w->flags & WINDOW_ZOOMED; - if (is_zoomed) - window_unzoom(w); - layout_resize(w, ssx, ssy); - window_resize(w, ssx, ssy); - if (is_zoomed && window_pane_visible(w->active)) - window_zoom(w->active); - - /* - * If the current pane is now not visible, move to the next - * that is. - */ - wp = w->active; - while (!window_pane_visible(w->active)) { - w->active = TAILQ_PREV(w->active, window_panes, entry); - if (w->active == NULL) - w->active = TAILQ_LAST(&w->panes, window_panes); - if (w->active == wp) - break; } - if (w->active == w->last) - w->last = NULL; - - server_redraw_window(w); - notify_window("window-layout-changed", w); + log_debug("%s: @%u changed to %u,%u", __func__, w->id, sx, sy); + resize_window(w, sx, sy); } } diff --git a/screen-redraw.c b/screen-redraw.c index 957746338a..118830c72d 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -33,11 +33,15 @@ struct screen_redraw_ctx { u_int sx; u_int sy; + u_int ox; + u_int oy; }; static void screen_redraw_draw_borders(struct screen_redraw_ctx *); static void screen_redraw_draw_panes(struct screen_redraw_ctx *); static void screen_redraw_draw_status(struct screen_redraw_ctx *); +static void screen_redraw_draw_pane(struct screen_redraw_ctx *, + struct window_pane *); static void screen_redraw_draw_number(struct screen_redraw_ctx *, struct window_pane *); @@ -100,8 +104,6 @@ screen_redraw_cell_border(struct client *c, u_int px, u_int py) /* Check all the panes. */ TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; if ((retval = screen_redraw_cell_border1(wp, px, py)) != -1) return (!!retval); } @@ -126,9 +128,6 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, if (pane_status != CELL_STATUS_OFF) { TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; - if (pane_status == CELL_STATUS_TOP) line = wp->yoff - 1; else @@ -141,8 +140,6 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, } TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; *wpp = wp; /* If outside the pane and its border, skip it. */ @@ -320,25 +317,54 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; struct window *w = c->session->curw->window; - struct options *oo = c->session->options; struct tty *tty = &c->tty; struct window_pane *wp; - int spos; - u_int yoff; + struct screen *s; + u_int i, x, width, xoff, yoff, size; + + log_debug("%s: %s @%u", __func__, c->name, w->id); - spos = options_get_number(oo, "status-position"); TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; + s = &wp->status_screen; + + size = wp->status_size; if (ctx->pane_status == CELL_STATUS_TOP) yoff = wp->yoff - 1; else yoff = wp->yoff + wp->sy; - if (spos == 0) - yoff += 1; + xoff = wp->xoff + 2; + + if (xoff + size <= ctx->ox || + xoff >= ctx->ox + ctx->sx || + yoff < ctx->oy || + yoff >= ctx->oy + ctx->sy) + continue; + + if (xoff >= ctx->ox && xoff + size <= ctx->ox + ctx->sx) { + /* All visible. */ + i = 0; + x = xoff - ctx->ox; + width = size; + } else if (xoff < ctx->ox && xoff + size > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + i = ctx->ox; + x = 0; + width = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + i = ctx->ox - xoff; + x = 0; + width = size - i; + } else { + /* Right not visible. */ + i = 0; + x = xoff - ctx->ox; + width = size - (xoff + size - ctx->sx); + } - tty_draw_line(tty, NULL, &wp->status_screen, 0, wp->xoff + 2, - yoff); + if (ctx->top) + yoff += ctx->lines; + tty_draw_line(tty, NULL, s, i, 0, width, x, yoff - ctx->oy); } tty_cursor(tty, 0, 0); } @@ -385,13 +411,15 @@ screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) memset(ctx, 0, sizeof *ctx); ctx->c = c; - ctx->lines = tty_status_lines(c); + ctx->lines = tty_status_lines(&c->tty); if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) ctx->top = 1; ctx->pane_status = options_get_number(wo, "pane-border-status"); - ctx->sx = c->tty.sx; - ctx->sy = c->tty.sy - ctx->lines; + tty_window_offset(&c->tty, &ctx->ox, &ctx->oy, &ctx->sx, &ctx->sy); + + log_debug("%s: %s @%u ox=%u oy=%u sx=%u sy=%u %u/%d", __func__, c->name, + w->id, ctx->ox, ctx->oy, ctx->sx, ctx->sy, ctx->lines, ctx->top); } /* Redraw entire screen. */ @@ -420,33 +448,23 @@ screen_redraw_screen(struct client *c) tty_reset(&c->tty); } -/* Draw a single pane. */ +/* Redraw a single pane. */ void screen_redraw_pane(struct client *c, struct window_pane *wp) { - u_int i, yoff; - - if (!window_pane_visible(wp)) - return; - - yoff = wp->yoff; - if (status_at_line(c) == 0) - yoff += status_line_size(c->session); + struct screen_redraw_ctx ctx; - log_debug("%s: redraw pane %%%u (at %u,%u)", c->name, wp->id, - wp->xoff, yoff); + screen_redraw_set_context(c, &ctx); - for (i = 0; i < wp->sy; i++) - tty_draw_pane(&c->tty, wp, i, wp->xoff, yoff); + screen_redraw_draw_pane(&ctx, wp); tty_reset(&c->tty); } /* Draw a border cell. */ static void -screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, - int small, u_int msgx, u_int msgy, struct grid_cell *m_active_gc, - struct grid_cell *active_gc, struct grid_cell *m_other_gc, - struct grid_cell *other_gc) +screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int i, u_int j, + struct grid_cell *m_active_gc, struct grid_cell *active_gc, + struct grid_cell *m_other_gc, struct grid_cell *other_gc) { struct client *c = ctx->c; struct session *s = c->session; @@ -455,14 +473,12 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, struct window_pane *wp; struct window_pane *active = w->active; struct window_pane *marked = marked_pane.wp; - u_int type; + u_int type, x = ctx->ox + i, y = ctx->oy + j; int flag, pane_status = ctx->pane_status; type = screen_redraw_check_cell(c, x, y, pane_status, &wp); if (type == CELL_INSIDE) return; - if (type == CELL_OUTSIDE && small && x > msgx && y == msgy) - return; flag = screen_redraw_check_is(x, y, type, pane_status, w, active, wp); if (server_is_marked(s, s->curw, marked_pane.wp) && @@ -476,9 +492,9 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, else tty_attributes(tty, other_gc, NULL); if (ctx->top) - tty_cursor(tty, x, ctx->lines + y); + tty_cursor(tty, i, ctx->lines + j); else - tty_cursor(tty, x, y); + tty_cursor(tty, i, j); tty_putc(tty, CELL_BORDERS[type]); } @@ -489,42 +505,12 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) struct client *c = ctx->c; struct session *s = c->session; struct window *w = s->curw->window; - struct options *oo = w->options; struct tty *tty = &c->tty; + struct options *oo = w->options; struct grid_cell m_active_gc, active_gc, m_other_gc, other_gc; - struct grid_cell msg_gc; - u_int i, j, msgx = 0, msgy = 0; - int small, flags; - char msg[256]; - const char *tmp; - size_t msglen = 0; - - small = (ctx->sy + ctx->top > w->sy) || (ctx->sx > w->sx); - if (small) { - flags = w->flags & (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); - if (flags == (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT)) - tmp = "force-width, force-height"; - else if (flags == WINDOW_FORCEWIDTH) - tmp = "force-width"; - else if (flags == WINDOW_FORCEHEIGHT) - tmp = "force-height"; - else if (c->flags & CLIENT_STATUSOFF) - tmp = "status line"; - else - tmp = "a smaller client"; - xsnprintf(msg, sizeof msg, "(size %ux%u from %s)", - w->sx, w->sy, tmp); - msglen = strlen(msg); - - if (ctx->sy - 1 + ctx->top > w->sy && ctx->sx >= msglen) { - msgx = ctx->sx - msglen; - msgy = ctx->sy - 1 + ctx->top; - } else if (ctx->sx - w->sx > msglen) { - msgx = ctx->sx - msglen; - msgy = ctx->sy - 1 + ctx->top; - } else - small = 0; - } + u_int i, j; + + log_debug("%s: %s @%u", __func__, c->name, w->id); style_apply(&other_gc, oo, "pane-border-style"); style_apply(&active_gc, oo, "pane-active-border-style"); @@ -535,20 +521,12 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < ctx->sy; j++) { - for (i = 0; i < ctx->sx; i++) { - screen_redraw_draw_borders_cell(ctx, i, j, small, - msgx, msgy, &m_active_gc, &active_gc, &m_other_gc, - &other_gc); + for (j = 0; j < tty->sy - ctx->lines; j++) { + for (i = 0; i < tty->sx; i++) { + screen_redraw_draw_borders_cell(ctx, i, j, + &m_active_gc, &active_gc, &m_other_gc, &other_gc); } } - - if (small) { - memcpy(&msg_gc, &grid_default_cell, sizeof msg_gc); - tty_attributes(tty, &msg_gc, NULL); - tty_cursor(tty, msgx, msgy); - tty_puts(tty, msg); - } } /* Draw the panes. */ @@ -557,19 +535,12 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; struct window *w = c->session->curw->window; - struct tty *tty = &c->tty; struct window_pane *wp; - u_int i, y; - if (ctx->top) - y = ctx->lines; - else - y = 0; + log_debug("%s: %s @%u", __func__, c->name, w->id); + TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; - for (i = 0; i < wp->sy; i++) - tty_draw_pane(tty, wp, i, wp->xoff, y + wp->yoff); + screen_redraw_draw_pane(ctx, wp); if (c->flags & CLIENT_IDENTIFY) screen_redraw_draw_number(ctx, wp); } @@ -580,15 +551,74 @@ static void screen_redraw_draw_status(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; + struct window *w = c->session->curw->window; struct tty *tty = &c->tty; + struct screen *s = &c->status.status; u_int i, y; + log_debug("%s: %s @%u", __func__, c->name, w->id); + if (ctx->top) y = 0; else - y = ctx->sy; + y = c->tty.sy - ctx->lines; for (i = 0; i < ctx->lines; i++) - tty_draw_line(tty, NULL, &c->status.status, i, 0, y); + tty_draw_line(tty, NULL, s, 0, i, UINT_MAX, 0, y + i); +} + +/* Draw one pane. */ +static void +screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp) +{ + struct client *c = ctx->c; + struct window *w = c->session->curw->window; + struct tty *tty = &c->tty; + struct screen *s; + u_int i, j, top, x, y, width; + + log_debug("%s: %s @%u %%%u", __func__, c->name, w->id, wp->id); + + if (wp->xoff + wp->sx <= ctx->ox || wp->xoff >= ctx->ox + ctx->sx) + return; + if (ctx->top) + top = ctx->lines; + else + top = 0; + + s = wp->screen; + for (j = 0; j < wp->sy; j++) { + if (wp->yoff + j < ctx->oy || wp->yoff + j >= ctx->oy + ctx->sy) + continue; + y = top + wp->yoff + j - ctx->oy; + + if (wp->xoff >= ctx->ox && + wp->xoff + wp->sx <= ctx->ox + ctx->sx) { + /* All visible. */ + i = 0; + x = wp->xoff - ctx->ox; + width = wp->sx; + } else if (wp->xoff < ctx->ox && + wp->xoff + wp->sx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + i = ctx->ox; + x = 0; + width = ctx->sx; + } else if (wp->xoff < ctx->ox) { + /* Left not visible. */ + i = ctx->ox - wp->xoff; + x = 0; + width = wp->sx - i; + } else { + /* Right not visible. */ + i = 0; + x = wp->xoff - ctx->ox; + width = wp->sx - (wp->xoff + wp->sx - ctx->sx); + } + log_debug("%s: %s %%%u line %u,%u at %u,%u, width %u", + __func__, c->name, wp->id, i, j, x, y, width); + + tty_draw_line(tty, wp, s, i, j, width, x, y); + } } /* Draw number on a pane. */ @@ -601,27 +631,69 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) struct options *oo = s->options; struct window *w = wp->window; struct grid_cell gc; - u_int idx, px, py, i, j, xoff, yoff; + u_int idx, px, py, i, j, xoff, yoff, sx, sy; int colour, active_colour; char buf[16], *ptr; size_t len; + if (wp->xoff + wp->sx <= ctx->ox || + wp->xoff >= ctx->ox + ctx->sx || + wp->yoff + wp->sy <= ctx->oy || + wp->yoff >= ctx->oy + ctx->sy) + return; + + if (wp->xoff >= ctx->ox && wp->xoff + wp->sx <= ctx->ox + ctx->sx) { + /* All visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx; + } else if (wp->xoff < ctx->ox && + wp->xoff + wp->sx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + xoff = 0; + sx = ctx->sx; + } else if (wp->xoff < ctx->ox) { + /* Left not visible. */ + xoff = 0; + sx = wp->sx - (ctx->ox - wp->xoff); + } else { + /* Right not visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx - (wp->xoff + wp->sx - ctx->sx); + } + if (wp->yoff >= ctx->oy && wp->yoff + wp->sy <= ctx->oy + ctx->sy) { + /* All visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy; + } else if (wp->yoff < ctx->oy && + wp->yoff + wp->sy > ctx->oy + ctx->sy) { + /* Both top and bottom not visible. */ + yoff = 0; + sy = ctx->sy; + } else if (wp->yoff < ctx->oy) { + /* Top not visible. */ + yoff = 0; + sy = wp->sy - (ctx->oy - wp->yoff); + } else { + /* Bottom not visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy - (wp->yoff + wp->sy - ctx->sy); + } + + if (ctx->top) + yoff += ctx->lines; + px = sx / 2; + py = sy / 2; + if (window_pane_index(wp, &idx) != 0) fatalx("index not found"); len = xsnprintf(buf, sizeof buf, "%u", idx); - if (wp->sx < len) + if (sx < len) return; colour = options_get_number(oo, "display-panes-colour"); active_colour = options_get_number(oo, "display-panes-active-colour"); - px = wp->sx / 2; py = wp->sy / 2; - xoff = wp->xoff; yoff = wp->yoff; - - if (ctx->top) - yoff += ctx->lines; - - if (wp->sx < len * 6 || wp->sy < 5) { + if (sx < len * 6 || sy < 5) { tty_cursor(tty, xoff + px - len / 2, yoff + py); goto draw_text; } @@ -653,9 +725,9 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) } len = xsnprintf(buf, sizeof buf, "%ux%u", wp->sx, wp->sy); - if (wp->sx < len || wp->sy < 6) + if (sx < len || sy < 6) return; - tty_cursor(tty, xoff + wp->sx - len, yoff); + tty_cursor(tty, xoff + sx - len, yoff); draw_text: memcpy(&gc, &grid_default_cell, sizeof gc); diff --git a/screen-write.c b/screen-write.c index fac5229e99..b9db16a96f 100644 --- a/screen-write.c +++ b/screen-write.c @@ -54,6 +54,41 @@ struct screen_write_collect_line { TAILQ_HEAD(, screen_write_collect_item) items; }; +static void +screen_write_offset_timer(__unused int fd, __unused short events, void *data) +{ + struct window *w = data; + + tty_update_window_offset(w); +} + +/* Set cursor position. */ +static void +screen_write_set_cursor(struct screen_write_ctx *ctx, int cx, int cy) +{ + struct window_pane *wp = ctx->wp; + struct window *w; + struct screen *s = ctx->s; + struct timeval tv = { .tv_usec = 10000 }; + + if (cx != -1 && (u_int)cx == s->cx && cy != -1 && (u_int)cy == s->cy) + return; + + if (cx != -1) + s->cx = cx; + if (cy != -1) + s->cy = cy; + + if (wp == NULL) + return; + w = wp->window; + + if (!event_initialized(&w->offset_timer)) + evtimer_set(&w->offset_timer, screen_write_offset_timer, w); + if (!evtimer_pending(&w->offset_timer, NULL)) + evtimer_add(&w->offset_timer, &tv); +} + /* Initialize writing with a window. */ void screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, @@ -603,25 +638,26 @@ void screen_write_cursorup(struct screen_write_ctx *ctx, u_int ny) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (ny == 0) ny = 1; - if (s->cy < s->rupper) { + if (cy < s->rupper) { /* Above region. */ - if (ny > s->cy) - ny = s->cy; + if (ny > cy) + ny = cy; } else { /* Below region. */ - if (ny > s->cy - s->rupper) - ny = s->cy - s->rupper; + if (ny > cy - s->rupper) + ny = cy - s->rupper; } - if (s->cx == screen_size_x(s)) - s->cx--; - if (ny == 0) - return; + if (cx == screen_size_x(s)) + cx--; + + cy -= ny; - s->cy -= ny; + screen_write_set_cursor(ctx, cx, cy); } /* Cursor down by ny. */ @@ -629,25 +665,28 @@ void screen_write_cursordown(struct screen_write_ctx *ctx, u_int ny) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (ny == 0) ny = 1; - if (s->cy > s->rlower) { + if (cy > s->rlower) { /* Below region. */ - if (ny > screen_size_y(s) - 1 - s->cy) - ny = screen_size_y(s) - 1 - s->cy; + if (ny > screen_size_y(s) - 1 - cy) + ny = screen_size_y(s) - 1 - cy; } else { /* Above region. */ - if (ny > s->rlower - s->cy) - ny = s->rlower - s->cy; + if (ny > s->rlower - cy) + ny = s->rlower - cy; } - if (s->cx == screen_size_x(s)) - s->cx--; - if (ny == 0) + if (cx == screen_size_x(s)) + cx--; + else if (ny == 0) return; - s->cy += ny; + cy += ny; + + screen_write_set_cursor(ctx, cx, cy); } /* Cursor right by nx. */ @@ -655,16 +694,19 @@ void screen_write_cursorright(struct screen_write_ctx *ctx, u_int nx) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (nx == 0) nx = 1; - if (nx > screen_size_x(s) - 1 - s->cx) - nx = screen_size_x(s) - 1 - s->cx; + if (nx > screen_size_x(s) - 1 - cx) + nx = screen_size_x(s) - 1 - cx; if (nx == 0) return; - s->cx += nx; + cx += nx; + + screen_write_set_cursor(ctx, cx, cy); } /* Cursor left by nx. */ @@ -672,16 +714,19 @@ void screen_write_cursorleft(struct screen_write_ctx *ctx, u_int nx) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (nx == 0) nx = 1; - if (nx > s->cx) - nx = s->cx; + if (nx > cx) + nx = cx; if (nx == 0) return; - s->cx -= nx; + cx -= nx; + + screen_write_set_cursor(ctx, cx, cy); } /* Backspace; cursor left unless at start of wrapped line when can move up. */ @@ -690,17 +735,20 @@ screen_write_backspace(struct screen_write_ctx *ctx) { struct screen *s = ctx->s; struct grid_line *gl; + u_int cx = s->cx, cy = s->cy; - if (s->cx == 0) { - if (s->cy == 0) + if (cx == 0) { + if (cy == 0) return; - gl = grid_get_line(s->grid, s->grid->hsize + s->cy - 1); + gl = grid_get_line(s->grid, s->grid->hsize + cy - 1); if (gl->flags & GRID_LINE_WRAPPED) { - s->cy--; - s->cx = screen_size_x(s) - 1; + cy--; + cx = screen_size_x(s) - 1; } } else - s->cx--; + cx--; + + screen_write_set_cursor(ctx, cx, cy); } /* VT100 alignment test. */ @@ -712,8 +760,6 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx) struct grid_cell gc; u_int xx, yy; - screen_write_initctx(ctx, &ttyctx); - memcpy(&gc, &grid_default_cell, sizeof gc); utf8_set(&gc.data, 'E'); @@ -722,8 +768,7 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx) grid_view_set_cell(s->grid, xx, yy, &gc); } - s->cx = 0; - s->cy = 0; + screen_write_set_cursor(ctx, 0, 0); s->rupper = 0; s->rlower = screen_size_y(s) - 1; @@ -988,8 +1033,7 @@ screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) if (py > screen_size_y(s) - 1) py = screen_size_y(s) - 1; - s->cx = px; - s->cy = py; + screen_write_set_cursor(ctx, px, py); } /* Reverse index (up with scroll). */ @@ -1005,7 +1049,7 @@ screen_write_reverseindex(struct screen_write_ctx *ctx, u_int bg) if (s->cy == s->rupper) grid_view_scroll_region_down(s->grid, s->rupper, s->rlower, bg); else if (s->cy > 0) - s->cy--; + screen_write_set_cursor(ctx, -1, s->cy - 1); screen_write_collect_flush(ctx, 0); tty_write(tty_cmd_reverseindex, &ttyctx); @@ -1028,8 +1072,7 @@ screen_write_scrollregion(struct screen_write_ctx *ctx, u_int rupper, screen_write_collect_flush(ctx, 0); /* Cursor moves to top-left. */ - s->cx = 0; - s->cy = 0; + screen_write_set_cursor(ctx, 0, 0); s->rupper = rupper; s->rlower = rlower; @@ -1062,7 +1105,7 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped, u_int bg) screen_write_collect_scroll(ctx); ctx->scrolled++; } else if (s->cy < screen_size_y(s) - 1) - s->cy++; + screen_write_set_cursor(ctx, -1, s->cy + 1); } /* Scroll up. */ @@ -1094,9 +1137,7 @@ screen_write_scrollup(struct screen_write_ctx *ctx, u_int lines, u_int bg) void screen_write_carriagereturn(struct screen_write_ctx *ctx) { - struct screen *s = ctx->s; - - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); } /* Clear to end of screen from cursor. */ @@ -1300,14 +1341,15 @@ screen_write_collect_end(struct screen_write_ctx *ctx) grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); } - if (gc.data.width > 1) + if (gc.data.width > 1) { grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } } memcpy(&gc, &ci->gc, sizeof gc); grid_view_set_cells(s->grid, s->cx, s->cy, &gc, ci->data, ci->used); - s->cx += ci->used; + screen_write_set_cursor(ctx, s->cx + ci->used, -1); for (xx = s->cx; xx < screen_size_x(s); xx++) { grid_view_get_cell(s->grid, xx, s->cy, &gc); @@ -1361,7 +1403,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy); ci->wrapped = 1; screen_write_linefeed(ctx, 1, 8); - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); } if (ci->used == 0) @@ -1423,7 +1465,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) if ((s->mode & MODE_WRAP) && s->cx > sx - width) { log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy); screen_write_linefeed(ctx, 1, 8); - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); screen_write_collect_flush(ctx, 1); } @@ -1496,9 +1538,9 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) */ last = !(s->mode & MODE_WRAP); if (s->cx <= sx - last - width) - s->cx += width; + screen_write_set_cursor(ctx, s->cx + width, -1); else - s->cx = sx - last; + screen_write_set_cursor(ctx, sx - last, -1); /* Create space for character in insert mode. */ if (s->mode & MODE_INSERT) { diff --git a/server-client.c b/server-client.c index 72efe7366c..49a4b37d9c 100644 --- a/server-client.c +++ b/server-client.c @@ -192,6 +192,7 @@ server_client_create(int fd) c->session = NULL; c->last_session = NULL; + c->tty.sx = 80; c->tty.sy = 24; @@ -409,7 +410,7 @@ server_client_check_mouse(struct client *c) struct mouse_event *m = &c->tty.mouse; struct window *w; struct window_pane *wp; - u_int x, y, b; + u_int x, y, b, sx, sy; int flag; key_code key; struct timeval tv; @@ -419,8 +420,8 @@ server_client_check_mouse(struct client *c) type = NOTYPE; where = NOWHERE; - log_debug("mouse %02x at %u,%u (last %u,%u) (%d)", m->b, m->x, m->y, - m->lx, m->ly, c->tty.mouse_drag_flag); + log_debug("%s mouse %02x at %u,%u (last %u,%u) (%d)", c->name, m->b, + m->x, m->y, m->lx, m->ly, c->tty.mouse_drag_flag); /* What type of event is this? */ if ((m->sgr_type != ' ' && @@ -439,7 +440,7 @@ server_client_check_mouse(struct client *c) x = m->x, y = m->y, b = m->b; log_debug("drag update at %u,%u", x, y); } else { - x = m->lx, y = m->ly, b = m->lb; + x = m->lx - m->ox, y = m->ly - m->oy, b = m->lb; log_debug("drag start at %u,%u", x, y); } } else if (MOUSE_WHEEL(m->b)) { @@ -514,6 +515,14 @@ server_client_check_mouse(struct client *c) else if (m->statusat > 0 && y >= (u_int)m->statusat) y = m->statusat - 1; + tty_window_offset(&c->tty, &m->ox, &m->oy, &sx, &sy); + log_debug("mouse window @%u at %u,%u (%ux%u)", + s->curw->window->id, m->ox, m->oy, sx, sy); + if (x > sx || y > sy) + return (KEYC_UNKNOWN); + x = m->x = x + m->ox; + y = m->y = y + m->oy; + TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { if ((wp->xoff + wp->sx == x && wp->yoff <= 1 + y && @@ -836,8 +845,6 @@ server_client_handle_key(struct client *c, key_code key) return; window_unzoom(w); wp = window_pane_at_index(w, key - '0'); - if (wp != NULL && !window_pane_visible(wp)) - wp = NULL; server_client_clear_identify(c, wp); return; } @@ -1224,28 +1231,37 @@ server_client_reset_state(struct client *c) struct window_pane *wp = w->active, *loop; struct screen *s = wp->screen; struct options *oo = c->session->options; - int lines, mode; + int mode, cursor = 0; + u_int cx = 0, cy = 0, ox, oy, sx, sy; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; + mode = s->mode; tty_region_off(&c->tty); tty_margin_off(&c->tty); - if (status_at_line(c) != 0) - lines = 0; - else - lines = status_line_size(c->session); - if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - lines) - tty_cursor(&c->tty, 0, 0); - else - tty_cursor(&c->tty, wp->xoff + s->cx, lines + wp->yoff + s->cy); + /* Move cursor to pane cursor and offset. */ + cursor = 0; + tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && + wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { + cursor = 1; + + cx = wp->xoff + s->cx - ox; + cy = wp->yoff + s->cy - oy; + + if (status_at_line(c) == 0) + cy += status_line_size(c->session); + } + if (!cursor) + mode &= ~MODE_CURSOR; + tty_cursor(&c->tty, cx, cy); /* * Set mouse mode if requested. To support dragging, always use button * mode. */ - mode = s->mode; if (options_get_number(oo, "mouse")) { mode &= ~ALL_MOUSE_MODES; TAILQ_FOREACH(loop, &w->panes, entry) { diff --git a/server-fn.c b/server-fn.c index a434c53ea5..9c34834156 100644 --- a/server-fn.c +++ b/server-fn.c @@ -410,6 +410,7 @@ server_destroy_session(struct session *s) c->last_session = NULL; c->session = s_new; server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s_new, NULL); diff --git a/session.c b/session.c index 2075abe539..a1c8ddae3c 100644 --- a/session.c +++ b/session.c @@ -112,8 +112,8 @@ session_find_by_id(u_int id) /* Create a new session. */ struct session * session_create(const char *prefix, const char *name, int argc, char **argv, - const char *path, const char *cwd, struct environ *env, struct termios *tio, - int idx, u_int sx, u_int sy, char **cause) + const char *path, const char *cwd, struct environ *env, struct options *oo, + struct termios *tio, int idx, char **cause) { struct session *s; struct winlink *wl; @@ -132,7 +132,7 @@ session_create(const char *prefix, const char *name, int argc, char **argv, if (env != NULL) environ_copy(env, s->environ); - s->options = options_create(global_s_options); + s->options = oo; s->hooks = hooks_create(global_hooks); status_update_saved(s); @@ -143,9 +143,6 @@ session_create(const char *prefix, const char *name, int argc, char **argv, memcpy(s->tio, tio, sizeof *s->tio); } - s->sx = sx; - s->sy = sy; - if (name != NULL) { s->name = xstrdup(name); s->id = next_session_id++; @@ -349,7 +346,7 @@ session_new(struct session *s, const char *name, int argc, char **argv, struct winlink *wl; struct environ *env; const char *shell; - u_int hlimit; + u_int hlimit, sx, sy; if ((wl = winlink_add(&s->windows, idx)) == NULL) { xasprintf(cause, "index in use: %d", idx); @@ -361,10 +358,11 @@ session_new(struct session *s, const char *name, int argc, char **argv, if (*shell == '\0' || areshell(shell)) shell = _PATH_BSHELL; + default_window_size(s, NULL, &sx, &sy, -1); hlimit = options_get_number(s->options, "history-limit"); env = environ_for_session(s, 0); w = window_create_spawn(name, argc, argv, path, shell, cwd, env, s->tio, - s->sx, s->sy, hlimit, cause); + sx, sy, hlimit, cause); if (w == NULL) { winlink_remove(&s->windows, wl); environ_free(env); @@ -547,6 +545,7 @@ session_set_current(struct session *s, struct winlink *wl) s->curw = wl; winlink_clear_flags(wl); window_update_activity(wl->window); + tty_update_window_offset(wl->window); notify_session("session-window-changed", s); return (0); } diff --git a/tmux.1 b/tmux.1 index ca7d0c52a9..fd81cc22df 100644 --- a/tmux.1 +++ b/tmux.1 @@ -628,13 +628,13 @@ refers to a .Nm command, passed with the command and arguments separately, for example: .Bd -literal -offset indent -bind-key F1 set-window-option force-width 81 +bind-key F1 set-window-option synchronize-panes on .Ed .Pp Or if using .Xr sh 1 : .Bd -literal -offset indent -$ tmux bind-key F1 set-window-option force-width 81 +$ tmux bind-key F1 set-window-option synchronize-panes on .Ed .Pp Multiple commands may be specified together as part of a @@ -850,13 +850,22 @@ and are the name of and shell command to execute in the initial window. With .Fl d , -the initial size is 80 x 24; +the initial size comes from the global +.Ar default-size +option; .Fl x and .Fl y can be used to specify a different size. .Ql - uses the size of the current client if any. +If +.Fl x +or +.Fl y +is given, the +.Ar default-size +option is set for the session. .Pp If run from a terminal, any .Xr termios 4 @@ -1916,6 +1925,40 @@ and unzoomed (its normal position in the layout). .Fl M begins mouse resizing (only valid if bound to a mouse key binding, see .Sx MOUSE SUPPORT ) . +.It Xo Ic resize-window +.Op Fl aADLU +.Op Fl t Ar target-window +.Op Fl x Ar width +.Op Fl y Ar height +.Op Ar adjustment +.Xc +.D1 (alias: Ic resizew ) +Resize a window, up, down, left or right by +.Ar adjustment +with +.Fl U , +.Fl D , +.Fl L +or +.Fl R , +to an absolute size +with +.Fl x +or +.Fl y , +or to the size of the smallest or largest session (with +.Fl a +or +.Fl A ) . +The +.Ar adjustment +is given in lines or cells (the default is 1). +.Pp +This command automatically sets the +.Ic window-size +option to +.Ar manual +for the window. .It Xo Ic respawn-pane .Op Fl c Ar start-directory .Op Fl k @@ -2659,6 +2702,16 @@ The default is an empty string, which instructs to create a login shell using the value of the .Ic default-shell option. +.It Ic default-size Ar XxY +Set the default size of new windows when the +.Ar window-size +option is set to manual or when a session is created with +.Ic new-session +.Fl d . +The value is the width and height separated by an +.Ql x +character. +The default is 80x24. .It Ic default-shell Ar path Specify the default shell. This is used as the login shell for new windows when the @@ -3055,10 +3108,13 @@ Supported window options are: Aggressively resize the chosen window. This means that .Nm -will resize the window to the size of the smallest session for which it is the -current window, rather than the smallest session to which it is attached. -The window may resize when the current window is changed on another sessions; -this option is good for full-screen programs which support +will resize the window to the size of the smallest or largest session +(see the +.Ic window-size +option) for which it is the current window, rather than the session to +which it is attached. +The window may resize when the current window is changed on another +session; this option is good for full-screen programs which support .Dv SIGWINCH and poor for interactive programs such as shells. .Pp @@ -3121,16 +3177,6 @@ Set clock colour. .Xc Set clock hour format. .Pp -.It Ic force-height Ar height -.It Ic force-width Ar width -Prevent -.Nm -from resizing a window to greater than -.Ar width -or -.Ar height . -A value of zero restores the default unlimited setting. -.Pp .It Ic main-pane-height Ar height .It Ic main-pane-width Ar width Set the width or height of the main (left or top) pane in the @@ -3310,6 +3356,28 @@ see the .Ic message-command-style option. .Pp +.It Xo Ic Ic window-size +.Ar largest | Ar smallest | Ar manual +.Xc +Configure how +.Nm +determines the window size. +If set to +.Ar largest , +the size of the largest attached session is used; if +.Ar smallest , +the size of the smallest. +If +.Ar manual , +the size of a new window is set from the +.Ic default-size +option and windows are resized automatically. +See also the +.Ic resize-window +command and the +.Ic aggressive-resize +option. +.Pp .It Ic window-style Ar style Set the default window style. For how to specify @@ -3801,12 +3869,10 @@ The following variables are available, where appropriate: .It Li "session_group_size" Ta "" Ta "Size of session group" .It Li "session_group_list" Ta "" Ta "List of sessions in group" .It Li "session_grouped" Ta "" Ta "1 if session in a group" -.It Li "session_height" Ta "" Ta "Height of session" .It Li "session_id" Ta "" Ta "Unique session ID" .It Li "session_many_attached" Ta "" Ta "1 if multiple clients attached" .It Li "session_name" Ta "#S" Ta "Name of session" .It Li "session_stack" Ta "" Ta "Window indexes in most recent order" -.It Li "session_width" Ta "" Ta "Width of session" .It Li "session_windows" Ta "" Ta "Number of windows in session" .It Li "socket_path" Ta "" Ta "Server socket path" .It Li "start_time" Ta "" Ta "Server start time" diff --git a/tmux.h b/tmux.h index 5f6d3050f6..2ae71af9f5 100644 --- a/tmux.h +++ b/tmux.h @@ -68,6 +68,10 @@ struct tmuxproc; */ #define PANE_MINIMUM 2 +/* Minimum and maximum window size. */ +#define WINDOW_MINIMUM PANE_MINIMUM +#define WINDOW_MAXIMUM 10000 + /* Automatic name refresh interval, in microseconds. Must be < 1 second. */ #define NAME_INTERVAL 500000 @@ -809,6 +813,7 @@ struct window { struct timeval name_time; struct event alerts_timer; + struct event offset_timer; struct timeval activity_time; @@ -829,9 +834,7 @@ struct window { #define WINDOW_ACTIVITY 0x2 #define WINDOW_SILENCE 0x4 #define WINDOW_ZOOMED 0x8 -#define WINDOW_FORCEWIDTH 0x10 -#define WINDOW_FORCEHEIGHT 0x20 -#define WINDOW_STYLECHANGED 0x40 +#define WINDOW_STYLECHANGED 0x10 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) int alerts_queued; @@ -872,6 +875,11 @@ struct winlink { RB_HEAD(winlinks, winlink); TAILQ_HEAD(winlink_stack, winlink); +/* Window size option. */ +#define WINDOW_SIZE_LARGEST 0 +#define WINDOW_SIZE_SMALLEST 1 +#define WINDOW_SIZE_MANUAL 2 + /* Layout direction. */ enum layout_type { LAYOUT_LEFTRIGHT, @@ -930,9 +938,6 @@ struct session { struct event lock_timer; - u_int sx; - u_int sy; - struct winlink *curw; struct winlink_stack lastw; struct winlinks windows; @@ -992,6 +997,9 @@ struct mouse_event { u_int ly; u_int lb; + u_int ox; + u_int oy; + int s; int w; int wp; @@ -1039,6 +1047,12 @@ struct tty { u_int cstyle; char *ccolour; + int oflag; + u_int oox; + u_int ooy; + u_int osx; + u_int osy; + int mode; u_int rlower; @@ -1119,11 +1133,19 @@ struct tty_ctx { u_int orupper; u_int orlower; + /* Pane offset. */ u_int xoff; u_int yoff; /* The background colour used for clearing (erasing). */ u_int bg; + + /* Window offset and size. */ + int bigger; + u_int ox; + u_int oy; + u_int sx; + u_int sy; }; /* Saved message entry. */ @@ -1456,6 +1478,7 @@ struct options_table_entry { const char *separator; const char *style; + const char *pattern; }; /* Common command usages. */ @@ -1647,7 +1670,11 @@ struct environ *environ_for_session(struct session *, int); /* tty.c */ void tty_create_log(void); -u_int tty_status_lines(struct client *); +int tty_window_bigger(struct tty *); +int tty_window_offset(struct tty *, u_int *, u_int *, u_int *, u_int *); +void tty_update_window_offset(struct window *); +void tty_update_client_offset(struct client *); +u_int tty_status_lines(struct tty *); void tty_raw(struct tty *, const char *); void tty_attributes(struct tty *, const struct grid_cell *, const struct window_pane *); @@ -1672,10 +1699,8 @@ void tty_start_tty(struct tty *); void tty_stop_tty(struct tty *); void tty_set_title(struct tty *, const char *); void tty_update_mode(struct tty *, int, struct screen *); -void tty_draw_pane(struct tty *, const struct window_pane *, u_int, u_int, - u_int); void tty_draw_line(struct tty *, const struct window_pane *, struct screen *, - u_int, u_int, u_int); + u_int, u_int, u_int, u_int, u_int); int tty_open(struct tty *, char **); void tty_close(struct tty *); void tty_free(struct tty *); @@ -1926,6 +1951,9 @@ void status_prompt_load_history(void); void status_prompt_save_history(void); /* resize.c */ +void resize_window(struct window *, u_int, u_int); +void default_window_size(struct session *, struct window *, u_int *, + u_int *, int); void recalculate_sizes(void); /* input.c */ @@ -2156,7 +2184,6 @@ int window_pane_set_mode(struct window_pane *, void window_pane_reset_mode(struct window_pane *); void window_pane_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); -int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); const char *window_printable_flags(struct winlink *); struct window_pane *window_pane_find_up(struct window_pane *); @@ -2184,7 +2211,7 @@ void layout_set_size(struct layout_cell *, u_int, u_int, u_int, void layout_make_leaf(struct layout_cell *, struct window_pane *); void layout_make_node(struct layout_cell *, enum layout_type); void layout_fix_offsets(struct layout_cell *); -void layout_fix_panes(struct window *, u_int, u_int); +void layout_fix_panes(struct window *); void layout_resize_adjust(struct window *, struct layout_cell *, enum layout_type, int); void layout_init(struct window *, struct window_pane *); @@ -2300,7 +2327,7 @@ struct session *session_find_by_id_str(const char *); struct session *session_find_by_id(u_int); struct session *session_create(const char *, const char *, int, char **, const char *, const char *, struct environ *, - struct termios *, int, u_int, u_int, char **); + struct options *, struct termios *, int, char **); void session_destroy(struct session *, const char *); void session_add_ref(struct session *, const char *); void session_remove_ref(struct session *, const char *); diff --git a/tty.c b/tty.c index 2397f8c461..b633926647 100644 --- a/tty.c +++ b/tty.c @@ -64,6 +64,7 @@ static void tty_redraw_region(struct tty *, const struct tty_ctx *); static void tty_emulate_repeat(struct tty *, enum tty_code_code, enum tty_code_code, u_int); static void tty_repeat_space(struct tty *, u_int); +static void tty_draw_pane(struct tty *, const struct tty_ctx *, u_int); static void tty_cell(struct tty *, const struct grid_cell *, const struct window_pane *); static void tty_default_colours(struct grid_cell *, @@ -698,11 +699,117 @@ tty_repeat_space(struct tty *tty, u_int n) tty_putn(tty, s, n, n); } +/* Is this window bigger than the terminal? */ +int +tty_window_bigger(struct tty *tty) +{ + struct window *w = tty->client->session->curw->window; + u_int lines; + + lines = tty_status_lines(tty); + return (tty->sx < w->sx || tty->sy - lines < w->sy); +} + +/* What offset should this window be drawn at? */ +int +tty_window_offset(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) +{ + *ox = tty->oox; + *oy = tty->ooy; + *sx = tty->osx; + *sy = tty->osy; + + return (tty->oflag); +} + +/* What offset should this window be drawn at? */ +static int +tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) +{ + struct window *w = tty->client->session->curw->window; + struct window_pane *wp = w->active; + u_int cx, cy, lines; + + lines = tty_status_lines(tty); + if (tty->sx >= w->sx && tty->sy - lines >= w->sy) { + *ox = 0; + *oy = 0; + *sx = w->sx; + *sy = w->sy; + return (0); + } + + *sx = tty->sx; + *sy = tty->sy - lines; + + if (~wp->screen->mode & MODE_CURSOR) { + *ox = 0; + *oy = 0; + } else { + cx = wp->xoff + wp->screen->cx; + cy = wp->yoff + wp->screen->cy; + + if (cx < *sx) + *ox = 0; + else if (cx > w->sx - *sx) + *ox = w->sx - *sx; + else + *ox = cx - *sx / 2; + + if (cy < *sy) + *oy = 0; + else if (cy > w->sy - *sy) + *oy = w->sy - *sy; + else + *oy = cy - *sy / 2; + } + + return (1); +} + +/* Update stored offsets for a window and redraw if necessary. */ +void +tty_update_window_offset(struct window *w) +{ + struct client *c; + + TAILQ_FOREACH(c, &clients, entry) { + if (c->session != NULL && c->session->curw->window == w) + tty_update_client_offset(c); + } +} + +/* Update stored offsets for a client and redraw if necessary. */ +void +tty_update_client_offset(struct client *c) +{ + u_int ox, oy, sx, sy; + + c->tty.oflag = tty_window_offset1(&c->tty, &ox, &oy, &sx, &sy); + if (ox == c->tty.oox && + oy == c->tty.ooy && + sx == c->tty.osx && + sy == c->tty.osy) + return; + + log_debug ("%s: %s offset has changed (%u,%u %ux%u -> %u,%u %ux%u)", + __func__, c->name, c->tty.oox, c->tty.ooy, c->tty.osx, c->tty.osy, + ox, oy, sx, sy); + + c->tty.oox = ox; + c->tty.ooy = oy; + c->tty.osx = sx; + c->tty.osy = sy; + + c->flags |= CLIENT_REDRAWWINDOW; +} + /* How many lines are taken up by the status line on this client? */ u_int -tty_status_lines(struct client *c) +tty_status_lines(struct tty *tty) { - u_int lines; + struct client *c = tty->client; + u_int lines; if (c->flags & CLIENT_STATUSOFF) lines = 0; @@ -770,18 +877,73 @@ tty_redraw_region(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy < ctx->orupper || ctx->ocy > ctx->orlower) { for (i = ctx->ocy; i < screen_size_y(s); i++) - tty_draw_pane(tty, wp, i, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, i); } else { for (i = ctx->orupper; i <= ctx->orlower; i++) - tty_draw_pane(tty, wp, i, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, i); + } +} + +/* Is this position visible in the pane? */ +static int +tty_is_visible(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, + u_int ny) +{ + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px, yoff = wp->yoff + py; + + if (!ctx->bigger) + return (1); + if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || + yoff + ny <= ctx->oy || yoff >= ctx->oy + ctx->sy) { + return (0); + } + return (1); +} + +/* Clamp line position to visible part of pane. */ +static int +tty_clamp_line(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, + u_int *i, u_int *x, u_int *rx) +{ + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px; + + if (!tty_is_visible(ctx, px, py, nx, 1)) + return (0); + + if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { + /* All visible. */ + *i = 0; + *x = xoff - ctx->ox; + *rx = nx; + } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + *i = ctx->ox; + *x = 0; + *rx = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + *i = ctx->ox - xoff; + *x = 0; + *rx = nx - *i; + } else { + /* Right not visible. */ + *i = 0; + *x = xoff - ctx->ox; + *rx = nx - (xoff + nx - ctx->sx); } + return (1); } +/* Clear a line. */ static void tty_clear_line(struct tty *tty, const struct window_pane *wp, u_int py, u_int px, u_int nx, u_int bg) { - log_debug("%s: %u at %u,%u", __func__, nx, px, py); + struct client *c = tty->client; + + log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py); /* Nothing to clear. */ if (nx == 0) @@ -816,14 +978,84 @@ tty_clear_line(struct tty *tty, const struct window_pane *wp, u_int py, tty_repeat_space(tty, nx); } +/* Clear a line, adjusting to visible part of pane. */ +static void +tty_clear_pane_line(struct tty *tty, const struct tty_ctx *ctx, u_int py, + u_int px, u_int nx, u_int bg) +{ + u_int i, x, rx; + + if (tty_clamp_line(ctx, px, py, nx, &i, &x, &rx)) + tty_clear_line(tty, ctx->wp, py - ctx->oy, x, rx, bg); +} + +/* Clamp area position to visible part of pane. */ +static int +tty_clamp_area(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, + u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, u_int *ry) +{ + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px, yoff = wp->yoff + py; + + if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || + yoff + ny <= ctx->oy || yoff >= ctx->oy + ctx->sy) + return (0); + + if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { + /* All visible. */ + *i = 0; + *x = xoff - ctx->ox; + *rx = nx; + } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + *i = ctx->ox; + *x = 0; + *rx = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + *i = ctx->ox - xoff; + *x = 0; + *rx = nx - *i; + } else { + /* Right not visible. */ + *i = 0; + *x = xoff - ctx->ox; + *rx = nx - (xoff + nx - ctx->sx); + } + if (yoff >= ctx->oy && yoff + ny <= ctx->oy + ctx->sy) { + /* All visible. */ + *j = 0; + *y = yoff - ctx->oy; + *ry = ny; + } else if (yoff < ctx->oy && yoff + ny > ctx->oy + ctx->sy) { + /* Both left and right not visible. */ + *j = ctx->oy; + *y = 0; + *ry = ctx->sy; + } else if (yoff < ctx->oy) { + /* Left not visible. */ + *j = ctx->oy - yoff; + *y = 0; + *ry = ny - *j; + } else { + /* Right not visible. */ + *j = 0; + *y = yoff - ctx->oy; + *ry = ny - (yoff + ny - ctx->sy); + } + return (1); +} + +/* Clear an area, adjusting to visible part of pane. */ static void tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, u_int ny, u_int px, u_int nx, u_int bg) { - u_int yy; - char tmp[64]; + struct client *c = tty->client; + u_int yy; + char tmp[64]; - log_debug("%s: %u,%u at %u,%u", __func__, nx, ny, px, py); + log_debug("%s: %s, %u,%u at %u,%u", __func__, c->name, nx, ny, px, py); /* Nothing to clear. */ if (nx == 0 || ny == 0) @@ -886,11 +1118,33 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, tty_clear_line(tty, wp, yy, px, nx, bg); } -void -tty_draw_pane(struct tty *tty, const struct window_pane *wp, u_int py, u_int ox, - u_int oy) +/* Clear an area in a pane. */ +static void +tty_clear_pane_area(struct tty *tty, const struct tty_ctx *ctx, u_int py, + u_int ny, u_int px, u_int nx, u_int bg) +{ + u_int i, j, x, y, rx, ry; + + if (tty_clamp_area(ctx, px, py, nx, ny, &i, &j, &x, &y, &rx, &ry)) + tty_clear_area(tty, ctx->wp, y, ry, x, rx, bg); +} + +static void +tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py) { - tty_draw_line(tty, wp, wp->screen, py, ox, oy); + struct window_pane *wp = ctx->wp; + struct screen *s = wp->screen; + u_int xoff = ctx->xoff, yoff = ctx->yoff; + u_int nx = screen_size_x(s), i, x, rx; + + log_debug("%s: %s %u %d", __func__, tty->client->name, py, ctx->bigger); + + if (!ctx->bigger) { + tty_draw_line(tty, wp, s, 0, py, nx, xoff, yoff + py); + return; + } + if (tty_clamp_line(ctx, 0, py, nx, &i, &x, &rx)) + tty_draw_line(tty, wp, s, i, py, rx, x, yoff + py - ctx->oy); } static const struct grid_cell * @@ -919,17 +1173,27 @@ tty_check_codeset(struct tty *tty, const struct grid_cell *gc) void tty_draw_line(struct tty *tty, const struct window_pane *wp, - struct screen *s, u_int py, u_int ox, u_int oy) + struct screen *s, u_int px, u_int py, u_int nx, u_int atx, u_int aty) { struct grid *gd = s->grid; struct grid_cell gc, last; const struct grid_cell *gcp; - u_int i, j, ux, sx, nx, width; + struct grid_line *gl; + u_int i, j, ux, sx, width; int flags, cleared = 0; char buf[512]; size_t len, old_len; u_int cellsize; + log_debug("%s: px=%u py=%u nx=%u atx=%u aty=%u", __func__, + px, py, nx, atx, aty); + + /* + * py is the line in the screen to draw. + * px is the start x and nx is the width to draw. + * atx,aty is the line on the terminal to draw it. + */ + flags = (tty->flags & TTY_NOCURSOR); tty->flags |= TTY_NOCURSOR; tty_update_mode(tty, tty->mode, s); @@ -942,41 +1206,48 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, * there may be empty background cells after it (from BCE). */ sx = screen_size_x(s); - + if (nx > sx) + nx = sx; cellsize = grid_get_line(gd, gd->hsize + py)->cellsize; if (sx > cellsize) sx = cellsize; if (sx > tty->sx) sx = tty->sx; + if (sx > nx) + sx = nx; ux = 0; + if (py == 0) + gl = NULL; + else + gl = grid_get_line(gd, gd->hsize + py - 1); if (wp == NULL || - py == 0 || - (~grid_get_line(gd, gd->hsize + py - 1)->flags & GRID_LINE_WRAPPED) || - ox != 0 || + gl == NULL || + (~gl->flags & GRID_LINE_WRAPPED) || + atx != 0 || tty->cx < tty->sx || - screen_size_x(s) < tty->sx) { - if (screen_size_x(s) < tty->sx && - ox == 0 && - sx != screen_size_x(s) && + nx < tty->sx) { + if (nx < tty->sx && + atx == 0 && + px + sx != nx && tty_term_has(tty->term, TTYC_EL1) && !tty_fake_bce(tty, wp, 8)) { tty_default_attributes(tty, wp, 8); - tty_cursor(tty, screen_size_x(s) - 1, oy + py); + tty_cursor(tty, nx - 1, aty); tty_putcode(tty, TTYC_EL1); cleared = 1; } - if (sx != 0) - tty_cursor(tty, ox, oy + py); + if (px + sx != 0) + tty_cursor(tty, atx, aty); } else - log_debug("%s: wrapped line %u", __func__, oy + py); + log_debug("%s: wrapped line %u", __func__, aty); memcpy(&last, &grid_default_cell, sizeof last); len = 0; width = 0; for (i = 0; i < sx; i++) { - grid_view_get_cell(gd, i, py, &gc); + grid_view_get_cell(gd, px + i, py, &gc); gcp = tty_check_codeset(tty, &gc); if (len != 0 && ((gcp->attr & GRID_ATTR_CHARSET) || @@ -984,7 +1255,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, gcp->attr != last.attr || gcp->fg != last.fg || gcp->bg != last.bg || - ux + width + gcp->data.width >= screen_size_x(s) || + ux + width + gcp->data.width >= nx || (sizeof buf) - len < gcp->data.size)) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); @@ -998,10 +1269,10 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, screen_select_cell(s, &last, gcp); else memcpy(&last, gcp, sizeof last); - if (ux + gcp->data.width > screen_size_x(s)) { + if (ux + gcp->data.width > nx) { tty_attributes(tty, &last, wp); for (j = 0; j < gcp->data.width; j++) { - if (ux + j > screen_size_x(s)) + if (ux + j > nx) break; tty_putc(tty, ' '); ux++; @@ -1034,10 +1305,9 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } } - if (!cleared && ux < screen_size_x(s)) { - nx = screen_size_x(s) - ux; + if (!cleared && ux < nx) { tty_default_attributes(tty, wp, 8); - tty_clear_line(tty, wp, oy + py, ox + ux, nx, 8); + tty_clear_line(tty, wp, aty, atx + ux, nx - ux, 8); } tty->flags = (tty->flags & ~TTY_NOCURSOR) | flags; @@ -1065,17 +1335,18 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), struct window_pane *wp = ctx->wp; struct client *c; - /* wp can be NULL if updating the screen but not the terminal. */ if (wp == NULL) return; - - if ((wp->flags & (PANE_REDRAW|PANE_DROP)) || !window_pane_visible(wp)) + if (wp->flags & (PANE_REDRAW|PANE_DROP)) return; TAILQ_FOREACH(c, &clients, entry) { if (!tty_client_ready(c, wp)) continue; + ctx->bigger = tty_window_offset(&c->tty, &ctx->ox, &ctx->oy, + &ctx->sx, &ctx->sy); + ctx->xoff = wp->xoff; ctx->yoff = wp->yoff; if (status_at_line(c) == 0) @@ -1090,11 +1361,12 @@ tty_cmd_insertcharacter(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, ctx->bg) || (!tty_term_has(tty->term, TTYC_ICH) && !tty_term_has(tty->term, TTYC_ICH1))) { - tty_draw_pane(tty, wp, ctx->ocy, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, ctx->ocy); return; } @@ -1110,11 +1382,12 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, ctx->bg) || (!tty_term_has(tty->term, TTYC_DCH) && !tty_term_has(tty->term, TTYC_DCH1))) { - tty_draw_pane(tty, wp, ctx->ocy, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, ctx->ocy); return; } @@ -1128,6 +1401,11 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) { + if (ctx->bigger) { + tty_draw_pane(tty, ctx, ctx->ocy); + return; + } + tty_default_attributes(tty, ctx->wp, ctx->bg); tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); @@ -1142,7 +1420,8 @@ tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_insertline(struct tty *tty, const struct tty_ctx *ctx) { - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_IL1)) { @@ -1163,7 +1442,8 @@ tty_cmd_insertline(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_deleteline(struct tty *tty, const struct tty_ctx *ctx) { - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_DL1)) { @@ -1190,7 +1470,7 @@ tty_cmd_clearline(struct tty *tty, const struct tty_ctx *ctx) tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen); - tty_clear_line(tty, wp, py, ctx->xoff, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, 0, nx, ctx->bg); } void @@ -1202,7 +1482,7 @@ tty_cmd_clearendofline(struct tty *tty, const struct tty_ctx *ctx) tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen) - ctx->ocx; - tty_clear_line(tty, wp, py, ctx->xoff + ctx->ocx, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, ctx->ocx, nx, ctx->bg); } void @@ -1213,7 +1493,7 @@ tty_cmd_clearstartofline(struct tty *tty, const struct tty_ctx *ctx) tty_default_attributes(tty, wp, ctx->bg); - tty_clear_line(tty, wp, py, ctx->xoff, ctx->ocx + 1, ctx->bg); + tty_clear_pane_line(tty, ctx, py, 0, ctx->ocx + 1, ctx->bg); } void @@ -1224,7 +1504,8 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy != ctx->orupper) return; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_RI)) { @@ -1249,7 +1530,8 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy != ctx->orlower) return; - if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR)) { tty_redraw_region(tty, ctx); @@ -1285,7 +1567,8 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) struct window_pane *wp = ctx->wp; u_int i; - if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR)) { tty_redraw_region(tty, ctx); @@ -1321,18 +1604,18 @@ tty_cmd_clearendofscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff + ctx->ocy + 1; + py = ctx->ocy + 1; ny = screen_size_y(wp->screen) - ctx->ocy - 1; - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); - px = ctx->xoff + ctx->ocx; + px = ctx->ocx; nx = screen_size_x(wp->screen) - ctx->ocx; - py = ctx->yoff + ctx->ocy; + py = ctx->ocy; - tty_clear_line(tty, wp, py, px, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, px, nx, ctx->bg); } void @@ -1346,18 +1629,18 @@ tty_cmd_clearstartofscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff; + py = 0; ny = ctx->ocy - 1; - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); - px = ctx->xoff; + px = 0; nx = ctx->ocx + 1; - py = ctx->yoff + ctx->ocy; + py = ctx->ocy; - tty_clear_line(tty, wp, py, px, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, px, nx, ctx->bg); } void @@ -1371,12 +1654,12 @@ tty_cmd_clearscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff; + py = 0; ny = screen_size_y(wp->screen); - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); } void @@ -1386,6 +1669,11 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) struct screen *s = wp->screen; u_int i, j; + if (ctx->bigger) { + wp->flags |= PANE_REDRAW; + return; + } + tty_attributes(tty, &grid_default_cell, wp); tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); @@ -1401,7 +1689,11 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) { - if (ctx->xoff + ctx->ocx > tty->sx - 1 && ctx->ocy == ctx->orlower) { + if (!tty_is_visible(ctx, ctx->ocx, ctx->ocy, 1, 1)) + return; + + if (ctx->xoff + ctx->ocx - ctx->ox > tty->sx - 1 && + ctx->ocy == ctx->orlower) { if (tty_pane_full_width(tty, ctx)) tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); else @@ -1416,6 +1708,26 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) { + struct window_pane *wp = ctx->wp; + + if (!tty_is_visible(ctx, ctx->ocx, ctx->ocy, ctx->num, 1)) + return; + + if (ctx->bigger && + (ctx->ocx < ctx->ox || ctx->ocx + ctx->num > ctx->ox + ctx->sx)) { + if (!ctx->wrapped || + !tty_pane_full_width(tty, ctx) || + (tty->term->flags & TERM_EARLYWRAP) || + ctx->xoff + ctx->ocx != 0 || + ctx->yoff + ctx->ocy != tty->cy + 1 || + tty->cx < tty->sx || + tty->cy == tty->rlower) + tty_draw_pane(tty, ctx, ctx->ocy); + else + wp->flags |= PANE_REDRAW; + return; + } + tty_cursor_pane_unless_wrap(tty, ctx, ctx->ocx, ctx->ocy); tty_attributes(tty, ctx->cell, ctx->wp); @@ -1533,7 +1845,8 @@ static void tty_region_pane(struct tty *tty, const struct tty_ctx *ctx, u_int rupper, u_int rlower) { - tty_region(tty, ctx->yoff + rupper, ctx->yoff + rlower); + tty_region(tty, ctx->yoff + rupper - ctx->oy, + ctx->yoff + rlower - ctx->oy); } /* Set region at absolute position. */ @@ -1572,7 +1885,8 @@ tty_margin_off(struct tty *tty) static void tty_margin_pane(struct tty *tty, const struct tty_ctx *ctx) { - tty_margin(tty, ctx->xoff, ctx->xoff + ctx->wp->sx - 1); + tty_margin(tty, ctx->xoff - ctx->ox, + ctx->xoff + ctx->wp->sx - 1 - ctx->ox); } /* Set margin at absolute position. */ @@ -1623,7 +1937,7 @@ tty_cursor_pane_unless_wrap(struct tty *tty, const struct tty_ctx *ctx, static void tty_cursor_pane(struct tty *tty, const struct tty_ctx *ctx, u_int cx, u_int cy) { - tty_cursor(tty, ctx->xoff + cx, ctx->yoff + cy); + tty_cursor(tty, ctx->xoff + cx - ctx->ox, ctx->yoff + cy - ctx->oy); } /* Move cursor to absolute position. */ diff --git a/window.c b/window.c index 16c973b280..cf29ae484b 100644 --- a/window.c +++ b/window.c @@ -378,6 +378,8 @@ window_destroy(struct window *w) if (event_initialized(&w->alerts_timer)) evtimer_del(&w->alerts_timer); + if (event_initialized(&w->offset_timer)) + event_del(&w->offset_timer); options_free(w->options); @@ -456,17 +458,9 @@ window_set_active_pane(struct window *w, struct window_pane *wp) return (0); w->last = w->active; w->active = wp; - while (!window_pane_visible(w->active)) { - w->active = TAILQ_PREV(w->active, window_panes, entry); - if (w->active == NULL) - w->active = TAILQ_LAST(&w->panes, window_panes); - if (w->active == wp) { - notify_window("window-pane-changed", w); - return (1); - } - } w->active->active_point = next_active_point++; w->active->flags |= PANE_CHANGED; + tty_update_window_offset(w); notify_window("window-pane-changed", w); return (1); } @@ -507,8 +501,6 @@ window_get_active_at(struct window *w, u_int x, u_int y) struct window_pane *wp; TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; if (x < wp->xoff || x > wp->xoff + wp->sx) continue; if (y < wp->yoff || y > wp->yoff + wp->sy) @@ -561,9 +553,6 @@ window_zoom(struct window_pane *wp) if (w->flags & WINDOW_ZOOMED) return (-1); - if (!window_pane_visible(wp)) - return (-1); - if (window_count_panes(w) == 1) return (-1); @@ -600,7 +589,7 @@ window_unzoom(struct window *w) wp->layout_cell = wp->saved_layout_cell; wp->saved_layout_cell = NULL; } - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); notify_window("window-layout-changed", w); return (0); @@ -898,7 +887,6 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, #ifdef HAVE_UTEMPTER char s[32]; #endif - int i; sigset_t set, oldset; if (wp->fd != -1) { @@ -1302,27 +1290,11 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, continue; if (wp2->fd == -1 || wp2->flags & PANE_INPUTOFF) continue; - if (window_pane_visible(wp2)) - input_key(wp2, key, NULL); + input_key(wp2, key, NULL); } } } -int -window_pane_visible(struct window_pane *wp) -{ - struct window *w = wp->window; - - if (wp->layout_cell == NULL) - return (0); - - if (wp->xoff >= w->sx || wp->yoff >= w->sy) - return (0); - if (wp->xoff + wp->sx > w->sx || wp->yoff + wp->sy > w->sy) - return (0); - return (1); -} - u_int window_pane_search(struct window_pane *wp, const char *searchstr) { @@ -1377,7 +1349,7 @@ window_pane_find_up(struct window_pane *wp) u_int edge, left, right, end, size; int status, found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); status = options_get_number(wp->window->options, "pane-border-status"); @@ -1392,7 +1364,7 @@ window_pane_find_up(struct window_pane *wp) right = wp->xoff + wp->sx; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->yoff + next->sy + 1 != edge) continue; @@ -1424,7 +1396,7 @@ window_pane_find_down(struct window_pane *wp) u_int edge, left, right, end, size; int status, found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); status = options_get_number(wp->window->options, "pane-border-status"); @@ -1439,7 +1411,7 @@ window_pane_find_down(struct window_pane *wp) right = wp->xoff + wp->sx; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->yoff != edge) continue; @@ -1471,7 +1443,7 @@ window_pane_find_left(struct window_pane *wp) u_int edge, top, bottom, end, size; int found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); list = NULL; @@ -1485,7 +1457,7 @@ window_pane_find_left(struct window_pane *wp) bottom = wp->yoff + wp->sy; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->xoff + next->sx + 1 != edge) continue; @@ -1517,7 +1489,7 @@ window_pane_find_right(struct window_pane *wp) u_int edge, top, bottom, end, size; int found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); list = NULL; @@ -1531,7 +1503,7 @@ window_pane_find_right(struct window_pane *wp) bottom = wp->yoff + wp->sy; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->xoff != edge) continue; From 665f04695063a3e83773b7b4d1d50ce4f9fab970 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 Aug 2018 15:00:42 +0000 Subject: [PATCH 188/836] Add -Z to find-window as well. --- cmd-find-window.c | 6 ++++-- key-bindings.c | 2 +- tmux.1 | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cmd-find-window.c b/cmd-find-window.c index 22a541950a..c2d230a54d 100644 --- a/cmd-find-window.c +++ b/cmd-find-window.c @@ -32,8 +32,8 @@ const struct cmd_entry cmd_find_window_entry = { .name = "find-window", .alias = "findw", - .args = { "CNt:T", 1, 1 }, - .usage = "[-CNT] " CMD_TARGET_PANE_USAGE " match-string", + .args = { "CNt:TZ", 1, 1 }, + .usage = "[-CNTZ] " CMD_TARGET_PANE_USAGE " match-string", .target = { 't', CMD_FIND_PANE, 0 }, @@ -83,6 +83,8 @@ cmd_find_window_exec(struct cmd *self, struct cmdq_item *item) xasprintf(&filter, "#{m:*%s*,#{pane_title}}", s); new_args = args_parse("", 1, &argv); + if (args_has(args, 'Z')) + args_set(new_args, 'Z', NULL); args_set(new_args, 'f', filter); window_pane_set_mode(wp, &window_tree_mode, &item->target, new_args); diff --git a/key-bindings.c b/key-bindings.c index 41afd99c35..c717f5ae2a 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -228,7 +228,7 @@ key_bindings_init(void) "bind ] paste-buffer", "bind c new-window", "bind d detach-client", - "bind f command-prompt \"find-window -- '%%'\"", + "bind f command-prompt \"find-window -Z -- '%%'\"", "bind i display-message", "bind l last-window", "bind m select-pane -m", diff --git a/tmux.1 b/tmux.1 index 69e9baaa11..c6c6b3faf5 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1540,7 +1540,7 @@ The default .Ar template is "select-pane -t '%%'". .It Xo Ic find-window -.Op Fl CNT +.Op Fl CNTZ .Op Fl t Ar target-pane .Ar match-string .Xc @@ -1559,6 +1559,8 @@ matches only the window name and matches only the window title. The default is .Fl CNT . +.Fl Z +zooms the pane. .Pp This command works only if at least one client is attached. .It Xo Ic join-pane From 1e8c9fb4904ed2d7c712f676704503e94f236130 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 20 Aug 2018 17:52:27 +0100 Subject: [PATCH 189/836] Update CHANGES. --- CHANGES | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 9e630b3835..13019b4ced 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,55 @@ CHANGES FROM 2.8 to master -* ... +* Add -Z to find-window. + +* Support for windows larger than the client. This adds two new + options, window-size and default-size, and a new command, + resize-window. The force-width and force-height options and the + session_width and session_height formats have been removed. + + The new window-size option tells tmux how to work out the size of + windows: largest means it picks the size of the largest session, + smallest the smallest session (similar to the old behaviour) and + manual means that it does not automatically resize + windows. aggressive-resize modifies the choice of session for + largest and smallest as it did before. + + If a window is in a session attached to a client that is too small, + only part of the window is shown. tmux attempts to keep the cursor + visible, so the part of the window displayed is changed as the + cursor moves (with a small delay, to try and avoid excess redrawing + when applications redraw status lines or similar that are not + currently visible). + + Drawing windows which are larger than the client is not as efficient + as those which fit, particularly when the cursor moves, so it is + recommended to avoid using this on slow machines or networks (set + window-size to smallest or manual). + + The resize-window command can be used to resize a window + manually. If it is used, the window-size option is automatically set + to manual for the window (undo this with "setw -u + window-size"). resize-window works in a similar way to resize-pane + (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the + window to the size of the smallest client (what it would be if + window-size was smallest) and -A the largest. + + For the same behaviour as force-width or force-height, use + resize-window -x or -y. + + If the global window-size option is set to manual, the default-size + option is used for new windows. If -x or -y is used with + new-session, that sets the default-size option for the new session. + + The maximum size of a window is 10000x10000. But expect applications + to complain and higher memory use if making a window that big. The + minimum size is the size required for the current layout including + borders. + + This change allows some code improvements, most notably that since + windows can now never be cropped, that code can be removed from the + layout code, and since panes can now never be outside the size of + the window, window_pane_visible can be removed. CHANGES FROM 2.7 to 2.8 @@ -295,7 +344,7 @@ CHANGES FROM 2.4 TO 2.5, 09 May 2017 * Do not redraw a client unless we realistically think it can accept the data - defer redraws until the client has nothing else waiting to write. - + CHANGES FROM 2.3 TO 2.4, 20 April 2017 Incompatible Changes @@ -581,7 +630,7 @@ Normal Changes ============== * Fix crash due to uninitialized lastwp member of layout_cell -* Fix -fg/-bg/-style with 256 colour terminals. +* Fix -fg/-bg/-style with 256 colour terminals. CHANGES FROM 1.8 TO 1.9, 20 February 2014 @@ -939,7 +988,7 @@ CHANGES FROM 1.2 TO 1.3, 18 July 2010 * Run job commands explicitly in the global environment (which can be modified with setenv -g), rather than with the environment tmux started with. * Use the machine's hostname as the default title, instead of an empty string. -* Prevent double free if the window option remain-on-exit is set. +* Prevent double free if the window option remain-on-exit is set. * Key string conversions rewritten. * Mark zombie windows as dead in the choose-window list. * Tiled layout added. @@ -1041,7 +1090,7 @@ CHANGES FROM 1.0 TO 1.1, 05 November 2009 * New lock-client (alias lockc), and lock-session (alias locks) commands to lock a particular client, or all clients attached to a session. * Support C-n/C-p/C-v/M-v with emacs keys in choice mode. -* Use : for goto line rather than g in vi mode. +* Use : for goto line rather than g in vi mode. * Try to guess which client to use when no target client was specified. Finds the current session, and if only one client is present, use it. Otherwise, return the most recently used client. @@ -1172,7 +1221,7 @@ The list of older changes is below. * main-horizontal layout and main-pane-height option to match vertical. * New window option main-pane-width to set the width of the large left pane with - main-vertical (was left-vertical) layout. + main-vertical (was left-vertical) layout. * Lots of layout cleanup. manual layout is now manual-vertical. 16 May 2009 From 31508228bc26306a7fbf138c9df2e7210e9e5a37 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 20 Aug 2018 19:34:04 +0100 Subject: [PATCH 190/836] Use the y offset from the context which has already been adjusted for the status line, also make tty_clamp_line adjust the y position. --- screen-write.c | 8 +++++--- tty.c | 48 +++++++++++++++++++++++------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/screen-write.c b/screen-write.c index b9db16a96f..4f5bee6163 100644 --- a/screen-write.c +++ b/screen-write.c @@ -94,7 +94,7 @@ void screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, struct screen *s) { - char tmp[16]; + char tmp[32]; u_int y; memset(ctx, 0, sizeof *ctx); @@ -113,8 +113,10 @@ screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, ctx->scrolled = 0; ctx->bg = 8; - if (wp != NULL) - snprintf(tmp, sizeof tmp, "pane %%%u", wp->id); + if (wp != NULL) { + snprintf(tmp, sizeof tmp, "pane %%%u (at %u,%u)", wp->id, + wp->xoff, wp->yoff); + } log_debug("%s: size %ux%u, %s", __func__, screen_size_x(ctx->s), screen_size_y(ctx->s), wp == NULL ? "no pane" : tmp); } diff --git a/tty.c b/tty.c index b633926647..6e7ccafee8 100644 --- a/tty.c +++ b/tty.c @@ -889,13 +889,12 @@ static int tty_is_visible(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, u_int ny) { - struct window_pane *wp = ctx->wp; - u_int xoff = wp->xoff + px, yoff = wp->yoff + py; + u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py; if (!ctx->bigger) return (1); - if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff >= ctx->oy + ctx->sy) { + if (xoff + nx <= ctx->ox || xoff > ctx->ox + ctx->sx || + yoff + ny <= ctx->oy || yoff > ctx->oy + ctx->sy) { return (0); } return (1); @@ -904,13 +903,13 @@ tty_is_visible(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, /* Clamp line position to visible part of pane. */ static int tty_clamp_line(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, - u_int *i, u_int *x, u_int *rx) + u_int *i, u_int *x, u_int *rx, u_int *ry) { - struct window_pane *wp = ctx->wp; - u_int xoff = wp->xoff + px; + u_int xoff = ctx->xoff + px; if (!tty_is_visible(ctx, px, py, nx, 1)) return (0); + *ry = ctx->yoff + py - ctx->oy; if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { /* All visible. */ @@ -983,10 +982,13 @@ static void tty_clear_pane_line(struct tty *tty, const struct tty_ctx *ctx, u_int py, u_int px, u_int nx, u_int bg) { - u_int i, x, rx; + struct client *c = tty->client; + u_int i, x, rx, ry; - if (tty_clamp_line(ctx, px, py, nx, &i, &x, &rx)) - tty_clear_line(tty, ctx->wp, py - ctx->oy, x, rx, bg); + log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py); + + if (tty_clamp_line(ctx, px, py, nx, &i, &x, &rx, &ry)) + tty_clear_line(tty, ctx->wp, ry, x, rx, bg); } /* Clamp area position to visible part of pane. */ @@ -994,11 +996,9 @@ static int tty_clamp_area(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, u_int *ry) { - struct window_pane *wp = ctx->wp; - u_int xoff = wp->xoff + px, yoff = wp->yoff + py; + u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py; - if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff >= ctx->oy + ctx->sy) + if (!tty_is_visible(ctx, px, py, nx, ny)) return (0); if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { @@ -1134,17 +1134,16 @@ tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py) { struct window_pane *wp = ctx->wp; struct screen *s = wp->screen; - u_int xoff = ctx->xoff, yoff = ctx->yoff; - u_int nx = screen_size_x(s), i, x, rx; + u_int nx = screen_size_x(s), i, x, rx, ry; log_debug("%s: %s %u %d", __func__, tty->client->name, py, ctx->bigger); if (!ctx->bigger) { - tty_draw_line(tty, wp, s, 0, py, nx, xoff, yoff + py); + tty_draw_line(tty, wp, s, 0, py, nx, ctx->xoff, ctx->yoff); return; } - if (tty_clamp_line(ctx, 0, py, nx, &i, &x, &rx)) - tty_draw_line(tty, wp, s, i, py, rx, x, yoff + py - ctx->oy); + if (tty_clamp_line(ctx, 0, py, nx, &i, &x, &rx, &ry)) + tty_draw_line(tty, wp, s, i, py, rx, x, ry); } static const struct grid_cell * @@ -1465,35 +1464,34 @@ void tty_cmd_clearline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int nx, py = ctx->yoff + ctx->ocy; + u_int nx; tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen); - tty_clear_pane_line(tty, ctx, py, 0, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, 0, nx, ctx->bg); } void tty_cmd_clearendofline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int nx, py = ctx->yoff + ctx->ocy; + u_int nx; tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen) - ctx->ocx; - tty_clear_pane_line(tty, ctx, py, ctx->ocx, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, ctx->ocx, nx, ctx->bg); } void tty_cmd_clearstartofline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int py = ctx->yoff + ctx->ocy; tty_default_attributes(tty, wp, ctx->bg); - tty_clear_pane_line(tty, ctx, py, 0, ctx->ocx + 1, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, 0, ctx->ocx + 1, ctx->bg); } void From 458b4b77014361c1df05a84b81e3318aeb19e6cd Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 20 Aug 2018 19:45:32 +0100 Subject: [PATCH 191/836] Need to adjust for lines if at top. --- tty.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/tty.c b/tty.c index 6e7ccafee8..e69929aff4 100644 --- a/tty.c +++ b/tty.c @@ -886,15 +886,20 @@ tty_redraw_region(struct tty *tty, const struct tty_ctx *ctx) /* Is this position visible in the pane? */ static int -tty_is_visible(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, - u_int ny) +tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int ny) { - u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py; + u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py, lines; if (!ctx->bigger) return (1); - if (xoff + nx <= ctx->ox || xoff > ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff > ctx->oy + ctx->sy) { + + if (status_at_line(tty->client) == 0) + lines = tty_status_lines(tty); + else + lines = 0; + if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || + yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { return (0); } return (1); @@ -902,12 +907,12 @@ tty_is_visible(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, /* Clamp line position to visible part of pane. */ static int -tty_clamp_line(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, - u_int *i, u_int *x, u_int *rx, u_int *ry) +tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int *i, u_int *x, u_int *rx, u_int *ry) { u_int xoff = ctx->xoff + px; - if (!tty_is_visible(ctx, px, py, nx, 1)) + if (!tty_is_visible(tty, ctx, px, py, nx, 1)) return (0); *ry = ctx->yoff + py - ctx->oy; @@ -987,18 +992,19 @@ tty_clear_pane_line(struct tty *tty, const struct tty_ctx *ctx, u_int py, log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py); - if (tty_clamp_line(ctx, px, py, nx, &i, &x, &rx, &ry)) + if (tty_clamp_line(tty, ctx, px, py, nx, &i, &x, &rx, &ry)) tty_clear_line(tty, ctx->wp, ry, x, rx, bg); } /* Clamp area position to visible part of pane. */ static int -tty_clamp_area(const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, - u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, u_int *ry) +tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, + u_int *ry) { u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py; - if (!tty_is_visible(ctx, px, py, nx, ny)) + if (!tty_is_visible(tty, ctx, px, py, nx, ny)) return (0); if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { @@ -1125,7 +1131,7 @@ tty_clear_pane_area(struct tty *tty, const struct tty_ctx *ctx, u_int py, { u_int i, j, x, y, rx, ry; - if (tty_clamp_area(ctx, px, py, nx, ny, &i, &j, &x, &y, &rx, &ry)) + if (tty_clamp_area(tty, ctx, px, py, nx, ny, &i, &j, &x, &y, &rx, &ry)) tty_clear_area(tty, ctx->wp, y, ry, x, rx, bg); } @@ -1142,7 +1148,7 @@ tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py) tty_draw_line(tty, wp, s, 0, py, nx, ctx->xoff, ctx->yoff); return; } - if (tty_clamp_line(ctx, 0, py, nx, &i, &x, &rx, &ry)) + if (tty_clamp_line(tty, ctx, 0, py, nx, &i, &x, &rx, &ry)) tty_draw_line(tty, wp, s, i, py, rx, x, ry); } @@ -1687,7 +1693,7 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) { - if (!tty_is_visible(ctx, ctx->ocx, ctx->ocy, 1, 1)) + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, 1, 1)) return; if (ctx->xoff + ctx->ocx - ctx->ox > tty->sx - 1 && @@ -1708,7 +1714,7 @@ tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - if (!tty_is_visible(ctx, ctx->ocx, ctx->ocy, ctx->num, 1)) + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, ctx->num, 1)) return; if (ctx->bigger && From 9f39470b382481f9ec0d9eb17d196a753ecf8e33 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 20 Aug 2018 20:05:34 +0100 Subject: [PATCH 192/836] Only screen-redraw.c needs to adjust for message or prompt when the status line is off, get rid of tty_status_lines and just pass the client into status_line_size so it can check the CLIENT_STATUSOFF flag as well. --- resize.c | 10 +++++----- screen-redraw.c | 4 +++- server-client.c | 2 +- status.c | 20 ++++++++++---------- tmux.h | 5 ++--- tty.c | 36 ++++++++++++------------------------ 6 files changed, 33 insertions(+), 44 deletions(-) diff --git a/resize.c b/resize.c index faaa044de7..40a1a01666 100644 --- a/resize.c +++ b/resize.c @@ -85,7 +85,7 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, continue; cx = c->tty.sx; - cy = c->tty.sy - tty_status_lines(&c->tty); + cy = c->tty.sy - status_line_size(c); if (cx > *sx) *sx = cx; @@ -105,7 +105,7 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, continue; cx = c->tty.sx; - cy = c->tty.sy - tty_status_lines(&c->tty); + cy = c->tty.sy - status_line_size(c); if (cx < *sx) *sx = cx; @@ -167,7 +167,7 @@ recalculate_sizes(void) if ((flags & CLIENT_CONTROL) && (~flags & CLIENT_SIZECHANGED)) continue; - if (c->tty.sy <= tty_status_lines(&c->tty)) + if (c->tty.sy <= status_line_size(c)) c->flags |= CLIENT_STATUSOFF; else c->flags &= ~CLIENT_STATUSOFF; @@ -200,7 +200,7 @@ recalculate_sizes(void) continue; cx = c->tty.sx; - cy = c->tty.sy - tty_status_lines(&c->tty); + cy = c->tty.sy - status_line_size(c); if (cx > sx) sx = cx; @@ -222,7 +222,7 @@ recalculate_sizes(void) continue; cx = c->tty.sx; - cy = c->tty.sy - tty_status_lines(&c->tty); + cy = c->tty.sy - status_line_size(c); if (cx < sx) sx = cx; diff --git a/screen-redraw.c b/screen-redraw.c index 118830c72d..50862f9ef3 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -411,7 +411,9 @@ screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) memset(ctx, 0, sizeof *ctx); ctx->c = c; - ctx->lines = tty_status_lines(&c->tty); + ctx->lines = status_line_size(c); + if (c->message_string != NULL || c->prompt_string != NULL) + ctx->lines = (ctx->lines == 0) ? 1 : ctx->lines; if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) ctx->top = 1; ctx->pane_status = options_get_number(wo, "pane-border-status"); diff --git a/server-client.c b/server-client.c index 49a4b37d9c..78c917ea76 100644 --- a/server-client.c +++ b/server-client.c @@ -1252,7 +1252,7 @@ server_client_reset_state(struct client *c) cy = wp->yoff + s->cy - oy; if (status_at_line(c) == 0) - cy += status_line_size(c->session); + cy += status_line_size(c); } if (!cursor) mode &= ~MODE_CURSOR; diff --git a/status.c b/status.c index e8f890e895..17bc113b00 100644 --- a/status.c +++ b/status.c @@ -214,17 +214,17 @@ status_at_line(struct client *c) return (-1); if (s->statusat != 1) return (s->statusat); - return (c->tty.sy - status_line_size(s)); + return (c->tty.sy - status_line_size(c)); } -/* - * Get size of status line for session. 0 means off. Note that status line may - * be forced off for an individual client if it is too small (the - * CLIENT_STATUSOFF flag is set for this). - */ +/* Get size of status line for client's session. 0 means off. */ u_int -status_line_size(struct session *s) +status_line_size(struct client *c) { + struct session *s = c->session; + + if (c->flags & CLIENT_STATUSOFF) + return (0); if (s->statusat == -1) return (0); return (1); @@ -324,7 +324,7 @@ status_redraw(struct client *c) } /* No status line? */ - lines = status_line_size(s); + lines = status_line_size(c); if (c->tty.sy == 0 || lines == 0) return (1); left = right = NULL; @@ -659,7 +659,7 @@ status_message_redraw(struct client *c) return (0); memcpy(&old_status, &c->status.status, sizeof old_status); - lines = status_line_size(c->session); + lines = status_line_size(c); if (lines <= 1) { lines = 1; screen_init(&c->status.status, c->tty.sx, 1, 0); @@ -812,7 +812,7 @@ status_prompt_redraw(struct client *c) return (0); memcpy(&old_status, &c->status.status, sizeof old_status); - lines = status_line_size(c->session); + lines = status_line_size(c); if (lines <= 1) { lines = 1; screen_init(&c->status.status, c->tty.sx, 1, 0); diff --git a/tmux.h b/tmux.h index 2ae71af9f5..3eb4c17487 100644 --- a/tmux.h +++ b/tmux.h @@ -1674,7 +1674,6 @@ int tty_window_bigger(struct tty *); int tty_window_offset(struct tty *, u_int *, u_int *, u_int *, u_int *); void tty_update_window_offset(struct window *); void tty_update_client_offset(struct client *); -u_int tty_status_lines(struct tty *); void tty_raw(struct tty *, const char *); void tty_attributes(struct tty *, const struct grid_cell *, const struct window_pane *); @@ -1933,9 +1932,9 @@ 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); +void status_update_saved(struct session *); int status_at_line(struct client *); -u_int status_line_size(struct session *); +u_int status_line_size(struct client *); struct window *status_get_window_at(struct client *, u_int); int status_redraw(struct client *); void printflike(2, 3) status_message_set(struct client *, const char *, ...); diff --git a/tty.c b/tty.c index e69929aff4..9a756d1c63 100644 --- a/tty.c +++ b/tty.c @@ -703,11 +703,11 @@ tty_repeat_space(struct tty *tty, u_int n) int tty_window_bigger(struct tty *tty) { - struct window *w = tty->client->session->curw->window; - u_int lines; + struct client *c = tty->client; + struct session *s = c->session; + struct window *w = s->curw->window; - lines = tty_status_lines(tty); - return (tty->sx < w->sx || tty->sy - lines < w->sy); + return (tty->sx < w->sx || tty->sy - status_line_size(c) < w->sy); } /* What offset should this window be drawn at? */ @@ -726,11 +726,13 @@ tty_window_offset(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) static int tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) { - struct window *w = tty->client->session->curw->window; + struct client *c = tty->client; + struct window *w = c->session->curw->window; struct window_pane *wp = w->active; u_int cx, cy, lines; - lines = tty_status_lines(tty); + lines = status_line_size(c); + if (tty->sx >= w->sx && tty->sy - lines >= w->sy) { *ox = 0; *oy = 0; @@ -804,22 +806,6 @@ tty_update_client_offset(struct client *c) c->flags |= CLIENT_REDRAWWINDOW; } -/* How many lines are taken up by the status line on this client? */ -u_int -tty_status_lines(struct tty *tty) -{ - struct client *c = tty->client; - u_int lines; - - if (c->flags & CLIENT_STATUSOFF) - lines = 0; - else - lines = status_line_size(c->session); - if (c->message_string != NULL || c->prompt_string != NULL) - lines = (lines == 0) ? 1 : lines; - return (lines); -} - /* * Is the region large enough to be worth redrawing once later rather than * probably several times now? Currently yes if it is more than 50% of the @@ -895,9 +881,10 @@ tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, return (1); if (status_at_line(tty->client) == 0) - lines = tty_status_lines(tty); + lines = status_line_size(tty->client); else lines = 0; + if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { return (0); @@ -1354,8 +1341,9 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), ctx->xoff = wp->xoff; ctx->yoff = wp->yoff; + if (status_at_line(c) == 0) - ctx->yoff += status_line_size(c->session); + ctx->yoff += status_line_size(c); cmdfn(&c->tty, ctx); } From 98a478ceb3d4b8f6d1951b0b12891e54abee96d0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 Aug 2018 20:41:58 +0000 Subject: [PATCH 193/836] Move offset of window list into status struct. --- status.c | 4 ++-- tmux.h | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/status.c b/status.c index e8f890e895..63bd47a4f7 100644 --- a/status.c +++ b/status.c @@ -284,7 +284,7 @@ status_get_window_at(struct client *c, u_int x) const char *sep; size_t seplen; - x += c->wlmouse; + x += c->status.window_list_offset; RB_FOREACH(wl, winlinks, &s->windows) { oo = wl->window->options; @@ -506,7 +506,7 @@ status_redraw(struct client *c) wloffset++; /* Copy the window list. */ - c->wlmouse = -wloffset + wlstart; + c->status.window_list_offset = -wloffset + wlstart; screen_write_cursormove(&ctx, wloffset, 0); screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); screen_free(&window_list); diff --git a/tmux.h b/tmux.h index 9884f60a45..3a45dd0864 100644 --- a/tmux.h +++ b/tmux.h @@ -1278,8 +1278,11 @@ struct cmd_entry { /* Status line. */ struct status_line { struct event timer; + struct screen status; struct screen *old_status; + + int window_list_offset; }; /* Client connection. */ From 314ee137a91fcbed7459716f600c19d220e05845 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 Aug 2018 09:07:25 +0100 Subject: [PATCH 194/836] The stored mouse position should not include the status line offset if any. --- server-client.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/server-client.c b/server-client.c index 78c917ea76..f58e18d4a8 100644 --- a/server-client.c +++ b/server-client.c @@ -410,7 +410,7 @@ server_client_check_mouse(struct client *c) struct mouse_event *m = &c->tty.mouse; struct window *w; struct window_pane *wp; - u_int x, y, b, sx, sy; + u_int x, y, b, sx, sy, px, py; int flag; key_code key; struct timeval tv; @@ -510,40 +510,46 @@ server_client_check_mouse(struct client *c) /* Not on status line. Adjust position and check for border or pane. */ if (where == NOWHERE) { + px = x; if (m->statusat == 0 && y > 0) - y--; + py = y - 1; else if (m->statusat > 0 && y >= (u_int)m->statusat) - y = m->statusat - 1; + py = m->statusat - 1; + else + py = y; tty_window_offset(&c->tty, &m->ox, &m->oy, &sx, &sy); log_debug("mouse window @%u at %u,%u (%ux%u)", s->curw->window->id, m->ox, m->oy, sx, sy); - if (x > sx || y > sy) + if (px > sx || py > sy) return (KEYC_UNKNOWN); - x = m->x = x + m->ox; - y = m->y = y + m->oy; + px = px + m->ox; + py = py + m->oy; + m->x = x + m->ox; + m->y = y + m->oy; TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { - if ((wp->xoff + wp->sx == x && - wp->yoff <= 1 + y && - wp->yoff + wp->sy >= y) || - (wp->yoff + wp->sy == y && - wp->xoff <= 1 + x && - wp->xoff + wp->sx >= x)) + if ((wp->xoff + wp->sx == px && + wp->yoff <= 1 + py && + wp->yoff + wp->sy >= py) || + (wp->yoff + wp->sy == py && + wp->xoff <= 1 + px && + wp->xoff + wp->sx >= px)) break; } if (wp != NULL) where = BORDER; else { - wp = window_get_active_at(s->curw->window, x, y); - if (wp != NULL) { + wp = window_get_active_at(s->curw->window, px, py); + if (wp != NULL) where = PANE; - log_debug("mouse at %u,%u is on pane %%%u", - x, y, wp->id); - } } if (where == NOWHERE) return (KEYC_UNKNOWN); + if (where == PANE) + log_debug("mouse %u,%u on pane %%%u", px, py, wp->id); + else if (where == BORDER) + log_debug("mouse on pane %%%u border", wp->id); m->wp = wp->id; m->w = wp->window->id; } else From bfc9fb4b3bd626b3183728f8d781ebbb5ecd9872 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 Aug 2018 09:27:19 +0100 Subject: [PATCH 195/836] Add flags to refresh-client (-U -D -L -R and -c) to pan a window that is larger than the client manually. Bound to S-Up, S-Down, S-Left, S-Right and Delete manually. Also add aliases for keys DC = Delete, IC = Insert, and make refresh-client -C accept XxY as well as X,Y to match default-size. --- cmd-refresh-client.c | 78 ++++++++++++++++++++++++++++++++++++++------ key-bindings.c | 5 +++ key-string.c | 2 ++ tmux.1 | 34 ++++++++++++++++++- tmux.h | 4 +++ tty.c | 13 ++++++++ 6 files changed, 125 insertions(+), 11 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index df1d213564..fab6f7ac4d 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -18,6 +18,8 @@ #include +#include + #include "tmux.h" /* @@ -31,8 +33,8 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "C:St:", 0, 0 }, - .usage = "[-S] [-C size] " CMD_TARGET_CLIENT_USAGE, + .args = { "cC:DLRSt:U", 0, 1 }, + .usage = "[-DLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -43,23 +45,77 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct client *c; - const char *size; - u_int w, h; + struct tty *tty; + struct window *w; + const char *size, *errstr; + u_int x, y, adjust; if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) return (CMD_RETURN_ERROR); + tty = &c->tty; + + if (args_has(args, 'c') || + args_has(args, 'L') || + args_has(args, 'R') || + args_has(args, 'U') || + args_has(args, 'D')) + { + if (args->argc == 0) + adjust = 1; + else { + adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "adjustment %s", errstr); + return (CMD_RETURN_ERROR); + } + } + + if (args_has(args, 'c')) + c->pan_window = NULL; + else { + w = c->session->curw->window; + if (c->pan_window != w) { + c->pan_window = w; + c->pan_ox = tty->oox; + c->pan_oy = tty->ooy; + } + if (args_has(args, 'L')) { + if (c->pan_ox > adjust) + c->pan_ox -= adjust; + else + c->pan_ox = 0; + } else if (args_has(args, 'R')) { + c->pan_ox += adjust; + if (c->pan_ox > w->sx - tty->osx) + c->pan_ox = w->sx - tty->osx; + } else if (args_has(args, 'U')) { + if (c->pan_oy > adjust) + c->pan_oy -= adjust; + else + c->pan_oy = 0; + } else if (args_has(args, 'D')) { + c->pan_oy += adjust; + if (c->pan_oy > w->sy - tty->osy) + c->pan_oy = w->sy - tty->osy; + } + } + tty_update_client_offset(c); + server_redraw_client(c); + return (CMD_RETURN_NORMAL); + } if (args_has(args, 'C')) { if ((size = args_get(args, 'C')) == NULL) { cmdq_error(item, "missing size"); return (CMD_RETURN_ERROR); } - if (sscanf(size, "%u,%u", &w, &h) != 2) { + if (sscanf(size, "%u,%u", &x, &y) != 2 && + sscanf(size, "%ux%u", &x, &y)) { cmdq_error(item, "bad size argument"); return (CMD_RETURN_ERROR); } - if (w < PANE_MINIMUM || w > 5000 || - h < PANE_MINIMUM || h > 5000) { + if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || + y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { cmdq_error(item, "size too small or too big"); return (CMD_RETURN_ERROR); } @@ -67,16 +123,18 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "not a control client"); return (CMD_RETURN_ERROR); } - tty_set_size(&c->tty, w, h); + tty_set_size(&c->tty, x, y); c->flags |= CLIENT_SIZECHANGED; recalculate_sizes(); - } else if (args_has(args, 'S')) { + return (CMD_RETURN_NORMAL); + } + + if (args_has(args, 'S')) { c->flags |= CLIENT_STATUSFORCE; server_status_client(c); } else { c->flags |= CLIENT_STATUSFORCE; server_redraw_client(c); } - return (CMD_RETURN_NORMAL); } diff --git a/key-bindings.c b/key-bindings.c index c717f5ae2a..fbc54fb814 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -258,6 +258,11 @@ key_bindings_init(void) "bind M-n next-window -a", "bind M-o rotate-window -D", "bind M-p previous-window -a", + "bind -r S-Up refresh-client -U 10", + "bind -r S-Down refresh-client -D 10", + "bind -r S-Left refresh-client -L 10", + "bind -r S-Right refresh-client -R 10", + "bind -r DC refresh-client -c", "bind -r M-Up resize-pane -U 5", "bind -r M-Down resize-pane -D 5", "bind -r M-Left resize-pane -L 5", diff --git a/key-string.c b/key-string.c index 45073efd6d..344881c729 100644 --- a/key-string.c +++ b/key-string.c @@ -43,7 +43,9 @@ static const struct { { "F11", KEYC_F11 }, { "F12", KEYC_F12 }, { "IC", KEYC_IC }, + { "Insert", KEYC_IC }, { "DC", KEYC_DC }, + { "Delete", KEYC_DC }, { "Home", KEYC_HOME }, { "End", KEYC_END }, { "NPage", KEYC_NPAGE }, diff --git a/tmux.1 b/tmux.1 index e240f7ee73..08bfdd9ebc 100644 --- a/tmux.1 +++ b/tmux.1 @@ -930,9 +930,11 @@ is used, the .Ic update-environment option will not be applied. .It Xo Ic refresh-client -.Op Fl C Ar width,height +.Op Fl cDLRU +.Op Fl C Ar XxY .Op Fl S .Op Fl t Ar target-client +.Op Ar adjustment .Xc .D1 (alias: Ic refresh ) Refresh the current client if bound to a key, or a single client if one is given @@ -942,6 +944,36 @@ If .Fl S is specified, only update the client's status line. .Pp +The +.Fl U , +.Fl D , +.Fl L +.Fl R , +and +.Fl c +flags allow the visible portion of a window which is larger than the client +to be changed. +.Fl U +moves the visible part up by +.Ar adjustment +rows and +.Fl D +down, +.Fl L +left by +.Ar adjustment +columns and +.Fl R +right. +.Fl c +returns to tracking the cursor automatically. +If +.Ar adjustment +is omitted, 1 is used. +Note that the visible position is a property of the client not of the +window, changing the current window in the attached session will reset +it. +.Pp .Fl C sets the width and height of a control client. .It Xo Ic rename-session diff --git a/tmux.h b/tmux.h index f075215c78..4f2848ec0f 100644 --- a/tmux.h +++ b/tmux.h @@ -1421,6 +1421,10 @@ struct client { int references; + void *pan_window; + u_int pan_ox; + u_int pan_oy; + TAILQ_ENTRY(client) entry; }; TAILQ_HEAD(clients, client); diff --git a/tty.c b/tty.c index 9a756d1c63..a6cfadf9f7 100644 --- a/tty.c +++ b/tty.c @@ -738,12 +738,24 @@ tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) *oy = 0; *sx = w->sx; *sy = w->sy; + + c->pan_window = NULL; return (0); } *sx = tty->sx; *sy = tty->sy - lines; + if (c->pan_window == w) { + if (c->pan_ox + *sx > w->sx) + c->pan_ox = w->sx - *sx; + *ox = c->pan_ox; + if (c->pan_oy + *sy > w->sy) + c->pan_oy = w->sy - *sy; + *oy = c->pan_oy; + return (1); + } + if (~wp->screen->mode & MODE_CURSOR) { *ox = 0; *oy = 0; @@ -766,6 +778,7 @@ tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) *oy = cy - *sy / 2; } + c->pan_window = NULL; return (1); } From db8849e7cad17fdca50e960691534b3c17b027be Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 Aug 2018 09:29:12 +0100 Subject: [PATCH 196/836] Update TODO. --- TODO | 5 ----- 1 file changed, 5 deletions(-) diff --git a/TODO b/TODO index 4a92eee9cf..eaa07d3708 100644 --- a/TODO +++ b/TODO @@ -136,8 +136,3 @@ visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? - * a way to force offset to a particular part of window, scroll - around the window -- command resize-window -d -l -r -u to - move offset and a flag to go back to tracking - but there - is no per-client window data structure so it will have - to forget when the window is changed From 55db3623bf7084a161d457f0c0b891a46a444a77 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 22 Aug 2018 20:06:14 +0000 Subject: [PATCH 197/836] Add StatusLeft and StatusRight mouse key modifiers for the left and right parts of the status line. --- key-string.c | 4 ++ server-client.c | 100 +++++++++++++++++++++++++++++++++++++++++++----- status.c | 4 ++ tmux.1 | 5 ++- tmux.h | 19 ++++++--- 5 files changed, 116 insertions(+), 16 deletions(-) diff --git a/key-string.c b/key-string.c index 45073efd6d..bb49b59f18 100644 --- a/key-string.c +++ b/key-string.c @@ -271,6 +271,10 @@ key_string_lookup_key(key_code key) return ("MouseMovePane"); if (key == KEYC_MOUSEMOVE_STATUS) return ("MouseMoveStatus"); + if (key == KEYC_MOUSEMOVE_STATUS_LEFT) + return ("MouseMoveStatusLeft"); + if (key == KEYC_MOUSEMOVE_STATUS_RIGHT) + return ("MouseMoveStatusRight"); if (key == KEYC_MOUSEMOVE_BORDER) return ("MouseMoveBorder"); if (key >= KEYC_USER && key < KEYC_USER + KEYC_NUSER) { diff --git a/server-client.c b/server-client.c index 418af6486b..596b12e7f2 100644 --- a/server-client.c +++ b/server-client.c @@ -416,7 +416,7 @@ server_client_check_mouse(struct client *c) key_code key; struct timeval tv; enum { NOTYPE, MOVE, DOWN, UP, DRAG, WHEEL, DOUBLE, TRIPLE } type; - enum { NOWHERE, PANE, STATUS, BORDER } where; + enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, BORDER } where; type = NOTYPE; where = NOWHERE; @@ -495,19 +495,25 @@ server_client_check_mouse(struct client *c) if (type == NOTYPE) return (KEYC_UNKNOWN); - /* Always save the session. */ + /* Save the session. */ m->s = s->id; + m->w = -1; /* Is this on the status line? */ m->statusat = status_at_line(c); if (m->statusat != -1 && y == (u_int)m->statusat) { - w = status_get_window_at(c, x); - if (w == NULL) - return (KEYC_UNKNOWN); - m->w = w->id; - where = STATUS; - } else - m->w = -1; + if (x < c->status.left_size) + where = STATUS_LEFT; + else if (x > c->tty.sx - c->status.right_size) + where = STATUS_RIGHT; + else { + w = status_get_window_at(c, x); + if (w == NULL) + return (KEYC_UNKNOWN); + m->w = w->id; + where = STATUS; + } + } /* Not on status line. Adjust position and check for border or pane. */ if (where == NOWHERE) { @@ -560,6 +566,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND1_PANE; if (where == STATUS) key = KEYC_MOUSEDRAGEND1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAGEND1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAGEND1_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAGEND1_BORDER; break; @@ -568,6 +578,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND2_PANE; if (where == STATUS) key = KEYC_MOUSEDRAGEND2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAGEND2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAGEND2_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAGEND2_BORDER; break; @@ -576,6 +590,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND3_PANE; if (where == STATUS) key = KEYC_MOUSEDRAGEND3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAGEND3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAGEND3_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAGEND3_BORDER; break; @@ -611,6 +629,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG1_PANE; if (where == STATUS) key = KEYC_MOUSEDRAG1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAG1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAG1_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAG1_BORDER; break; @@ -619,6 +641,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG2_PANE; if (where == STATUS) key = KEYC_MOUSEDRAG2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAG2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAG2_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAG2_BORDER; break; @@ -627,6 +653,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG3_PANE; if (where == STATUS) key = KEYC_MOUSEDRAG3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDRAG3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDRAG3_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDRAG3_BORDER; break; @@ -645,6 +675,10 @@ server_client_check_mouse(struct client *c) key = KEYC_WHEELUP_PANE; if (where == STATUS) key = KEYC_WHEELUP_STATUS; + if (where == STATUS_LEFT) + key = KEYC_WHEELUP_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_WHEELUP_STATUS_RIGHT; if (where == BORDER) key = KEYC_WHEELUP_BORDER; } else { @@ -663,6 +697,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP1_PANE; if (where == STATUS) key = KEYC_MOUSEUP1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEUP1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEUP1_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEUP1_BORDER; break; @@ -671,6 +709,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP2_PANE; if (where == STATUS) key = KEYC_MOUSEUP2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEUP2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEUP2_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEUP2_BORDER; break; @@ -679,6 +721,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP3_PANE; if (where == STATUS) key = KEYC_MOUSEUP3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEUP3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEUP3_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEUP3_BORDER; break; @@ -691,6 +737,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN1_PANE; if (where == STATUS) key = KEYC_MOUSEDOWN1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDOWN1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDOWN1_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDOWN1_BORDER; break; @@ -699,6 +749,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN2_PANE; if (where == STATUS) key = KEYC_MOUSEDOWN2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDOWN2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDOWN2_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDOWN2_BORDER; break; @@ -707,6 +761,10 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN3_PANE; if (where == STATUS) key = KEYC_MOUSEDOWN3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEDOWN3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEDOWN3_STATUS_RIGHT; if (where == BORDER) key = KEYC_MOUSEDOWN3_BORDER; break; @@ -719,6 +777,10 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK1_PANE; if (where == STATUS) key = KEYC_DOUBLECLICK1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_DOUBLECLICK1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_DOUBLECLICK1_STATUS_RIGHT; if (where == BORDER) key = KEYC_DOUBLECLICK1_BORDER; break; @@ -727,6 +789,10 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK2_PANE; if (where == STATUS) key = KEYC_DOUBLECLICK2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_DOUBLECLICK2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_DOUBLECLICK2_STATUS_RIGHT; if (where == BORDER) key = KEYC_DOUBLECLICK2_BORDER; break; @@ -735,6 +801,10 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK3_PANE; if (where == STATUS) key = KEYC_DOUBLECLICK3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_DOUBLECLICK3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_DOUBLECLICK3_STATUS_RIGHT; if (where == BORDER) key = KEYC_DOUBLECLICK3_BORDER; break; @@ -747,6 +817,10 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK1_PANE; if (where == STATUS) key = KEYC_TRIPLECLICK1_STATUS; + if (where == STATUS_LEFT) + key = KEYC_TRIPLECLICK1_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_TRIPLECLICK1_STATUS_RIGHT; if (where == BORDER) key = KEYC_TRIPLECLICK1_BORDER; break; @@ -755,6 +829,10 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK2_PANE; if (where == STATUS) key = KEYC_TRIPLECLICK2_STATUS; + if (where == STATUS_LEFT) + key = KEYC_TRIPLECLICK2_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_TRIPLECLICK2_STATUS_RIGHT; if (where == BORDER) key = KEYC_TRIPLECLICK2_BORDER; break; @@ -763,6 +841,10 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK3_PANE; if (where == STATUS) key = KEYC_TRIPLECLICK3_STATUS; + if (where == STATUS_LEFT) + key = KEYC_TRIPLECLICK3_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_TRIPLECLICK3_STATUS_RIGHT; if (where == BORDER) key = KEYC_TRIPLECLICK3_BORDER; break; diff --git a/status.c b/status.c index 63bd47a4f7..a2c28d4548 100644 --- a/status.c +++ b/status.c @@ -511,6 +511,10 @@ status_redraw(struct client *c) screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); screen_free(&window_list); + /* Save left and right size. */ + c->status.left_size = llen; + c->status.right_size = rlen; + screen_write_stop(&ctx); out: diff --git a/tmux.1 b/tmux.1 index c6c6b3faf5..f84f128245 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3504,7 +3504,10 @@ and a location suffix (one of for the contents of a pane, .Ql Border for a pane border or -.Ql Status +.Ql Status , +.Ql StatusLeft , +or +.Ql StatusRight for the status line). The following mouse events are available: .Bl -column "MouseDown1" "MouseDrag1" "WheelDown" -offset indent diff --git a/tmux.h b/tmux.h index 3a45dd0864..62170215dd 100644 --- a/tmux.h +++ b/tmux.h @@ -116,13 +116,17 @@ struct tmuxproc; #define KEYC_CLICK_TIMEOUT 300 /* Mouse key codes. */ -#define KEYC_MOUSE_KEY(name) \ - KEYC_ ## name ## _PANE, \ - KEYC_ ## name ## _STATUS, \ +#define KEYC_MOUSE_KEY(name) \ + KEYC_ ## name ## _PANE, \ + KEYC_ ## name ## _STATUS, \ + KEYC_ ## name ## _STATUS_LEFT, \ + KEYC_ ## name ## _STATUS_RIGHT, \ KEYC_ ## name ## _BORDER -#define KEYC_MOUSE_STRING(name, s) \ - { #s "Pane", KEYC_ ## name ## _PANE }, \ - { #s "Status", KEYC_ ## name ## _STATUS }, \ +#define KEYC_MOUSE_STRING(name, s) \ + { #s "Pane", KEYC_ ## name ## _PANE }, \ + { #s "Status", KEYC_ ## name ## _STATUS }, \ + { #s "StatusLeft", KEYC_ ## name ## _STATUS_LEFT }, \ + { #s "StatusRight", KEYC_ ## name ## _STATUS_RIGHT }, \ { #s "Border", KEYC_ ## name ## _BORDER } /* @@ -1283,6 +1287,9 @@ struct status_line { struct screen *old_status; int window_list_offset; + + u_int left_size; + u_int right_size; }; /* Client connection. */ From ee3e0eb18378f41d01d302959e217a0323e16e10 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 22 Aug 2018 21:29:30 +0100 Subject: [PATCH 198/836] Update TODO. --- TODO | 2 -- 1 file changed, 2 deletions(-) diff --git a/TODO b/TODO index eaa07d3708..57e99120cd 100644 --- a/TODO +++ b/TODO @@ -22,7 +22,6 @@ multiple attached sessions, and is the active window in multiple attached sessions? * comparison operators like < and > (for #{version}?) - * %else statement in config file - improve monitor-*: * straighten out rules for multiple clients @@ -108,7 +107,6 @@ * marks in history, automatically add (move?) one when pane is changed * this doesn't work, need pane reference count probably: bind -n DoubleClick3Status confirm-before -p "kill-window #I? (y/n)" kill-window - * respawn -c flag same as neww etc * marker lines in history (GitHub issue 1042) * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... From 183193bdbc1e1b3638644a2c2ce7e7861b632c16 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 Aug 2018 08:52:22 +0100 Subject: [PATCH 199/836] Update CHANGES. --- CHANGES | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 13019b4ced..6cb589393b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,9 @@ CHANGES FROM 2.8 to master +* Add StatusLeft and StatusRight mouse locations (keys such as + MouseDown1StatusLeft) for the status-left and status-right areas of + the status line. + * Add -Z to find-window. * Support for windows larger than the client. This adds two new @@ -46,10 +50,10 @@ CHANGES FROM 2.8 to master minimum size is the size required for the current layout including borders. - This change allows some code improvements, most notably that since - windows can now never be cropped, that code can be removed from the - layout code, and since panes can now never be outside the size of - the window, window_pane_visible can be removed. + The refresh-client command can be used to pan around a window, -U -D + -L -R moves up, down, left or right and -c returns to automatic + cursor tracking. The position is reset when the current window is + changed. CHANGES FROM 2.7 to 2.8 From bceccc6b63b48ddeefb035ef6d910bea60340342 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 Aug 2018 15:45:05 +0000 Subject: [PATCH 200/836] Move job struct into job.c. --- cmd-if-shell.c | 6 ++- cmd-run-shell.c | 25 +++++------ cmd-show-messages.c | 22 +--------- format.c | 13 +++--- job.c | 100 +++++++++++++++++++++++++++++++++++++++++++- server.c | 25 +++-------- tmux.h | 45 ++++++-------------- window-copy.c | 2 +- 8 files changed, 141 insertions(+), 97 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index d7ce3039b7..ffdbe788a3 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -132,14 +132,16 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) static void cmd_if_shell_callback(struct job *job) { - struct cmd_if_shell_data *cdata = job->data; + struct cmd_if_shell_data *cdata = job_get_data(job); struct client *c = cdata->client; struct cmd_list *cmdlist; struct cmdq_item *new_item; char *cause, *cmd, *file = cdata->file; u_int line = cdata->line; + int status; - if (!WIFEXITED(job->status) || WEXITSTATUS(job->status) != 0) + status = job_get_status(job); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) cmd = cdata->cmd_else; else cmd = cdata->cmd_if; diff --git a/cmd-run-shell.c b/cmd-run-shell.c index a99619880e..ff12b5cdcc 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -57,7 +57,7 @@ struct cmd_run_shell_data { static void cmd_run_shell_print(struct job *job, const char *msg) { - struct cmd_run_shell_data *cdata = job->data; + struct cmd_run_shell_data *cdata = job_get_data(job); struct window_pane *wp = NULL; struct cmd_find_state fs; @@ -113,22 +113,23 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) static void cmd_run_shell_callback(struct job *job) { - struct cmd_run_shell_data *cdata = job->data; - char *cmd = cdata->cmd, *msg, *line; + struct cmd_run_shell_data *cdata = job_get_data(job); + struct bufferevent *event = job_get_event(job); + char *cmd = cdata->cmd, *msg = NULL, *line; size_t size; - int retcode; + int retcode, status; do { - if ((line = evbuffer_readline(job->event->input)) != NULL) { + if ((line = evbuffer_readline(event->input)) != NULL) { cmd_run_shell_print(job, line); free(line); } } while (line != NULL); - size = EVBUFFER_LENGTH(job->event->input); + size = EVBUFFER_LENGTH(event->input); if (size != 0) { line = xmalloc(size + 1); - memcpy(line, EVBUFFER_DATA(job->event->input), size); + memcpy(line, EVBUFFER_DATA(event->input), size); line[size] = '\0'; cmd_run_shell_print(job, line); @@ -136,12 +137,12 @@ cmd_run_shell_callback(struct job *job) free(line); } - msg = NULL; - if (WIFEXITED(job->status)) { - if ((retcode = WEXITSTATUS(job->status)) != 0) + status = job_get_status(job); + if (WIFEXITED(status)) { + if ((retcode = WEXITSTATUS(status)) != 0) xasprintf(&msg, "'%s' returned %d", cmd, retcode); - } else if (WIFSIGNALED(job->status)) { - retcode = WTERMSIG(job->status); + } else if (WIFSIGNALED(status)) { + retcode = WTERMSIG(status); xasprintf(&msg, "'%s' terminated by signal %d", cmd, retcode); } if (msg != NULL) diff --git a/cmd-show-messages.c b/cmd-show-messages.c index 523ca0549d..e4b51fa8c5 100644 --- a/cmd-show-messages.c +++ b/cmd-show-messages.c @@ -44,7 +44,6 @@ const struct cmd_entry cmd_show_messages_entry = { }; static int cmd_show_messages_terminals(struct cmdq_item *, int); -static int cmd_show_messages_jobs(struct cmdq_item *, int); static int cmd_show_messages_terminals(struct cmdq_item *item, int blank) @@ -67,25 +66,6 @@ cmd_show_messages_terminals(struct cmdq_item *item, int blank) return (n != 0); } -static int -cmd_show_messages_jobs(struct cmdq_item *item, int blank) -{ - struct job *job; - u_int n; - - n = 0; - LIST_FOREACH(job, &all_jobs, entry) { - if (blank) { - cmdq_print(item, "%s", ""); - blank = 0; - } - cmdq_print(item, "Job %u: %s [fd=%d, pid=%ld, status=%d]", - n, job->cmd, job->fd, (long)job->pid, job->status); - n++; - } - return (n != 0); -} - static enum cmd_retval cmd_show_messages_exec(struct cmd *self, struct cmdq_item *item) { @@ -104,7 +84,7 @@ cmd_show_messages_exec(struct cmd *self, struct cmdq_item *item) done = 1; } if (args_has(args, 'J')) { - cmd_show_messages_jobs(item, blank); + job_print_summary(item, blank); done = 1; } if (done) diff --git a/format.c b/format.c index ccf6c1caef..4244ff0cfe 100644 --- a/format.c +++ b/format.c @@ -191,8 +191,8 @@ static const char *format_lower[] = { static void format_job_update(struct job *job) { - struct format_job *fj = job->data; - struct evbuffer *evb = job->event->input; + struct format_job *fj = job_get_data(job); + struct evbuffer *evb = job_get_event(job)->input; char *line = NULL, *next; time_t t; @@ -221,18 +221,19 @@ format_job_update(struct job *job) static void format_job_complete(struct job *job) { - struct format_job *fj = job->data; + struct format_job *fj = job_get_data(job); + struct evbuffer *evb = job_get_event(job)->input; char *line, *buf; size_t len; fj->job = NULL; buf = NULL; - if ((line = evbuffer_readline(job->event->input)) == NULL) { - len = EVBUFFER_LENGTH(job->event->input); + if ((line = evbuffer_readline(evb)) == NULL) { + len = EVBUFFER_LENGTH(evb); buf = xmalloc(len + 1); if (len != 0) - memcpy(buf, EVBUFFER_DATA(job->event->input), len); + memcpy(buf, EVBUFFER_DATA(evb), len); buf[len] = '\0'; } else buf = line; diff --git a/job.c b/job.c index 5cbe31cde0..e106cd0193 100644 --- a/job.c +++ b/job.c @@ -37,8 +37,32 @@ static void job_read_callback(struct bufferevent *, void *); static void job_write_callback(struct bufferevent *, void *); static void job_error_callback(struct bufferevent *, short, void *); +struct job { + enum { + JOB_RUNNING, + JOB_DEAD, + JOB_CLOSED + } state; + + int flags; + + char *cmd; + pid_t pid; + int status; + + int fd; + struct bufferevent *event; + + job_update_cb updatecb; + job_complete_cb completecb; + job_free_cb freecb; + void *data; + + LIST_ENTRY(job) entry; +}; + /* All jobs list. */ -struct joblist all_jobs = LIST_HEAD_INITIALIZER(all_jobs); +LIST_HEAD(joblist, job) all_jobs = LIST_HEAD_INITIALIZER(all_jobs); /* Start a job running, if it isn't already. */ struct job * @@ -208,8 +232,16 @@ job_error_callback(__unused struct bufferevent *bufev, __unused short events, /* Job died (waitpid() returned its pid). */ void -job_died(struct job *job, int status) +job_check_died(pid_t pid, int status) { + struct job *job; + + LIST_FOREACH(job, &all_jobs, entry) { + if (pid == job->pid) + break; + } + if (job == NULL) + return; log_debug("job died %p: %s, pid %ld", job, job->cmd, (long) job->pid); job->status = status; @@ -223,3 +255,67 @@ job_died(struct job *job, int status) job->state = JOB_DEAD; } } + +/* Get job status. */ +int +job_get_status(struct job *job) +{ + return (job->status); +} + +/* Get job data. */ +void * +job_get_data(struct job *job) +{ + return (job->data); +} + +/* Get job event. */ +struct bufferevent * +job_get_event(struct job *job) +{ + return (job->event); +} + +/* Kill all jobs. */ +void +job_kill_all(void) +{ + struct job *job; + + LIST_FOREACH(job, &all_jobs, entry) { + if (job->pid != -1) + kill(job->pid, SIGTERM); + } +} + +/* Are any jobs still running? */ +int +job_still_running(void) +{ + struct job *job; + + LIST_FOREACH(job, &all_jobs, entry) { + if ((~job->flags & JOB_NOWAIT) && job->state == JOB_RUNNING) + return (1); + } + return (0); +} + +/* Print job summary. */ +void +job_print_summary(struct cmdq_item *item, int blank) +{ + struct job *job; + u_int n = 0; + + LIST_FOREACH(job, &all_jobs, entry) { + if (blank) { + cmdq_print(item, "%s", ""); + blank = 0; + } + cmdq_print(item, "Job %u: %s [fd=%d, pid=%ld, status=%d]", + n, job->cmd, job->fd, (long)job->pid, job->status); + n++; + } +} diff --git a/server.c b/server.c index e897e76521..dd09c3c468 100644 --- a/server.c +++ b/server.c @@ -162,7 +162,6 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, char *lockfile) { int pair[2]; - struct job *job; sigset_t set, oldset; struct client *c; char *cause = NULL; @@ -223,17 +222,13 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, } start_cfg(); - server_add_accept(0); proc_loop(server_proc, server_loop); - LIST_FOREACH(job, &all_jobs, entry) { - if (job->pid != -1) - kill(job->pid, SIGTERM); - } - + job_kill_all(); status_prompt_save_history(); + exit(0); } @@ -243,7 +238,6 @@ server_loop(void) { struct client *c; u_int items; - struct job *job; do { items = cmdq_next(NULL); @@ -276,10 +270,8 @@ server_loop(void) if (!TAILQ_EMPTY(&clients)) return (0); - LIST_FOREACH(job, &all_jobs, entry) { - if ((~job->flags & JOB_NOWAIT) && job->state == JOB_RUNNING) - return (0); - } + if (job_still_running()) + return (0); return (1); } @@ -457,7 +449,6 @@ server_child_exited(pid_t pid, int status) { struct window *w, *w1; struct window_pane *wp; - struct job *job; RB_FOREACH_SAFE(w, windows, &windows, w1) { TAILQ_FOREACH(wp, &w->panes, entry) { @@ -474,13 +465,7 @@ server_child_exited(pid_t pid, int status) } } } - - LIST_FOREACH(job, &all_jobs, entry) { - if (pid == job->pid) { - job_died(job, status); /* might free job */ - break; - } - } + job_check_died(pid, status); } /* Handle stopped children. */ diff --git a/tmux.h b/tmux.h index 62170215dd..7a1cc5022f 100644 --- a/tmux.h +++ b/tmux.h @@ -44,6 +44,7 @@ struct cmdq_list; struct environ; struct format_job_tree; struct input_ctx; +struct job; struct mode_tree_data; struct mouse_event; struct options; @@ -619,37 +620,6 @@ struct hook { RB_ENTRY(hook) entry; }; -/* Scheduled job. */ -struct job; -typedef void (*job_update_cb) (struct job *); -typedef void (*job_complete_cb) (struct job *); -typedef void (*job_free_cb) (void *); -struct job { - enum { - JOB_RUNNING, - JOB_DEAD, - JOB_CLOSED - } state; - - int flags; -#define JOB_NOWAIT 0x1 - - char *cmd; - pid_t pid; - int status; - - int fd; - struct bufferevent *event; - - job_update_cb updatecb; - job_complete_cb completecb; - job_free_cb freecb; - void *data; - - LIST_ENTRY(job) entry; -}; -LIST_HEAD(joblist, job); - /* Virtual screen. */ struct screen_sel; struct screen_titles; @@ -1628,11 +1598,20 @@ void options_style_update_old(struct options *, extern const struct options_table_entry options_table[]; /* job.c */ -extern struct joblist all_jobs; +typedef void (*job_update_cb) (struct job *); +typedef void (*job_complete_cb) (struct job *); +typedef void (*job_free_cb) (void *); +#define JOB_NOWAIT 0x1 struct job *job_run(const char *, struct session *, const char *, job_update_cb, job_complete_cb, job_free_cb, void *, int); void job_free(struct job *); -void job_died(struct job *, int); +void job_check_died(pid_t, int); +int job_get_status(struct job *); +void *job_get_data(struct job *); +struct bufferevent *job_get_event(struct job *); +void job_kill_all(void); +int job_still_running(void); +void job_print_summary(struct cmdq_item *, int); /* environ.c */ struct environ *environ_create(void); diff --git a/window-copy.c b/window-copy.c index 5d533931fc..5065df0d6b 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1687,7 +1687,7 @@ window_copy_copy_pipe(struct window_pane *wp, struct session *s, expanded = format_single(NULL, arg, NULL, s, NULL, wp); job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT); - bufferevent_write(job->event, buf, len); + bufferevent_write(job_get_event(job), buf, len); free(expanded); window_copy_copy_buffer(wp, bufname, buf, len); From f38b5a1b5860f7e6b1d26006a07cfc01cdc79421 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 Aug 2018 18:39:12 +0000 Subject: [PATCH 201/836] all_jobs can be static. --- job.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/job.c b/job.c index e106cd0193..94e1d702f0 100644 --- a/job.c +++ b/job.c @@ -37,6 +37,7 @@ static void job_read_callback(struct bufferevent *, void *); static void job_write_callback(struct bufferevent *, void *); static void job_error_callback(struct bufferevent *, short, void *); +/* A single job. */ struct job { enum { JOB_RUNNING, @@ -62,7 +63,7 @@ struct job { }; /* All jobs list. */ -LIST_HEAD(joblist, job) all_jobs = LIST_HEAD_INITIALIZER(all_jobs); +static LIST_HEAD(joblist, job) all_jobs = LIST_HEAD_INITIALIZER(all_jobs); /* Start a job running, if it isn't already. */ struct job * From 7fbd2f5498f30383d145653fe5d1e542fbd6ad43 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 25 Aug 2018 13:55:50 +0100 Subject: [PATCH 202/836] Do not draw cells which have no cell (zoomed and they are not active). --- screen-redraw.c | 5 +++++ tmux.h | 4 ++-- tty.c | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 50862f9ef3..1f51e74325 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -456,6 +456,9 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) { struct screen_redraw_ctx ctx; + if (wp->layout_cell == NULL) + return; + screen_redraw_set_context(c, &ctx); screen_redraw_draw_pane(&ctx, wp); @@ -542,6 +545,8 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) log_debug("%s: %s @%u", __func__, c->name, w->id); TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp->layout_cell == NULL) + continue; screen_redraw_draw_pane(ctx, wp); if (c->flags & CLIENT_IDENTIFY) screen_redraw_draw_number(ctx, wp); diff --git a/tmux.h b/tmux.h index aac96be7ce..76130265af 100644 --- a/tmux.h +++ b/tmux.h @@ -2013,10 +2013,10 @@ void grid_view_scroll_region_up(struct grid *, u_int, u_int, u_int); void grid_view_scroll_region_down(struct grid *, u_int, u_int, u_int); void grid_view_insert_lines(struct grid *, u_int, u_int, u_int); void grid_view_insert_lines_region(struct grid *, u_int, u_int, u_int, - u_int); + u_int); void grid_view_delete_lines(struct grid *, u_int, u_int, u_int); void grid_view_delete_lines_region(struct grid *, u_int, u_int, u_int, - u_int); + u_int); void grid_view_insert_cells(struct grid *, u_int, u_int, u_int, u_int); void grid_view_delete_cells(struct grid *, u_int, u_int, u_int, u_int); char *grid_view_string_cells(struct grid *, u_int, u_int, u_int); diff --git a/tty.c b/tty.c index a6cfadf9f7..495366e429 100644 --- a/tty.c +++ b/tty.c @@ -1330,6 +1330,8 @@ tty_client_ready(struct client *c, struct window_pane *wp) return (0); if (c->session->curw->window != wp->window) return (0); + if (wp->layout_cell == NULL) + return (0); return (1); } From 1b4402c82369aa0bb93217979a8fd260a3f269cd Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 Aug 2018 09:28:42 +0000 Subject: [PATCH 203/836] Add q: format prefix to escape sh(1) special characters. Suggested by someone ages ago and then more recently in GitHub issue 1449. --- format.c | 29 +++++++++++++++++++++++++++++ tmux.1 | 4 ++++ 2 files changed, 33 insertions(+) diff --git a/format.c b/format.c index 4244ff0cfe..54e33c7ae6 100644 --- a/format.c +++ b/format.c @@ -94,6 +94,7 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_BASENAME 0x2 #define FORMAT_DIRNAME 0x4 #define FORMAT_SUBSTITUTE 0x8 +#define FORMAT_QUOTE 0x10 /* Entry in format tree. */ struct format_entry { @@ -754,6 +755,23 @@ format_add_cb(struct format_tree *ft, const char *key, format_cb cb) fe->value = NULL; } +/* Quote special characters in string. */ +static char * +format_quote(const char *s) +{ + const char *cp; + char *out, *at; + + at = out = xmalloc(strlen(s) * 2 + 1); + for (cp = s; *cp != '\0'; cp++) { + if (strchr("|&;<>()$`\\\"'*?[# =%", *cp) != NULL) + *at++ = '\\'; + *at++ = *cp; + } + *at = '\0'; + return (out); +} + /* Find a format entry. */ static char * format_find(struct format_tree *ft, const char *key, int modifiers) @@ -836,6 +854,11 @@ format_find(struct format_tree *ft, const char *key, int modifiers) copy = xstrdup(dirname(saved)); free(saved); } + if (modifiers & FORMAT_QUOTE) { + saved = copy; + copy = xstrdup(format_quote(saved)); + free(saved); + } return (copy); } @@ -976,6 +999,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, modifiers |= FORMAT_TIMESTRING; copy += 2; break; + case 'q': + if (copy[1] != ':') + break; + modifiers |= FORMAT_QUOTE; + copy += 2; + break; case 's': sep = copy[1]; if (sep == ':' || !ispunct((u_char)sep)) diff --git a/tmux.1 b/tmux.1 index f84f128245..8eb5aae443 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3676,6 +3676,10 @@ prefixes are and .Xr dirname 3 of the variable respectively. +.Ql q: +will escape +.Xr sh 1 +special characters. A prefix of the form .Ql s/foo/bar/: will substitute From 79a9472dbc3a0c2c635f9761909c6184c53d3a17 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 26 Aug 2018 14:10:39 +0100 Subject: [PATCH 204/836] tty_clamp_* need to use wp->xoff and wp->yoff for the check (which don't include status line, line ox and oy), but ctx->xoff and yp->off to calculate the position (which do have the statu line). --- tty.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/tty.c b/tty.c index 495366e429..facf5814b3 100644 --- a/tty.c +++ b/tty.c @@ -910,7 +910,8 @@ static int tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, u_int *i, u_int *x, u_int *rx, u_int *ry) { - u_int xoff = ctx->xoff + px; + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px; if (!tty_is_visible(tty, ctx, px, py, nx, 1)) return (0); @@ -919,7 +920,7 @@ tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { /* All visible. */ *i = 0; - *x = xoff - ctx->ox; + *x = ctx->xoff + px - ctx->ox; *rx = nx; } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { /* Both left and right not visible. */ @@ -928,14 +929,14 @@ tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, *rx = ctx->sx; } else if (xoff < ctx->ox) { /* Left not visible. */ - *i = ctx->ox - xoff; + *i = ctx->ox - (ctx->xoff + px); *x = 0; *rx = nx - *i; } else { /* Right not visible. */ *i = 0; - *x = xoff - ctx->ox; - *rx = nx - (xoff + nx - ctx->sx); + *x = (ctx->xoff + px) - ctx->ox; + *rx = nx - ((ctx->xoff + px) + nx - ctx->sx); } return (1); } @@ -1002,7 +1003,8 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, u_int nx, u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, u_int *ry) { - u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py; + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px, yoff = wp->yoff + py; if (!tty_is_visible(tty, ctx, px, py, nx, ny)) return (0); @@ -1010,7 +1012,7 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { /* All visible. */ *i = 0; - *x = xoff - ctx->ox; + *x = ctx->xoff + px - ctx->ox; *rx = nx; } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { /* Both left and right not visible. */ @@ -1019,19 +1021,19 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, *rx = ctx->sx; } else if (xoff < ctx->ox) { /* Left not visible. */ - *i = ctx->ox - xoff; + *i = ctx->ox - (ctx->xoff + px); *x = 0; *rx = nx - *i; } else { /* Right not visible. */ *i = 0; - *x = xoff - ctx->ox; - *rx = nx - (xoff + nx - ctx->sx); + *x = (ctx->xoff + px) - ctx->ox; + *rx = nx - ((ctx->xoff + px) + nx - ctx->sx); } if (yoff >= ctx->oy && yoff + ny <= ctx->oy + ctx->sy) { /* All visible. */ *j = 0; - *y = yoff - ctx->oy; + *y = ctx->yoff + py - ctx->oy; *ry = ny; } else if (yoff < ctx->oy && yoff + ny > ctx->oy + ctx->sy) { /* Both left and right not visible. */ @@ -1040,14 +1042,14 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, *ry = ctx->sy; } else if (yoff < ctx->oy) { /* Left not visible. */ - *j = ctx->oy - yoff; + *j = ctx->oy - (ctx->yoff + py); *y = 0; *ry = ny - *j; } else { /* Right not visible. */ *j = 0; - *y = yoff - ctx->oy; - *ry = ny - (yoff + ny - ctx->sy); + *y = (ctx->yoff + py) - ctx->oy; + *ry = ny - ((ctx->yoff + py) + ny - ctx->sy); } return (1); } From 79d2351ce8acbd579081e558cdbaebe333e10153 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 Aug 2018 11:03:34 +0000 Subject: [PATCH 205/836] Memory leaks, from Gang Fan in GitHub issue 1453. --- cmd-if-shell.c | 9 +++++++-- cmd-load-buffer.c | 1 + cmd-run-shell.c | 8 ++++++-- format.c | 4 +++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index ffdbe788a3..480912dfb6 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -120,8 +120,13 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->item = NULL; memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse); - job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, - cmd_if_shell_callback, cmd_if_shell_free, cdata, 0); + if (job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, + cmd_if_shell_callback, cmd_if_shell_free, cdata, 0) == NULL) { + cmdq_error(item, "failed to run command: %s", shellcmd); + free(shellcmd); + free(cdata); + return (CMD_RETURN_ERROR); + } free(shellcmd); if (args_has(args, 'b')) diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index b7c299b78b..47cb0ca223 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -87,6 +87,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) if (error != 0) { cmdq_error(item, "-: %s", cause); free(cause); + free(cdata); return (CMD_RETURN_ERROR); } return (CMD_RETURN_WAIT); diff --git a/cmd-run-shell.c b/cmd-run-shell.c index ff12b5cdcc..47fceafeef 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -102,8 +102,12 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) if (!args_has(args, 'b')) cdata->item = item; - job_run(cdata->cmd, s, server_client_get_cwd(item->client, s), NULL, - cmd_run_shell_callback, cmd_run_shell_free, cdata, 0); + if (job_run(cdata->cmd, s, server_client_get_cwd(item->client, s), NULL, + cmd_run_shell_callback, cmd_run_shell_free, cdata, 0) == NULL) { + cmdq_error(item, "failed to run command: %s", cdata->cmd); + free(cdata); + return (CMD_RETURN_ERROR); + } if (args_has(args, 'b')) return (CMD_RETURN_NORMAL); diff --git a/format.c b/format.c index 54e33c7ae6..ec3839ef80 100644 --- a/format.c +++ b/format.c @@ -1086,8 +1086,10 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, found = xstrdup(""); } } - if (format_choose(ptr + 1, &left, &right) != 0) + if (format_choose(ptr + 1, &left, &right) != 0) { + free(found); goto fail; + } if (format_true(found)) value = format_expand(ft, left); From e53094bc5f302d697661e06cea1eeade27449f23 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 Aug 2018 08:56:51 +0000 Subject: [PATCH 206/836] Add C-Left and C-Right as aliases for M-b and M-f. --- status.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/status.c b/status.c index a2c28d4548..a5f2a2c727 100644 --- a/status.c +++ b/status.c @@ -1059,6 +1059,7 @@ status_prompt_key(struct client *c, key_code key) free(s); return (1); } + key &= ~KEYC_XTERM; keys = options_get_number(c->session->options, "status-keys"); if (keys == MODEKEY_VI) { @@ -1226,6 +1227,7 @@ status_prompt_key(struct client *c, key_code key) goto changed; case 'f'|KEYC_ESCAPE: + case KEYC_RIGHT|KEYC_CTRL: ws = options_get_string(oo, "word-separators"); /* Find a word. */ @@ -1249,6 +1251,7 @@ status_prompt_key(struct client *c, key_code key) goto changed; case 'b'|KEYC_ESCAPE: + case KEYC_LEFT|KEYC_CTRL: ws = options_get_string(oo, "word-separators"); /* Find a non-separator. */ From f57aa143c162679555c4713ca94b7f2c60aa6bf4 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 Aug 2018 09:50:32 +0000 Subject: [PATCH 207/836] Keep any text killed in the command prompt with C-w and yank it with C-y, only use the top buffer if no text has previously been killed. This and previous change promped by discussion with kn@. --- server-client.c | 1 + status.c | 44 ++++++++++++++++++++++++++++++-------------- tmux.h | 1 + 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/server-client.c b/server-client.c index 596b12e7f2..32b51c5026 100644 --- a/server-client.c +++ b/server-client.c @@ -302,6 +302,7 @@ server_client_lost(struct client *c) free(msg); } + free(c->prompt_saved); free(c->prompt_string); free(c->prompt_buffer); diff --git a/status.c b/status.c index a5f2a2c727..10f9f2903e 100644 --- a/status.c +++ b/status.c @@ -766,6 +766,9 @@ status_prompt_clear(struct client *c) free(c->prompt_buffer); c->prompt_buffer = NULL; + free(c->prompt_saved); + c->prompt_saved = NULL; + c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ @@ -1217,6 +1220,12 @@ status_prompt_key(struct client *c, key_code key) } } + free(c->prompt_saved); + c->prompt_saved = xcalloc(sizeof *c->prompt_buffer, + (c->prompt_index - idx) + 1); + memcpy(c->prompt_saved, c->prompt_buffer + idx, + (c->prompt_index - idx) * sizeof *c->prompt_buffer); + memmove(c->prompt_buffer + idx, c->prompt_buffer + c->prompt_index, (size + 1 - c->prompt_index) * @@ -1290,22 +1299,28 @@ status_prompt_key(struct client *c, key_code key) c->prompt_index = utf8_strlen(c->prompt_buffer); goto changed; case '\031': /* C-y */ - if ((pb = paste_get_top(NULL)) == NULL) - break; - bufdata = paste_buffer_data(pb, &bufsize); - for (n = 0; n < bufsize; n++) { - ch = (u_char)bufdata[n]; - if (ch < 32 || ch >= 127) + if (c->prompt_saved != NULL) { + ud = c->prompt_saved; + n = utf8_strlen(c->prompt_saved); + } else { + if ((pb = paste_get_top(NULL)) == NULL) break; + bufdata = paste_buffer_data(pb, &bufsize); + for (n = 0; n < bufsize; n++) { + ch = (u_char)bufdata[n]; + if (ch < 32 || ch >= 127) + break; + } + ud = xreallocarray(NULL, n, sizeof *ud); + for (idx = 0; idx < n; idx++) + utf8_set(&ud[idx], bufdata[idx]); } c->prompt_buffer = xreallocarray(c->prompt_buffer, size + n + 1, sizeof *c->prompt_buffer); if (c->prompt_index == size) { - for (idx = 0; idx < n; idx++) { - ud = &c->prompt_buffer[c->prompt_index + idx]; - utf8_set(ud, bufdata[idx]); - } + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); c->prompt_index += n; c->prompt_buffer[c->prompt_index].size = 0; } else { @@ -1313,12 +1328,13 @@ status_prompt_key(struct client *c, key_code key) c->prompt_buffer + c->prompt_index, (size + 1 - c->prompt_index) * sizeof *c->prompt_buffer); - for (idx = 0; idx < n; idx++) { - ud = &c->prompt_buffer[c->prompt_index + idx]; - utf8_set(ud, bufdata[idx]); - } + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); c->prompt_index += n; } + + if (ud != c->prompt_saved) + free(ud); goto changed; case '\024': /* C-t */ idx = c->prompt_index; diff --git a/tmux.h b/tmux.h index 7a1cc5022f..e95febf87e 100644 --- a/tmux.h +++ b/tmux.h @@ -1358,6 +1358,7 @@ struct client { void *prompt_data; u_int prompt_hindex; enum { PROMPT_ENTRY, PROMPT_COMMAND } prompt_mode; + struct utf8_data *prompt_saved; #define PROMPT_SINGLE 0x1 #define PROMPT_NUMERIC 0x2 From 9263a65b5fd91e55d08567bfa041a69565c840fe Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 Aug 2018 18:52:04 +0100 Subject: [PATCH 208/836] Update TODO. --- TODO | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/TODO b/TODO index 57e99120cd..bf057342c2 100644 --- a/TODO +++ b/TODO @@ -16,7 +16,6 @@ * way to set socket path from config file - format improvements: - * option to quote format (#{q:session_name}) * some way to pad # stuff with spaces * formats to show if a window is linked into multiple sessions, into multiple attached sessions, and is the active window in multiple @@ -130,7 +129,7 @@ temporary one - pan - * tty_window_offset should try to keep as much as active pane + * tty_window_offset should try to keep as much off active pane visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? From 7637518b072b971c88c21b7a4b8bbc54c8b9925b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 Aug 2018 18:59:43 +0100 Subject: [PATCH 209/836] Fix refresh-client flags. --- cmd-refresh-client.c | 2 +- tmux.1 | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index fab6f7ac4d..4c24b1ea58 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -34,7 +34,7 @@ const struct cmd_entry cmd_refresh_client_entry = { .alias = "refresh", .args = { "cC:DLRSt:U", 0, 1 }, - .usage = "[-DLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", + .usage = "[-cDLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec diff --git a/tmux.1 b/tmux.1 index eb0feb2a63..f7cb54d0c5 100644 --- a/tmux.1 +++ b/tmux.1 @@ -930,9 +930,8 @@ is used, the .Ic update-environment option will not be applied. .It Xo Ic refresh-client -.Op Fl cDLRU +.Op Fl cDLRSU .Op Fl C Ar XxY -.Op Fl S .Op Fl t Ar target-client .Op Ar adjustment .Xc From 95e3e363ffbed23a7e146eca55c9c2fdcf152a54 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 Aug 2018 18:54:23 +0000 Subject: [PATCH 210/836] Reset line flag when clearing selection, GitHub issue 1454. --- window-copy.c | 1 + 1 file changed, 1 insertion(+) diff --git a/window-copy.c b/window-copy.c index 5065df0d6b..6ef4b29d08 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1810,6 +1810,7 @@ window_copy_clear_selection(struct window_pane *wp) screen_clear_selection(&data->screen); data->cursordrag = CURSORDRAG_NONE; + data->lineflag = LINE_SEL_NONE; py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); From 479cac4896121b45778bb6ea726173f0fbcdc663 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 Aug 2018 20:52:27 +0100 Subject: [PATCH 211/836] Fix target line for fast path in tty_draw_pane. --- tty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty.c b/tty.c index facf5814b3..ac24a7f2da 100644 --- a/tty.c +++ b/tty.c @@ -1147,7 +1147,7 @@ tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py) log_debug("%s: %s %u %d", __func__, tty->client->name, py, ctx->bigger); if (!ctx->bigger) { - tty_draw_line(tty, wp, s, 0, py, nx, ctx->xoff, ctx->yoff); + tty_draw_line(tty, wp, s, 0, py, nx, ctx->xoff, ctx->yoff + py); return; } if (tty_clamp_line(tty, ctx, 0, py, nx, &i, &x, &rx, &ry)) From 4e867202e84ce91a6b7bdb47c4770404f41100bc Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 31 Aug 2018 14:10:51 +0100 Subject: [PATCH 212/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index bf057342c2..ecb7158020 100644 --- a/TODO +++ b/TODO @@ -133,3 +133,4 @@ visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? + * allow one line panes by redrawing rather than scrolling From 9bab73f48991f7f200f209a95d6a95e44f5769d0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 3 Sep 2018 08:47:27 +0000 Subject: [PATCH 213/836] Fix selection test, from Takeshi Banse. --- window-copy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index 6ef4b29d08..39bf2c2ea0 100644 --- a/window-copy.c +++ b/window-copy.c @@ -2082,7 +2082,7 @@ window_copy_cursor_up(struct window_pane *wp, int scroll_only) } } - if (data->screen.sel != NULL || !data->rectflag) { + if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wp, py); if ((data->cx >= data->lastsx && data->cx != px) || From 8f9491ddfe525f8ac32175871d269d0fb4adebc3 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 3 Sep 2018 08:51:43 +0000 Subject: [PATCH 214/836] Allow a large line number to go to the end with goto-line, from Mark Kelly in GitHub issue 1460. --- window-copy.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/window-copy.c b/window-copy.c index 39bf2c2ea0..660eb63c3a 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1273,11 +1273,13 @@ window_copy_goto_line(struct window_pane *wp, const char *linestr) { struct window_copy_mode_data *data = wp->modedata; const char *errstr; - u_int lineno; + int lineno; - lineno = strtonum(linestr, 0, screen_hsize(data->backing), &errstr); + lineno = strtonum(linestr, -1, INT_MAX, &errstr); if (errstr != NULL) return; + if (lineno < 0 || (u_int)lineno > screen_hsize(data->backing)) + lineno = screen_hsize(data->backing); data->oy = lineno; window_copy_update_selection(wp, 1); From 8e24b0bb3e32fe3fd7b60af990a9566fcda55a67 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Tue, 4 Sep 2018 13:13:32 +0100 Subject: [PATCH 215/836] Makefile.am: Add space between -f and argument Required for some (older) aek instance -- namely NetBSD. --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index e62a161a41..8519c47c4a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -196,7 +196,7 @@ install-exec-hook: >$(srcdir)/tmux.1.mdoc; \ else \ sed -e "s|@SYSCONFDIR@|$(sysconfdir)|g" $(srcdir)/tmux.1| \ - $(AWK) -f$(srcdir)/mdoc2man.awk >$(srcdir)/tmux.1.man; \ + $(AWK) -f $(srcdir)/mdoc2man.awk >$(srcdir)/tmux.1.man; \ fi $(mkdir_p) $(DESTDIR)$(mandir)/man1 $(INSTALL_DATA) $(srcdir)/tmux.1.@MANFORMAT@ \ From 621bb15b839956b9ebcc0d4ebe575f2121e89f9f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 5 Sep 2018 08:41:33 +0100 Subject: [PATCH 216/836] Cast parameters to tparm, from Christos Zoulas via Leonardo Taccari. --- tty-term.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tty-term.c b/tty-term.c index f81c93c02c..12c1afb223 100644 --- a/tty-term.c +++ b/tty-term.c @@ -616,14 +616,14 @@ tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b, i const char * tty_term_ptr1(struct tty_term *term, enum tty_code_code code, const void *a) { - return (tparm((char *) tty_term_string(term, code), a, 0, 0, 0, 0, 0, 0, 0, 0)); + return (tparm((char *) tty_term_string(term, code), (long)a, 0, 0, 0, 0, 0, 0, 0, 0)); } const char * tty_term_ptr2(struct tty_term *term, enum tty_code_code code, const void *a, const void *b) { - return (tparm((char *) tty_term_string(term, code), a, b, 0, 0, 0, 0, 0, 0, 0)); + return (tparm((char *) tty_term_string(term, code), (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0)); } int From 59df942e09fd20144ca90f650fa2e022ae6ca3d0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 5 Sep 2018 08:43:58 +0100 Subject: [PATCH 217/836] Fixes to resize-window from Ben Boeckel. --- cmd-resize-window.c | 2 +- tmux.1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-resize-window.c b/cmd-resize-window.c index 8c4bc3f611..d780b6ee56 100644 --- a/cmd-resize-window.c +++ b/cmd-resize-window.c @@ -34,7 +34,7 @@ const struct cmd_entry cmd_resize_window_entry = { .alias = "resizew", .args = { "aADLRt:Ux:y:", 0, 1 }, - .usage = "[-aADLRU] [-x width] [-y height] " CMD_TARGET_PANE_USAGE " " + .usage = "[-aADLRU] [-x width] [-y height] " CMD_TARGET_WINDOW_USAGE " " "[adjustment]", .target = { 't', CMD_FIND_WINDOW, 0 }, diff --git a/tmux.1 b/tmux.1 index f7cb54d0c5..a85ff7a557 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1959,7 +1959,7 @@ and unzoomed (its normal position in the layout). begins mouse resizing (only valid if bound to a mouse key binding, see .Sx MOUSE SUPPORT ) . .It Xo Ic resize-window -.Op Fl aADLU +.Op Fl aADLUR .Op Fl t Ar target-window .Op Fl x Ar width .Op Fl y Ar height From 8598fd1bc5a4295abf7c720d4bbb7a6e980fbd47 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 9 Sep 2018 07:52:28 +0100 Subject: [PATCH 218/836] Add to TODO. --- TODO | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO b/TODO index ecb7158020..9b7bc299b9 100644 --- a/TODO +++ b/TODO @@ -48,6 +48,8 @@ dragging it should select by word. compare how xterm works. GitHub issue 682) * key to search for word under cursor (GitHub issue 1240) + * when entering copy mode, should copy grid so that input does not + need to be suspended - layout stuff * way to tag a layout as a number/name From a618271e1287c90653cdda4442868c2d4e94de49 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 10 Sep 2018 07:19:17 +0100 Subject: [PATCH 219/836] Bring back window_pane_visible to stop input going to panes which are hidden by zoom. --- input-keys.c | 2 ++ tmux.h | 1 + window.c | 19 ++++++++++++++----- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/input-keys.c b/input-keys.c index d3ff0dc072..f0a38c0927 100644 --- a/input-keys.c +++ b/input-keys.c @@ -249,6 +249,8 @@ input_key_mouse(struct window_pane *wp, struct mouse_event *m) return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; + if (!window_pane_visible(wp)) + return; /* If this pane is not in button or all mode, discard motion events. */ if (MOUSE_DRAG(m->b) && diff --git a/tmux.h b/tmux.h index 9308f6e5a7..6c5d440292 100644 --- a/tmux.h +++ b/tmux.h @@ -2177,6 +2177,7 @@ int window_pane_set_mode(struct window_pane *, void window_pane_reset_mode(struct window_pane *); void window_pane_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); +int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); const char *window_printable_flags(struct winlink *); struct window_pane *window_pane_find_up(struct window_pane *); diff --git a/window.c b/window.c index cf29ae484b..aabfbdf109 100644 --- a/window.c +++ b/window.c @@ -1286,15 +1286,24 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, return; if (options_get_number(wp->window->options, "synchronize-panes")) { TAILQ_FOREACH(wp2, &wp->window->panes, entry) { - if (wp2 == wp || wp2->mode != NULL) - continue; - if (wp2->fd == -1 || wp2->flags & PANE_INPUTOFF) - continue; - input_key(wp2, key, NULL); + if (wp2 != wp && + wp2->mode == NULL && + wp2->fd != -1 && + (~wp2->flags & PANE_INPUTOFF) && + window_pane_visible(wp2)) + input_key(wp2, key, NULL); } } } +int +window_pane_visible(struct window_pane *wp) +{ + if (~wp->window->flags & WINDOW_ZOOMED) + return (1); + return (wp == wp->window->active); +} + u_int window_pane_search(struct window_pane *wp, const char *searchstr) { From 1b92afa799a1b4f67fe098a3cae53e1d9869500e Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 10 Sep 2018 06:48:01 +0000 Subject: [PATCH 220/836] Do not clear selection when searching. --- window-copy.c | 1 - 1 file changed, 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index 660eb63c3a..383f2c4efa 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1172,7 +1172,6 @@ window_copy_search(struct window_pane *wp, int direction) window_copy_move_right(s, &fx, &fy); else window_copy_move_left(s, &fx, &fy); - window_copy_clear_selection(wp); wrapflag = options_get_number(wp->window->options, "wrap-search"); cis = window_copy_is_lowercase(data->searchstr); From 5aa435a9f04fd6e4bab6f564b8af7fe2e8c7719c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 10 Sep 2018 07:51:11 +0100 Subject: [PATCH 221/836] window_get_active_at needs to check visible also. --- window.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/window.c b/window.c index aabfbdf109..7d3b074880 100644 --- a/window.c +++ b/window.c @@ -501,6 +501,8 @@ window_get_active_at(struct window *w, u_int x, u_int y) struct window_pane *wp; TAILQ_FOREACH(wp, &w->panes, entry) { + if (!window_pane_visible(wp)) + continue; if (x < wp->xoff || x > wp->xoff + wp->sx) continue; if (y < wp->yoff || y > wp->yoff + wp->sy) From bd9133b31d1a66d2ea1c6dd893dcd35903a306b9 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 11 Sep 2018 06:37:54 +0000 Subject: [PATCH 222/836] Do not check for mouse events on pane borders when zoomed, based on a fix from Avi Halachmi. --- server-client.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/server-client.c b/server-client.c index 32b51c5026..afc390c769 100644 --- a/server-client.c +++ b/server-client.c @@ -523,27 +523,34 @@ server_client_check_mouse(struct client *c) else if (m->statusat > 0 && y >= (u_int)m->statusat) y = m->statusat - 1; - TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { - if ((wp->xoff + wp->sx == x && - wp->yoff <= 1 + y && - wp->yoff + wp->sy >= y) || - (wp->yoff + wp->sy == y && - wp->xoff <= 1 + x && - wp->xoff + wp->sx >= x)) - break; + /* Try the pane borders if not zoomed. */ + if (~s->curw->window->flags & WINDOW_ZOOMED) { + TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { + if ((wp->xoff + wp->sx == x && + wp->yoff <= 1 + y && + wp->yoff + wp->sy >= y) || + (wp->yoff + wp->sy == y && + wp->xoff <= 1 + x && + wp->xoff + wp->sx >= x)) + break; + } + if (wp != NULL) + where = BORDER; } - if (wp != NULL) - where = BORDER; - else { + + /* Otherwise try inside the pane. */ + if (where == NOWHERE) { wp = window_get_active_at(s->curw->window, x, y); - if (wp != NULL) { + if (wp != NULL) where = PANE; - log_debug("mouse at %u,%u is on pane %%%u", - x, y, wp->id); - } } + if (where == NOWHERE) return (KEYC_UNKNOWN); + if (where == PANE) + log_debug("mouse %u,%u on pane %%%u", x, y, wp->id); + else if (where == BORDER) + log_debug("mouse on pane %%%u border", wp->id); m->wp = wp->id; m->w = wp->window->id; } else From 84df87011c0cdf642209ed30bae5b37fb1889ae7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 11 Sep 2018 09:39:28 +0100 Subject: [PATCH 223/836] x,y -> px,py. --- server-client.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server-client.c b/server-client.c index 7bdd57e3bb..410b8c02e4 100644 --- a/server-client.c +++ b/server-client.c @@ -538,12 +538,12 @@ server_client_check_mouse(struct client *c) /* Try the pane borders if not zoomed. */ if (~s->curw->window->flags & WINDOW_ZOOMED) { TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { - if ((wp->xoff + wp->sx == x && - wp->yoff <= 1 + y && - wp->yoff + wp->sy >= y) || - (wp->yoff + wp->sy == y && - wp->xoff <= 1 + x && - wp->xoff + wp->sx >= x)) + if ((wp->xoff + wp->sx == px && + wp->yoff <= 1 + py && + wp->yoff + wp->sy >= py) || + (wp->yoff + wp->sy == py && + wp->xoff <= 1 + px && + wp->xoff + wp->sx >= px)) break; } if (wp != NULL) @@ -552,7 +552,7 @@ server_client_check_mouse(struct client *c) /* Otherwise try inside the pane. */ if (where == NOWHERE) { - wp = window_get_active_at(s->curw->window, x, y); + wp = window_get_active_at(s->curw->window, px, py); if (wp != NULL) where = PANE; } From be2201200f21c074b35c9c31034b7bdf6cd76721 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 11 Sep 2018 17:31:01 +0000 Subject: [PATCH 224/836] The cursor position is limited to the margins for CUF and CUB, so turn margins off for printing cells (like most everything else already does). Problem reported by Thomas Sattler. --- tty.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tty.c b/tty.c index 2397f8c461..b6dd3403e8 100644 --- a/tty.c +++ b/tty.c @@ -1401,13 +1401,12 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) { - if (ctx->xoff + ctx->ocx > tty->sx - 1 && ctx->ocy == ctx->orlower) { - if (tty_pane_full_width(tty, ctx)) - tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); - else - tty_margin_off(tty); - } + if (ctx->xoff + ctx->ocx > tty->sx - 1 && + ctx->ocy == ctx->orlower && + tty_pane_full_width(tty, ctx)) + tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); + tty_margin_off(tty); tty_cursor_pane_unless_wrap(tty, ctx, ctx->ocx, ctx->ocy); tty_cell(tty, ctx->cell, ctx->wp); @@ -1416,6 +1415,7 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) { + tty_margin_off(tty); tty_cursor_pane_unless_wrap(tty, ctx, ctx->ocx, ctx->ocy); tty_attributes(tty, ctx->cell, ctx->wp); From 3fa538181b1e1fb4c9414f49013a3e5839c2e2cb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 11 Sep 2018 18:34:53 +0100 Subject: [PATCH 225/836] Restore window_pane_visible for drawing panes and borders, fixes issue 1458 reported by Felix Rosencrantz, problem located by Avi Halachmi. --- screen-redraw.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 1f51e74325..a10acd973a 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -104,6 +104,8 @@ screen_redraw_cell_border(struct client *c, u_int px, u_int py) /* Check all the panes. */ TAILQ_FOREACH(wp, &w->panes, entry) { + if (!window_pane_visible(wp)) + continue; if ((retval = screen_redraw_cell_border1(wp, px, py)) != -1) return (!!retval); } @@ -128,6 +130,9 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, if (pane_status != CELL_STATUS_OFF) { TAILQ_FOREACH(wp, &w->panes, entry) { + if (!window_pane_visible(wp)) + continue; + if (pane_status == CELL_STATUS_TOP) line = wp->yoff - 1; else @@ -140,6 +145,8 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, } TAILQ_FOREACH(wp, &w->panes, entry) { + if (!window_pane_visible(wp)) + continue; *wpp = wp; /* If outside the pane and its border, skip it. */ @@ -325,6 +332,8 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) log_debug("%s: %s @%u", __func__, c->name, w->id); TAILQ_FOREACH(wp, &w->panes, entry) { + if (!window_pane_visible(wp)) + continue; s = &wp->status_screen; size = wp->status_size; @@ -456,7 +465,7 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) { struct screen_redraw_ctx ctx; - if (wp->layout_cell == NULL) + if (!window_pane_visible(wp)) return; screen_redraw_set_context(c, &ctx); @@ -545,7 +554,7 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) log_debug("%s: %s @%u", __func__, c->name, w->id); TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->layout_cell == NULL) + if (!window_pane_visible(wp)) continue; screen_redraw_draw_pane(ctx, wp); if (c->flags & CLIENT_IDENTIFY) From 71d2ab184b906885ba21f5d6905490bbc5d67d9f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 12 Sep 2018 07:15:27 +0100 Subject: [PATCH 226/836] Fix up merge. --- tty.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tty.c b/tty.c index 9a5b019d81..10ae16173c 100644 --- a/tty.c +++ b/tty.c @@ -1698,7 +1698,10 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) { - if (ctx->xoff + ctx->ocx > tty->sx - 1 && + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, 1, 1)) + return; + + if (ctx->xoff + ctx->ocx - ctx->ox > tty->sx - 1 && ctx->ocy == ctx->orlower && tty_pane_full_width(tty, ctx)) tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); @@ -1712,6 +1715,26 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) { + struct window_pane *wp = ctx->wp; + + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, ctx->num, 1)) + return; + + if (ctx->bigger && + (ctx->ocx < ctx->ox || ctx->ocx + ctx->num > ctx->ox + ctx->sx)) { + if (!ctx->wrapped || + !tty_pane_full_width(tty, ctx) || + (tty->term->flags & TERM_EARLYWRAP) || + ctx->xoff + ctx->ocx != 0 || + ctx->yoff + ctx->ocy != tty->cy + 1 || + tty->cx < tty->sx || + tty->cy == tty->rlower) + tty_draw_pane(tty, ctx, ctx->ocy); + else + wp->flags |= PANE_REDRAW; + return; + } + tty_margin_off(tty); tty_cursor_pane_unless_wrap(tty, ctx, ctx->ocx, ctx->ocy); From ad71e7f9d247e4745cf80c7ec6f698e959adb99f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 24 Sep 2018 12:17:29 +0100 Subject: [PATCH 227/836] Calculate size when trimming RHS correctly. --- screen-redraw.c | 8 ++++---- tty.c | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index a10acd973a..167389b444 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -368,7 +368,7 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) /* Right not visible. */ i = 0; x = xoff - ctx->ox; - width = size - (xoff + size - ctx->sx); + width = size - x; } if (ctx->top) @@ -628,7 +628,7 @@ screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp) /* Right not visible. */ i = 0; x = wp->xoff - ctx->ox; - width = wp->sx - (wp->xoff + wp->sx - ctx->sx); + width = ctx->sx - x; } log_debug("%s: %s %%%u line %u,%u at %u,%u, width %u", __func__, c->name, wp->id, i, j, x, y, width); @@ -674,7 +674,7 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) } else { /* Right not visible. */ xoff = wp->xoff - ctx->ox; - sx = wp->sx - (wp->xoff + wp->sx - ctx->sx); + sx = wp->sx - xoff; } if (wp->yoff >= ctx->oy && wp->yoff + wp->sy <= ctx->oy + ctx->sy) { /* All visible. */ @@ -692,7 +692,7 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) } else { /* Bottom not visible. */ yoff = wp->yoff - ctx->oy; - sy = wp->sy - (wp->yoff + wp->sy - ctx->sy); + sy = wp->sy - yoff; } if (ctx->top) diff --git a/tty.c b/tty.c index 10ae16173c..bf4c1424cd 100644 --- a/tty.c +++ b/tty.c @@ -936,8 +936,13 @@ tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, /* Right not visible. */ *i = 0; *x = (ctx->xoff + px) - ctx->ox; - *rx = nx - ((ctx->xoff + px) + nx - ctx->sx); + *rx = ctx->sx - *x; } + if (*rx > nx) + fatalx("%s: x too big, %u > %u", __func__, *rx, nx); + if (nx > *rx) + *rx = nx; + return (1); } @@ -1028,8 +1033,13 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, /* Right not visible. */ *i = 0; *x = (ctx->xoff + px) - ctx->ox; - *rx = nx - ((ctx->xoff + px) + nx - ctx->sx); + *rx = ctx->sx - *x; } + if (*rx > nx) + fatalx("%s: x too big, %u > %u", __func__, *rx, nx); + if (nx > *rx) + *rx = nx; + if (yoff >= ctx->oy && yoff + ny <= ctx->oy + ctx->sy) { /* All visible. */ *j = 0; @@ -1049,8 +1059,13 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, /* Right not visible. */ *j = 0; *y = (ctx->yoff + py) - ctx->oy; - *ry = ny - ((ctx->yoff + py) + ny - ctx->sy); + *ry = ctx->sy - *y; } + if (*ry > ny) + fatalx("%s: y too big, %u > %u", __func__, *ry, ny); + if (ny > *ry) + *ry = ny; + return (1); } From 7bc6c105b7565441e8b32f4f77099cb5c3274611 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 24 Sep 2018 15:29:56 +0000 Subject: [PATCH 228/836] Only include pane status in minimum size if it is turned on, GitHub issue 1480. --- layout.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/layout.c b/layout.c index e1112ffa2b..4ad645e0e5 100644 --- a/layout.c +++ b/layout.c @@ -236,7 +236,7 @@ layout_need_status(struct layout_cell *lc, int at_top) { struct layout_cell *first_lc; - if (lc->parent) { + if (lc->parent != NULL) { if (lc->parent->type == LAYOUT_LEFTRIGHT) return (layout_need_status(lc->parent, at_top)); @@ -349,7 +349,9 @@ layout_resize_check(struct window *w, struct layout_cell *lc, { struct layout_cell *lcchild; u_int available, minimum; + int status; + status = options_get_number(w->options, "pane-border-status"); if (lc->type == LAYOUT_WINDOWPANE) { /* Space available in this cell only. */ minimum = PANE_MINIMUM; @@ -357,9 +359,8 @@ layout_resize_check(struct window *w, struct layout_cell *lc, available = lc->sx; else { available = lc->sy; - minimum += layout_need_status(lc, - options_get_number(w->options, - "pane-border-status") == 1); + if (status != 0) + minimum += layout_need_status(lc, status == 1); } if (available > minimum) available -= minimum; From 57069287a11cc208647f699a87aa7bf526716668 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 08:27:43 +0100 Subject: [PATCH 229/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 9b7bc299b9..2e72c755e4 100644 --- a/TODO +++ b/TODO @@ -112,6 +112,7 @@ * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... * drag panes and windows around to move/swap them in choose mode + * support panes of 1 line (redraw instead of scrolling) - hooks * more hooks for various things From 26d73a7736bf6c8560f90c7ae75963a02b4c9ba9 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 09:48:48 +0100 Subject: [PATCH 230/836] Ignore clients that are suspended or exiting. --- resize.c | 6 +++++- tmux.h | 13 +++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/resize.c b/resize.c index 40a1a01666..fc761f3491 100644 --- a/resize.c +++ b/resize.c @@ -79,6 +79,8 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL) continue; + if (c->flags & CLIENT_NOSIZEFLAGS) + continue; if (w != NULL && !session_has(c->session, w)) continue; if (w == NULL && c->session != s) @@ -99,6 +101,8 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL) continue; + if (c->flags & CLIENT_NOSIZEFLAGS) + continue; if (w != NULL && !session_has(c->session, w)) continue; if (w == NULL && c->session != s) @@ -209,7 +213,7 @@ recalculate_sizes(void) } if (sx == 0 || sy == 0) changed = 0; - } else if (type == WINDOW_SIZE_SMALLEST) { + } else { sx = sy = UINT_MAX; TAILQ_FOREACH(c, &clients, entry) { if ((s = c->session) == NULL) diff --git a/tmux.h b/tmux.h index 6c5d440292..7378927a39 100644 --- a/tmux.h +++ b/tmux.h @@ -1357,11 +1357,16 @@ struct client { #define CLIENT_SIZECHANGED 0x400000 #define CLIENT_STATUSOFF 0x800000 #define CLIENT_REDRAWSTATUSALWAYS 0x1000000 -#define CLIENT_ALLREDRAWFLAGS \ - (CLIENT_REDRAWWINDOW| \ - CLIENT_REDRAWSTATUS| \ - CLIENT_REDRAWSTATUSALWAYS| \ +#define CLIENT_ALLREDRAWFLAGS \ + (CLIENT_REDRAWWINDOW| \ + CLIENT_REDRAWSTATUS| \ + CLIENT_REDRAWSTATUSALWAYS| \ CLIENT_REDRAWBORDERS) +#define CLIENT_NOSIZEFLAGS \ + (CLIENT_EXIT| \ + CLIENT_DEAD| \ + CLIENT_SUSPENDED| \ + CLIENT_DETACHING) int flags; struct key_table *keytable; From b4e74f4310d90affd4e1a4a7328082ac4beb5461 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 09:54:47 +0100 Subject: [PATCH 231/836] Add a B flag to mark windows bigger than the client. --- cmd-select-pane.c | 7 ++++--- tmux.1 | 1 + tmux.h | 4 ++-- tty.c | 3 +-- window.c | 4 +++- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 5cec82f269..34b0a3c376 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -58,6 +58,7 @@ static void cmd_select_pane_redraw(struct window *w) { struct client *c; + struct window *loop; /* * Redraw entire window if it is bigger than the client (the @@ -67,15 +68,15 @@ cmd_select_pane_redraw(struct window *w) TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL) continue; - if (c->session->curw->window == w && tty_window_bigger(&c->tty)) + loop = c->session->curw->window; + if (loop == w && tty_window_bigger(&c->tty, w)) server_redraw_client(c); else { - if (c->session->curw->window == w) + if (loop == w) c->flags |= CLIENT_REDRAWBORDERS; if (session_has(c->session, w)) c->flags |= CLIENT_REDRAWSTATUS; } - } } diff --git a/tmux.1 b/tmux.1 index a85ff7a557..15904010bd 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4095,6 +4095,7 @@ The flag is one of the following symbols appended to the window name: .It Li "#" Ta "Window activity is monitored and activity has been detected." .It Li "\&!" Ta "Window bells are monitored and a bell has occurred in the window." .It Li "~" Ta "The window has been silent for the monitor-silence interval." +.It Li "+" Ta "The window is larger than is visible." .It Li "M" Ta "The window contains the marked pane." .It Li "Z" Ta "The window's active pane is zoomed." .El diff --git a/tmux.h b/tmux.h index 7378927a39..4ae6d6adef 100644 --- a/tmux.h +++ b/tmux.h @@ -1669,7 +1669,7 @@ struct environ *environ_for_session(struct session *, int); /* tty.c */ void tty_create_log(void); -int tty_window_bigger(struct tty *); +int tty_window_bigger(struct tty *, struct window *); int tty_window_offset(struct tty *, u_int *, u_int *, u_int *, u_int *); void tty_update_window_offset(struct window *); void tty_update_client_offset(struct client *); @@ -2184,7 +2184,7 @@ void window_pane_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); -const char *window_printable_flags(struct winlink *); +const char *window_printable_flags(struct winlink *, struct client *); struct window_pane *window_pane_find_up(struct window_pane *); struct window_pane *window_pane_find_down(struct window_pane *); struct window_pane *window_pane_find_left(struct window_pane *); diff --git a/tty.c b/tty.c index bf4c1424cd..f3cbbf23fc 100644 --- a/tty.c +++ b/tty.c @@ -701,11 +701,10 @@ tty_repeat_space(struct tty *tty, u_int n) /* Is this window bigger than the terminal? */ int -tty_window_bigger(struct tty *tty) +tty_window_bigger(struct tty *tty, struct window *w) { struct client *c = tty->client; struct session *s = c->session; - struct window *w = s->curw->window; return (tty->sx < w->sx || tty->sy - status_line_size(c) < w->sy); } diff --git a/window.c b/window.c index 7d3b074880..3704a63375 100644 --- a/window.c +++ b/window.c @@ -739,7 +739,7 @@ window_destroy_panes(struct window *w) } const char * -window_printable_flags(struct winlink *wl) +window_printable_flags(struct winlink *wl, struct client *c) { struct session *s = wl->session; static char flags[32]; @@ -760,6 +760,8 @@ window_printable_flags(struct winlink *wl) flags[pos++] = 'M'; if (wl->window->flags & WINDOW_ZOOMED) flags[pos++] = 'Z'; + if (c != NULL && tty_window_bigger(&c->tty, wl->window)) + flags[pos++] = 'B'; flags[pos] = '\0'; return (flags); } From 83b2d5c5132f3c8cec8a7732fed8fd58f30e8554 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 09:55:49 +0100 Subject: [PATCH 232/836] window_printable_flags needs an additional argument. --- format.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/format.c b/format.c index 96c7efb353..466f8d2d41 100644 --- a/format.c +++ b/format.c @@ -52,7 +52,7 @@ static int format_replace(struct format_tree *, const char *, size_t, static void format_defaults_session(struct format_tree *, struct session *); static void format_defaults_client(struct format_tree *, struct client *); -static void format_defaults_winlink(struct format_tree *, +static void format_defaults_winlink(struct format_tree *, struct client *, struct winlink *); /* Entry in format job tree. */ @@ -1347,7 +1347,7 @@ format_defaults(struct format_tree *ft, struct client *c, struct session *s, if (s != NULL) format_defaults_session(ft, s); if (wl != NULL) - format_defaults_winlink(ft, wl); + format_defaults_winlink(ft, c, wl); if (wp != NULL) format_defaults_pane(ft, wp); } @@ -1462,7 +1462,8 @@ format_defaults_window(struct format_tree *ft, struct window *w) /* Set default format keys for a winlink. */ static void -format_defaults_winlink(struct format_tree *ft, struct winlink *wl) +format_defaults_winlink(struct format_tree *ft, struct client *c, + struct winlink *wl) { struct session *s = wl->session; struct window *w = wl->window; @@ -1475,7 +1476,7 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) format_add(ft, "window_index", "%d", wl->idx); format_add_cb(ft, "window_stack_index", format_cb_window_stack_index); - format_add(ft, "window_flags", "%s", window_printable_flags(wl)); + format_add(ft, "window_flags", "%s", window_printable_flags(wl, c)); format_add(ft, "window_active", "%d", wl == s->curw); format_add(ft, "window_bell_flag", "%d", From cbf1504fca76af655430228c56263c4f8397850f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 15:15:44 +0100 Subject: [PATCH 233/836] Do not clamp to needed size since it may be too big. --- tty.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tty.c b/tty.c index f3cbbf23fc..906ee2699f 100644 --- a/tty.c +++ b/tty.c @@ -704,7 +704,6 @@ int tty_window_bigger(struct tty *tty, struct window *w) { struct client *c = tty->client; - struct session *s = c->session; return (tty->sx < w->sx || tty->sy - status_line_size(c) < w->sy); } @@ -939,8 +938,6 @@ tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, } if (*rx > nx) fatalx("%s: x too big, %u > %u", __func__, *rx, nx); - if (nx > *rx) - *rx = nx; return (1); } @@ -1036,8 +1033,6 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, } if (*rx > nx) fatalx("%s: x too big, %u > %u", __func__, *rx, nx); - if (nx > *rx) - *rx = nx; if (yoff >= ctx->oy && yoff + ny <= ctx->oy + ctx->sy) { /* All visible. */ @@ -1062,8 +1057,6 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, } if (*ry > ny) fatalx("%s: y too big, %u > %u", __func__, *ry, ny); - if (ny > *ry) - *ry = ny; return (1); } From 7d59f82cf96a91ac560d06aef0fe5c8880cf2244 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 25 Sep 2018 14:27:20 +0000 Subject: [PATCH 234/836] Allow panes to be 1 line or column by redrawing instead of using the scroll region, from Soeren Tempel in GitHub issue 1487. --- tmux.h | 7 ++----- tty.c | 20 +++++++++++++++----- window-copy.c | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/tmux.h b/tmux.h index e95febf87e..4e070249c4 100644 --- a/tmux.h +++ b/tmux.h @@ -59,11 +59,8 @@ struct tmuxproc; /* Default global configuration file. */ #define TMUX_CONF "/etc/tmux.conf" -/* - * Minimum layout cell size, NOT including separator line. The scroll region - * cannot be one line in height so this must be at least two. - */ -#define PANE_MINIMUM 2 +/* Minimum layout cell size, NOT including border lines. */ +#define PANE_MINIMUM 1 /* Automatic name refresh interval, in microseconds. Must be < 1 second. */ #define NAME_INTERVAL 500000 diff --git a/tty.c b/tty.c index b6dd3403e8..5bf4a3cabb 100644 --- a/tty.c +++ b/tty.c @@ -1145,7 +1145,9 @@ tty_cmd_insertline(struct tty *tty, const struct tty_ctx *ctx) if (!tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || - !tty_term_has(tty->term, TTYC_IL1)) { + !tty_term_has(tty->term, TTYC_IL1) || + ctx->wp->sx == 1 || + ctx->wp->sy == 1) { tty_redraw_region(tty, ctx); return; } @@ -1166,7 +1168,9 @@ tty_cmd_deleteline(struct tty *tty, const struct tty_ctx *ctx) if (!tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || - !tty_term_has(tty->term, TTYC_DL1)) { + !tty_term_has(tty->term, TTYC_DL1) || + ctx->wp->sx == 1 || + ctx->wp->sy == 1) { tty_redraw_region(tty, ctx); return; } @@ -1227,7 +1231,9 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) if (!tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || - !tty_term_has(tty->term, TTYC_RI)) { + !tty_term_has(tty->term, TTYC_RI) || + ctx->wp->sx == 1 || + ctx->wp->sy == 1) { tty_redraw_region(tty, ctx); return; } @@ -1251,7 +1257,9 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || - !tty_term_has(tty->term, TTYC_CSR)) { + !tty_term_has(tty->term, TTYC_CSR) || + wp->sx == 1 || + wp->sy == 1) { tty_redraw_region(tty, ctx); return; } @@ -1287,7 +1295,9 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || - !tty_term_has(tty->term, TTYC_CSR)) { + !tty_term_has(tty->term, TTYC_CSR) || + wp->sx == 1 || + wp->sy == 1) { tty_redraw_region(tty, ctx); return; } diff --git a/window-copy.c b/window-copy.c index 383f2c4efa..78667b1ef4 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1299,7 +1299,7 @@ window_copy_write_line(struct window_pane *wp, struct screen_write_ctx *ctx, style_apply(&gc, oo, "mode-style"); gc.flags |= GRID_FLAG_NOPALETTE; - if (py == 0) { + if (py == 0 && s->rupper < s->rlower) { if (data->searchmark == NULL) { size = xsnprintf(hdr, sizeof hdr, "[%u/%u]", data->oy, screen_hsize(data->backing)); From 6abb62df1e492672a552f89b9188fe3bf0750b5c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Sep 2018 21:57:14 +0100 Subject: [PATCH 235/836] Change the B into a +. --- window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window.c b/window.c index 3704a63375..ed76e7f4f4 100644 --- a/window.c +++ b/window.c @@ -761,7 +761,7 @@ window_printable_flags(struct winlink *wl, struct client *c) if (wl->window->flags & WINDOW_ZOOMED) flags[pos++] = 'Z'; if (c != NULL && tty_window_bigger(&c->tty, wl->window)) - flags[pos++] = 'B'; + flags[pos++] = '+'; flags[pos] = '\0'; return (flags); } From 04c6db2d0f7bca4bc6b31afd5a5cb4512b5f915b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 26 Sep 2018 16:42:29 +0100 Subject: [PATCH 236/836] Revert "Add a B flag to mark windows bigger than the client." This reverts commit b4e74f4310d90affd4e1a4a7328082ac4beb5461. --- cmd-select-pane.c | 7 +++---- tmux.1 | 1 - tmux.h | 4 ++-- tty.c | 3 ++- window.c | 4 +--- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 34b0a3c376..5cec82f269 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -58,7 +58,6 @@ static void cmd_select_pane_redraw(struct window *w) { struct client *c; - struct window *loop; /* * Redraw entire window if it is bigger than the client (the @@ -68,15 +67,15 @@ cmd_select_pane_redraw(struct window *w) TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL) continue; - loop = c->session->curw->window; - if (loop == w && tty_window_bigger(&c->tty, w)) + if (c->session->curw->window == w && tty_window_bigger(&c->tty)) server_redraw_client(c); else { - if (loop == w) + if (c->session->curw->window == w) c->flags |= CLIENT_REDRAWBORDERS; if (session_has(c->session, w)) c->flags |= CLIENT_REDRAWSTATUS; } + } } diff --git a/tmux.1 b/tmux.1 index 15904010bd..a85ff7a557 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4095,7 +4095,6 @@ The flag is one of the following symbols appended to the window name: .It Li "#" Ta "Window activity is monitored and activity has been detected." .It Li "\&!" Ta "Window bells are monitored and a bell has occurred in the window." .It Li "~" Ta "The window has been silent for the monitor-silence interval." -.It Li "+" Ta "The window is larger than is visible." .It Li "M" Ta "The window contains the marked pane." .It Li "Z" Ta "The window's active pane is zoomed." .El diff --git a/tmux.h b/tmux.h index be74a3a7bd..22fb80a431 100644 --- a/tmux.h +++ b/tmux.h @@ -1666,7 +1666,7 @@ struct environ *environ_for_session(struct session *, int); /* tty.c */ void tty_create_log(void); -int tty_window_bigger(struct tty *, struct window *); +int tty_window_bigger(struct tty *); int tty_window_offset(struct tty *, u_int *, u_int *, u_int *, u_int *); void tty_update_window_offset(struct window *); void tty_update_client_offset(struct client *); @@ -2181,7 +2181,7 @@ void window_pane_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); -const char *window_printable_flags(struct winlink *, struct client *); +const char *window_printable_flags(struct winlink *); struct window_pane *window_pane_find_up(struct window_pane *); struct window_pane *window_pane_find_down(struct window_pane *); struct window_pane *window_pane_find_left(struct window_pane *); diff --git a/tty.c b/tty.c index 00f58d1cb3..7e52755c20 100644 --- a/tty.c +++ b/tty.c @@ -701,9 +701,10 @@ tty_repeat_space(struct tty *tty, u_int n) /* Is this window bigger than the terminal? */ int -tty_window_bigger(struct tty *tty, struct window *w) +tty_window_bigger(struct tty *tty) { struct client *c = tty->client; + struct window *w = c->session->curw->window; return (tty->sx < w->sx || tty->sy - status_line_size(c) < w->sy); } diff --git a/window.c b/window.c index ed76e7f4f4..7d3b074880 100644 --- a/window.c +++ b/window.c @@ -739,7 +739,7 @@ window_destroy_panes(struct window *w) } const char * -window_printable_flags(struct winlink *wl, struct client *c) +window_printable_flags(struct winlink *wl) { struct session *s = wl->session; static char flags[32]; @@ -760,8 +760,6 @@ window_printable_flags(struct winlink *wl, struct client *c) flags[pos++] = 'M'; if (wl->window->flags & WINDOW_ZOOMED) flags[pos++] = 'Z'; - if (c != NULL && tty_window_bigger(&c->tty, wl->window)) - flags[pos++] = '+'; flags[pos] = '\0'; return (flags); } From b74b047730226a64a64b1e1dd1cc1d7f3305ea53 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 26 Sep 2018 16:49:03 +0100 Subject: [PATCH 237/836] More of revert. --- format.c | 10 ++++------ resize.c | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/format.c b/format.c index 466f8d2d41..e3552cba0f 100644 --- a/format.c +++ b/format.c @@ -52,8 +52,7 @@ static int format_replace(struct format_tree *, const char *, size_t, static void format_defaults_session(struct format_tree *, struct session *); static void format_defaults_client(struct format_tree *, struct client *); -static void format_defaults_winlink(struct format_tree *, struct client *, - struct winlink *); +static void format_defaults_winlink(struct format_tree *, struct winlink *); /* Entry in format job tree. */ struct format_job { @@ -1347,7 +1346,7 @@ format_defaults(struct format_tree *ft, struct client *c, struct session *s, if (s != NULL) format_defaults_session(ft, s); if (wl != NULL) - format_defaults_winlink(ft, c, wl); + format_defaults_winlink(ft, wl); if (wp != NULL) format_defaults_pane(ft, wp); } @@ -1462,8 +1461,7 @@ format_defaults_window(struct format_tree *ft, struct window *w) /* Set default format keys for a winlink. */ static void -format_defaults_winlink(struct format_tree *ft, struct client *c, - struct winlink *wl) +format_defaults_winlink(struct format_tree *ft, struct winlink *wl) { struct session *s = wl->session; struct window *w = wl->window; @@ -1476,7 +1474,7 @@ format_defaults_winlink(struct format_tree *ft, struct client *c, format_add(ft, "window_index", "%d", wl->idx); format_add_cb(ft, "window_stack_index", format_cb_window_stack_index); - format_add(ft, "window_flags", "%s", window_printable_flags(wl, c)); + format_add(ft, "window_flags", "%s", window_printable_flags(wl)); format_add(ft, "window_active", "%d", wl == s->curw); format_add(ft, "window_bell_flag", "%d", diff --git a/resize.c b/resize.c index fc761f3491..fef8feeb99 100644 --- a/resize.c +++ b/resize.c @@ -96,7 +96,7 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, } if (*sx == 0 || *sy == 0) goto manual; - } else if (type == WINDOW_SIZE_SMALLEST) { + } else { *sx = *sy = UINT_MAX; TAILQ_FOREACH(c, &clients, entry) { if (c->session == NULL) From ebaf54251a6e3a1b366531155ab59dbd286a4a3a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 26 Sep 2018 18:41:18 +0100 Subject: [PATCH 238/836] Add formats for when window is larger than client, and show offset in status-right by default when larger. --- format.c | 18 ++++++++++++++++-- options-table.c | 4 +++- tmux.1 | 3 +++ tty.c | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/format.c b/format.c index e3552cba0f..5cdce67c90 100644 --- a/format.c +++ b/format.c @@ -106,9 +106,10 @@ struct format_entry { /* Format entry tree. */ struct format_tree { - struct window *w; - struct winlink *wl; + struct client *c; struct session *s; + struct winlink *wl; + struct window *w; struct window_pane *wp; struct client *client; @@ -1395,6 +1396,7 @@ format_defaults_client(struct format_tree *ft, struct client *c) if (ft->s == NULL) ft->s = c->session; + ft->c = c; format_add(ft, "client_name", "%s", c->name); format_add(ft, "client_pid", "%ld", (long) c->pid); @@ -1463,8 +1465,11 @@ format_defaults_window(struct format_tree *ft, struct window *w) static void format_defaults_winlink(struct format_tree *ft, struct winlink *wl) { + struct client *c = ft->c; struct session *s = wl->session; struct window *w = wl->window; + int flag; + u_int ox, oy, sx, sy; if (ft->w == NULL) ft->w = wl->window; @@ -1472,6 +1477,15 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) format_defaults_window(ft, w); + if (c != NULL) { + flag = tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + format_add(ft, "window_bigger", "%d", flag); + if (flag) { + format_add(ft, "window_offset_x", "%u", ox); + format_add(ft, "window_offset_y", "%u", oy); + } + } + format_add(ft, "window_index", "%d", wl->idx); format_add_cb(ft, "window_stack_index", format_cb_window_stack_index); format_add(ft, "window_flags", "%s", window_printable_flags(wl)); diff --git a/options-table.c b/options-table.c index 0776f0b772..4bc7982f2f 100644 --- a/options-table.c +++ b/options-table.c @@ -476,7 +476,9 @@ const struct options_table_entry options_table[] = { { .name = "status-right", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SESSION, - .default_str = " \"#{=21:pane_title}\" %H:%M %d-%b-%y" + .default_str = "#{?window_bigger," + "[#{window_offset_x}#,#{window_offset_y}] ,}" + "\"#{=21:pane_title}\" %H:%M %d-%b-%y" }, { .name = "status-right-attr", diff --git a/tmux.1 b/tmux.1 index a85ff7a557..4d72404ec0 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3921,6 +3921,7 @@ The following variables are available, where appropriate: .It Li "window_activity_flag" Ta "" Ta "1 if window has activity" .It Li "window_active" Ta "" Ta "1 if window active" .It Li "window_bell_flag" Ta "" Ta "1 if window has bell" +.It Li "window_bigger" Ta "" Ta "1 if window is larger than client" .It Li "window_flags" Ta "#F" Ta "Window flags" .It Li "window_format" Ta "" Ta "1 if format is for a window (not assuming the current)" .It Li "window_height" Ta "" Ta "Height of window" @@ -3930,6 +3931,8 @@ The following variables are available, where appropriate: .It Li "window_layout" Ta "" Ta "Window layout description, ignoring zoomed window panes" .It Li "window_linked" Ta "" Ta "1 if window is linked across sessions" .It Li "window_name" Ta "#W" Ta "Name of window" +.It Li "window_offset_x" Ta "" Ta "X offset into window if larger than client" +.It Li "window_offset_y" Ta "" Ta "Y offset into window if larger than client" .It Li "window_panes" Ta "" Ta "Number of panes in window" .It Li "window_silence_flag" Ta "" Ta "1 if window has silence alert" .It Li "window_stack_index" Ta "" Ta "Index in session most recent stack" diff --git a/tty.c b/tty.c index 7e52755c20..510a442a76 100644 --- a/tty.c +++ b/tty.c @@ -815,7 +815,7 @@ tty_update_client_offset(struct client *c) c->tty.osx = sx; c->tty.osy = sy; - c->flags |= CLIENT_REDRAWWINDOW; + c->flags |= (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS); } /* From 228e1a39513701385ffa6241acf6647f08a4b00c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 27 Sep 2018 07:43:18 +0000 Subject: [PATCH 239/836] Use same working directory rules for jobs as new windows rather than always starting in home, GitHub issue 1488. --- format.c | 3 ++- job.c | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/format.c b/format.c index ec3839ef80..126bbc14dd 100644 --- a/format.c +++ b/format.c @@ -297,7 +297,8 @@ format_job_get(struct format_tree *ft, const char *cmd) t = time(NULL); if (fj->job == NULL && (force || fj->last != t)) { - fj->job = job_run(expanded, NULL, NULL, format_job_update, + fj->job = job_run(expanded, NULL, + server_client_get_cwd(ft->client, NULL), format_job_update, format_job_complete, NULL, fj, JOB_NOWAIT); if (fj->job == NULL) { free(fj->out); diff --git a/job.c b/job.c index 94e1d702f0..37c9c45383 100644 --- a/job.c +++ b/job.c @@ -80,6 +80,7 @@ job_run(const char *cmd, struct session *s, const char *cwd, if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, out) != 0) return (NULL); + log_debug("%s: cmd=%s, cwd=%s", __func__, cmd, cwd); /* * Do not set TERM during .tmux.conf, it is nice to be able to use From 8053b65f1ed23a7d9dab0381cdbf2dbd441c61ec Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 28 Sep 2018 09:38:22 +0100 Subject: [PATCH 240/836] Fix select-pane -m, GitHub issuie 1490. --- cmd-select-pane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 5cec82f269..90ca46ba45 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -119,7 +119,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) } if (args_has(args, 'm') || args_has(args, 'M')) { - if (args_has(args, 'm')) + if (args_has(args, 'm') && !window_pane_visible(wp)) return (CMD_RETURN_NORMAL); lastwp = marked_pane.wp; From 5a7cf897f266345635c6adeca20c9bb90dbe1e2f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 1 Oct 2018 19:47:58 +0100 Subject: [PATCH 241/836] Correctly check offset for drawing multiple cells, GitHub issue 1481. --- tty.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tty.c b/tty.c index 510a442a76..86f0d722f0 100644 --- a/tty.c +++ b/tty.c @@ -1739,7 +1739,8 @@ tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) return; if (ctx->bigger && - (ctx->ocx < ctx->ox || ctx->ocx + ctx->num > ctx->ox + ctx->sx)) { + (ctx->xoff + ctx->ocx < ctx->ox || + ctx->xoff + ctx->ocx + ctx->num > ctx->ox + ctx->sx)) { if (!ctx->wrapped || !tty_pane_full_width(tty, ctx) || (tty->term->flags & TERM_EARLYWRAP) || From f7c85f3ed8f151501fb72a1c18a48d126d89c83c Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 3 Oct 2018 15:27:55 +0000 Subject: [PATCH 242/836] Do not move the cursor when the mouse wheel is used, GitHub issue 1493. --- tmux.h | 2 +- window-copy.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.h b/tmux.h index 4e070249c4..a6770e5257 100644 --- a/tmux.h +++ b/tmux.h @@ -936,7 +936,7 @@ RB_HEAD(sessions, session); /* Mouse wheel states. */ #define MOUSE_WHEEL_UP 0 -#define MOUSE_WHEEL_DOWN 64 +#define MOUSE_WHEEL_DOWN 1 /* Mouse helpers. */ #define MOUSE_BUTTONS(b) ((b) & MOUSE_MASK_BUTTONS) diff --git a/window-copy.c b/window-copy.c index 78667b1ef4..e35e607093 100644 --- a/window-copy.c +++ b/window-copy.c @@ -529,7 +529,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, return; command = args->argv[0]; - if (m != NULL && m->valid) + if (m != NULL && m->valid && !MOUSE_WHEEL(m->b)) window_copy_move_mouse(m); if (args->argc == 1) { From 546060f34085bf93278cf2c6941488d7ffbd4f70 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Oct 2018 15:01:41 +0100 Subject: [PATCH 243/836] Update TODO. --- TODO | 2 -- 1 file changed, 2 deletions(-) diff --git a/TODO b/TODO index 2e72c755e4..36bbdbc037 100644 --- a/TODO +++ b/TODO @@ -112,7 +112,6 @@ * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... * drag panes and windows around to move/swap them in choose mode - * support panes of 1 line (redraw instead of scrolling) - hooks * more hooks for various things @@ -136,4 +135,3 @@ visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? - * allow one line panes by redrawing rather than scrolling From 1952b3f746482c90bb8375aa42207e5af96f37eb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Oct 2018 15:06:40 +0100 Subject: [PATCH 244/836] Update CHANGES. --- CHANGES | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGES b/CHANGES index 6cb589393b..d233beaef3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,19 @@ CHANGES FROM 2.8 to master +* Do not move the cursor in copy mode when the mouse wheel is used. + +* Use the same working directory rules for jobs as new windows rather + than always starting in the user's home. + +* Allow panes to be one line or column in size. + +* Go to last line when goto-line number is out of range in copy mode. + +* Yank previously cut text if any with C-y in the command prompt, only + use the buffer if no text has been cut. + +* Add q: format modifier to quote shell special characters. + * Add StatusLeft and StatusRight mouse locations (keys such as MouseDown1StatusLeft) for the status-left and status-right areas of the status line. From 46847e9b2e048204690e544b8e6ab328b2a33233 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 8 Oct 2018 13:06:37 +0100 Subject: [PATCH 245/836] Update TODO. --- TODO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODO b/TODO index 36bbdbc037..4cf45389df 100644 --- a/TODO +++ b/TODO @@ -49,7 +49,7 @@ issue 682) * key to search for word under cursor (GitHub issue 1240) * when entering copy mode, should copy grid so that input does not - need to be suspended + need to be suspended - layout stuff * way to tag a layout as a number/name From 4b9e76aaaa2dffc01a796fe2ee6edafdfce814a9 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 8 Oct 2018 13:21:37 +0100 Subject: [PATCH 246/836] Support for extended underline styles, enabled by adding the Smulx capability with terminal-overrides (add something like 'vte*:Smulx=\E[4\:%p1%dm'). GitHub issue 1492. --- attributes.c | 56 ++++++++++++++++++++++++++++++++-------------------- grid.c | 16 +++++++++++---- input.c | 46 ++++++++++++++++++++++++++++++++++++------ tmux.1 | 11 ++++++++++- tmux.h | 13 ++++++++++++ tty-term.c | 45 ++++++++++++++++++++++++++++++++--------- tty.c | 15 ++++++++++++-- 7 files changed, 159 insertions(+), 43 deletions(-) diff --git a/attributes.c b/attributes.c index 1e45e584cf..1b8317332a 100644 --- a/attributes.c +++ b/attributes.c @@ -25,13 +25,13 @@ const char * attributes_tostring(int attr) { - static char buf[128]; + static char buf[512]; size_t len; if (attr == 0) return ("none"); - len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s", + len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s", (attr & GRID_ATTR_BRIGHT) ? "bright," : "", (attr & GRID_ATTR_DIM) ? "dim," : "", (attr & GRID_ATTR_UNDERSCORE) ? "underscore," : "", @@ -39,7 +39,11 @@ attributes_tostring(int attr) (attr & GRID_ATTR_REVERSE) ? "reverse," : "", (attr & GRID_ATTR_HIDDEN) ? "hidden," : "", (attr & GRID_ATTR_ITALICS) ? "italics," : "", - (attr & GRID_ATTR_STRIKETHROUGH) ? "strikethrough," : ""); + (attr & GRID_ATTR_STRIKETHROUGH) ? "strikethrough," : "", + (attr & GRID_ATTR_UNDERSCORE_2) ? "double-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_3) ? "curly-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_4) ? "dotted-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_5) ? "dashed-underscore," : ""); if (len > 0) buf[len - 1] = '\0'; @@ -52,6 +56,25 @@ attributes_fromstring(const char *str) const char delimiters[] = " ,|"; int attr; size_t end; + u_int i; + struct { + const char* name; + int attr; + } table[] = { + { "bright", GRID_ATTR_BRIGHT }, + { "bold", GRID_ATTR_BRIGHT }, + { "dim", GRID_ATTR_DIM }, + { "underscore", GRID_ATTR_UNDERSCORE }, + { "blink", GRID_ATTR_BLINK }, + { "reverse", GRID_ATTR_REVERSE }, + { "hidden", GRID_ATTR_HIDDEN }, + { "italics", GRID_ATTR_ITALICS }, + { "strikethrough", GRID_ATTR_STRIKETHROUGH }, + { "double-underscore", GRID_ATTR_UNDERSCORE_2 }, + { "curly-underscore", GRID_ATTR_UNDERSCORE_3 }, + { "dotted-underscore", GRID_ATTR_UNDERSCORE_4 }, + { "dashed-underscore", GRID_ATTR_UNDERSCORE_5 } + }; if (*str == '\0' || strcspn(str, delimiters) == 0) return (-1); @@ -64,24 +87,15 @@ attributes_fromstring(const char *str) attr = 0; do { end = strcspn(str, delimiters); - if ((end == 6 && strncasecmp(str, "bright", end) == 0) || - (end == 4 && strncasecmp(str, "bold", end) == 0)) - attr |= GRID_ATTR_BRIGHT; - else if (end == 3 && strncasecmp(str, "dim", end) == 0) - attr |= GRID_ATTR_DIM; - else if (end == 10 && strncasecmp(str, "underscore", end) == 0) - attr |= GRID_ATTR_UNDERSCORE; - else if (end == 5 && strncasecmp(str, "blink", end) == 0) - attr |= GRID_ATTR_BLINK; - else if (end == 7 && strncasecmp(str, "reverse", end) == 0) - attr |= GRID_ATTR_REVERSE; - else if (end == 6 && strncasecmp(str, "hidden", end) == 0) - attr |= GRID_ATTR_HIDDEN; - else if (end == 7 && strncasecmp(str, "italics", end) == 0) - attr |= GRID_ATTR_ITALICS; - else if (end == 13 && strncasecmp(str, "strikethrough", end) == 0) - attr |= GRID_ATTR_STRIKETHROUGH; - else + for (i = 0; i < nitems(table); i++) { + if (end != strlen(table[i].name)) + continue; + if (strncasecmp(str, table[i].name, end) == 0) { + attr |= table[i].attr; + break; + } + } + if (i == nitems(table)) return (-1); str += end + strspn(str + end, delimiters); } while (*str != '\0'); diff --git a/grid.c b/grid.c index dcfd95fe21..a7c9a67e9f 100644 --- a/grid.c +++ b/grid.c @@ -764,7 +764,11 @@ grid_string_cells_code(const struct grid_cell *lastgc, { GRID_ATTR_BLINK, 5 }, { GRID_ATTR_REVERSE, 7 }, { GRID_ATTR_HIDDEN, 8 }, - { GRID_ATTR_STRIKETHROUGH, 9 } + { GRID_ATTR_STRIKETHROUGH, 9 }, + { GRID_ATTR_UNDERSCORE_2, 42 }, + { GRID_ATTR_UNDERSCORE_3, 43 }, + { GRID_ATTR_UNDERSCORE_4, 44 }, + { GRID_ATTR_UNDERSCORE_5, 45 }, }; n = 0; @@ -790,11 +794,15 @@ grid_string_cells_code(const struct grid_cell *lastgc, else strlcat(buf, "\033[", len); for (i = 0; i < n; i++) { - if (i + 1 < n) - xsnprintf(tmp, sizeof tmp, "%d;", s[i]); - else + if (s[i] < 10) xsnprintf(tmp, sizeof tmp, "%d", s[i]); + else { + xsnprintf(tmp, sizeof tmp, "%d:%d", s[i] / 10, + s[i] % 10); + } strlcat(buf, tmp, len); + if (i + 1 < n) + strlcat(buf, ";", len); } strlcat(buf, "m", len); } diff --git a/input.c b/input.c index 254d0e5de2..7954099db5 100644 --- a/input.c +++ b/input.c @@ -1835,10 +1835,11 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i) static void input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) { - char *s = ictx->param_list[i].str, *copy, *ptr, *out; - int p[8]; - u_int n; - const char *errstr; + struct grid_cell *gc = &ictx->cell.cell; + char *s = ictx->param_list[i].str, *copy, *ptr, *out; + int p[8]; + u_int n; + const char *errstr; for (n = 0; n < nitems(p); n++) p[n] = -1; @@ -1857,7 +1858,39 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) } free(copy); - if (n == 0 || (p[0] != 38 && p[0] != 48)) + if (n == 0) + return; + if (p[0] == 4) { + if (n != 2) + return; + switch (p[1]) { + case 0: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + break; + case 1: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE; + break; + case 2: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_2; + break; + case 3: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_3; + break; + case 4: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_4; + break; + case 5: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_5; + break; + } + return; + } + if (p[0] != 38 && p[0] != 48) return; if (p[1] == -1) i = 2; @@ -1927,6 +1960,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) gc->attr |= GRID_ATTR_ITALICS; break; case 4: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; gc->attr |= GRID_ATTR_UNDERSCORE; break; case 5: @@ -1948,7 +1982,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) gc->attr &= ~GRID_ATTR_ITALICS; break; case 24: - gc->attr &= ~GRID_ATTR_UNDERSCORE; + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; break; case 25: gc->attr &= ~GRID_ATTR_BLINK; diff --git a/tmux.1 b/tmux.1 index 4d72404ec0..47ba8589e3 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2857,8 +2857,12 @@ or a comma-delimited list of one or more of: .Ic reverse , .Ic hidden , .Ic italics , +.Ic strikethrough , +.Ic double-underscore +.Ic curly-underscore +.Ic dotted-underscore or -.Ic strikethrough +.Ic dashed-underscore to turn an attribute on, or an attribute prefixed with .Ql no to turn one off. @@ -4525,6 +4529,11 @@ to change the cursor colour from inside .Bd -literal -offset indent $ printf '\e033]12;red\e033\e\e' .Ed +.It Em \&Smulx +Set a styled underline. +The single parameter is one of: 0 for no underline, 1 for normal +underline, 2 for double underline, 3 for curly underline, 4 for dotted +underline and 5 for dashed underline. .It Em \&Ss , Se Set or reset the cursor style. If set, a sequence such as this may be used diff --git a/tmux.h b/tmux.h index c7bebe6da4..2f8ed88d8b 100644 --- a/tmux.h +++ b/tmux.h @@ -429,6 +429,7 @@ enum tty_code_code { TTYC_SMCUP, TTYC_SMKX, TTYC_SMSO, + TTYC_SMULX, TTYC_SMUL, TTYC_SMXX, TTYC_SS, @@ -554,6 +555,18 @@ enum utf8_state { #define GRID_ATTR_ITALICS 0x40 #define GRID_ATTR_CHARSET 0x80 /* alternative character set */ #define GRID_ATTR_STRIKETHROUGH 0x100 +#define GRID_ATTR_UNDERSCORE_2 0x200 +#define GRID_ATTR_UNDERSCORE_3 0x400 +#define GRID_ATTR_UNDERSCORE_4 0x800 +#define GRID_ATTR_UNDERSCORE_5 0x1000 + +/* All underscore attributes. */ +#define GRID_ATTR_ALL_UNDERSCORE \ + (GRID_ATTR_UNDERSCORE| \ + GRID_ATTR_UNDERSCORE_2| \ + GRID_ATTR_UNDERSCORE_3| \ + GRID_ATTR_UNDERSCORE_4| \ + GRID_ATTR_UNDERSCORE_5) /* Grid flags. */ #define GRID_FLAG_FG256 0x1 diff --git a/tty-term.c b/tty-term.c index 12c1afb223..7e0fdb37ef 100644 --- a/tty-term.c +++ b/tty-term.c @@ -256,6 +256,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_SMCUP] = { TTYCODE_STRING, "smcup" }, [TTYC_SMKX] = { TTYCODE_STRING, "smkx" }, [TTYC_SMSO] = { TTYCODE_STRING, "smso" }, + [TTYC_SMULX] = { TTYCODE_STRING, "Smulx" }, [TTYC_SMUL] = { TTYCODE_STRING, "smul" }, [TTYC_SMXX] = { TTYCODE_STRING, "smxx" }, [TTYC_SS] = { TTYCODE_STRING, "Ss" }, @@ -302,25 +303,50 @@ tty_term_strip(const char *s) return (xstrdup(buf)); } +static char * +tty_term_override_next(const char *s, size_t *offset) +{ + static char value[BUFSIZ]; + size_t n = 0, at = *offset; + + if (s[at] == '\0') + return (NULL); + + while (s[at] != '\0' && s[at] != ':') { + if (s[at] == '\\' && s[at + 1] == ':') { + value[n++] = ':'; + at += 2; + } else { + value[n++] = s[at]; + at++; + } + if (n == (sizeof value) - 1) + return (NULL); + } + if (s[at] != '\0') + *offset = at + 1; + else + *offset = at; + value[n] = '\0'; + return (value); +} + static void tty_term_override(struct tty_term *term, const char *override) { const struct tty_term_code_entry *ent; struct tty_code *code; - char *next, *s, *copy, *cp, *value; + size_t offset = 0; + char *cp, *value, *s; const char *errstr; u_int i; int n, remove; - copy = next = xstrdup(override); - - s = strsep(&next, ":"); - if (s == NULL || next == NULL || fnmatch(s, term->name, 0) != 0) { - free(copy); + s = tty_term_override_next(override, &offset); + if (s == NULL || fnmatch(s, term->name, 0) != 0) return; - } - while ((s = strsep(&next, ":")) != NULL) { + while ((s = tty_term_override_next(override, &offset)) != NULL) { if (*s == '\0') continue; value = NULL; @@ -341,6 +367,8 @@ tty_term_override(struct tty_term *term, const char *override) if (remove) log_debug("%s override: %s@", term->name, s); + else if (*value == '\0') + log_debug("%s override: %s", term->name, s); else log_debug("%s override: %s=%s", term->name, s, value); @@ -379,7 +407,6 @@ tty_term_override(struct tty_term *term, const char *override) free(value); } - free(s); } struct tty_term * diff --git a/tty.c b/tty.c index 86f0d722f0..cee5acbcd1 100644 --- a/tty.c +++ b/tty.c @@ -2163,8 +2163,19 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, tty_putcode(tty, TTYC_DIM); if (changed & GRID_ATTR_ITALICS) tty_set_italics(tty); - if (changed & GRID_ATTR_UNDERSCORE) - tty_putcode(tty, TTYC_SMUL); + if (changed & GRID_ATTR_ALL_UNDERSCORE) { + if ((changed & GRID_ATTR_UNDERSCORE) || + !tty_term_has(tty->term, TTYC_SMULX)) + tty_putcode(tty, TTYC_SMUL); + else if (changed & GRID_ATTR_UNDERSCORE_2) + tty_putcode1(tty, TTYC_SMULX, 2); + else if (changed & GRID_ATTR_UNDERSCORE_3) + tty_putcode1(tty, TTYC_SMULX, 3); + else if (changed & GRID_ATTR_UNDERSCORE_4) + tty_putcode1(tty, TTYC_SMULX, 4); + else if (changed & GRID_ATTR_UNDERSCORE_5) + tty_putcode1(tty, TTYC_SMULX, 5); + } if (changed & GRID_ATTR_BLINK) tty_putcode(tty, TTYC_BLINK); if (changed & GRID_ATTR_REVERSE) { From 018f1b8a803f15910781dc9894fbd168cfa50943 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 8 Oct 2018 19:42:55 +0100 Subject: [PATCH 247/836] Use :: for escaping : in terminal-overrides not \:. --- tty-term.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tty-term.c b/tty-term.c index 7e0fdb37ef..b43fe06ed6 100644 --- a/tty-term.c +++ b/tty-term.c @@ -312,10 +312,13 @@ tty_term_override_next(const char *s, size_t *offset) if (s[at] == '\0') return (NULL); - while (s[at] != '\0' && s[at] != ':') { - if (s[at] == '\\' && s[at + 1] == ':') { - value[n++] = ':'; - at += 2; + while (s[at] != '\0') { + if (s[at] == ':') { + if (s[at + 1] == ':') { + value[n++] = ':'; + at += 2; + } else + break; } else { value[n++] = s[at]; at++; From c88e945bc5e59bed8eaa41f1e66a9b03a2dad807 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 11 Oct 2018 16:20:14 +0100 Subject: [PATCH 248/836] Support OSC 52 ? to read the top buffer inside tmux, also add refresh-client -l to get the clipboard outside tmux. GitHub issue 1477. --- cmd-refresh-client.c | 9 ++-- input.c | 118 +++++++++++++++++++++++++++++++------------ tmux.1 | 10 ++-- tty-keys.c | 103 +++++++++++++++++++++++++++++++++++++ 4 files changed, 201 insertions(+), 39 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index 4c24b1ea58..e5ae099f2e 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "cC:DLRSt:U", 0, 1 }, - .usage = "[-cDLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", + .args = { "cC:DlLRSt:U", 0, 1 }, + .usage = "[-cDlLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -104,7 +104,10 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } - if (args_has(args, 'C')) { + if (args_has(args, 'l')) { + if (c->session != NULL) + tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); + } else if (args_has(args, 'C')) { if ((size = args_get(args, 'C')) == NULL) { cmdq_error(item, "missing size"); return (CMD_RETURN_ERROR); diff --git a/input.c b/input.c index 7954099db5..41cdfb70fd 100644 --- a/input.c +++ b/input.c @@ -93,6 +93,10 @@ struct input_ctx { u_char *input_buf; size_t input_len; size_t input_space; + enum { + INPUT_END_ST, + INPUT_END_BEL + } input_end; struct input_param param_list[24]; u_int param_list_len; @@ -126,11 +130,11 @@ static void input_set_state(struct window_pane *, const struct input_transition *); static void input_reset_cell(struct input_ctx *); -static void input_osc_4(struct window_pane *, const char *); -static void input_osc_10(struct window_pane *, const char *); -static void input_osc_11(struct window_pane *, const char *); -static void input_osc_52(struct window_pane *, const char *); -static void input_osc_104(struct window_pane *, const char *); +static void input_osc_4(struct input_ctx *, const char *); +static void input_osc_10(struct input_ctx *, const char *); +static void input_osc_11(struct input_ctx *, const char *); +static void input_osc_52(struct input_ctx *, const char *); +static void input_osc_104(struct input_ctx *, const char *); /* Transition entry/exit handlers. */ static void input_clear(struct input_ctx *); @@ -161,6 +165,7 @@ static void input_csi_dispatch_sgr_rgb(struct input_ctx *, int, u_int *); static void input_csi_dispatch_sgr(struct input_ctx *); static int input_dcs_dispatch(struct input_ctx *); static int input_top_bit_set(struct input_ctx *); +static int input_end_bel(struct input_ctx *); /* Command table comparison function. */ static int input_table_compare(const void *, const void *); @@ -487,7 +492,7 @@ static const struct input_transition input_state_esc_enter_table[] = { { -1, -1, NULL, NULL } }; -/* esc_interm state table. */ +/* esc_intermediate state table. */ static const struct input_transition input_state_esc_intermediate_table[] = { INPUT_STATE_ANYWHERE, @@ -602,7 +607,7 @@ static const struct input_transition input_state_dcs_parameter_table[] = { { -1, -1, NULL, NULL } }; -/* dcs_interm state table. */ +/* dcs_intermediate state table. */ static const struct input_transition input_state_dcs_intermediate_table[] = { INPUT_STATE_ANYWHERE, @@ -655,12 +660,12 @@ static const struct input_transition input_state_dcs_ignore_table[] = { static const struct input_transition input_state_osc_string_table[] = { INPUT_STATE_ANYWHERE, - { 0x00, 0x06, NULL, NULL }, - { 0x07, 0x07, NULL, &input_state_ground }, - { 0x08, 0x17, NULL, NULL }, - { 0x19, 0x19, NULL, NULL }, - { 0x1c, 0x1f, NULL, NULL }, - { 0x20, 0xff, input_input, NULL }, + { 0x00, 0x06, NULL, NULL }, + { 0x07, 0x07, input_end_bel, &input_state_ground }, + { 0x08, 0x17, NULL, NULL }, + { 0x19, 0x19, NULL, NULL }, + { 0x1c, 0x1f, NULL, NULL }, + { 0x20, 0xff, input_input, NULL }, { -1, -1, NULL, NULL } }; @@ -993,8 +998,8 @@ input_get(struct input_ctx *ictx, u_int validx, int minval, int defval) static void input_reply(struct input_ctx *ictx, const char *fmt, ...) { - va_list ap; - char *reply; + va_list ap; + char *reply; va_start(ap, fmt); xvasprintf(&reply, fmt, ap); @@ -1019,6 +1024,8 @@ input_clear(struct input_ctx *ictx) *ictx->input_buf = '\0'; ictx->input_len = 0; + ictx->input_end = INPUT_END_ST; + ictx->flags &= ~INPUT_DISCARD; } @@ -2046,6 +2053,17 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) } } +/* End of input with BEL. */ +static int +input_end_bel(struct input_ctx *ictx) +{ + log_debug("%s", __func__); + + ictx->input_end = INPUT_END_BEL; + + return (0); +} + /* DCS string started. */ static void input_enter_dcs(struct input_ctx *ictx) @@ -2102,7 +2120,8 @@ input_exit_osc(struct input_ctx *ictx) if (ictx->input_len < 1 || *p < '0' || *p > '9') return; - log_debug("%s: \"%s\"", __func__, p); + log_debug("%s: \"%s\" (end %s)", __func__, p, + ictx->input_end == INPUT_END_ST ? "ST" : "BEL"); option = 0; while (*p >= '0' && *p <= '9') @@ -2119,23 +2138,23 @@ input_exit_osc(struct input_ctx *ictx) } break; case 4: - input_osc_4(ictx->wp, p); + input_osc_4(ictx, p); break; case 10: - input_osc_10(ictx->wp, p); + input_osc_10(ictx, p); break; case 11: - input_osc_11(ictx->wp, p); + input_osc_11(ictx, p); break; case 12: if (utf8_isvalid(p) && *p != '?') /* ? is colour request */ screen_set_cursor_colour(ictx->ctx.s, p); break; case 52: - input_osc_52(ictx->wp, p); + input_osc_52(ictx, p); break; case 104: - input_osc_104(ictx->wp, p); + input_osc_104(ictx, p); break; case 112: if (*p == '\0') /* no arguments allowed */ @@ -2237,11 +2256,12 @@ input_top_bit_set(struct input_ctx *ictx) /* Handle the OSC 4 sequence for setting (multiple) palette entries. */ static void -input_osc_4(struct window_pane *wp, const char *p) +input_osc_4(struct input_ctx *ictx, const char *p) { - char *copy, *s, *next = NULL; - long idx; - u_int r, g, b; + struct window_pane *wp = ictx->wp; + char *copy, *s, *next = NULL; + long idx; + u_int r, g, b; copy = s = xstrdup(p); while (s != NULL && *s != '\0') { @@ -2271,9 +2291,10 @@ input_osc_4(struct window_pane *wp, const char *p) /* Handle the OSC 10 sequence for setting foreground colour. */ static void -input_osc_10(struct window_pane *wp, const char *p) +input_osc_10(struct input_ctx *ictx, const char *p) { - u_int r, g, b; + struct window_pane *wp = ictx->wp; + u_int r, g, b; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; @@ -2289,9 +2310,10 @@ input_osc_10(struct window_pane *wp, const char *p) /* Handle the OSC 11 sequence for setting background colour. */ static void -input_osc_11(struct window_pane *wp, const char *p) +input_osc_11(struct input_ctx *ictx, const char *p) { - u_int r, g, b; + struct window_pane *wp = ictx->wp; + u_int r, g, b; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; @@ -2307,13 +2329,16 @@ input_osc_11(struct window_pane *wp, const char *p) /* Handle the OSC 52 sequence for setting the clipboard. */ static void -input_osc_52(struct window_pane *wp, const char *p) +input_osc_52(struct input_ctx *ictx, const char *p) { + struct window_pane *wp = ictx->wp; char *end; + const char *buf; size_t len; u_char *out; int outlen, state; struct screen_write_ctx ctx; + struct paste_buffer *pb; state = options_get_number(global_options, "set-clipboard"); if (state != 2) @@ -2324,6 +2349,32 @@ input_osc_52(struct window_pane *wp, const char *p) end++; if (*end == '\0') return; + log_debug("%s: %s", __func__, end); + + if (strcmp(end, "?") == 0) { + if ((pb = paste_get_top(NULL)) != NULL) { + buf = paste_buffer_data(pb, &len); + outlen = 4 * ((len + 2) / 3) + 1; + out = xmalloc(outlen); + if ((outlen = b64_ntop(buf, len, out, outlen)) == -1) { + abort(); + free(out); + return; + } + } else { + outlen = 0; + out = NULL; + } + bufferevent_write(wp->event, "\033]52;;", 6); + if (outlen != 0) + bufferevent_write(wp->event, out, outlen); + if (ictx->input_end == INPUT_END_BEL) + bufferevent_write(wp->event, "\007", 1); + else + bufferevent_write(wp->event, "\033\\", 2); + free(out); + return; + } len = (strlen(end) / 4) * 3; if (len == 0) @@ -2345,10 +2396,11 @@ input_osc_52(struct window_pane *wp, const char *p) /* Handle the OSC 104 sequence for unsetting (multiple) palette entries. */ static void -input_osc_104(struct window_pane *wp, const char *p) +input_osc_104(struct input_ctx *ictx, const char *p) { - char *copy, *s; - long idx; + struct window_pane *wp = ictx->wp; + char *copy, *s; + long idx; if (*p == '\0') { window_pane_reset_palette(wp); diff --git a/tmux.1 b/tmux.1 index 47ba8589e3..47dcfc9795 100644 --- a/tmux.1 +++ b/tmux.1 @@ -930,7 +930,7 @@ is used, the .Ic update-environment option will not be applied. .It Xo Ic refresh-client -.Op Fl cDLRSU +.Op Fl cDlLRSU .Op Fl C Ar XxY .Op Fl t Ar target-client .Op Ar adjustment @@ -975,6 +975,10 @@ it. .Pp .Fl C sets the width and height of a control client. +.Fl l +requests the clipboard from the client using the +.Xr xterm 1 +escape sequence and stores it in a new paste buffer. .It Xo Ic rename-session .Op Fl t Ar target-session .Ar new-name @@ -3996,7 +4000,7 @@ option. .El .Pp When a pane is first created, its title is the hostname. -A pane's title can be set via the OSC title setting sequence, for example: +A pane's title can be set via the title setting escape sequence, for example: .Bd -literal -offset indent $ printf '\e033]2;My Title\e033\e\e' .Ed @@ -4550,7 +4554,7 @@ Indicate that the terminal supports the .Ql direct colour RGB escape sequence (for example, \ee[38;2;255;255;255m). .Pp -If supported, this is used for the OSC initialize colour escape sequence (which +If supported, this is used for the initialize colour escape sequence (which may be enabled by adding the .Ql initc and diff --git a/tty-keys.c b/tty-keys.c index 69d01fafd9..a0f608c02c 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -19,7 +19,10 @@ #include #include +#include + #include +#include #include #include #include @@ -44,6 +47,8 @@ static int tty_keys_next1(struct tty *, const char *, size_t, key_code *, size_t *, int); static void tty_keys_callback(int, short, void *); static int tty_keys_mouse(struct tty *, const char *, size_t, size_t *); +static int tty_keys_clipboard(struct tty *, const char *, size_t, + size_t *); static int tty_keys_device_attributes(struct tty *, const char *, size_t, size_t *); @@ -571,6 +576,17 @@ tty_keys_next(struct tty *tty) return (0); log_debug("%s: keys are %zu (%.*s)", c->name, len, (int)len, buf); + /* Is this a clipboard response? */ + switch (tty_keys_clipboard(tty, buf, len, &size)) { + case 0: /* yes */ + key = KEYC_UNKNOWN; + goto complete_key; + case -1: /* no, or not valid */ + break; + case 1: /* partial */ + goto partial_key; + } + /* Is this a device attributes response? */ switch (tty_keys_device_attributes(tty, buf, len, &size)) { case 0: /* yes */ @@ -871,6 +887,93 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size) return (0); } +/* + * Handle OSC 52 clipboard input. Returns 0 for success, -1 for failure, 1 for + * partial. + */ +static int +tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len, + size_t *size) +{ + size_t end, terminator, needed; + char *copy, *out; + int outlen; + + *size = 0; + + /* First three bytes are always \033]52;. */ + if (buf[0] != '\033') + return (-1); + if (len == 1) + return (1); + if (buf[1] != ']') + return (-1); + if (len == 2) + return (1); + if (buf[2] != '5') + return (-1); + if (len == 3) + return (1); + if (buf[3] != '2') + return (-1); + if (len == 4) + return (1); + if (buf[4] != ';') + return (-1); + if (len == 5) + return (1); + + /* Find the terminator if any. */ + for (end = 5; end < len; end++) { + if (buf[end] == '\007') { + terminator = 1; + break; + } + if (end > 5 && buf[end - 1] == '\033' && buf[end] == '\\') { + terminator = 2; + break; + } + } + if (end == len) + return (1); + *size = end + terminator; + + /* Skip the initial part. */ + buf += 5; + end -= 5; + + /* Get the second argument. */ + while (end != 0 && *buf != ';') { + buf++; + end--; + } + if (end == 0 || end == 1) + return (0); + buf++; + end--; + + /* It has to be a string so copy it. */ + copy = xmalloc(end + 1); + memcpy(copy, buf, end); + copy[end] = '\0'; + + /* Convert from base64. */ + needed = (end / 4) * 3; + out = xmalloc(needed); + if ((outlen = b64_pton(copy, out, len)) == -1) { + free(out); + free(copy); + return (0); + } + free(copy); + + /* Create a new paste buffer. */ + log_debug("%s: %.*s", __func__, outlen, out); + paste_add(out, outlen); + + return (0); +} + /* * Handle device attributes input. Returns 0 for success, -1 for failure, 1 for * partial. From cdd8c93f54764bfc295e967f5d776513ad17ac6a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 15 Oct 2018 09:09:40 +0100 Subject: [PATCH 249/836] Add to TODO file. --- TODO | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO b/TODO index 4cf45389df..3b83948313 100644 --- a/TODO +++ b/TODO @@ -112,6 +112,8 @@ * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... * drag panes and windows around to move/swap them in choose mode + * flag to specify environment to new-window, split-window, + new-session (issue 1498) - hooks * more hooks for various things From 407075d8c7cccad62450fbefd54edcc4ab511940 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 16 Oct 2018 14:12:33 +0100 Subject: [PATCH 250/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 3b83948313..3d037f1f8a 100644 --- a/TODO +++ b/TODO @@ -114,6 +114,7 @@ * drag panes and windows around to move/swap them in choose mode * flag to specify environment to new-window, split-window, new-session (issue 1498) + * multiple column panes (issue 1503) - hooks * more hooks for various things From a2c52d9f264764ceed17251911662c63d4af4f50 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 16 Oct 2018 14:16:48 +0100 Subject: [PATCH 251/836] Add to TODO. --- TODO | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO b/TODO index 3d037f1f8a..5886eea599 100644 --- a/TODO +++ b/TODO @@ -50,6 +50,8 @@ * key to search for word under cursor (GitHub issue 1240) * when entering copy mode, should copy grid so that input does not need to be suspended + * allow the prefix for automatic buffers to be specified as part of the + key binding to allow session buffers or similar (GitHub issue 1501) - layout stuff * way to tag a layout as a number/name From 01918cb0170e07288d3aec624516e6470bf5b7fc Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 17 Oct 2018 19:29:35 +0100 Subject: [PATCH 252/836] tmux 2.8. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f96c53c9aa..2d9fad77a3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, 2.8-rc) +AC_INIT(tmux, 2.8) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From bc0e527f32642cc9eb2354d1bdc033ab6beca33b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Oct 2018 07:57:57 +0000 Subject: [PATCH 253/836] Support for extended underline styles on terminals which offer them, enabled by adding the Smulx capability with terminal-overrides (add something like ',vte*:Smulx=\E[4\:%p1%dm'). GitHub issue 1492. --- attributes.c | 56 ++++++++++++++++++++++++++++++++-------------------- grid.c | 16 +++++++++++---- input.c | 46 ++++++++++++++++++++++++++++++++++++------ tmux.1 | 11 ++++++++++- tmux.h | 13 ++++++++++++ tty-term.c | 48 +++++++++++++++++++++++++++++++++++--------- tty.c | 15 ++++++++++++-- 7 files changed, 162 insertions(+), 43 deletions(-) diff --git a/attributes.c b/attributes.c index 1e45e584cf..1b8317332a 100644 --- a/attributes.c +++ b/attributes.c @@ -25,13 +25,13 @@ const char * attributes_tostring(int attr) { - static char buf[128]; + static char buf[512]; size_t len; if (attr == 0) return ("none"); - len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s", + len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s", (attr & GRID_ATTR_BRIGHT) ? "bright," : "", (attr & GRID_ATTR_DIM) ? "dim," : "", (attr & GRID_ATTR_UNDERSCORE) ? "underscore," : "", @@ -39,7 +39,11 @@ attributes_tostring(int attr) (attr & GRID_ATTR_REVERSE) ? "reverse," : "", (attr & GRID_ATTR_HIDDEN) ? "hidden," : "", (attr & GRID_ATTR_ITALICS) ? "italics," : "", - (attr & GRID_ATTR_STRIKETHROUGH) ? "strikethrough," : ""); + (attr & GRID_ATTR_STRIKETHROUGH) ? "strikethrough," : "", + (attr & GRID_ATTR_UNDERSCORE_2) ? "double-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_3) ? "curly-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_4) ? "dotted-underscore," : "", + (attr & GRID_ATTR_UNDERSCORE_5) ? "dashed-underscore," : ""); if (len > 0) buf[len - 1] = '\0'; @@ -52,6 +56,25 @@ attributes_fromstring(const char *str) const char delimiters[] = " ,|"; int attr; size_t end; + u_int i; + struct { + const char* name; + int attr; + } table[] = { + { "bright", GRID_ATTR_BRIGHT }, + { "bold", GRID_ATTR_BRIGHT }, + { "dim", GRID_ATTR_DIM }, + { "underscore", GRID_ATTR_UNDERSCORE }, + { "blink", GRID_ATTR_BLINK }, + { "reverse", GRID_ATTR_REVERSE }, + { "hidden", GRID_ATTR_HIDDEN }, + { "italics", GRID_ATTR_ITALICS }, + { "strikethrough", GRID_ATTR_STRIKETHROUGH }, + { "double-underscore", GRID_ATTR_UNDERSCORE_2 }, + { "curly-underscore", GRID_ATTR_UNDERSCORE_3 }, + { "dotted-underscore", GRID_ATTR_UNDERSCORE_4 }, + { "dashed-underscore", GRID_ATTR_UNDERSCORE_5 } + }; if (*str == '\0' || strcspn(str, delimiters) == 0) return (-1); @@ -64,24 +87,15 @@ attributes_fromstring(const char *str) attr = 0; do { end = strcspn(str, delimiters); - if ((end == 6 && strncasecmp(str, "bright", end) == 0) || - (end == 4 && strncasecmp(str, "bold", end) == 0)) - attr |= GRID_ATTR_BRIGHT; - else if (end == 3 && strncasecmp(str, "dim", end) == 0) - attr |= GRID_ATTR_DIM; - else if (end == 10 && strncasecmp(str, "underscore", end) == 0) - attr |= GRID_ATTR_UNDERSCORE; - else if (end == 5 && strncasecmp(str, "blink", end) == 0) - attr |= GRID_ATTR_BLINK; - else if (end == 7 && strncasecmp(str, "reverse", end) == 0) - attr |= GRID_ATTR_REVERSE; - else if (end == 6 && strncasecmp(str, "hidden", end) == 0) - attr |= GRID_ATTR_HIDDEN; - else if (end == 7 && strncasecmp(str, "italics", end) == 0) - attr |= GRID_ATTR_ITALICS; - else if (end == 13 && strncasecmp(str, "strikethrough", end) == 0) - attr |= GRID_ATTR_STRIKETHROUGH; - else + for (i = 0; i < nitems(table); i++) { + if (end != strlen(table[i].name)) + continue; + if (strncasecmp(str, table[i].name, end) == 0) { + attr |= table[i].attr; + break; + } + } + if (i == nitems(table)) return (-1); str += end + strspn(str + end, delimiters); } while (*str != '\0'); diff --git a/grid.c b/grid.c index dcfd95fe21..a7c9a67e9f 100644 --- a/grid.c +++ b/grid.c @@ -764,7 +764,11 @@ grid_string_cells_code(const struct grid_cell *lastgc, { GRID_ATTR_BLINK, 5 }, { GRID_ATTR_REVERSE, 7 }, { GRID_ATTR_HIDDEN, 8 }, - { GRID_ATTR_STRIKETHROUGH, 9 } + { GRID_ATTR_STRIKETHROUGH, 9 }, + { GRID_ATTR_UNDERSCORE_2, 42 }, + { GRID_ATTR_UNDERSCORE_3, 43 }, + { GRID_ATTR_UNDERSCORE_4, 44 }, + { GRID_ATTR_UNDERSCORE_5, 45 }, }; n = 0; @@ -790,11 +794,15 @@ grid_string_cells_code(const struct grid_cell *lastgc, else strlcat(buf, "\033[", len); for (i = 0; i < n; i++) { - if (i + 1 < n) - xsnprintf(tmp, sizeof tmp, "%d;", s[i]); - else + if (s[i] < 10) xsnprintf(tmp, sizeof tmp, "%d", s[i]); + else { + xsnprintf(tmp, sizeof tmp, "%d:%d", s[i] / 10, + s[i] % 10); + } strlcat(buf, tmp, len); + if (i + 1 < n) + strlcat(buf, ";", len); } strlcat(buf, "m", len); } diff --git a/input.c b/input.c index 254d0e5de2..7954099db5 100644 --- a/input.c +++ b/input.c @@ -1835,10 +1835,11 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i) static void input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) { - char *s = ictx->param_list[i].str, *copy, *ptr, *out; - int p[8]; - u_int n; - const char *errstr; + struct grid_cell *gc = &ictx->cell.cell; + char *s = ictx->param_list[i].str, *copy, *ptr, *out; + int p[8]; + u_int n; + const char *errstr; for (n = 0; n < nitems(p); n++) p[n] = -1; @@ -1857,7 +1858,39 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) } free(copy); - if (n == 0 || (p[0] != 38 && p[0] != 48)) + if (n == 0) + return; + if (p[0] == 4) { + if (n != 2) + return; + switch (p[1]) { + case 0: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + break; + case 1: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE; + break; + case 2: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_2; + break; + case 3: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_3; + break; + case 4: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_4; + break; + case 5: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; + gc->attr |= GRID_ATTR_UNDERSCORE_5; + break; + } + return; + } + if (p[0] != 38 && p[0] != 48) return; if (p[1] == -1) i = 2; @@ -1927,6 +1960,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) gc->attr |= GRID_ATTR_ITALICS; break; case 4: + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; gc->attr |= GRID_ATTR_UNDERSCORE; break; case 5: @@ -1948,7 +1982,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) gc->attr &= ~GRID_ATTR_ITALICS; break; case 24: - gc->attr &= ~GRID_ATTR_UNDERSCORE; + gc->attr &= ~GRID_ATTR_ALL_UNDERSCORE; break; case 25: gc->attr &= ~GRID_ATTR_BLINK; diff --git a/tmux.1 b/tmux.1 index 8eb5aae443..fac01887c6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2769,8 +2769,12 @@ or a comma-delimited list of one or more of: .Ic reverse , .Ic hidden , .Ic italics , +.Ic strikethrough , +.Ic double-underscore +.Ic curly-underscore +.Ic dotted-underscore or -.Ic strikethrough +.Ic dashed-underscore to turn an attribute on, or an attribute prefixed with .Ql no to turn one off. @@ -4419,6 +4423,11 @@ to change the cursor colour from inside .Bd -literal -offset indent $ printf '\e033]12;red\e033\e\e' .Ed +.It Em \&Smulx +Set a styled underline. +The single parameter is one of: 0 for no underline, 1 for normal +underline, 2 for double underline, 3 for curly underline, 4 for dotted +underline and 5 for dashed underline. .It Em \&Ss , Se Set or reset the cursor style. If set, a sequence such as this may be used diff --git a/tmux.h b/tmux.h index a6770e5257..7b451adaef 100644 --- a/tmux.h +++ b/tmux.h @@ -421,6 +421,7 @@ enum tty_code_code { TTYC_SMCUP, TTYC_SMKX, TTYC_SMSO, + TTYC_SMULX, TTYC_SMUL, TTYC_SMXX, TTYC_SS, @@ -546,6 +547,18 @@ enum utf8_state { #define GRID_ATTR_ITALICS 0x40 #define GRID_ATTR_CHARSET 0x80 /* alternative character set */ #define GRID_ATTR_STRIKETHROUGH 0x100 +#define GRID_ATTR_UNDERSCORE_2 0x200 +#define GRID_ATTR_UNDERSCORE_3 0x400 +#define GRID_ATTR_UNDERSCORE_4 0x800 +#define GRID_ATTR_UNDERSCORE_5 0x1000 + +/* All underscore attributes. */ +#define GRID_ATTR_ALL_UNDERSCORE \ + (GRID_ATTR_UNDERSCORE| \ + GRID_ATTR_UNDERSCORE_2| \ + GRID_ATTR_UNDERSCORE_3| \ + GRID_ATTR_UNDERSCORE_4| \ + GRID_ATTR_UNDERSCORE_5) /* Grid flags. */ #define GRID_FLAG_FG256 0x1 diff --git a/tty-term.c b/tty-term.c index b75364877f..7df9a7d16a 100644 --- a/tty-term.c +++ b/tty-term.c @@ -253,6 +253,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_SMCUP] = { TTYCODE_STRING, "smcup" }, [TTYC_SMKX] = { TTYCODE_STRING, "smkx" }, [TTYC_SMSO] = { TTYCODE_STRING, "smso" }, + [TTYC_SMULX] = { TTYCODE_STRING, "Smulx" }, [TTYC_SMUL] = { TTYCODE_STRING, "smul" }, [TTYC_SMXX] = { TTYCODE_STRING, "smxx" }, [TTYC_SS] = { TTYCODE_STRING, "Ss" }, @@ -299,25 +300,53 @@ tty_term_strip(const char *s) return (xstrdup(buf)); } +static char * +tty_term_override_next(const char *s, size_t *offset) +{ + static char value[BUFSIZ]; + size_t n = 0, at = *offset; + + if (s[at] == '\0') + return (NULL); + + while (s[at] != '\0') { + if (s[at] == ':') { + if (s[at + 1] == ':') { + value[n++] = ':'; + at += 2; + } else + break; + } else { + value[n++] = s[at]; + at++; + } + if (n == (sizeof value) - 1) + return (NULL); + } + if (s[at] != '\0') + *offset = at + 1; + else + *offset = at; + value[n] = '\0'; + return (value); +} + static void tty_term_override(struct tty_term *term, const char *override) { const struct tty_term_code_entry *ent; struct tty_code *code; - char *next, *s, *copy, *cp, *value; + size_t offset = 0; + char *cp, *value, *s; const char *errstr; u_int i; int n, remove; - copy = next = xstrdup(override); - - s = strsep(&next, ":"); - if (s == NULL || next == NULL || fnmatch(s, term->name, 0) != 0) { - free(copy); + s = tty_term_override_next(override, &offset); + if (s == NULL || fnmatch(s, term->name, 0) != 0) return; - } - while ((s = strsep(&next, ":")) != NULL) { + while ((s = tty_term_override_next(override, &offset)) != NULL) { if (*s == '\0') continue; value = NULL; @@ -338,6 +367,8 @@ tty_term_override(struct tty_term *term, const char *override) if (remove) log_debug("%s override: %s@", term->name, s); + else if (*value == '\0') + log_debug("%s override: %s", term->name, s); else log_debug("%s override: %s=%s", term->name, s, value); @@ -376,7 +407,6 @@ tty_term_override(struct tty_term *term, const char *override) free(value); } - free(s); } struct tty_term * diff --git a/tty.c b/tty.c index 5bf4a3cabb..049ea0172b 100644 --- a/tty.c +++ b/tty.c @@ -1832,8 +1832,19 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, tty_putcode(tty, TTYC_DIM); if (changed & GRID_ATTR_ITALICS) tty_set_italics(tty); - if (changed & GRID_ATTR_UNDERSCORE) - tty_putcode(tty, TTYC_SMUL); + if (changed & GRID_ATTR_ALL_UNDERSCORE) { + if ((changed & GRID_ATTR_UNDERSCORE) || + !tty_term_has(tty->term, TTYC_SMULX)) + tty_putcode(tty, TTYC_SMUL); + else if (changed & GRID_ATTR_UNDERSCORE_2) + tty_putcode1(tty, TTYC_SMULX, 2); + else if (changed & GRID_ATTR_UNDERSCORE_3) + tty_putcode1(tty, TTYC_SMULX, 3); + else if (changed & GRID_ATTR_UNDERSCORE_4) + tty_putcode1(tty, TTYC_SMULX, 4); + else if (changed & GRID_ATTR_UNDERSCORE_5) + tty_putcode1(tty, TTYC_SMULX, 5); + } if (changed & GRID_ATTR_BLINK) tty_putcode(tty, TTYC_BLINK); if (changed & GRID_ATTR_REVERSE) { From a51668ca0690b84762c5a2f2dd34b94fa566f559 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Oct 2018 08:04:14 +0000 Subject: [PATCH 254/836] Support OSC 52 ? to read the top buffer inside tmux (when set-clipboard is changed to on), also add refresh-client -l to ask tmux to use the same mechanism to get the clipboard from the terminal outside tmux. GitHub issue 1477. --- cmd-refresh-client.c | 9 ++-- input.c | 118 +++++++++++++++++++++++++++++++------------ tmux.1 | 10 ++-- tty-keys.c | 103 +++++++++++++++++++++++++++++++++++++ 4 files changed, 201 insertions(+), 39 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index df1d213564..0f45c2d5c9 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -31,8 +31,8 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "C:St:", 0, 0 }, - .usage = "[-S] [-C size] " CMD_TARGET_CLIENT_USAGE, + .args = { "C:lSt:", 0, 0 }, + .usage = "[-lS] [-C size] " CMD_TARGET_CLIENT_USAGE, .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -49,7 +49,10 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) return (CMD_RETURN_ERROR); - if (args_has(args, 'C')) { + if (args_has(args, 'l')) { + if (c->session != NULL) + tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); + } else if (args_has(args, 'C')) { if ((size = args_get(args, 'C')) == NULL) { cmdq_error(item, "missing size"); return (CMD_RETURN_ERROR); diff --git a/input.c b/input.c index 7954099db5..41cdfb70fd 100644 --- a/input.c +++ b/input.c @@ -93,6 +93,10 @@ struct input_ctx { u_char *input_buf; size_t input_len; size_t input_space; + enum { + INPUT_END_ST, + INPUT_END_BEL + } input_end; struct input_param param_list[24]; u_int param_list_len; @@ -126,11 +130,11 @@ static void input_set_state(struct window_pane *, const struct input_transition *); static void input_reset_cell(struct input_ctx *); -static void input_osc_4(struct window_pane *, const char *); -static void input_osc_10(struct window_pane *, const char *); -static void input_osc_11(struct window_pane *, const char *); -static void input_osc_52(struct window_pane *, const char *); -static void input_osc_104(struct window_pane *, const char *); +static void input_osc_4(struct input_ctx *, const char *); +static void input_osc_10(struct input_ctx *, const char *); +static void input_osc_11(struct input_ctx *, const char *); +static void input_osc_52(struct input_ctx *, const char *); +static void input_osc_104(struct input_ctx *, const char *); /* Transition entry/exit handlers. */ static void input_clear(struct input_ctx *); @@ -161,6 +165,7 @@ static void input_csi_dispatch_sgr_rgb(struct input_ctx *, int, u_int *); static void input_csi_dispatch_sgr(struct input_ctx *); static int input_dcs_dispatch(struct input_ctx *); static int input_top_bit_set(struct input_ctx *); +static int input_end_bel(struct input_ctx *); /* Command table comparison function. */ static int input_table_compare(const void *, const void *); @@ -487,7 +492,7 @@ static const struct input_transition input_state_esc_enter_table[] = { { -1, -1, NULL, NULL } }; -/* esc_interm state table. */ +/* esc_intermediate state table. */ static const struct input_transition input_state_esc_intermediate_table[] = { INPUT_STATE_ANYWHERE, @@ -602,7 +607,7 @@ static const struct input_transition input_state_dcs_parameter_table[] = { { -1, -1, NULL, NULL } }; -/* dcs_interm state table. */ +/* dcs_intermediate state table. */ static const struct input_transition input_state_dcs_intermediate_table[] = { INPUT_STATE_ANYWHERE, @@ -655,12 +660,12 @@ static const struct input_transition input_state_dcs_ignore_table[] = { static const struct input_transition input_state_osc_string_table[] = { INPUT_STATE_ANYWHERE, - { 0x00, 0x06, NULL, NULL }, - { 0x07, 0x07, NULL, &input_state_ground }, - { 0x08, 0x17, NULL, NULL }, - { 0x19, 0x19, NULL, NULL }, - { 0x1c, 0x1f, NULL, NULL }, - { 0x20, 0xff, input_input, NULL }, + { 0x00, 0x06, NULL, NULL }, + { 0x07, 0x07, input_end_bel, &input_state_ground }, + { 0x08, 0x17, NULL, NULL }, + { 0x19, 0x19, NULL, NULL }, + { 0x1c, 0x1f, NULL, NULL }, + { 0x20, 0xff, input_input, NULL }, { -1, -1, NULL, NULL } }; @@ -993,8 +998,8 @@ input_get(struct input_ctx *ictx, u_int validx, int minval, int defval) static void input_reply(struct input_ctx *ictx, const char *fmt, ...) { - va_list ap; - char *reply; + va_list ap; + char *reply; va_start(ap, fmt); xvasprintf(&reply, fmt, ap); @@ -1019,6 +1024,8 @@ input_clear(struct input_ctx *ictx) *ictx->input_buf = '\0'; ictx->input_len = 0; + ictx->input_end = INPUT_END_ST; + ictx->flags &= ~INPUT_DISCARD; } @@ -2046,6 +2053,17 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) } } +/* End of input with BEL. */ +static int +input_end_bel(struct input_ctx *ictx) +{ + log_debug("%s", __func__); + + ictx->input_end = INPUT_END_BEL; + + return (0); +} + /* DCS string started. */ static void input_enter_dcs(struct input_ctx *ictx) @@ -2102,7 +2120,8 @@ input_exit_osc(struct input_ctx *ictx) if (ictx->input_len < 1 || *p < '0' || *p > '9') return; - log_debug("%s: \"%s\"", __func__, p); + log_debug("%s: \"%s\" (end %s)", __func__, p, + ictx->input_end == INPUT_END_ST ? "ST" : "BEL"); option = 0; while (*p >= '0' && *p <= '9') @@ -2119,23 +2138,23 @@ input_exit_osc(struct input_ctx *ictx) } break; case 4: - input_osc_4(ictx->wp, p); + input_osc_4(ictx, p); break; case 10: - input_osc_10(ictx->wp, p); + input_osc_10(ictx, p); break; case 11: - input_osc_11(ictx->wp, p); + input_osc_11(ictx, p); break; case 12: if (utf8_isvalid(p) && *p != '?') /* ? is colour request */ screen_set_cursor_colour(ictx->ctx.s, p); break; case 52: - input_osc_52(ictx->wp, p); + input_osc_52(ictx, p); break; case 104: - input_osc_104(ictx->wp, p); + input_osc_104(ictx, p); break; case 112: if (*p == '\0') /* no arguments allowed */ @@ -2237,11 +2256,12 @@ input_top_bit_set(struct input_ctx *ictx) /* Handle the OSC 4 sequence for setting (multiple) palette entries. */ static void -input_osc_4(struct window_pane *wp, const char *p) +input_osc_4(struct input_ctx *ictx, const char *p) { - char *copy, *s, *next = NULL; - long idx; - u_int r, g, b; + struct window_pane *wp = ictx->wp; + char *copy, *s, *next = NULL; + long idx; + u_int r, g, b; copy = s = xstrdup(p); while (s != NULL && *s != '\0') { @@ -2271,9 +2291,10 @@ input_osc_4(struct window_pane *wp, const char *p) /* Handle the OSC 10 sequence for setting foreground colour. */ static void -input_osc_10(struct window_pane *wp, const char *p) +input_osc_10(struct input_ctx *ictx, const char *p) { - u_int r, g, b; + struct window_pane *wp = ictx->wp; + u_int r, g, b; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; @@ -2289,9 +2310,10 @@ input_osc_10(struct window_pane *wp, const char *p) /* Handle the OSC 11 sequence for setting background colour. */ static void -input_osc_11(struct window_pane *wp, const char *p) +input_osc_11(struct input_ctx *ictx, const char *p) { - u_int r, g, b; + struct window_pane *wp = ictx->wp; + u_int r, g, b; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; @@ -2307,13 +2329,16 @@ input_osc_11(struct window_pane *wp, const char *p) /* Handle the OSC 52 sequence for setting the clipboard. */ static void -input_osc_52(struct window_pane *wp, const char *p) +input_osc_52(struct input_ctx *ictx, const char *p) { + struct window_pane *wp = ictx->wp; char *end; + const char *buf; size_t len; u_char *out; int outlen, state; struct screen_write_ctx ctx; + struct paste_buffer *pb; state = options_get_number(global_options, "set-clipboard"); if (state != 2) @@ -2324,6 +2349,32 @@ input_osc_52(struct window_pane *wp, const char *p) end++; if (*end == '\0') return; + log_debug("%s: %s", __func__, end); + + if (strcmp(end, "?") == 0) { + if ((pb = paste_get_top(NULL)) != NULL) { + buf = paste_buffer_data(pb, &len); + outlen = 4 * ((len + 2) / 3) + 1; + out = xmalloc(outlen); + if ((outlen = b64_ntop(buf, len, out, outlen)) == -1) { + abort(); + free(out); + return; + } + } else { + outlen = 0; + out = NULL; + } + bufferevent_write(wp->event, "\033]52;;", 6); + if (outlen != 0) + bufferevent_write(wp->event, out, outlen); + if (ictx->input_end == INPUT_END_BEL) + bufferevent_write(wp->event, "\007", 1); + else + bufferevent_write(wp->event, "\033\\", 2); + free(out); + return; + } len = (strlen(end) / 4) * 3; if (len == 0) @@ -2345,10 +2396,11 @@ input_osc_52(struct window_pane *wp, const char *p) /* Handle the OSC 104 sequence for unsetting (multiple) palette entries. */ static void -input_osc_104(struct window_pane *wp, const char *p) +input_osc_104(struct input_ctx *ictx, const char *p) { - char *copy, *s; - long idx; + struct window_pane *wp = ictx->wp; + char *copy, *s; + long idx; if (*p == '\0') { window_pane_reset_palette(wp); diff --git a/tmux.1 b/tmux.1 index fac01887c6..1111a0e49d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -917,8 +917,8 @@ is used, the .Ic update-environment option will not be applied. .It Xo Ic refresh-client +.Op Fl lS .Op Fl C Ar width,height -.Op Fl S .Op Fl t Ar target-client .Xc .D1 (alias: Ic refresh ) @@ -931,6 +931,10 @@ is specified, only update the client's status line. .Pp .Fl C sets the width and height of a control client. +.Fl l +requests the clipboard from the client using the +.Xr xterm 1 +escape sequence and stores it in a new paste buffer. .It Xo Ic rename-session .Op Fl t Ar target-session .Ar new-name @@ -3890,7 +3894,7 @@ option. .El .Pp When a pane is first created, its title is the hostname. -A pane's title can be set via the OSC title setting sequence, for example: +A pane's title can be set via the title setting escape sequence, for example: .Bd -literal -offset indent $ printf '\e033]2;My Title\e033\e\e' .Ed @@ -4444,7 +4448,7 @@ Indicate that the terminal supports the .Ql direct colour RGB escape sequence (for example, \ee[38;2;255;255;255m). .Pp -If supported, this is used for the OSC initialize colour escape sequence (which +If supported, this is used for the initialize colour escape sequence (which may be enabled by adding the .Ql initc and diff --git a/tty-keys.c b/tty-keys.c index 69d01fafd9..a0f608c02c 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -19,7 +19,10 @@ #include #include +#include + #include +#include #include #include #include @@ -44,6 +47,8 @@ static int tty_keys_next1(struct tty *, const char *, size_t, key_code *, size_t *, int); static void tty_keys_callback(int, short, void *); static int tty_keys_mouse(struct tty *, const char *, size_t, size_t *); +static int tty_keys_clipboard(struct tty *, const char *, size_t, + size_t *); static int tty_keys_device_attributes(struct tty *, const char *, size_t, size_t *); @@ -571,6 +576,17 @@ tty_keys_next(struct tty *tty) return (0); log_debug("%s: keys are %zu (%.*s)", c->name, len, (int)len, buf); + /* Is this a clipboard response? */ + switch (tty_keys_clipboard(tty, buf, len, &size)) { + case 0: /* yes */ + key = KEYC_UNKNOWN; + goto complete_key; + case -1: /* no, or not valid */ + break; + case 1: /* partial */ + goto partial_key; + } + /* Is this a device attributes response? */ switch (tty_keys_device_attributes(tty, buf, len, &size)) { case 0: /* yes */ @@ -871,6 +887,93 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size) return (0); } +/* + * Handle OSC 52 clipboard input. Returns 0 for success, -1 for failure, 1 for + * partial. + */ +static int +tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len, + size_t *size) +{ + size_t end, terminator, needed; + char *copy, *out; + int outlen; + + *size = 0; + + /* First three bytes are always \033]52;. */ + if (buf[0] != '\033') + return (-1); + if (len == 1) + return (1); + if (buf[1] != ']') + return (-1); + if (len == 2) + return (1); + if (buf[2] != '5') + return (-1); + if (len == 3) + return (1); + if (buf[3] != '2') + return (-1); + if (len == 4) + return (1); + if (buf[4] != ';') + return (-1); + if (len == 5) + return (1); + + /* Find the terminator if any. */ + for (end = 5; end < len; end++) { + if (buf[end] == '\007') { + terminator = 1; + break; + } + if (end > 5 && buf[end - 1] == '\033' && buf[end] == '\\') { + terminator = 2; + break; + } + } + if (end == len) + return (1); + *size = end + terminator; + + /* Skip the initial part. */ + buf += 5; + end -= 5; + + /* Get the second argument. */ + while (end != 0 && *buf != ';') { + buf++; + end--; + } + if (end == 0 || end == 1) + return (0); + buf++; + end--; + + /* It has to be a string so copy it. */ + copy = xmalloc(end + 1); + memcpy(copy, buf, end); + copy[end] = '\0'; + + /* Convert from base64. */ + needed = (end / 4) * 3; + out = xmalloc(needed); + if ((outlen = b64_pton(copy, out, len)) == -1) { + free(out); + free(copy); + return (0); + } + free(copy); + + /* Create a new paste buffer. */ + log_debug("%s: %.*s", __func__, outlen, out); + paste_add(out, outlen); + + return (0); +} + /* * Handle device attributes input. Returns 0 for success, -1 for failure, 1 for * partial. From 2dfdb55ace6b0beab4903db630603fef5aa44c57 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 18 Oct 2018 09:24:15 +0100 Subject: [PATCH 255/836] Handle pan correctly when the terminal is bigger than the window. --- tty.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tty.c b/tty.c index cee5acbcd1..7cc129e5f6 100644 --- a/tty.c +++ b/tty.c @@ -746,10 +746,14 @@ tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) *sy = tty->sy - lines; if (c->pan_window == w) { - if (c->pan_ox + *sx > w->sx) + if (*sx >= w->sx) + c->pan_ox = 0; + else if (c->pan_ox + *sx > w->sx) c->pan_ox = w->sx - *sx; *ox = c->pan_ox; - if (c->pan_oy + *sy > w->sy) + if (*sy >= w->sy) + c->pan_oy = 0; + else if (c->pan_oy + *sy > w->sy) c->pan_oy = w->sy - *sy; *oy = c->pan_oy; return (1); From 646995384d695eed9de1b2363fd2b315ca01785e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Oct 2018 08:38:01 +0000 Subject: [PATCH 256/836] Support for windows larger than visible on the attached client. This has been a limitation for a long time. There are two new options, window-size and default-size, and a new command, resize-window. The force-width and force-height options and the session_width and session_height formats have been removed. The new window-size option tells tmux how to work out the size of windows: largest means it picks the size of the largest session, smallest the smallest session (similar to the old behaviour) and manual means that it does not automatically resize windows. The default is currently largest but this may change. aggressive-resize modifies the choice of session for largest and smallest as it did before. If a window is in a session attached to a client that is too small, only part of the window is shown. tmux attempts to keep the cursor visible, so the part of the window displayed is changed as the cursor moves (with a small delay, to try and avoid excess redrawing when applications redraw status lines or similar that are not currently visible). The offset of the visible portion of the window is shown in status-right. Drawing windows which are larger than the client is not as efficient as those which fit, particularly when the cursor moves, so it is recommended to avoid using this on slow machines or networks (set window-size to smallest or manual). The resize-window command can be used to resize a window manually. If it is used, the window-size option is automatically set to manual for the window (undo this with "setw -u window-size"). resize-window works in a similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the window to the size of the smallest client (what it would be if window-size was smallest) and -A the largest. For the same behaviour as force-width or force-height, use resize-window -x or -y, and "setw -u window-size" to revert to automatic sizing.. If the global window-size option is set to manual, the default-size option is used for new windows. If -x or -y is used with new-session, that sets the default-size option for the new session. The maximum size of a window is 10000x10000. But expect applications to complain and much higher memory use if making a window excessively big. The minimum size is the size required for the current layout including borders. The refresh-client command can be used to pan around a window, -U -D -L -R moves up, down, left or right and -c returns to automatic cursor tracking. The position is reset when the current window is changed. --- Makefile | 1 + cmd-attach-session.c | 2 + cmd-break-pane.c | 2 +- cmd-list-sessions.c | 3 +- cmd-new-session.c | 60 ++++-- cmd-refresh-client.c | 78 ++++++- cmd-resize-window.c | 109 ++++++++++ cmd-select-pane.c | 35 ++- cmd-set-option.c | 15 +- cmd-split-window.c | 2 +- cmd-swap-pane.c | 2 - cmd-switch-client.c | 1 + cmd.c | 2 + format.c | 43 ++-- input-keys.c | 4 +- key-bindings.c | 5 + key-string.c | 2 + layout-custom.c | 2 +- layout-set.c | 8 +- layout.c | 65 +----- options-table.c | 37 ++-- resize.c | 310 +++++++++++++++++---------- screen-redraw.c | 282 +++++++++++++++--------- screen-write.c | 150 ++++++++----- server-client.c | 71 ++++--- server-fn.c | 1 + session.c | 15 +- status.c | 20 +- tmux.h | 78 +++++-- tty.c | 495 ++++++++++++++++++++++++++++++++++++------- window.c | 60 ++---- 31 files changed, 1372 insertions(+), 588 deletions(-) create mode 100644 cmd-resize-window.c diff --git a/Makefile b/Makefile index e6d9e6b325..8947cd5301 100644 --- a/Makefile +++ b/Makefile @@ -44,6 +44,7 @@ SRCS= alerts.c \ cmd-rename-session.c \ cmd-rename-window.c \ cmd-resize-pane.c \ + cmd-resize-window.c \ cmd-respawn-pane.c \ cmd-respawn-window.c \ cmd-rotate-window.c \ diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 0db0d855cb..73ff530da6 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -115,6 +115,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); @@ -142,6 +143,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, c->session = s; server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd-break-pane.c b/cmd-break-pane.c index 74ecce6f7b..3b929deecb 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -76,7 +76,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item) window_lost_pane(w, wp); layout_close_pane(wp); - w = wp->window = window_create(dst_s->sx, dst_s->sy); + w = wp->window = window_create(w->sx, w->sy); TAILQ_INSERT_HEAD(&w->panes, wp, entry); w->active = wp; diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index df8a25bc7f..72ff47e8bd 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -30,8 +30,7 @@ #define LIST_SESSIONS_TEMPLATE \ "#{session_name}: #{session_windows} windows " \ - "(created #{t:session_created}) " \ - "[#{session_width}x#{session_height}]" \ + "(created #{t:session_created})" \ "#{?session_grouped, (group ,}" \ "#{session_group}#{?session_grouped,),}" \ "#{?session_attached, (attached),}" diff --git a/cmd-new-session.c b/cmd-new-session.c index e809de244d..162a50bd13 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -71,14 +71,15 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct session *s, *as, *groupwith; struct window *w; struct environ *env; + struct options *oo; struct termios tio, *tiop; struct session_group *sg; const char *errstr, *template, *group, *prefix; - const char *path, *cmd, *tmp; + const char *path, *cmd, *tmp, *value; char **argv, *cause, *cp, *newname, *cwd = NULL; int detached, already_attached, idx, argc; int is_control = 0; - u_int sx, sy; + u_int sx, sy, dsx = 80, dsy = 24; struct environ_entry *envent; struct cmd_find_state fs; enum cmd_retval retval; @@ -189,44 +190,53 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) } } - /* Find new session size. */ - if (!detached) { - sx = c->tty.sx; - sy = c->tty.sy; - if (!is_control && - sy > 0 && - options_get_number(global_s_options, "status")) - sy--; - } else { - sx = 80; - sy = 24; - } - if ((is_control || detached) && args_has(args, 'x')) { + /* Get default session size. */ + if (args_has(args, 'x')) { tmp = args_get(args, 'x'); if (strcmp(tmp, "-") == 0) { if (c != NULL) - sx = c->tty.sx; + dsx = c->tty.sx; } else { - sx = strtonum(tmp, 1, USHRT_MAX, &errstr); + dsx = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "width %s", errstr); goto error; } } } - if ((is_control || detached) && args_has(args, 'y')) { + if (args_has(args, 'y')) { tmp = args_get(args, 'y'); if (strcmp(tmp, "-") == 0) { if (c != NULL) - sy = c->tty.sy; + dsy = c->tty.sy; } else { - sy = strtonum(tmp, 1, USHRT_MAX, &errstr); + dsy = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "height %s", errstr); goto error; } } } + + /* Find new session size. */ + if (!detached && !is_control) { + sx = c->tty.sx; + sy = c->tty.sy; + if (!is_control && + sy > 0 && + options_get_number(global_s_options, "status")) + sy--; + } else { + value = options_get_string(global_s_options, "default-size"); + if (sscanf(value, "%ux%u", &sx, &sy) != 2) { + sx = 80; + sy = 24; + } + if (args_has(args, 'x')) + sx = dsx; + if (args_has(args, 'y')) + sy = dsy; + } if (sx == 0) sx = 1; if (sy == 0) @@ -262,10 +272,15 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); + /* Set up the options. */ + oo = options_create(global_s_options); + if (args_has(args, 'x') || args_has(args, 'y')) + options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + /* Create the new session. */ idx = -1 - options_get_number(global_s_options, "base-index"); - s = session_create(prefix, newname, argc, argv, path, cwd, env, tiop, - idx, sx, sy, &cause); + s = session_create(prefix, newname, argc, argv, path, cwd, env, oo, + tiop, idx, &cause); environ_free(env); if (s == NULL) { cmdq_error(item, "create session failed: %s", cause); @@ -313,6 +328,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index 0f45c2d5c9..e5ae099f2e 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -18,6 +18,8 @@ #include +#include + #include "tmux.h" /* @@ -31,8 +33,8 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "C:lSt:", 0, 0 }, - .usage = "[-lS] [-C size] " CMD_TARGET_CLIENT_USAGE, + .args = { "cC:DlLRSt:U", 0, 1 }, + .usage = "[-cDlLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -43,11 +45,64 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct client *c; - const char *size; - u_int w, h; + struct tty *tty; + struct window *w; + const char *size, *errstr; + u_int x, y, adjust; if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) return (CMD_RETURN_ERROR); + tty = &c->tty; + + if (args_has(args, 'c') || + args_has(args, 'L') || + args_has(args, 'R') || + args_has(args, 'U') || + args_has(args, 'D')) + { + if (args->argc == 0) + adjust = 1; + else { + adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "adjustment %s", errstr); + return (CMD_RETURN_ERROR); + } + } + + if (args_has(args, 'c')) + c->pan_window = NULL; + else { + w = c->session->curw->window; + if (c->pan_window != w) { + c->pan_window = w; + c->pan_ox = tty->oox; + c->pan_oy = tty->ooy; + } + if (args_has(args, 'L')) { + if (c->pan_ox > adjust) + c->pan_ox -= adjust; + else + c->pan_ox = 0; + } else if (args_has(args, 'R')) { + c->pan_ox += adjust; + if (c->pan_ox > w->sx - tty->osx) + c->pan_ox = w->sx - tty->osx; + } else if (args_has(args, 'U')) { + if (c->pan_oy > adjust) + c->pan_oy -= adjust; + else + c->pan_oy = 0; + } else if (args_has(args, 'D')) { + c->pan_oy += adjust; + if (c->pan_oy > w->sy - tty->osy) + c->pan_oy = w->sy - tty->osy; + } + } + tty_update_client_offset(c); + server_redraw_client(c); + return (CMD_RETURN_NORMAL); + } if (args_has(args, 'l')) { if (c->session != NULL) @@ -57,12 +112,13 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "missing size"); return (CMD_RETURN_ERROR); } - if (sscanf(size, "%u,%u", &w, &h) != 2) { + if (sscanf(size, "%u,%u", &x, &y) != 2 && + sscanf(size, "%ux%u", &x, &y)) { cmdq_error(item, "bad size argument"); return (CMD_RETURN_ERROR); } - if (w < PANE_MINIMUM || w > 5000 || - h < PANE_MINIMUM || h > 5000) { + if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || + y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { cmdq_error(item, "size too small or too big"); return (CMD_RETURN_ERROR); } @@ -70,16 +126,18 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "not a control client"); return (CMD_RETURN_ERROR); } - tty_set_size(&c->tty, w, h); + tty_set_size(&c->tty, x, y); c->flags |= CLIENT_SIZECHANGED; recalculate_sizes(); - } else if (args_has(args, 'S')) { + return (CMD_RETURN_NORMAL); + } + + if (args_has(args, 'S')) { c->flags |= CLIENT_STATUSFORCE; server_status_client(c); } else { c->flags |= CLIENT_STATUSFORCE; server_redraw_client(c); } - return (CMD_RETURN_NORMAL); } diff --git a/cmd-resize-window.c b/cmd-resize-window.c new file mode 100644 index 0000000000..d780b6ee56 --- /dev/null +++ b/cmd-resize-window.c @@ -0,0 +1,109 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2018 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include + +#include "tmux.h" + +/* + * Increase or decrease window size. + */ + +static enum cmd_retval cmd_resize_window_exec(struct cmd *, + struct cmdq_item *); + +const struct cmd_entry cmd_resize_window_entry = { + .name = "resize-window", + .alias = "resizew", + + .args = { "aADLRt:Ux:y:", 0, 1 }, + .usage = "[-aADLRU] [-x width] [-y height] " CMD_TARGET_WINDOW_USAGE " " + "[adjustment]", + + .target = { 't', CMD_FIND_WINDOW, 0 }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_resize_window_exec +}; + +static enum cmd_retval +cmd_resize_window_exec(struct cmd *self, struct cmdq_item *item) +{ + struct args *args = self->args; + struct winlink *wl = item->target.wl; + struct window *w = wl->window; + struct session *s = item->target.s; + const char *errstr; + char *cause; + u_int adjust, sx, sy; + + if (args->argc == 0) + adjust = 1; + else { + adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); + if (errstr != NULL) { + cmdq_error(item, "adjustment %s", errstr); + return (CMD_RETURN_ERROR); + } + } + + sx = w->sx; + sy = w->sy; + + if (args_has(args, 'x')) { + sx = args_strtonum(args, 'x', WINDOW_MINIMUM, WINDOW_MAXIMUM, + &cause); + if (cause != NULL) { + cmdq_error(item, "width %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + } + if (args_has(args, 'y')) { + sy = args_strtonum(args, 'y', WINDOW_MINIMUM, WINDOW_MAXIMUM, + &cause); + if (cause != NULL) { + cmdq_error(item, "height %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + } + + if (args_has(args, 'L')) { + if (sx >= adjust) + sx -= adjust; + } else if (args_has(args, 'R')) + sx += adjust; + else if (args_has(args, 'U')) { + if (sy >= adjust) + sy -= adjust; + } else if (args_has(args, 'D')) + sy += adjust; + + if (args_has(args, 'A')) + default_window_size(s, w, &sx, &sy, WINDOW_SIZE_LARGEST); + else if (args_has(args, 'a')) + default_window_size(s, w, &sx, &sy, WINDOW_SIZE_SMALLEST); + + options_set_number(w->options, "window-size", WINDOW_SIZE_MANUAL); + resize_window(w, sx, sy); + + return (CMD_RETURN_NORMAL); +} diff --git a/cmd-select-pane.c b/cmd-select-pane.c index a2345fe161..90ca46ba45 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -54,6 +54,31 @@ const struct cmd_entry cmd_last_pane_entry = { .exec = cmd_select_pane_exec }; +static void +cmd_select_pane_redraw(struct window *w) +{ + struct client *c; + + /* + * Redraw entire window if it is bigger than the client (the + * offset may change), otherwise just draw borders. + */ + + TAILQ_FOREACH(c, &clients, entry) { + if (c->session == NULL) + continue; + if (c->session->curw->window == w && tty_window_bigger(&c->tty)) + server_redraw_client(c); + else { + if (c->session->curw->window == w) + c->flags |= CLIENT_REDRAWBORDERS; + if (session_has(c->session, w)) + c->flags |= CLIENT_REDRAWSTATUS; + } + + } +} + static enum cmd_retval cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) { @@ -87,8 +112,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) window_redraw_active_switch(w, lastwp); if (window_set_active_pane(w, lastwp)) { cmd_find_from_winlink(current, wl, 0); - server_status_window(w); - server_redraw_window_borders(w); + cmd_select_pane_redraw(w); } } return (CMD_RETURN_NORMAL); @@ -168,16 +192,11 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (wp == w->active) return (CMD_RETURN_NORMAL); server_unzoom_window(wp->window); - if (!window_pane_visible(wp)) { - cmdq_error(item, "pane not visible"); - return (CMD_RETURN_ERROR); - } window_redraw_active_switch(w, wp); if (window_set_active_pane(w, wp)) { cmd_find_from_winlink_pane(current, wl, wp, 0); hooks_insert(s->hooks, item, current, "after-select-pane"); - server_status_window(w); - server_redraw_window_borders(w); + cmd_select_pane_redraw(w); } return (CMD_RETURN_NORMAL); diff --git a/cmd-set-option.c b/cmd-set-option.c index bdc42caebf..c4b82004de 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -18,6 +18,7 @@ #include +#include #include #include @@ -260,7 +261,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) } if (strcmp(name, "pane-border-status") == 0) { RB_FOREACH(w, windows, &windows) - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } RB_FOREACH(s, sessions, &sessions) status_update_saved(s); @@ -297,7 +298,8 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, int append = args_has(args, 'a'); struct options_entry *o; long long number; - const char *errstr; + const char *errstr, *new; + char *old; key_code key; oe = options_table_entry(parent); @@ -310,7 +312,16 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, switch (oe->type) { case OPTIONS_TABLE_STRING: + old = xstrdup(options_get_string(oo, oe->name)); options_set_string(oo, oe->name, append, "%s", value); + new = options_get_string(oo, oe->name); + if (oe->pattern != NULL && fnmatch(oe->pattern, new, 0) != 0) { + options_set_string(oo, oe->name, 0, "%s", old); + free(old); + cmdq_error(item, "value is invalid: %s", value); + return (-1); + } + free(old); return (0); case OPTIONS_TABLE_NUMBER: number = strtonum(value, oe->minimum, oe->maximum, &errstr); diff --git a/cmd-split-window.c b/cmd-split-window.c index 7b58f81f14..2882141313 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -148,7 +148,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) } environ_free(env); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); server_redraw_window(w); if (!args_has(args, 'd')) { diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 7283bf53ab..1de272c4ca 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -105,8 +105,6 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) window_set_active_pane(dst_w, src_wp); } else { tmp_wp = dst_wp; - if (!window_pane_visible(tmp_wp)) - tmp_wp = src_wp; window_set_active_pane(src_w, tmp_wp); } } else { diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 180635df46..6181073dca 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -128,6 +128,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) c->session = s; if (~item->shared->flags & CMDQ_SHARED_REPEAT) server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s, NULL); diff --git a/cmd.c b/cmd.c index b90d5ea246..9226e6c258 100644 --- a/cmd.c +++ b/cmd.c @@ -81,6 +81,7 @@ extern const struct cmd_entry cmd_refresh_client_entry; extern const struct cmd_entry cmd_rename_session_entry; extern const struct cmd_entry cmd_rename_window_entry; extern const struct cmd_entry cmd_resize_pane_entry; +extern const struct cmd_entry cmd_resize_window_entry; extern const struct cmd_entry cmd_respawn_pane_entry; extern const struct cmd_entry cmd_respawn_window_entry; extern const struct cmd_entry cmd_rotate_window_entry; @@ -167,6 +168,7 @@ const struct cmd_entry *cmd_table[] = { &cmd_rename_session_entry, &cmd_rename_window_entry, &cmd_resize_pane_entry, + &cmd_resize_window_entry, &cmd_respawn_pane_entry, &cmd_respawn_window_entry, &cmd_rotate_window_entry, diff --git a/format.c b/format.c index 126bbc14dd..2136545798 100644 --- a/format.c +++ b/format.c @@ -52,8 +52,7 @@ static int format_replace(struct format_tree *, const char *, size_t, static void format_defaults_session(struct format_tree *, struct session *); static void format_defaults_client(struct format_tree *, struct client *); -static void format_defaults_winlink(struct format_tree *, - struct winlink *); +static void format_defaults_winlink(struct format_tree *, struct winlink *); /* Entry in format job tree. */ struct format_job { @@ -107,9 +106,10 @@ struct format_entry { /* Format entry tree. */ struct format_tree { - struct window *w; - struct winlink *wl; + struct client *c; struct session *s; + struct winlink *wl; + struct window *w; struct window_pane *wp; struct client *client; @@ -1347,8 +1347,6 @@ format_defaults_session(struct format_tree *ft, struct session *s) format_add(ft, "session_name", "%s", s->name); format_add(ft, "session_windows", "%u", winlink_count(&s->windows)); - format_add(ft, "session_width", "%u", s->sx); - format_add(ft, "session_height", "%u", s->sy); format_add(ft, "session_id", "$%u", s->id); sg = session_group_contains(s); @@ -1383,6 +1381,7 @@ format_defaults_client(struct format_tree *ft, struct client *c) if (ft->s == NULL) ft->s = c->session; + ft->c = c; format_add(ft, "client_name", "%s", c->name); format_add(ft, "client_pid", "%ld", (long) c->pid); @@ -1451,8 +1450,11 @@ format_defaults_window(struct format_tree *ft, struct window *w) static void format_defaults_winlink(struct format_tree *ft, struct winlink *wl) { + struct client *c = ft->c; struct session *s = wl->session; struct window *w = wl->window; + int flag; + u_int ox, oy, sx, sy; if (ft->w == NULL) ft->w = wl->window; @@ -1460,6 +1462,15 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) format_defaults_window(ft, w); + if (c != NULL) { + flag = tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + format_add(ft, "window_bigger", "%d", flag); + if (flag) { + format_add(ft, "window_offset_x", "%u", ox); + format_add(ft, "window_offset_y", "%u", oy); + } + } + format_add(ft, "window_index", "%d", wl->idx); format_add_cb(ft, "window_stack_index", format_cb_window_stack_index); format_add(ft, "window_flags", "%s", window_printable_flags(wl)); @@ -1509,18 +1520,14 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_dead_status", "%d", WEXITSTATUS(status)); format_add(ft, "pane_dead", "%d", wp->fd == -1); - if (window_pane_visible(wp)) { - format_add(ft, "pane_left", "%u", wp->xoff); - format_add(ft, "pane_top", "%u", wp->yoff); - format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); - format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); - format_add(ft, "pane_at_left", "%d", wp->xoff == 0); - format_add(ft, "pane_at_top", "%d", wp->yoff == 0); - format_add(ft, "pane_at_right", "%d", - wp->xoff + wp->sx == w->sx); - format_add(ft, "pane_at_bottom", "%d", - wp->yoff + wp->sy == w->sy); - } + format_add(ft, "pane_left", "%u", wp->xoff); + format_add(ft, "pane_top", "%u", wp->yoff); + format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); + format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); + format_add(ft, "pane_at_left", "%d", wp->xoff == 0); + format_add(ft, "pane_at_top", "%d", wp->yoff == 0); + format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == w->sx); + format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == w->sy); format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); if (wp->mode != NULL) diff --git a/input-keys.c b/input-keys.c index 34710dace7..39401a38ad 100644 --- a/input-keys.c +++ b/input-keys.c @@ -248,10 +248,10 @@ input_key_mouse(struct window_pane *wp, struct mouse_event *m) if ((mode & ALL_MOUSE_MODES) == 0) return; - if (!window_pane_visible(wp)) - return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; + if (!window_pane_visible(wp)) + return; /* If this pane is not in button or all mode, discard motion events. */ if (MOUSE_DRAG(m->b) && diff --git a/key-bindings.c b/key-bindings.c index c717f5ae2a..fbc54fb814 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -258,6 +258,11 @@ key_bindings_init(void) "bind M-n next-window -a", "bind M-o rotate-window -D", "bind M-p previous-window -a", + "bind -r S-Up refresh-client -U 10", + "bind -r S-Down refresh-client -D 10", + "bind -r S-Left refresh-client -L 10", + "bind -r S-Right refresh-client -R 10", + "bind -r DC refresh-client -c", "bind -r M-Up resize-pane -U 5", "bind -r M-Down resize-pane -D 5", "bind -r M-Left resize-pane -L 5", diff --git a/key-string.c b/key-string.c index bb49b59f18..8442727d34 100644 --- a/key-string.c +++ b/key-string.c @@ -43,7 +43,9 @@ static const struct { { "F11", KEYC_F11 }, { "F12", KEYC_F12 }, { "IC", KEYC_IC }, + { "Insert", KEYC_IC }, { "DC", KEYC_DC }, + { "Delete", KEYC_DC }, { "Home", KEYC_HOME }, { "End", KEYC_END }, { "NPage", KEYC_NPAGE }, diff --git a/layout-custom.c b/layout-custom.c index 1b8f576efe..9886afe121 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -167,7 +167,7 @@ layout_parse(struct window *w, const char *layout) /* Update pane offsets and sizes. */ layout_fix_offsets(lc); - layout_fix_panes(w, lc->sx, lc->sy); + layout_fix_panes(w); /* Then resize the layout back to the original window size. */ layout_resize(w, sx, sy); diff --git a/layout-set.c b/layout-set.c index 5055f672b9..b9769ed53a 100644 --- a/layout-set.c +++ b/layout-set.c @@ -148,7 +148,7 @@ layout_set_even(struct window *w, enum layout_type type) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -284,7 +284,7 @@ layout_set_main_h(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -408,7 +408,7 @@ layout_set_main_v(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -511,7 +511,7 @@ layout_set_tiled(struct window *w) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); diff --git a/layout.c b/layout.c index 4ad645e0e5..89026b918c 100644 --- a/layout.c +++ b/layout.c @@ -253,71 +253,29 @@ layout_need_status(struct layout_cell *lc, int at_top) /* Update pane offsets and sizes based on their cells. */ void -layout_fix_panes(struct window *w, u_int wsx, u_int wsy) +layout_fix_panes(struct window *w) { struct window_pane *wp; struct layout_cell *lc; - u_int sx, sy; - int shift, status, at_top; + int shift, status; status = options_get_number(w->options, "pane-border-status"); - at_top = (status == 1); TAILQ_FOREACH(wp, &w->panes, entry) { if ((lc = wp->layout_cell) == NULL) continue; if (status != 0) - shift = layout_need_status(lc, at_top); + shift = layout_need_status(lc, status == 1); else shift = 0; wp->xoff = lc->xoff; wp->yoff = lc->yoff; - if (shift && at_top) + if (shift && status == 1) wp->yoff += 1; - /* - * Layout cells are limited by the smallest size of other cells - * within the same row or column; if this isn't the case - * resizing becomes difficult. - * - * However, panes do not have to take up their entire cell, so - * they can be cropped to the window edge if the layout - * overflows and they are partly visible. - * - * This stops cells being hidden unnecessarily. - */ - - /* - * Work out the horizontal size. If the pane is actually - * outside the window or the entire pane is already visible, - * don't crop. - */ - if (lc->xoff >= wsx || lc->xoff + lc->sx < wsx) - sx = lc->sx; - else { - sx = wsx - lc->xoff; - if (sx < 1) - sx = lc->sx; - } - - /* - * Similarly for the vertical size; the minimum vertical size - * is two because scroll regions cannot be one line. - */ - if (lc->yoff >= wsy || lc->yoff + lc->sy < wsy) - sy = lc->sy; - else { - sy = wsy - lc->yoff; - if (sy < 2) - sy = lc->sy; - } - - if (shift) - sy -= 1; - - window_pane_resize(wp, sx, sy); + window_pane_resize(wp, lc->sx, lc->sy - shift); } } @@ -492,8 +450,7 @@ layout_init(struct window *w, struct window_pane *wp) lc = w->layout_root = layout_create_cell(NULL); layout_set_size(lc, w->sx, w->sy, 0, 0); layout_make_leaf(lc, wp); - - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } void @@ -551,7 +508,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) /* Fix cell offsets. */ layout_fix_offsets(lc); - layout_fix_panes(w, sx, sy); + layout_fix_panes(w); } /* Resize a pane to an absolute size. */ @@ -611,7 +568,7 @@ layout_resize_layout(struct window *w, struct layout_cell *lc, /* Fix cell offsets. */ layout_fix_offsets(w->layout_root); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); notify_window("window-layout-changed", w); } @@ -718,7 +675,7 @@ void layout_assign_pane(struct layout_cell *lc, struct window_pane *wp) { layout_make_leaf(lc, wp); - layout_fix_panes(wp->window, wp->window->sx, wp->window->sy); + layout_fix_panes(wp->window); } /* Calculate the new pane size for resized parent. */ @@ -1038,7 +995,7 @@ layout_close_pane(struct window_pane *wp) /* Fix pane offsets and sizes. */ if (w->layout_root != NULL) { layout_fix_offsets(w->layout_root); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); } notify_window("window-layout-changed", w); } @@ -1095,7 +1052,7 @@ layout_spread_out(struct window_pane *wp) do { if (layout_spread_cell(w, parent)) { layout_fix_offsets(parent); - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); break; } } while ((parent = parent->parent) != NULL); diff --git a/options-table.c b/options-table.c index 03ee530f7c..347c23dedc 100644 --- a/options-table.c +++ b/options-table.c @@ -60,6 +60,9 @@ static const char *options_table_pane_status_list[] = { static const char *options_table_set_clipboard_list[] = { "off", "external", "on", NULL }; +static const char *options_table_window_size_list[] = { + "largest", "smallest", "manual", NULL +}; /* Top-level options. */ const struct options_table_entry options_table[] = { @@ -194,6 +197,13 @@ const struct options_table_entry options_table[] = { .default_str = _PATH_BSHELL }, + { .name = "default-size", + .type = OPTIONS_TABLE_STRING, + .scope = OPTIONS_TABLE_SESSION, + .pattern = "[0-9]*x[0-9]*", + .default_str = "80x24" + }, + { .name = "destroy-unattached", .type = OPTIONS_TABLE_FLAG, .scope = OPTIONS_TABLE_SESSION, @@ -467,7 +477,9 @@ const struct options_table_entry options_table[] = { { .name = "status-right", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SESSION, - .default_str = " \"#{=21:pane_title}\" %H:%M %d-%b-%y" + .default_str = "#{?window_bigger," + "[#{window_offset_x}#,#{window_offset_y}] ,}" + "\"#{=21:pane_title}\" %H:%M %d-%b-%y" }, { .name = "status-right-attr", @@ -589,22 +601,6 @@ const struct options_table_entry options_table[] = { .default_num = 1 }, - { .name = "force-height", - .type = OPTIONS_TABLE_NUMBER, - .scope = OPTIONS_TABLE_WINDOW, - .minimum = 0, - .maximum = INT_MAX, - .default_num = 0 - }, - - { .name = "force-width", - .type = OPTIONS_TABLE_NUMBER, - .scope = OPTIONS_TABLE_WINDOW, - .minimum = 0, - .maximum = INT_MAX, - .default_num = 0 - }, - { .name = "main-pane-height", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_WINDOW, @@ -771,6 +767,13 @@ const struct options_table_entry options_table[] = { .default_str = "default" }, + { .name = "window-size", + .type = OPTIONS_TABLE_CHOICE, + .scope = OPTIONS_TABLE_WINDOW, + .choices = options_table_window_size_list, + .default_num = WINDOW_SIZE_LARGEST + }, + { .name = "window-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, diff --git a/resize.c b/resize.c index 1c9694da2d..fef8feeb99 100644 --- a/resize.c +++ b/resize.c @@ -22,144 +22,228 @@ #include "tmux.h" -/* - * Recalculate window and session sizes. - * - * Every session has the size of the smallest client it is attached to and - * every window the size of the smallest session it is attached to. - * - * So, when a client is resized or a session attached to or detached from a - * client, the window sizes must be recalculated. For each session, find the - * smallest client it is attached to, and resize it to that size. Then for - * every window, find the smallest session it is attached to, resize it to that - * size and clear and redraw every client with it as the current window. - * - * This is quite inefficient - better/additional data structures are needed - * to make it better. - */ +void +resize_window(struct window *w, u_int sx, u_int sy) +{ + int zoomed; + + /* Check size limits. */ + if (sx < WINDOW_MINIMUM) + sx = WINDOW_MINIMUM; + if (sx > WINDOW_MAXIMUM) + sx = WINDOW_MAXIMUM; + if (sy < WINDOW_MINIMUM) + sy = WINDOW_MINIMUM; + if (sy > WINDOW_MAXIMUM) + sy = WINDOW_MAXIMUM; + + /* If the window is zoomed, unzoom. */ + zoomed = w->flags & WINDOW_ZOOMED; + if (zoomed) + window_unzoom(w); + + /* Resize the layout first. */ + layout_resize(w, sx, sy); + + /* Resize the window, it can be no smaller than the layout. */ + if (sx < w->layout_root->sx) + sx = w->layout_root->sx; + if (sy < w->layout_root->sy) + sy = w->layout_root->sy; + window_resize(w, sx, sy); + + /* Restore the window zoom state. */ + if (zoomed) + window_zoom(w->active); + + tty_update_window_offset(w); + server_redraw_window(w); + notify_window("window-layout-changed", w); +} void -recalculate_sizes(void) +default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, + int type) { - struct session *s; - struct client *c; - struct window *w; - struct window_pane *wp; - u_int ssx, ssy, has, limit, lines; - int flag, is_zoomed, forced; + struct client *c; + u_int cx, cy; + const char *value; - RB_FOREACH(s, sessions, &sessions) { - lines = status_line_size(s); + if (type == -1) + type = options_get_number(global_w_options, "window-size"); + if (type == WINDOW_SIZE_MANUAL) + goto manual; - s->attached = 0; - ssx = ssy = UINT_MAX; + if (type == WINDOW_SIZE_LARGEST) { + *sx = *sy = 0; TAILQ_FOREACH(c, &clients, entry) { - if (c->flags & CLIENT_SUSPENDED) + if (c->session == NULL) continue; - if ((c->flags & (CLIENT_CONTROL|CLIENT_SIZECHANGED)) == - CLIENT_CONTROL) + if (c->flags & CLIENT_NOSIZEFLAGS) continue; - if (c->session == s) { - if (c->tty.sx < ssx) - ssx = c->tty.sx; - c->flags &= ~CLIENT_STATUSOFF; - if (lines != 0 && lines + PANE_MINIMUM > c->tty.sy) - c->flags |= CLIENT_STATUSOFF; - if ((~c->flags & CLIENT_STATUSOFF) && - !(c->flags & CLIENT_CONTROL) && - c->tty.sy > lines && - c->tty.sy - lines < ssy) - ssy = c->tty.sy - lines; - else if (c->tty.sy < ssy) - ssy = c->tty.sy; - s->attached++; - } + if (w != NULL && !session_has(c->session, w)) + continue; + if (w == NULL && c->session != s) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx > *sx) + *sx = cx; + if (cy > *sy) + *sy = cy; } - if (ssx == UINT_MAX || ssy == UINT_MAX) - continue; + if (*sx == 0 || *sy == 0) + goto manual; + } else { + *sx = *sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if (c->session == NULL) + continue; + if (c->flags & CLIENT_NOSIZEFLAGS) + continue; + if (w != NULL && !session_has(c->session, w)) + continue; + if (w == NULL && c->session != s) + continue; - if (lines != 0 && ssy == 0) - ssy = lines; + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); - if (s->sx == ssx && s->sy == ssy) - continue; + if (cx < *sx) + *sx = cx; + if (cy < *sy) + *sy = cy; + } + if (*sx == UINT_MAX || *sy == UINT_MAX) + goto manual; + } + goto done; - log_debug("session $%u size %u,%u (was %u,%u)", s->id, ssx, ssy, - s->sx, s->sy); +manual: + value = options_get_string(s->options, "default-size"); + if (sscanf(value, "%ux%u", sx, sy) != 2) { + *sx = 80; + *sy = 24; + } - s->sx = ssx; - s->sy = ssy; +done: + if (*sx < WINDOW_MINIMUM) + *sx = WINDOW_MINIMUM; + if (*sx > WINDOW_MAXIMUM) + *sx = WINDOW_MAXIMUM; + if (*sy < WINDOW_MINIMUM) + *sy = WINDOW_MINIMUM; + if (*sy > WINDOW_MAXIMUM) + *sy = WINDOW_MAXIMUM; +} +void +recalculate_sizes(void) +{ + struct session *s; + struct client *c; + struct window *w; + u_int sx, sy, cx, cy; + int flags, type, current, has, changed; + + /* + * Clear attached count and update saved status line information for + * each session. + */ + RB_FOREACH(s, sessions, &sessions) { + s->attached = 0; status_update_saved(s); } + /* + * Increment attached count and check the status line size for each + * client. + */ + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + + flags = c->flags; + if (flags & CLIENT_SUSPENDED) + continue; + if ((flags & CLIENT_CONTROL) && (~flags & CLIENT_SIZECHANGED)) + continue; + + if (c->tty.sy <= status_line_size(c)) + c->flags |= CLIENT_STATUSOFF; + else + c->flags &= ~CLIENT_STATUSOFF; + + s->attached++; + } + + /* Walk each window and adjust the size. */ RB_FOREACH(w, windows, &windows) { if (w->active == NULL) continue; - flag = options_get_number(w->options, "aggressive-resize"); + log_debug("%s: @%u is %u,%u", __func__, w->id, w->sx, w->sy); - ssx = ssy = UINT_MAX; - RB_FOREACH(s, sessions, &sessions) { - if (s->attached == 0) - continue; - if (flag) - has = s->curw->window == w; - else - has = session_has(s, w); - if (has) { - if (s->sx < ssx) - ssx = s->sx; - if (s->sy < ssy) - ssy = s->sy; - } - } - if (ssx == UINT_MAX || ssy == UINT_MAX) + type = options_get_number(w->options, "window-size"); + if (type == WINDOW_SIZE_MANUAL) continue; - - forced = 0; - limit = options_get_number(w->options, "force-width"); - if (limit >= PANE_MINIMUM && ssx > limit) { - ssx = limit; - forced |= WINDOW_FORCEWIDTH; - } - limit = options_get_number(w->options, "force-height"); - if (limit >= PANE_MINIMUM && ssy > limit) { - ssy = limit; - forced |= WINDOW_FORCEHEIGHT; + current = !options_get_number(w->options, "aggressive-resize"); + + changed = 1; + if (type == WINDOW_SIZE_LARGEST) { + sx = sy = 0; + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx > sx) + sx = cx; + if (cy > sy) + sy = cy; + } + if (sx == 0 || sy == 0) + changed = 0; + } else { + sx = sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if ((s = c->session) == NULL) + continue; + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx < sx) + sx = cx; + if (cy < sy) + sy = cy; + } + if (sx == UINT_MAX || sy == UINT_MAX) + changed = 0; } + if (w->sx == sx && w->sy == sy) + changed = 0; - if (w->sx == ssx && w->sy == ssy) + if (!changed) { + tty_update_window_offset(w); continue; - log_debug("window @%u size %u,%u (was %u,%u)", w->id, ssx, ssy, - w->sx, w->sy); - - w->flags &= ~(WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); - w->flags |= forced; - - is_zoomed = w->flags & WINDOW_ZOOMED; - if (is_zoomed) - window_unzoom(w); - layout_resize(w, ssx, ssy); - window_resize(w, ssx, ssy); - if (is_zoomed && window_pane_visible(w->active)) - window_zoom(w->active); - - /* - * If the current pane is now not visible, move to the next - * that is. - */ - wp = w->active; - while (!window_pane_visible(w->active)) { - w->active = TAILQ_PREV(w->active, window_panes, entry); - if (w->active == NULL) - w->active = TAILQ_LAST(&w->panes, window_panes); - if (w->active == wp) - break; } - if (w->active == w->last) - w->last = NULL; - - server_redraw_window(w); - notify_window("window-layout-changed", w); + log_debug("%s: @%u changed to %u,%u", __func__, w->id, sx, sy); + resize_window(w, sx, sy); } } diff --git a/screen-redraw.c b/screen-redraw.c index 957746338a..167389b444 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -33,11 +33,15 @@ struct screen_redraw_ctx { u_int sx; u_int sy; + u_int ox; + u_int oy; }; static void screen_redraw_draw_borders(struct screen_redraw_ctx *); static void screen_redraw_draw_panes(struct screen_redraw_ctx *); static void screen_redraw_draw_status(struct screen_redraw_ctx *); +static void screen_redraw_draw_pane(struct screen_redraw_ctx *, + struct window_pane *); static void screen_redraw_draw_number(struct screen_redraw_ctx *, struct window_pane *); @@ -320,25 +324,56 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; struct window *w = c->session->curw->window; - struct options *oo = c->session->options; struct tty *tty = &c->tty; struct window_pane *wp; - int spos; - u_int yoff; + struct screen *s; + u_int i, x, width, xoff, yoff, size; + + log_debug("%s: %s @%u", __func__, c->name, w->id); - spos = options_get_number(oo, "status-position"); TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; + s = &wp->status_screen; + + size = wp->status_size; if (ctx->pane_status == CELL_STATUS_TOP) yoff = wp->yoff - 1; else yoff = wp->yoff + wp->sy; - if (spos == 0) - yoff += 1; + xoff = wp->xoff + 2; + + if (xoff + size <= ctx->ox || + xoff >= ctx->ox + ctx->sx || + yoff < ctx->oy || + yoff >= ctx->oy + ctx->sy) + continue; + + if (xoff >= ctx->ox && xoff + size <= ctx->ox + ctx->sx) { + /* All visible. */ + i = 0; + x = xoff - ctx->ox; + width = size; + } else if (xoff < ctx->ox && xoff + size > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + i = ctx->ox; + x = 0; + width = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + i = ctx->ox - xoff; + x = 0; + width = size - i; + } else { + /* Right not visible. */ + i = 0; + x = xoff - ctx->ox; + width = size - x; + } - tty_draw_line(tty, NULL, &wp->status_screen, 0, wp->xoff + 2, - yoff); + if (ctx->top) + yoff += ctx->lines; + tty_draw_line(tty, NULL, s, i, 0, width, x, yoff - ctx->oy); } tty_cursor(tty, 0, 0); } @@ -385,13 +420,17 @@ screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) memset(ctx, 0, sizeof *ctx); ctx->c = c; - ctx->lines = tty_status_lines(c); + ctx->lines = status_line_size(c); + if (c->message_string != NULL || c->prompt_string != NULL) + ctx->lines = (ctx->lines == 0) ? 1 : ctx->lines; if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) ctx->top = 1; ctx->pane_status = options_get_number(wo, "pane-border-status"); - ctx->sx = c->tty.sx; - ctx->sy = c->tty.sy - ctx->lines; + tty_window_offset(&c->tty, &ctx->ox, &ctx->oy, &ctx->sx, &ctx->sy); + + log_debug("%s: %s @%u ox=%u oy=%u sx=%u sy=%u %u/%d", __func__, c->name, + w->id, ctx->ox, ctx->oy, ctx->sx, ctx->sy, ctx->lines, ctx->top); } /* Redraw entire screen. */ @@ -420,33 +459,26 @@ screen_redraw_screen(struct client *c) tty_reset(&c->tty); } -/* Draw a single pane. */ +/* Redraw a single pane. */ void screen_redraw_pane(struct client *c, struct window_pane *wp) { - u_int i, yoff; + struct screen_redraw_ctx ctx; if (!window_pane_visible(wp)) return; - yoff = wp->yoff; - if (status_at_line(c) == 0) - yoff += status_line_size(c->session); - - log_debug("%s: redraw pane %%%u (at %u,%u)", c->name, wp->id, - wp->xoff, yoff); + screen_redraw_set_context(c, &ctx); - for (i = 0; i < wp->sy; i++) - tty_draw_pane(&c->tty, wp, i, wp->xoff, yoff); + screen_redraw_draw_pane(&ctx, wp); tty_reset(&c->tty); } /* Draw a border cell. */ static void -screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, - int small, u_int msgx, u_int msgy, struct grid_cell *m_active_gc, - struct grid_cell *active_gc, struct grid_cell *m_other_gc, - struct grid_cell *other_gc) +screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int i, u_int j, + struct grid_cell *m_active_gc, struct grid_cell *active_gc, + struct grid_cell *m_other_gc, struct grid_cell *other_gc) { struct client *c = ctx->c; struct session *s = c->session; @@ -455,14 +487,12 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, struct window_pane *wp; struct window_pane *active = w->active; struct window_pane *marked = marked_pane.wp; - u_int type; + u_int type, x = ctx->ox + i, y = ctx->oy + j; int flag, pane_status = ctx->pane_status; type = screen_redraw_check_cell(c, x, y, pane_status, &wp); if (type == CELL_INSIDE) return; - if (type == CELL_OUTSIDE && small && x > msgx && y == msgy) - return; flag = screen_redraw_check_is(x, y, type, pane_status, w, active, wp); if (server_is_marked(s, s->curw, marked_pane.wp) && @@ -476,9 +506,9 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int x, u_int y, else tty_attributes(tty, other_gc, NULL); if (ctx->top) - tty_cursor(tty, x, ctx->lines + y); + tty_cursor(tty, i, ctx->lines + j); else - tty_cursor(tty, x, y); + tty_cursor(tty, i, j); tty_putc(tty, CELL_BORDERS[type]); } @@ -489,42 +519,12 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) struct client *c = ctx->c; struct session *s = c->session; struct window *w = s->curw->window; - struct options *oo = w->options; struct tty *tty = &c->tty; + struct options *oo = w->options; struct grid_cell m_active_gc, active_gc, m_other_gc, other_gc; - struct grid_cell msg_gc; - u_int i, j, msgx = 0, msgy = 0; - int small, flags; - char msg[256]; - const char *tmp; - size_t msglen = 0; - - small = (ctx->sy + ctx->top > w->sy) || (ctx->sx > w->sx); - if (small) { - flags = w->flags & (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT); - if (flags == (WINDOW_FORCEWIDTH|WINDOW_FORCEHEIGHT)) - tmp = "force-width, force-height"; - else if (flags == WINDOW_FORCEWIDTH) - tmp = "force-width"; - else if (flags == WINDOW_FORCEHEIGHT) - tmp = "force-height"; - else if (c->flags & CLIENT_STATUSOFF) - tmp = "status line"; - else - tmp = "a smaller client"; - xsnprintf(msg, sizeof msg, "(size %ux%u from %s)", - w->sx, w->sy, tmp); - msglen = strlen(msg); - - if (ctx->sy - 1 + ctx->top > w->sy && ctx->sx >= msglen) { - msgx = ctx->sx - msglen; - msgy = ctx->sy - 1 + ctx->top; - } else if (ctx->sx - w->sx > msglen) { - msgx = ctx->sx - msglen; - msgy = ctx->sy - 1 + ctx->top; - } else - small = 0; - } + u_int i, j; + + log_debug("%s: %s @%u", __func__, c->name, w->id); style_apply(&other_gc, oo, "pane-border-style"); style_apply(&active_gc, oo, "pane-active-border-style"); @@ -535,20 +535,12 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < ctx->sy; j++) { - for (i = 0; i < ctx->sx; i++) { - screen_redraw_draw_borders_cell(ctx, i, j, small, - msgx, msgy, &m_active_gc, &active_gc, &m_other_gc, - &other_gc); + for (j = 0; j < tty->sy - ctx->lines; j++) { + for (i = 0; i < tty->sx; i++) { + screen_redraw_draw_borders_cell(ctx, i, j, + &m_active_gc, &active_gc, &m_other_gc, &other_gc); } } - - if (small) { - memcpy(&msg_gc, &grid_default_cell, sizeof msg_gc); - tty_attributes(tty, &msg_gc, NULL); - tty_cursor(tty, msgx, msgy); - tty_puts(tty, msg); - } } /* Draw the panes. */ @@ -557,19 +549,14 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; struct window *w = c->session->curw->window; - struct tty *tty = &c->tty; struct window_pane *wp; - u_int i, y; - if (ctx->top) - y = ctx->lines; - else - y = 0; + log_debug("%s: %s @%u", __func__, c->name, w->id); + TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; - for (i = 0; i < wp->sy; i++) - tty_draw_pane(tty, wp, i, wp->xoff, y + wp->yoff); + screen_redraw_draw_pane(ctx, wp); if (c->flags & CLIENT_IDENTIFY) screen_redraw_draw_number(ctx, wp); } @@ -580,15 +567,74 @@ static void screen_redraw_draw_status(struct screen_redraw_ctx *ctx) { struct client *c = ctx->c; + struct window *w = c->session->curw->window; struct tty *tty = &c->tty; + struct screen *s = &c->status.status; u_int i, y; + log_debug("%s: %s @%u", __func__, c->name, w->id); + if (ctx->top) y = 0; else - y = ctx->sy; + y = c->tty.sy - ctx->lines; for (i = 0; i < ctx->lines; i++) - tty_draw_line(tty, NULL, &c->status.status, i, 0, y); + tty_draw_line(tty, NULL, s, 0, i, UINT_MAX, 0, y + i); +} + +/* Draw one pane. */ +static void +screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp) +{ + struct client *c = ctx->c; + struct window *w = c->session->curw->window; + struct tty *tty = &c->tty; + struct screen *s; + u_int i, j, top, x, y, width; + + log_debug("%s: %s @%u %%%u", __func__, c->name, w->id, wp->id); + + if (wp->xoff + wp->sx <= ctx->ox || wp->xoff >= ctx->ox + ctx->sx) + return; + if (ctx->top) + top = ctx->lines; + else + top = 0; + + s = wp->screen; + for (j = 0; j < wp->sy; j++) { + if (wp->yoff + j < ctx->oy || wp->yoff + j >= ctx->oy + ctx->sy) + continue; + y = top + wp->yoff + j - ctx->oy; + + if (wp->xoff >= ctx->ox && + wp->xoff + wp->sx <= ctx->ox + ctx->sx) { + /* All visible. */ + i = 0; + x = wp->xoff - ctx->ox; + width = wp->sx; + } else if (wp->xoff < ctx->ox && + wp->xoff + wp->sx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + i = ctx->ox; + x = 0; + width = ctx->sx; + } else if (wp->xoff < ctx->ox) { + /* Left not visible. */ + i = ctx->ox - wp->xoff; + x = 0; + width = wp->sx - i; + } else { + /* Right not visible. */ + i = 0; + x = wp->xoff - ctx->ox; + width = ctx->sx - x; + } + log_debug("%s: %s %%%u line %u,%u at %u,%u, width %u", + __func__, c->name, wp->id, i, j, x, y, width); + + tty_draw_line(tty, wp, s, i, j, width, x, y); + } } /* Draw number on a pane. */ @@ -601,27 +647,69 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) struct options *oo = s->options; struct window *w = wp->window; struct grid_cell gc; - u_int idx, px, py, i, j, xoff, yoff; + u_int idx, px, py, i, j, xoff, yoff, sx, sy; int colour, active_colour; char buf[16], *ptr; size_t len; + if (wp->xoff + wp->sx <= ctx->ox || + wp->xoff >= ctx->ox + ctx->sx || + wp->yoff + wp->sy <= ctx->oy || + wp->yoff >= ctx->oy + ctx->sy) + return; + + if (wp->xoff >= ctx->ox && wp->xoff + wp->sx <= ctx->ox + ctx->sx) { + /* All visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx; + } else if (wp->xoff < ctx->ox && + wp->xoff + wp->sx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + xoff = 0; + sx = ctx->sx; + } else if (wp->xoff < ctx->ox) { + /* Left not visible. */ + xoff = 0; + sx = wp->sx - (ctx->ox - wp->xoff); + } else { + /* Right not visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx - xoff; + } + if (wp->yoff >= ctx->oy && wp->yoff + wp->sy <= ctx->oy + ctx->sy) { + /* All visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy; + } else if (wp->yoff < ctx->oy && + wp->yoff + wp->sy > ctx->oy + ctx->sy) { + /* Both top and bottom not visible. */ + yoff = 0; + sy = ctx->sy; + } else if (wp->yoff < ctx->oy) { + /* Top not visible. */ + yoff = 0; + sy = wp->sy - (ctx->oy - wp->yoff); + } else { + /* Bottom not visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy - yoff; + } + + if (ctx->top) + yoff += ctx->lines; + px = sx / 2; + py = sy / 2; + if (window_pane_index(wp, &idx) != 0) fatalx("index not found"); len = xsnprintf(buf, sizeof buf, "%u", idx); - if (wp->sx < len) + if (sx < len) return; colour = options_get_number(oo, "display-panes-colour"); active_colour = options_get_number(oo, "display-panes-active-colour"); - px = wp->sx / 2; py = wp->sy / 2; - xoff = wp->xoff; yoff = wp->yoff; - - if (ctx->top) - yoff += ctx->lines; - - if (wp->sx < len * 6 || wp->sy < 5) { + if (sx < len * 6 || sy < 5) { tty_cursor(tty, xoff + px - len / 2, yoff + py); goto draw_text; } @@ -653,9 +741,9 @@ screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) } len = xsnprintf(buf, sizeof buf, "%ux%u", wp->sx, wp->sy); - if (wp->sx < len || wp->sy < 6) + if (sx < len || sy < 6) return; - tty_cursor(tty, xoff + wp->sx - len, yoff); + tty_cursor(tty, xoff + sx - len, yoff); draw_text: memcpy(&gc, &grid_default_cell, sizeof gc); diff --git a/screen-write.c b/screen-write.c index fac5229e99..4f5bee6163 100644 --- a/screen-write.c +++ b/screen-write.c @@ -54,12 +54,47 @@ struct screen_write_collect_line { TAILQ_HEAD(, screen_write_collect_item) items; }; +static void +screen_write_offset_timer(__unused int fd, __unused short events, void *data) +{ + struct window *w = data; + + tty_update_window_offset(w); +} + +/* Set cursor position. */ +static void +screen_write_set_cursor(struct screen_write_ctx *ctx, int cx, int cy) +{ + struct window_pane *wp = ctx->wp; + struct window *w; + struct screen *s = ctx->s; + struct timeval tv = { .tv_usec = 10000 }; + + if (cx != -1 && (u_int)cx == s->cx && cy != -1 && (u_int)cy == s->cy) + return; + + if (cx != -1) + s->cx = cx; + if (cy != -1) + s->cy = cy; + + if (wp == NULL) + return; + w = wp->window; + + if (!event_initialized(&w->offset_timer)) + evtimer_set(&w->offset_timer, screen_write_offset_timer, w); + if (!evtimer_pending(&w->offset_timer, NULL)) + evtimer_add(&w->offset_timer, &tv); +} + /* Initialize writing with a window. */ void screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, struct screen *s) { - char tmp[16]; + char tmp[32]; u_int y; memset(ctx, 0, sizeof *ctx); @@ -78,8 +113,10 @@ screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, ctx->scrolled = 0; ctx->bg = 8; - if (wp != NULL) - snprintf(tmp, sizeof tmp, "pane %%%u", wp->id); + if (wp != NULL) { + snprintf(tmp, sizeof tmp, "pane %%%u (at %u,%u)", wp->id, + wp->xoff, wp->yoff); + } log_debug("%s: size %ux%u, %s", __func__, screen_size_x(ctx->s), screen_size_y(ctx->s), wp == NULL ? "no pane" : tmp); } @@ -603,25 +640,26 @@ void screen_write_cursorup(struct screen_write_ctx *ctx, u_int ny) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (ny == 0) ny = 1; - if (s->cy < s->rupper) { + if (cy < s->rupper) { /* Above region. */ - if (ny > s->cy) - ny = s->cy; + if (ny > cy) + ny = cy; } else { /* Below region. */ - if (ny > s->cy - s->rupper) - ny = s->cy - s->rupper; + if (ny > cy - s->rupper) + ny = cy - s->rupper; } - if (s->cx == screen_size_x(s)) - s->cx--; - if (ny == 0) - return; + if (cx == screen_size_x(s)) + cx--; - s->cy -= ny; + cy -= ny; + + screen_write_set_cursor(ctx, cx, cy); } /* Cursor down by ny. */ @@ -629,25 +667,28 @@ void screen_write_cursordown(struct screen_write_ctx *ctx, u_int ny) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (ny == 0) ny = 1; - if (s->cy > s->rlower) { + if (cy > s->rlower) { /* Below region. */ - if (ny > screen_size_y(s) - 1 - s->cy) - ny = screen_size_y(s) - 1 - s->cy; + if (ny > screen_size_y(s) - 1 - cy) + ny = screen_size_y(s) - 1 - cy; } else { /* Above region. */ - if (ny > s->rlower - s->cy) - ny = s->rlower - s->cy; + if (ny > s->rlower - cy) + ny = s->rlower - cy; } - if (s->cx == screen_size_x(s)) - s->cx--; - if (ny == 0) + if (cx == screen_size_x(s)) + cx--; + else if (ny == 0) return; - s->cy += ny; + cy += ny; + + screen_write_set_cursor(ctx, cx, cy); } /* Cursor right by nx. */ @@ -655,16 +696,19 @@ void screen_write_cursorright(struct screen_write_ctx *ctx, u_int nx) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (nx == 0) nx = 1; - if (nx > screen_size_x(s) - 1 - s->cx) - nx = screen_size_x(s) - 1 - s->cx; + if (nx > screen_size_x(s) - 1 - cx) + nx = screen_size_x(s) - 1 - cx; if (nx == 0) return; - s->cx += nx; + cx += nx; + + screen_write_set_cursor(ctx, cx, cy); } /* Cursor left by nx. */ @@ -672,16 +716,19 @@ void screen_write_cursorleft(struct screen_write_ctx *ctx, u_int nx) { struct screen *s = ctx->s; + u_int cx = s->cx, cy = s->cy; if (nx == 0) nx = 1; - if (nx > s->cx) - nx = s->cx; + if (nx > cx) + nx = cx; if (nx == 0) return; - s->cx -= nx; + cx -= nx; + + screen_write_set_cursor(ctx, cx, cy); } /* Backspace; cursor left unless at start of wrapped line when can move up. */ @@ -690,17 +737,20 @@ screen_write_backspace(struct screen_write_ctx *ctx) { struct screen *s = ctx->s; struct grid_line *gl; + u_int cx = s->cx, cy = s->cy; - if (s->cx == 0) { - if (s->cy == 0) + if (cx == 0) { + if (cy == 0) return; - gl = grid_get_line(s->grid, s->grid->hsize + s->cy - 1); + gl = grid_get_line(s->grid, s->grid->hsize + cy - 1); if (gl->flags & GRID_LINE_WRAPPED) { - s->cy--; - s->cx = screen_size_x(s) - 1; + cy--; + cx = screen_size_x(s) - 1; } } else - s->cx--; + cx--; + + screen_write_set_cursor(ctx, cx, cy); } /* VT100 alignment test. */ @@ -712,8 +762,6 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx) struct grid_cell gc; u_int xx, yy; - screen_write_initctx(ctx, &ttyctx); - memcpy(&gc, &grid_default_cell, sizeof gc); utf8_set(&gc.data, 'E'); @@ -722,8 +770,7 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx) grid_view_set_cell(s->grid, xx, yy, &gc); } - s->cx = 0; - s->cy = 0; + screen_write_set_cursor(ctx, 0, 0); s->rupper = 0; s->rlower = screen_size_y(s) - 1; @@ -988,8 +1035,7 @@ screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) if (py > screen_size_y(s) - 1) py = screen_size_y(s) - 1; - s->cx = px; - s->cy = py; + screen_write_set_cursor(ctx, px, py); } /* Reverse index (up with scroll). */ @@ -1005,7 +1051,7 @@ screen_write_reverseindex(struct screen_write_ctx *ctx, u_int bg) if (s->cy == s->rupper) grid_view_scroll_region_down(s->grid, s->rupper, s->rlower, bg); else if (s->cy > 0) - s->cy--; + screen_write_set_cursor(ctx, -1, s->cy - 1); screen_write_collect_flush(ctx, 0); tty_write(tty_cmd_reverseindex, &ttyctx); @@ -1028,8 +1074,7 @@ screen_write_scrollregion(struct screen_write_ctx *ctx, u_int rupper, screen_write_collect_flush(ctx, 0); /* Cursor moves to top-left. */ - s->cx = 0; - s->cy = 0; + screen_write_set_cursor(ctx, 0, 0); s->rupper = rupper; s->rlower = rlower; @@ -1062,7 +1107,7 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped, u_int bg) screen_write_collect_scroll(ctx); ctx->scrolled++; } else if (s->cy < screen_size_y(s) - 1) - s->cy++; + screen_write_set_cursor(ctx, -1, s->cy + 1); } /* Scroll up. */ @@ -1094,9 +1139,7 @@ screen_write_scrollup(struct screen_write_ctx *ctx, u_int lines, u_int bg) void screen_write_carriagereturn(struct screen_write_ctx *ctx) { - struct screen *s = ctx->s; - - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); } /* Clear to end of screen from cursor. */ @@ -1300,14 +1343,15 @@ screen_write_collect_end(struct screen_write_ctx *ctx) grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); } - if (gc.data.width > 1) + if (gc.data.width > 1) { grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } } memcpy(&gc, &ci->gc, sizeof gc); grid_view_set_cells(s->grid, s->cx, s->cy, &gc, ci->data, ci->used); - s->cx += ci->used; + screen_write_set_cursor(ctx, s->cx + ci->used, -1); for (xx = s->cx; xx < screen_size_x(s); xx++) { grid_view_get_cell(s->grid, xx, s->cy, &gc); @@ -1361,7 +1405,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy); ci->wrapped = 1; screen_write_linefeed(ctx, 1, 8); - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); } if (ci->used == 0) @@ -1423,7 +1467,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) if ((s->mode & MODE_WRAP) && s->cx > sx - width) { log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy); screen_write_linefeed(ctx, 1, 8); - s->cx = 0; + screen_write_set_cursor(ctx, 0, -1); screen_write_collect_flush(ctx, 1); } @@ -1496,9 +1540,9 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) */ last = !(s->mode & MODE_WRAP); if (s->cx <= sx - last - width) - s->cx += width; + screen_write_set_cursor(ctx, s->cx + width, -1); else - s->cx = sx - last; + screen_write_set_cursor(ctx, sx - last, -1); /* Create space for character in insert mode. */ if (s->mode & MODE_INSERT) { diff --git a/server-client.c b/server-client.c index afc390c769..aefe006eb7 100644 --- a/server-client.c +++ b/server-client.c @@ -194,6 +194,7 @@ server_client_create(int fd) c->session = NULL; c->last_session = NULL; + c->tty.sx = 80; c->tty.sy = 24; @@ -412,7 +413,7 @@ server_client_check_mouse(struct client *c) struct mouse_event *m = &c->tty.mouse; struct window *w; struct window_pane *wp; - u_int x, y, b; + u_int x, y, b, sx, sy, px, py; int flag; key_code key; struct timeval tv; @@ -422,8 +423,8 @@ server_client_check_mouse(struct client *c) type = NOTYPE; where = NOWHERE; - log_debug("mouse %02x at %u,%u (last %u,%u) (%d)", m->b, m->x, m->y, - m->lx, m->ly, c->tty.mouse_drag_flag); + log_debug("%s mouse %02x at %u,%u (last %u,%u) (%d)", c->name, m->b, + m->x, m->y, m->lx, m->ly, c->tty.mouse_drag_flag); /* What type of event is this? */ if ((m->sgr_type != ' ' && @@ -442,7 +443,7 @@ server_client_check_mouse(struct client *c) x = m->x, y = m->y, b = m->b; log_debug("drag update at %u,%u", x, y); } else { - x = m->lx, y = m->ly, b = m->lb; + x = m->lx - m->ox, y = m->ly - m->oy, b = m->lb; log_debug("drag start at %u,%u", x, y); } } else if (MOUSE_WHEEL(m->b)) { @@ -518,20 +519,33 @@ server_client_check_mouse(struct client *c) /* Not on status line. Adjust position and check for border or pane. */ if (where == NOWHERE) { + px = x; if (m->statusat == 0 && y > 0) - y--; + py = y - 1; else if (m->statusat > 0 && y >= (u_int)m->statusat) - y = m->statusat - 1; + py = m->statusat - 1; + else + py = y; + + tty_window_offset(&c->tty, &m->ox, &m->oy, &sx, &sy); + log_debug("mouse window @%u at %u,%u (%ux%u)", + s->curw->window->id, m->ox, m->oy, sx, sy); + if (px > sx || py > sy) + return (KEYC_UNKNOWN); + px = px + m->ox; + py = py + m->oy; + m->x = x + m->ox; + m->y = y + m->oy; /* Try the pane borders if not zoomed. */ if (~s->curw->window->flags & WINDOW_ZOOMED) { TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { - if ((wp->xoff + wp->sx == x && - wp->yoff <= 1 + y && - wp->yoff + wp->sy >= y) || - (wp->yoff + wp->sy == y && - wp->xoff <= 1 + x && - wp->xoff + wp->sx >= x)) + if ((wp->xoff + wp->sx == px && + wp->yoff <= 1 + py && + wp->yoff + wp->sy >= py) || + (wp->yoff + wp->sy == py && + wp->xoff <= 1 + px && + wp->xoff + wp->sx >= px)) break; } if (wp != NULL) @@ -540,7 +554,7 @@ server_client_check_mouse(struct client *c) /* Otherwise try inside the pane. */ if (where == NOWHERE) { - wp = window_get_active_at(s->curw->window, x, y); + wp = window_get_active_at(s->curw->window, px, py); if (wp != NULL) where = PANE; } @@ -928,8 +942,6 @@ server_client_handle_key(struct client *c, key_code key) return; window_unzoom(w); wp = window_pane_at_index(w, key - '0'); - if (wp != NULL && !window_pane_visible(wp)) - wp = NULL; server_client_clear_identify(c, wp); return; } @@ -1304,28 +1316,37 @@ server_client_reset_state(struct client *c) struct window_pane *wp = w->active, *loop; struct screen *s = wp->screen; struct options *oo = c->session->options; - int lines, mode; + int mode, cursor = 0; + u_int cx = 0, cy = 0, ox, oy, sx, sy; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; + mode = s->mode; tty_region_off(&c->tty); tty_margin_off(&c->tty); - if (status_at_line(c) != 0) - lines = 0; - else - lines = status_line_size(c->session); - if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - lines) - tty_cursor(&c->tty, 0, 0); - else - tty_cursor(&c->tty, wp->xoff + s->cx, lines + wp->yoff + s->cy); + /* Move cursor to pane cursor and offset. */ + cursor = 0; + tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && + wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { + cursor = 1; + + cx = wp->xoff + s->cx - ox; + cy = wp->yoff + s->cy - oy; + + if (status_at_line(c) == 0) + cy += status_line_size(c); + } + if (!cursor) + mode &= ~MODE_CURSOR; + tty_cursor(&c->tty, cx, cy); /* * Set mouse mode if requested. To support dragging, always use button * mode. */ - mode = s->mode; if (options_get_number(oo, "mouse")) { mode &= ~ALL_MOUSE_MODES; TAILQ_FOREACH(loop, &w->panes, entry) { diff --git a/server-fn.c b/server-fn.c index c44290337c..ae90f0c4c2 100644 --- a/server-fn.c +++ b/server-fn.c @@ -409,6 +409,7 @@ server_destroy_session(struct session *s) c->last_session = NULL; c->session = s_new; server_client_set_key_table(c, NULL); + tty_update_client_offset(c); status_timer_start(c); notify_client("client-session-changed", c); session_update_activity(s_new, NULL); diff --git a/session.c b/session.c index 1a109a8336..061ff4998e 100644 --- a/session.c +++ b/session.c @@ -113,8 +113,8 @@ session_find_by_id(u_int id) /* Create a new session. */ struct session * session_create(const char *prefix, const char *name, int argc, char **argv, - const char *path, const char *cwd, struct environ *env, struct termios *tio, - int idx, u_int sx, u_int sy, char **cause) + const char *path, const char *cwd, struct environ *env, struct options *oo, + struct termios *tio, int idx, char **cause) { struct session *s; struct winlink *wl; @@ -133,7 +133,7 @@ session_create(const char *prefix, const char *name, int argc, char **argv, if (env != NULL) environ_copy(env, s->environ); - s->options = options_create(global_s_options); + s->options = oo; s->hooks = hooks_create(global_hooks); status_update_saved(s); @@ -144,9 +144,6 @@ session_create(const char *prefix, const char *name, int argc, char **argv, memcpy(s->tio, tio, sizeof *s->tio); } - s->sx = sx; - s->sy = sy; - if (name != NULL) { s->name = xstrdup(name); s->id = next_session_id++; @@ -350,7 +347,7 @@ session_new(struct session *s, const char *name, int argc, char **argv, struct winlink *wl; struct environ *env; const char *shell; - u_int hlimit; + u_int hlimit, sx, sy; if ((wl = winlink_add(&s->windows, idx)) == NULL) { xasprintf(cause, "index in use: %d", idx); @@ -362,10 +359,11 @@ session_new(struct session *s, const char *name, int argc, char **argv, if (*shell == '\0' || areshell(shell)) shell = _PATH_BSHELL; + default_window_size(s, NULL, &sx, &sy, -1); hlimit = options_get_number(s->options, "history-limit"); env = environ_for_session(s, 0); w = window_create_spawn(name, argc, argv, path, shell, cwd, env, s->tio, - s->sx, s->sy, hlimit, cause); + sx, sy, hlimit, cause); if (w == NULL) { winlink_remove(&s->windows, wl); environ_free(env); @@ -548,6 +546,7 @@ session_set_current(struct session *s, struct winlink *wl) s->curw = wl; winlink_clear_flags(wl); window_update_activity(wl->window); + tty_update_window_offset(wl->window); notify_session("session-window-changed", s); return (0); } diff --git a/status.c b/status.c index 10f9f2903e..211da9fc9a 100644 --- a/status.c +++ b/status.c @@ -214,17 +214,17 @@ status_at_line(struct client *c) return (-1); if (s->statusat != 1) return (s->statusat); - return (c->tty.sy - status_line_size(s)); + return (c->tty.sy - status_line_size(c)); } -/* - * Get size of status line for session. 0 means off. Note that status line may - * be forced off for an individual client if it is too small (the - * CLIENT_STATUSOFF flag is set for this). - */ +/* Get size of status line for client's session. 0 means off. */ u_int -status_line_size(struct session *s) +status_line_size(struct client *c) { + struct session *s = c->session; + + if (c->flags & CLIENT_STATUSOFF) + return (0); if (s->statusat == -1) return (0); return (1); @@ -324,7 +324,7 @@ status_redraw(struct client *c) } /* No status line? */ - lines = status_line_size(s); + lines = status_line_size(c); if (c->tty.sy == 0 || lines == 0) return (1); left = right = NULL; @@ -663,7 +663,7 @@ status_message_redraw(struct client *c) return (0); memcpy(&old_status, &c->status.status, sizeof old_status); - lines = status_line_size(c->session); + lines = status_line_size(c); if (lines <= 1) { lines = 1; screen_init(&c->status.status, c->tty.sx, 1, 0); @@ -819,7 +819,7 @@ status_prompt_redraw(struct client *c) return (0); memcpy(&old_status, &c->status.status, sizeof old_status); - lines = status_line_size(c->session); + lines = status_line_size(c); if (lines <= 1) { lines = 1; screen_init(&c->status.status, c->tty.sx, 1, 0); diff --git a/tmux.h b/tmux.h index 7b451adaef..f1727d23aa 100644 --- a/tmux.h +++ b/tmux.h @@ -57,11 +57,17 @@ struct tmuxproc; #define PROTOCOL_VERSION 8 /* Default global configuration file. */ +#ifndef TMUX_CONF #define TMUX_CONF "/etc/tmux.conf" +#endif /* Minimum layout cell size, NOT including border lines. */ #define PANE_MINIMUM 1 +/* Minimum and maximum window size. */ +#define WINDOW_MINIMUM PANE_MINIMUM +#define WINDOW_MAXIMUM 10000 + /* Automatic name refresh interval, in microseconds. Must be < 1 second. */ #define NAME_INTERVAL 500000 @@ -789,6 +795,7 @@ struct window { struct timeval name_time; struct event alerts_timer; + struct event offset_timer; struct timeval activity_time; @@ -809,9 +816,7 @@ struct window { #define WINDOW_ACTIVITY 0x2 #define WINDOW_SILENCE 0x4 #define WINDOW_ZOOMED 0x8 -#define WINDOW_FORCEWIDTH 0x10 -#define WINDOW_FORCEHEIGHT 0x20 -#define WINDOW_STYLECHANGED 0x40 +#define WINDOW_STYLECHANGED 0x10 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) int alerts_queued; @@ -852,6 +857,11 @@ struct winlink { RB_HEAD(winlinks, winlink); TAILQ_HEAD(winlink_stack, winlink); +/* Window size option. */ +#define WINDOW_SIZE_LARGEST 0 +#define WINDOW_SIZE_SMALLEST 1 +#define WINDOW_SIZE_MANUAL 2 + /* Layout direction. */ enum layout_type { LAYOUT_LEFTRIGHT, @@ -910,9 +920,6 @@ struct session { struct event lock_timer; - u_int sx; - u_int sy; - struct winlink *curw; struct winlink_stack lastw; struct winlinks windows; @@ -972,6 +979,9 @@ struct mouse_event { u_int ly; u_int lb; + u_int ox; + u_int oy; + int s; int w; int wp; @@ -1019,6 +1029,12 @@ struct tty { u_int cstyle; char *ccolour; + int oflag; + u_int oox; + u_int ooy; + u_int osx; + u_int osy; + int mode; u_int rlower; @@ -1099,11 +1115,19 @@ struct tty_ctx { u_int orupper; u_int orlower; + /* Pane offset. */ u_int xoff; u_int yoff; /* The background colour used for clearing (erasing). */ u_int bg; + + /* Window offset and size. */ + int bigger; + u_int ox; + u_int oy; + u_int sx; + u_int sy; }; /* Saved message entry. */ @@ -1341,11 +1365,16 @@ struct client { #define CLIENT_SIZECHANGED 0x400000 #define CLIENT_STATUSOFF 0x800000 #define CLIENT_REDRAWSTATUSALWAYS 0x1000000 -#define CLIENT_ALLREDRAWFLAGS \ - (CLIENT_REDRAWWINDOW| \ - CLIENT_REDRAWSTATUS| \ - CLIENT_REDRAWSTATUSALWAYS| \ +#define CLIENT_ALLREDRAWFLAGS \ + (CLIENT_REDRAWWINDOW| \ + CLIENT_REDRAWSTATUS| \ + CLIENT_REDRAWSTATUSALWAYS| \ CLIENT_REDRAWBORDERS) +#define CLIENT_NOSIZEFLAGS \ + (CLIENT_EXIT| \ + CLIENT_DEAD| \ + CLIENT_SUSPENDED| \ + CLIENT_DETACHING) int flags; struct key_table *keytable; @@ -1383,6 +1412,10 @@ struct client { int references; + void *pan_window; + u_int pan_ox; + u_int pan_oy; + TAILQ_ENTRY(client) entry; }; TAILQ_HEAD(clients, client); @@ -1443,6 +1476,7 @@ struct options_table_entry { const char *separator; const char *style; + const char *pattern; }; /* Common command usages. */ @@ -1643,7 +1677,10 @@ struct environ *environ_for_session(struct session *, int); /* tty.c */ void tty_create_log(void); -u_int tty_status_lines(struct client *); +int tty_window_bigger(struct tty *); +int tty_window_offset(struct tty *, u_int *, u_int *, u_int *, u_int *); +void tty_update_window_offset(struct window *); +void tty_update_client_offset(struct client *); void tty_raw(struct tty *, const char *); void tty_attributes(struct tty *, const struct grid_cell *, const struct window_pane *); @@ -1668,10 +1705,8 @@ void tty_start_tty(struct tty *); void tty_stop_tty(struct tty *); void tty_set_title(struct tty *, const char *); void tty_update_mode(struct tty *, int, struct screen *); -void tty_draw_pane(struct tty *, const struct window_pane *, u_int, u_int, - u_int); void tty_draw_line(struct tty *, const struct window_pane *, struct screen *, - u_int, u_int, u_int); + u_int, u_int, u_int, u_int, u_int); int tty_open(struct tty *, char **); void tty_close(struct tty *); void tty_free(struct tty *); @@ -1904,9 +1939,9 @@ 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); +void status_update_saved(struct session *); int status_at_line(struct client *); -u_int status_line_size(struct session *); +u_int status_line_size(struct client *); struct window *status_get_window_at(struct client *, u_int); int status_redraw(struct client *); void printflike(2, 3) status_message_set(struct client *, const char *, ...); @@ -1922,6 +1957,9 @@ void status_prompt_load_history(void); void status_prompt_save_history(void); /* resize.c */ +void resize_window(struct window *, u_int, u_int); +void default_window_size(struct session *, struct window *, u_int *, + u_int *, int); void recalculate_sizes(void); /* input.c */ @@ -1989,10 +2027,10 @@ void grid_view_scroll_region_up(struct grid *, u_int, u_int, u_int); void grid_view_scroll_region_down(struct grid *, u_int, u_int, u_int); void grid_view_insert_lines(struct grid *, u_int, u_int, u_int); void grid_view_insert_lines_region(struct grid *, u_int, u_int, u_int, - u_int); + u_int); void grid_view_delete_lines(struct grid *, u_int, u_int, u_int); void grid_view_delete_lines_region(struct grid *, u_int, u_int, u_int, - u_int); + u_int); void grid_view_insert_cells(struct grid *, u_int, u_int, u_int, u_int); void grid_view_delete_cells(struct grid *, u_int, u_int, u_int, u_int); char *grid_view_string_cells(struct grid *, u_int, u_int, u_int); @@ -2180,7 +2218,7 @@ void layout_set_size(struct layout_cell *, u_int, u_int, u_int, void layout_make_leaf(struct layout_cell *, struct window_pane *); void layout_make_node(struct layout_cell *, enum layout_type); void layout_fix_offsets(struct layout_cell *); -void layout_fix_panes(struct window *, u_int, u_int); +void layout_fix_panes(struct window *); void layout_resize_adjust(struct window *, struct layout_cell *, enum layout_type, int); void layout_init(struct window *, struct window_pane *); @@ -2296,7 +2334,7 @@ struct session *session_find_by_id_str(const char *); struct session *session_find_by_id(u_int); struct session *session_create(const char *, const char *, int, char **, const char *, const char *, struct environ *, - struct termios *, int, u_int, u_int, char **); + struct options *, struct termios *, int, char **); void session_destroy(struct session *, const char *); void session_add_ref(struct session *, const char *); void session_remove_ref(struct session *, const char *); diff --git a/tty.c b/tty.c index 049ea0172b..7cc129e5f6 100644 --- a/tty.c +++ b/tty.c @@ -64,6 +64,7 @@ static void tty_redraw_region(struct tty *, const struct tty_ctx *); static void tty_emulate_repeat(struct tty *, enum tty_code_code, enum tty_code_code, u_int); static void tty_repeat_space(struct tty *, u_int); +static void tty_draw_pane(struct tty *, const struct tty_ctx *, u_int); static void tty_cell(struct tty *, const struct grid_cell *, const struct window_pane *); static void tty_default_colours(struct grid_cell *, @@ -698,19 +699,127 @@ tty_repeat_space(struct tty *tty, u_int n) tty_putn(tty, s, n, n); } -/* How many lines are taken up by the status line on this client? */ -u_int -tty_status_lines(struct client *c) +/* Is this window bigger than the terminal? */ +int +tty_window_bigger(struct tty *tty) { - u_int lines; + struct client *c = tty->client; + struct window *w = c->session->curw->window; - if (c->flags & CLIENT_STATUSOFF) - lines = 0; - else - lines = status_line_size(c->session); - if (c->message_string != NULL || c->prompt_string != NULL) - lines = (lines == 0) ? 1 : lines; - return (lines); + return (tty->sx < w->sx || tty->sy - status_line_size(c) < w->sy); +} + +/* What offset should this window be drawn at? */ +int +tty_window_offset(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) +{ + *ox = tty->oox; + *oy = tty->ooy; + *sx = tty->osx; + *sy = tty->osy; + + return (tty->oflag); +} + +/* What offset should this window be drawn at? */ +static int +tty_window_offset1(struct tty *tty, u_int *ox, u_int *oy, u_int *sx, u_int *sy) +{ + struct client *c = tty->client; + struct window *w = c->session->curw->window; + struct window_pane *wp = w->active; + u_int cx, cy, lines; + + lines = status_line_size(c); + + if (tty->sx >= w->sx && tty->sy - lines >= w->sy) { + *ox = 0; + *oy = 0; + *sx = w->sx; + *sy = w->sy; + + c->pan_window = NULL; + return (0); + } + + *sx = tty->sx; + *sy = tty->sy - lines; + + if (c->pan_window == w) { + if (*sx >= w->sx) + c->pan_ox = 0; + else if (c->pan_ox + *sx > w->sx) + c->pan_ox = w->sx - *sx; + *ox = c->pan_ox; + if (*sy >= w->sy) + c->pan_oy = 0; + else if (c->pan_oy + *sy > w->sy) + c->pan_oy = w->sy - *sy; + *oy = c->pan_oy; + return (1); + } + + if (~wp->screen->mode & MODE_CURSOR) { + *ox = 0; + *oy = 0; + } else { + cx = wp->xoff + wp->screen->cx; + cy = wp->yoff + wp->screen->cy; + + if (cx < *sx) + *ox = 0; + else if (cx > w->sx - *sx) + *ox = w->sx - *sx; + else + *ox = cx - *sx / 2; + + if (cy < *sy) + *oy = 0; + else if (cy > w->sy - *sy) + *oy = w->sy - *sy; + else + *oy = cy - *sy / 2; + } + + c->pan_window = NULL; + return (1); +} + +/* Update stored offsets for a window and redraw if necessary. */ +void +tty_update_window_offset(struct window *w) +{ + struct client *c; + + TAILQ_FOREACH(c, &clients, entry) { + if (c->session != NULL && c->session->curw->window == w) + tty_update_client_offset(c); + } +} + +/* Update stored offsets for a client and redraw if necessary. */ +void +tty_update_client_offset(struct client *c) +{ + u_int ox, oy, sx, sy; + + c->tty.oflag = tty_window_offset1(&c->tty, &ox, &oy, &sx, &sy); + if (ox == c->tty.oox && + oy == c->tty.ooy && + sx == c->tty.osx && + sy == c->tty.osy) + return; + + log_debug ("%s: %s offset has changed (%u,%u %ux%u -> %u,%u %ux%u)", + __func__, c->name, c->tty.oox, c->tty.ooy, c->tty.osx, c->tty.osy, + ox, oy, sx, sy); + + c->tty.oox = ox; + c->tty.ooy = oy; + c->tty.osx = sx; + c->tty.osy = sy; + + c->flags |= (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS); } /* @@ -770,18 +879,82 @@ tty_redraw_region(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy < ctx->orupper || ctx->ocy > ctx->orlower) { for (i = ctx->ocy; i < screen_size_y(s); i++) - tty_draw_pane(tty, wp, i, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, i); } else { for (i = ctx->orupper; i <= ctx->orlower; i++) - tty_draw_pane(tty, wp, i, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, i); } } +/* Is this position visible in the pane? */ +static int +tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int ny) +{ + u_int xoff = ctx->xoff + px, yoff = ctx->yoff + py, lines; + + if (!ctx->bigger) + return (1); + + if (status_at_line(tty->client) == 0) + lines = status_line_size(tty->client); + else + lines = 0; + + if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || + yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { + return (0); + } + return (1); +} + +/* Clamp line position to visible part of pane. */ +static int +tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int *i, u_int *x, u_int *rx, u_int *ry) +{ + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px; + + if (!tty_is_visible(tty, ctx, px, py, nx, 1)) + return (0); + *ry = ctx->yoff + py - ctx->oy; + + if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { + /* All visible. */ + *i = 0; + *x = ctx->xoff + px - ctx->ox; + *rx = nx; + } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + *i = ctx->ox; + *x = 0; + *rx = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + *i = ctx->ox - (ctx->xoff + px); + *x = 0; + *rx = nx - *i; + } else { + /* Right not visible. */ + *i = 0; + *x = (ctx->xoff + px) - ctx->ox; + *rx = ctx->sx - *x; + } + if (*rx > nx) + fatalx("%s: x too big, %u > %u", __func__, *rx, nx); + + return (1); +} + +/* Clear a line. */ static void tty_clear_line(struct tty *tty, const struct window_pane *wp, u_int py, u_int px, u_int nx, u_int bg) { - log_debug("%s: %u at %u,%u", __func__, nx, px, py); + struct client *c = tty->client; + + log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py); /* Nothing to clear. */ if (nx == 0) @@ -816,14 +989,93 @@ tty_clear_line(struct tty *tty, const struct window_pane *wp, u_int py, tty_repeat_space(tty, nx); } +/* Clear a line, adjusting to visible part of pane. */ +static void +tty_clear_pane_line(struct tty *tty, const struct tty_ctx *ctx, u_int py, + u_int px, u_int nx, u_int bg) +{ + struct client *c = tty->client; + u_int i, x, rx, ry; + + log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py); + + if (tty_clamp_line(tty, ctx, px, py, nx, &i, &x, &rx, &ry)) + tty_clear_line(tty, ctx->wp, ry, x, rx, bg); +} + +/* Clamp area position to visible part of pane. */ +static int +tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, + u_int nx, u_int ny, u_int *i, u_int *j, u_int *x, u_int *y, u_int *rx, + u_int *ry) +{ + struct window_pane *wp = ctx->wp; + u_int xoff = wp->xoff + px, yoff = wp->yoff + py; + + if (!tty_is_visible(tty, ctx, px, py, nx, ny)) + return (0); + + if (xoff >= ctx->ox && xoff + nx <= ctx->ox + ctx->sx) { + /* All visible. */ + *i = 0; + *x = ctx->xoff + px - ctx->ox; + *rx = nx; + } else if (xoff < ctx->ox && xoff + nx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + *i = ctx->ox; + *x = 0; + *rx = ctx->sx; + } else if (xoff < ctx->ox) { + /* Left not visible. */ + *i = ctx->ox - (ctx->xoff + px); + *x = 0; + *rx = nx - *i; + } else { + /* Right not visible. */ + *i = 0; + *x = (ctx->xoff + px) - ctx->ox; + *rx = ctx->sx - *x; + } + if (*rx > nx) + fatalx("%s: x too big, %u > %u", __func__, *rx, nx); + + if (yoff >= ctx->oy && yoff + ny <= ctx->oy + ctx->sy) { + /* All visible. */ + *j = 0; + *y = ctx->yoff + py - ctx->oy; + *ry = ny; + } else if (yoff < ctx->oy && yoff + ny > ctx->oy + ctx->sy) { + /* Both left and right not visible. */ + *j = ctx->oy; + *y = 0; + *ry = ctx->sy; + } else if (yoff < ctx->oy) { + /* Left not visible. */ + *j = ctx->oy - (ctx->yoff + py); + *y = 0; + *ry = ny - *j; + } else { + /* Right not visible. */ + *j = 0; + *y = (ctx->yoff + py) - ctx->oy; + *ry = ctx->sy - *y; + } + if (*ry > ny) + fatalx("%s: y too big, %u > %u", __func__, *ry, ny); + + return (1); +} + +/* Clear an area, adjusting to visible part of pane. */ static void tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, u_int ny, u_int px, u_int nx, u_int bg) { - u_int yy; - char tmp[64]; + struct client *c = tty->client; + u_int yy; + char tmp[64]; - log_debug("%s: %u,%u at %u,%u", __func__, nx, ny, px, py); + log_debug("%s: %s, %u,%u at %u,%u", __func__, c->name, nx, ny, px, py); /* Nothing to clear. */ if (nx == 0 || ny == 0) @@ -886,11 +1138,32 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, tty_clear_line(tty, wp, yy, px, nx, bg); } -void -tty_draw_pane(struct tty *tty, const struct window_pane *wp, u_int py, u_int ox, - u_int oy) +/* Clear an area in a pane. */ +static void +tty_clear_pane_area(struct tty *tty, const struct tty_ctx *ctx, u_int py, + u_int ny, u_int px, u_int nx, u_int bg) { - tty_draw_line(tty, wp, wp->screen, py, ox, oy); + u_int i, j, x, y, rx, ry; + + if (tty_clamp_area(tty, ctx, px, py, nx, ny, &i, &j, &x, &y, &rx, &ry)) + tty_clear_area(tty, ctx->wp, y, ry, x, rx, bg); +} + +static void +tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py) +{ + struct window_pane *wp = ctx->wp; + struct screen *s = wp->screen; + u_int nx = screen_size_x(s), i, x, rx, ry; + + log_debug("%s: %s %u %d", __func__, tty->client->name, py, ctx->bigger); + + if (!ctx->bigger) { + tty_draw_line(tty, wp, s, 0, py, nx, ctx->xoff, ctx->yoff + py); + return; + } + if (tty_clamp_line(tty, ctx, 0, py, nx, &i, &x, &rx, &ry)) + tty_draw_line(tty, wp, s, i, py, rx, x, ry); } static const struct grid_cell * @@ -919,17 +1192,27 @@ tty_check_codeset(struct tty *tty, const struct grid_cell *gc) void tty_draw_line(struct tty *tty, const struct window_pane *wp, - struct screen *s, u_int py, u_int ox, u_int oy) + struct screen *s, u_int px, u_int py, u_int nx, u_int atx, u_int aty) { struct grid *gd = s->grid; struct grid_cell gc, last; const struct grid_cell *gcp; - u_int i, j, ux, sx, nx, width; + struct grid_line *gl; + u_int i, j, ux, sx, width; int flags, cleared = 0; char buf[512]; size_t len, old_len; u_int cellsize; + log_debug("%s: px=%u py=%u nx=%u atx=%u aty=%u", __func__, + px, py, nx, atx, aty); + + /* + * py is the line in the screen to draw. + * px is the start x and nx is the width to draw. + * atx,aty is the line on the terminal to draw it. + */ + flags = (tty->flags & TTY_NOCURSOR); tty->flags |= TTY_NOCURSOR; tty_update_mode(tty, tty->mode, s); @@ -942,41 +1225,48 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, * there may be empty background cells after it (from BCE). */ sx = screen_size_x(s); - + if (nx > sx) + nx = sx; cellsize = grid_get_line(gd, gd->hsize + py)->cellsize; if (sx > cellsize) sx = cellsize; if (sx > tty->sx) sx = tty->sx; + if (sx > nx) + sx = nx; ux = 0; + if (py == 0) + gl = NULL; + else + gl = grid_get_line(gd, gd->hsize + py - 1); if (wp == NULL || - py == 0 || - (~grid_get_line(gd, gd->hsize + py - 1)->flags & GRID_LINE_WRAPPED) || - ox != 0 || + gl == NULL || + (~gl->flags & GRID_LINE_WRAPPED) || + atx != 0 || tty->cx < tty->sx || - screen_size_x(s) < tty->sx) { - if (screen_size_x(s) < tty->sx && - ox == 0 && - sx != screen_size_x(s) && + nx < tty->sx) { + if (nx < tty->sx && + atx == 0 && + px + sx != nx && tty_term_has(tty->term, TTYC_EL1) && !tty_fake_bce(tty, wp, 8)) { tty_default_attributes(tty, wp, 8); - tty_cursor(tty, screen_size_x(s) - 1, oy + py); + tty_cursor(tty, nx - 1, aty); tty_putcode(tty, TTYC_EL1); cleared = 1; } - if (sx != 0) - tty_cursor(tty, ox, oy + py); + if (px + sx != 0) + tty_cursor(tty, atx, aty); } else - log_debug("%s: wrapped line %u", __func__, oy + py); + log_debug("%s: wrapped line %u", __func__, aty); memcpy(&last, &grid_default_cell, sizeof last); len = 0; width = 0; for (i = 0; i < sx; i++) { - grid_view_get_cell(gd, i, py, &gc); + grid_view_get_cell(gd, px + i, py, &gc); gcp = tty_check_codeset(tty, &gc); if (len != 0 && ((gcp->attr & GRID_ATTR_CHARSET) || @@ -984,7 +1274,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, gcp->attr != last.attr || gcp->fg != last.fg || gcp->bg != last.bg || - ux + width + gcp->data.width >= screen_size_x(s) || + ux + width + gcp->data.width >= nx || (sizeof buf) - len < gcp->data.size)) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); @@ -998,10 +1288,10 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, screen_select_cell(s, &last, gcp); else memcpy(&last, gcp, sizeof last); - if (ux + gcp->data.width > screen_size_x(s)) { + if (ux + gcp->data.width > nx) { tty_attributes(tty, &last, wp); for (j = 0; j < gcp->data.width; j++) { - if (ux + j > screen_size_x(s)) + if (ux + j > nx) break; tty_putc(tty, ' '); ux++; @@ -1034,10 +1324,9 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } } - if (!cleared && ux < screen_size_x(s)) { - nx = screen_size_x(s) - ux; + if (!cleared && ux < nx) { tty_default_attributes(tty, wp, 8); - tty_clear_line(tty, wp, oy + py, ox + ux, nx, 8); + tty_clear_line(tty, wp, aty, atx + ux, nx - ux, 8); } tty->flags = (tty->flags & ~TTY_NOCURSOR) | flags; @@ -1055,6 +1344,8 @@ tty_client_ready(struct client *c, struct window_pane *wp) return (0); if (c->session->curw->window != wp->window) return (0); + if (wp->layout_cell == NULL) + return (0); return (1); } @@ -1065,21 +1356,23 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), struct window_pane *wp = ctx->wp; struct client *c; - /* wp can be NULL if updating the screen but not the terminal. */ if (wp == NULL) return; - - if ((wp->flags & (PANE_REDRAW|PANE_DROP)) || !window_pane_visible(wp)) + if (wp->flags & (PANE_REDRAW|PANE_DROP)) return; TAILQ_FOREACH(c, &clients, entry) { if (!tty_client_ready(c, wp)) continue; + ctx->bigger = tty_window_offset(&c->tty, &ctx->ox, &ctx->oy, + &ctx->sx, &ctx->sy); + ctx->xoff = wp->xoff; ctx->yoff = wp->yoff; + if (status_at_line(c) == 0) - ctx->yoff += status_line_size(c->session); + ctx->yoff += status_line_size(c); cmdfn(&c->tty, ctx); } @@ -1090,11 +1383,12 @@ tty_cmd_insertcharacter(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, ctx->bg) || (!tty_term_has(tty->term, TTYC_ICH) && !tty_term_has(tty->term, TTYC_ICH1))) { - tty_draw_pane(tty, wp, ctx->ocy, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, ctx->ocy); return; } @@ -1110,11 +1404,12 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, ctx->bg) || (!tty_term_has(tty->term, TTYC_DCH) && !tty_term_has(tty->term, TTYC_DCH1))) { - tty_draw_pane(tty, wp, ctx->ocy, ctx->xoff, ctx->yoff); + tty_draw_pane(tty, ctx, ctx->ocy); return; } @@ -1128,6 +1423,11 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) { + if (ctx->bigger) { + tty_draw_pane(tty, ctx, ctx->ocy); + return; + } + tty_default_attributes(tty, ctx->wp, ctx->bg); tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); @@ -1142,7 +1442,8 @@ tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_insertline(struct tty *tty, const struct tty_ctx *ctx) { - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_IL1) || @@ -1165,7 +1466,8 @@ tty_cmd_insertline(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_deleteline(struct tty *tty, const struct tty_ctx *ctx) { - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, ctx->wp, ctx->bg) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_DL1) || @@ -1189,35 +1491,34 @@ void tty_cmd_clearline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int nx, py = ctx->yoff + ctx->ocy; + u_int nx; tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen); - tty_clear_line(tty, wp, py, ctx->xoff, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, 0, nx, ctx->bg); } void tty_cmd_clearendofline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int nx, py = ctx->yoff + ctx->ocy; + u_int nx; tty_default_attributes(tty, wp, ctx->bg); nx = screen_size_x(wp->screen) - ctx->ocx; - tty_clear_line(tty, wp, py, ctx->xoff + ctx->ocx, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, ctx->ocx, nx, ctx->bg); } void tty_cmd_clearstartofline(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int py = ctx->yoff + ctx->ocy; tty_default_attributes(tty, wp, ctx->bg); - tty_clear_line(tty, wp, py, ctx->xoff, ctx->ocx + 1, ctx->bg); + tty_clear_pane_line(tty, ctx, ctx->ocy, 0, ctx->ocx + 1, ctx->bg); } void @@ -1228,7 +1529,8 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy != ctx->orupper) return; - if (!tty_pane_full_width(tty, ctx) || + if (ctx->bigger || + !tty_pane_full_width(tty, ctx) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || !tty_term_has(tty->term, TTYC_RI) || @@ -1255,7 +1557,8 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) if (ctx->ocy != ctx->orlower) return; - if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || wp->sx == 1 || @@ -1293,7 +1596,8 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) struct window_pane *wp = ctx->wp; u_int i; - if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || wp->sx == 1 || @@ -1331,18 +1635,18 @@ tty_cmd_clearendofscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff + ctx->ocy + 1; + py = ctx->ocy + 1; ny = screen_size_y(wp->screen) - ctx->ocy - 1; - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); - px = ctx->xoff + ctx->ocx; + px = ctx->ocx; nx = screen_size_x(wp->screen) - ctx->ocx; - py = ctx->yoff + ctx->ocy; + py = ctx->ocy; - tty_clear_line(tty, wp, py, px, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, px, nx, ctx->bg); } void @@ -1356,18 +1660,18 @@ tty_cmd_clearstartofscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff; + py = 0; ny = ctx->ocy - 1; - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); - px = ctx->xoff; + px = 0; nx = ctx->ocx + 1; - py = ctx->yoff + ctx->ocy; + py = ctx->ocy; - tty_clear_line(tty, wp, py, px, nx, ctx->bg); + tty_clear_pane_line(tty, ctx, py, px, nx, ctx->bg); } void @@ -1381,12 +1685,12 @@ tty_cmd_clearscreen(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, 0, screen_size_y(wp->screen) - 1); tty_margin_off(tty); - px = ctx->xoff; + px = 0; nx = screen_size_x(wp->screen); - py = ctx->yoff; + py = 0; ny = screen_size_y(wp->screen); - tty_clear_area(tty, wp, py, ny, px, nx, ctx->bg); + tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); } void @@ -1396,6 +1700,11 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) struct screen *s = wp->screen; u_int i, j; + if (ctx->bigger) { + wp->flags |= PANE_REDRAW; + return; + } + tty_attributes(tty, &grid_default_cell, wp); tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); @@ -1411,7 +1720,10 @@ tty_cmd_alignmenttest(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) { - if (ctx->xoff + ctx->ocx > tty->sx - 1 && + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, 1, 1)) + return; + + if (ctx->xoff + ctx->ocx - ctx->ox > tty->sx - 1 && ctx->ocy == ctx->orlower && tty_pane_full_width(tty, ctx)) tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); @@ -1425,6 +1737,27 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx) void tty_cmd_cells(struct tty *tty, const struct tty_ctx *ctx) { + struct window_pane *wp = ctx->wp; + + if (!tty_is_visible(tty, ctx, ctx->ocx, ctx->ocy, ctx->num, 1)) + return; + + if (ctx->bigger && + (ctx->xoff + ctx->ocx < ctx->ox || + ctx->xoff + ctx->ocx + ctx->num > ctx->ox + ctx->sx)) { + if (!ctx->wrapped || + !tty_pane_full_width(tty, ctx) || + (tty->term->flags & TERM_EARLYWRAP) || + ctx->xoff + ctx->ocx != 0 || + ctx->yoff + ctx->ocy != tty->cy + 1 || + tty->cx < tty->sx || + tty->cy == tty->rlower) + tty_draw_pane(tty, ctx, ctx->ocy); + else + wp->flags |= PANE_REDRAW; + return; + } + tty_margin_off(tty); tty_cursor_pane_unless_wrap(tty, ctx, ctx->ocx, ctx->ocy); @@ -1543,7 +1876,8 @@ static void tty_region_pane(struct tty *tty, const struct tty_ctx *ctx, u_int rupper, u_int rlower) { - tty_region(tty, ctx->yoff + rupper, ctx->yoff + rlower); + tty_region(tty, ctx->yoff + rupper - ctx->oy, + ctx->yoff + rlower - ctx->oy); } /* Set region at absolute position. */ @@ -1582,7 +1916,8 @@ tty_margin_off(struct tty *tty) static void tty_margin_pane(struct tty *tty, const struct tty_ctx *ctx) { - tty_margin(tty, ctx->xoff, ctx->xoff + ctx->wp->sx - 1); + tty_margin(tty, ctx->xoff - ctx->ox, + ctx->xoff + ctx->wp->sx - 1 - ctx->ox); } /* Set margin at absolute position. */ @@ -1633,7 +1968,7 @@ tty_cursor_pane_unless_wrap(struct tty *tty, const struct tty_ctx *ctx, static void tty_cursor_pane(struct tty *tty, const struct tty_ctx *ctx, u_int cx, u_int cy) { - tty_cursor(tty, ctx->xoff + cx, ctx->yoff + cy); + tty_cursor(tty, ctx->xoff + cx - ctx->ox, ctx->yoff + cy - ctx->oy); } /* Move cursor to absolute position. */ diff --git a/window.c b/window.c index 019718f26d..6e76b480df 100644 --- a/window.c +++ b/window.c @@ -380,6 +380,8 @@ window_destroy(struct window *w) if (event_initialized(&w->alerts_timer)) evtimer_del(&w->alerts_timer); + if (event_initialized(&w->offset_timer)) + event_del(&w->offset_timer); options_free(w->options); @@ -458,17 +460,9 @@ window_set_active_pane(struct window *w, struct window_pane *wp) return (0); w->last = w->active; w->active = wp; - while (!window_pane_visible(w->active)) { - w->active = TAILQ_PREV(w->active, window_panes, entry); - if (w->active == NULL) - w->active = TAILQ_LAST(&w->panes, window_panes); - if (w->active == wp) { - notify_window("window-pane-changed", w); - return (1); - } - } w->active->active_point = next_active_point++; w->active->flags |= PANE_CHANGED; + tty_update_window_offset(w); notify_window("window-pane-changed", w); return (1); } @@ -509,8 +503,8 @@ window_get_active_at(struct window *w, u_int x, u_int y) struct window_pane *wp; TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; + if (!window_pane_visible(wp)) + continue; if (x < wp->xoff || x > wp->xoff + wp->sx) continue; if (y < wp->yoff || y > wp->yoff + wp->sy) @@ -563,9 +557,6 @@ window_zoom(struct window_pane *wp) if (w->flags & WINDOW_ZOOMED) return (-1); - if (!window_pane_visible(wp)) - return (-1); - if (window_count_panes(w) == 1) return (-1); @@ -602,7 +593,7 @@ window_unzoom(struct window *w) wp->layout_cell = wp->saved_layout_cell; wp->saved_layout_cell = NULL; } - layout_fix_panes(w, w->sx, w->sy); + layout_fix_panes(w); notify_window("window-layout-changed", w); return (0); @@ -1284,11 +1275,11 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, return; if (options_get_number(wp->window->options, "synchronize-panes")) { TAILQ_FOREACH(wp2, &wp->window->panes, entry) { - if (wp2 == wp || wp2->mode != NULL) - continue; - if (wp2->fd == -1 || wp2->flags & PANE_INPUTOFF) - continue; - if (window_pane_visible(wp2)) + if (wp2 != wp && + wp2->mode == NULL && + wp2->fd != -1 && + (~wp2->flags & PANE_INPUTOFF) && + window_pane_visible(wp2)) input_key(wp2, key, NULL); } } @@ -1297,16 +1288,9 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, int window_pane_visible(struct window_pane *wp) { - struct window *w = wp->window; - - if (wp->layout_cell == NULL) - return (0); - - if (wp->xoff >= w->sx || wp->yoff >= w->sy) - return (0); - if (wp->xoff + wp->sx > w->sx || wp->yoff + wp->sy > w->sy) - return (0); - return (1); + if (~wp->window->flags & WINDOW_ZOOMED) + return (1); + return (wp == wp->window->active); } u_int @@ -1363,7 +1347,7 @@ window_pane_find_up(struct window_pane *wp) u_int edge, left, right, end, size; int status, found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); status = options_get_number(wp->window->options, "pane-border-status"); @@ -1378,7 +1362,7 @@ window_pane_find_up(struct window_pane *wp) right = wp->xoff + wp->sx; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->yoff + next->sy + 1 != edge) continue; @@ -1410,7 +1394,7 @@ window_pane_find_down(struct window_pane *wp) u_int edge, left, right, end, size; int status, found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); status = options_get_number(wp->window->options, "pane-border-status"); @@ -1425,7 +1409,7 @@ window_pane_find_down(struct window_pane *wp) right = wp->xoff + wp->sx; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->yoff != edge) continue; @@ -1457,7 +1441,7 @@ window_pane_find_left(struct window_pane *wp) u_int edge, top, bottom, end, size; int found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); list = NULL; @@ -1471,7 +1455,7 @@ window_pane_find_left(struct window_pane *wp) bottom = wp->yoff + wp->sy; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->xoff + next->sx + 1 != edge) continue; @@ -1503,7 +1487,7 @@ window_pane_find_right(struct window_pane *wp) u_int edge, top, bottom, end, size; int found; - if (wp == NULL || !window_pane_visible(wp)) + if (wp == NULL) return (NULL); list = NULL; @@ -1517,7 +1501,7 @@ window_pane_find_right(struct window_pane *wp) bottom = wp->yoff + wp->sy; TAILQ_FOREACH(next, &wp->window->panes, entry) { - if (next == wp || !window_pane_visible(next)) + if (next == wp) continue; if (next->xoff != edge) continue; From 9feb35b7c4007966bf19cdb57b904e373da2d247 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Oct 2018 13:03:45 +0000 Subject: [PATCH 257/836] Document new refresh-client flags. --- tmux.1 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 1111a0e49d..76074f9766 100644 --- a/tmux.1 +++ b/tmux.1 @@ -917,9 +917,10 @@ is used, the .Ic update-environment option will not be applied. .It Xo Ic refresh-client -.Op Fl lS +.Op Fl cDlLRSU .Op Fl C Ar width,height .Op Fl t Ar target-client +.Op Ar adjustment .Xc .D1 (alias: Ic refresh ) Refresh the current client if bound to a key, or a single client if one is given @@ -935,6 +936,21 @@ sets the width and height of a control client. requests the clipboard from the client using the .Xr xterm 1 escape sequence and stores it in a new paste buffer. +.Pp +.Fl L , +.Fl R , +.Fl U +and +.Fl D +move the visible portion of the window left, right, up or down +by +.Ar adjustment , +if the window is larger than the client. +.Fl c +resets so that the position follows the cursor. +See the +.Ic window-size +option. .It Xo Ic rename-session .Op Fl t Ar target-session .Ar new-name From bc6211cca5b06714ea2e57f247cd98b509a441c1 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 19 Oct 2018 08:35:23 +0100 Subject: [PATCH 258/836] Instead of "master" for the version number, use "next-X.X". It is more useful to include the next version number. --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 5b4bc4a2fe..8cd33b6c7c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT(tmux, master) +AC_INIT([tmux], next-2.9) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) @@ -35,7 +35,7 @@ AC_USE_SYSTEM_EXTENSIONS test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc # Is this --enable-debug? -test "x$VERSION" = xmaster && enable_debug=yes +case "x$VERSION" in xnext*) enable_debug=yes;; esac AC_ARG_ENABLE( debug, AC_HELP_STRING(--enable-debug, enable debug build flags), From c234032fcf94ebc6d1926922bfadccd544ed4f9c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 19 Oct 2018 08:37:31 +0100 Subject: [PATCH 259/836] Do not use master here. --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index d233beaef3..cbbaeb0337 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.8 to master +CHANGES FROM 2.8 to X.X * Do not move the cursor in copy mode when the mouse wheel is used. From 2808f8261cb132e2faf6fe43cd8a5c7ff66b4c12 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 19 Oct 2018 08:38:12 +0100 Subject: [PATCH 260/836] Tweak wording. --- CONTRIBUTING | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING b/CONTRIBUTING index 467c5c3a87..a804ba41eb 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -18,7 +18,7 @@ This should include at least the output of: $ uname -sp && tmux -V && echo $TERM Please do not report bugs (crashes, incorrect behaviour) without reproducing on -a tmux built from Git master. +a tmux built from the latest code in Git. Note that TERM inside tmux must be a variant of screen or tmux (for example: screen or screen-256color, tmux or tmux-256color). Please ensure this is the From fc41bf46acaccb3da8d0588b7e1bbcfebc6442f6 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Oct 2018 15:13:38 +0000 Subject: [PATCH 261/836] Add a "terminal" colour which can be used instead of "default" in style options for the terminal default colour, bypassing any inheritance from other options. Prompted by a discussion with abieber@. --- colour.c | 9 +++++++-- grid.c | 16 +++++++++------- options-table.c | 2 +- screen-write.c | 4 ++-- tmux.1 | 11 ++++++++--- tmux.h | 3 +++ tty.c | 38 +++++++++++++++++++++----------------- 7 files changed, 51 insertions(+), 32 deletions(-) diff --git a/colour.c b/colour.c index 5be6044522..a0274dd370 100644 --- a/colour.c +++ b/colour.c @@ -141,6 +141,8 @@ colour_tostring(int c) return ("white"); case 8: return ("default"); + case 9: + return ("terminal"); case 90: return ("brightblack"); case 91: @@ -188,6 +190,11 @@ colour_fromstring(const char *s) return (n | COLOUR_FLAG_256); } + if (strcasecmp(s, "default") == 0) + return (8); + if (strcasecmp(s, "terminal") == 0) + return (9); + if (strcasecmp(s, "black") == 0 || strcmp(s, "0") == 0) return (0); if (strcasecmp(s, "red") == 0 || strcmp(s, "1") == 0) @@ -204,8 +211,6 @@ colour_fromstring(const char *s) return (6); if (strcasecmp(s, "white") == 0 || strcmp(s, "7") == 0) return (7); - if (strcasecmp(s, "default") == 0 || strcmp(s, "8") == 0) - return (8); if (strcasecmp(s, "brightblack") == 0 || strcmp(s, "90") == 0) return (90); if (strcasecmp(s, "brightred") == 0 || strcmp(s, "91") == 0) diff --git a/grid.c b/grid.c index a7c9a67e9f..7329f855e7 100644 --- a/grid.c +++ b/grid.c @@ -418,7 +418,7 @@ static void grid_empty_line(struct grid *gd, u_int py, u_int bg) { memset(&gd->linedata[py], 0, sizeof gd->linedata[py]); - if (bg != 8) + if (!COLOUR_DEFAULT(bg)) grid_expand_line(gd, py, gd->sx, bg); } @@ -524,7 +524,8 @@ grid_set_cells(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc, void grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) { - u_int xx, yy; + struct grid_line *gl; + u_int xx, yy; if (nx == 0 || ny == 0) return; @@ -540,12 +541,13 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) return; for (yy = py; yy < py + ny; yy++) { - if (px + nx >= gd->sx && px < gd->linedata[yy].cellused) - gd->linedata[yy].cellused = px; - if (px > gd->linedata[yy].cellsize && bg == 8) + gl = &gd->linedata[yy]; + if (px + nx >= gd->sx && px < gl->cellused) + gl->cellused = px; + if (px > gl->cellsize && COLOUR_DEFAULT(bg)) continue; - if (px + nx >= gd->linedata[yy].cellsize && bg == 8) { - gd->linedata[yy].cellsize = px; + if (px + nx >= gl->cellsize && COLOUR_DEFAULT(bg)) { + gl->cellsize = px; continue; } grid_expand_line(gd, yy, px + nx, 8); /* default bg first */ diff --git a/options-table.c b/options-table.c index 347c23dedc..73d22b0ad1 100644 --- a/options-table.c +++ b/options-table.c @@ -771,7 +771,7 @@ const struct options_table_entry options_table[] = { .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_WINDOW, .choices = options_table_window_size_list, - .default_num = WINDOW_SIZE_LARGEST + .default_num = WINDOW_SIZE_SMALLEST }, { .name = "window-style", diff --git a/screen-write.c b/screen-write.c index 4f5bee6163..e583c72d05 100644 --- a/screen-write.c +++ b/screen-write.c @@ -965,7 +965,7 @@ screen_write_clearline(struct screen_write_ctx *ctx, u_int bg) u_int sx = screen_size_x(s); gl = grid_get_line(s->grid, s->grid->hsize + s->cy); - if (gl->cellsize == 0 && bg == 8) + if (gl->cellsize == 0 && COLOUR_DEFAULT(bg)) return; screen_write_initctx(ctx, &ttyctx); @@ -988,7 +988,7 @@ screen_write_clearendofline(struct screen_write_ctx *ctx, u_int bg) u_int sx = screen_size_x(s); gl = grid_get_line(s->grid, s->grid->hsize + s->cy); - if (s->cx > sx - 1 || (s->cx >= gl->cellsize && bg == 8)) + if (s->cx > sx - 1 || (s->cx >= gl->cellsize && COLOUR_DEFAULT(bg))) return; screen_write_initctx(ctx, &ttyctx); diff --git a/tmux.1 b/tmux.1 index 76074f9766..eb1c68077b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2750,7 +2750,7 @@ Set status line message command style, where .Ar style is a comma-separated list of characteristics to be specified. .Pp -These may be +The style format is shared by many options and may be: .Ql bg=colour to set the background colour, .Ql fg=colour @@ -2773,8 +2773,13 @@ and so on), to .Ic colour255 from the 256-colour set, -.Ic default , -or a hexadecimal RGB string such as +.Ic default +for the default colour (inherited from another option in the case of some options, for example +.Ic window-status-style +inherits from +.Ic status-style ) , +.Ic terminal +for the terminal default colour, or a hexadecimal RGB string such as .Ql #ffffff . .Pp The attributes is either diff --git a/tmux.h b/tmux.h index f1727d23aa..8b41a7852b 100644 --- a/tmux.h +++ b/tmux.h @@ -543,6 +543,9 @@ enum utf8_state { #define COLOUR_FLAG_256 0x01000000 #define COLOUR_FLAG_RGB 0x02000000 +/* Special colours. */ +#define COLOUR_DEFAULT(c) ((c) == 8 || (c) == 9) + /* Grid attributes. Anything above 0xff is stored in an extended cell. */ #define GRID_ATTR_BRIGHT 0x1 #define GRID_ATTR_DIM 0x2 diff --git a/tty.c b/tty.c index 7cc129e5f6..6b63aa3bd9 100644 --- a/tty.c +++ b/tty.c @@ -851,7 +851,7 @@ tty_fake_bce(const struct tty *tty, const struct window_pane *wp, u_int bg) if (wp != NULL) tty_default_colours(&gc, wp); - if (bg != 8 || gc.bg != 8) + if (!COLOUR_DEFAULT(bg) || !COLOUR_DEFAULT(gc.bg)) return (1); return (0); } @@ -1098,7 +1098,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, * background colour isn't default (because it doesn't work * after SGR 0). */ - if (tty->term_type == TTY_VT420 && bg != 8) { + if (tty->term_type == TTY_VT420 && COLOUR_DEFAULT(bg)) { xsnprintf(tmp, sizeof tmp, "\033[32;%u;%u;%u;%u$x", py + 1, px + 1, py + ny, px + nx); tty_puts(tty, tmp); @@ -2134,10 +2134,10 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, */ if (!tty_term_has(tty->term, TTYC_SETAB)) { if (gc2.attr & GRID_ATTR_REVERSE) { - if (gc2.fg != 7 && gc2.fg != 8) + if (gc2.fg != 7 && !COLOUR_DEFAULT(gc2.fg)) gc2.attr &= ~GRID_ATTR_REVERSE; } else { - if (gc2.bg != 0 && gc2.bg != 8) + if (gc2.bg != 0 && !COLOUR_DEFAULT(gc2.bg)) gc2.attr |= GRID_ATTR_REVERSE; } } @@ -2212,7 +2212,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) * case if only one is default need to fall onward to set the other * colour. */ - if (gc->fg == 8 || gc->bg == 8) { + if (COLOUR_DEFAULT(gc->fg) || COLOUR_DEFAULT(gc->bg)) { /* * If don't have AX but do have op, send sgr0 (op can't * actually be used because it is sometimes the same as sgr0 @@ -2224,32 +2224,32 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) if (!have_ax && tty_term_has(tty->term, TTYC_OP)) tty_reset(tty); else { - if (gc->fg == 8 && tc->fg != 8) { + if (COLOUR_DEFAULT(gc->fg) && !COLOUR_DEFAULT(tc->fg)) { if (have_ax) tty_puts(tty, "\033[39m"); else if (tc->fg != 7) tty_putcode1(tty, TTYC_SETAF, 7); - tc->fg = 8; + tc->fg = gc->fg; } - if (gc->bg == 8 && tc->bg != 8) { + if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) { if (have_ax) tty_puts(tty, "\033[49m"); else if (tc->bg != 0) tty_putcode1(tty, TTYC_SETAB, 0); - tc->bg = 8; + tc->bg = gc->fg; } } } /* Set the foreground colour. */ - if (gc->fg != 8 && gc->fg != tc->fg) + if (!COLOUR_DEFAULT(gc->fg) && gc->fg != tc->fg) tty_colours_fg(tty, gc); /* * Set the background colour. This must come after the foreground as * tty_colour_fg() can call tty_reset(). */ - if (gc->bg != 8 && gc->bg != tc->bg) + if (!COLOUR_DEFAULT(gc->bg) && gc->bg != tc->bg) tty_colours_bg(tty, gc); } @@ -2515,9 +2515,11 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp) else gc->fg = wgc->fg; - if (gc->fg != 8 && - (c = window_pane_get_palette(wp, gc->fg)) != -1) - gc->fg = c; + if (gc->fg != 8) { + c = window_pane_get_palette(wp, gc->fg); + if (c != -1) + gc->fg = c; + } } if (gc->bg == 8) { @@ -2528,9 +2530,11 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp) else gc->bg = wgc->bg; - if (gc->bg != 8 && - (c = window_pane_get_palette(wp, gc->bg)) != -1) - gc->bg = c; + if (gc->bg != 8) { + c = window_pane_get_palette(wp, gc->bg); + if (c != -1) + gc->bg = c; + } } } From 0cefdff1b6fec594a8f6c3b4a8fdd2342de64373 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 26 Oct 2018 11:36:36 +0100 Subject: [PATCH 262/836] Add to CHANGES. --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index cbbaeb0337..5c0bf03b4f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ CHANGES FROM 2.8 to X.X +* New "terminal" colour allowing options to use the terminal default + colour rather than inheriting the default from a parent option. + * Do not move the cursor in copy mode when the mouse wheel is used. * Use the same working directory rules for jobs as new windows rather From 65dd7345e069753c57f10f34a5efc56339ffbeb0 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 28 Oct 2018 15:34:27 +0000 Subject: [PATCH 263/836] Do not check for a key again without an escape if only \033 is present. --- tty-keys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty-keys.c b/tty-keys.c index a0f608c02c..068c502ff6 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -624,7 +624,7 @@ tty_keys_next(struct tty *tty) * If not a complete key, look for key with an escape prefix (meta * modifier). */ - if (*buf == '\033') { + if (*buf == '\033' && len > 1) { /* Look for a key without the escape. */ n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired); if (n == 0) { /* found */ From d5b92ac37e3b903150237ff319dc6e86517a08b1 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 28 Oct 2018 16:10:02 +0000 Subject: [PATCH 264/836] Do not printf NULL. --- job.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/job.c b/job.c index 37c9c45383..66315bd2ca 100644 --- a/job.c +++ b/job.c @@ -80,7 +80,7 @@ job_run(const char *cmd, struct session *s, const char *cwd, if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, out) != 0) return (NULL); - log_debug("%s: cmd=%s, cwd=%s", __func__, cmd, cwd); + log_debug("%s: cmd=%s, cwd=%s", __func__, cmd, cwd == NULL ? "" : cwd); /* * Do not set TERM during .tmux.conf, it is nice to be able to use From ef904cfef2bbe655cba9a7455adde95814f341f4 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 31 Oct 2018 10:05:47 +0000 Subject: [PATCH 265/836] Reset all flags in screen_write_reset, reported by Benjamin Poirier. --- screen-write.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/screen-write.c b/screen-write.c index e583c72d05..00994e48e6 100644 --- a/screen-write.c +++ b/screen-write.c @@ -144,8 +144,7 @@ screen_write_reset(struct screen_write_ctx *ctx) screen_reset_tabs(s); screen_write_scrollregion(ctx, 0, screen_size_y(s) - 1); - s->mode &= ~(MODE_INSERT|MODE_KCURSOR|MODE_KKEYPAD|MODE_FOCUSON); - s->mode &= ~(ALL_MOUSE_MODES|MODE_MOUSE_UTF8|MODE_MOUSE_SGR); + s->mode = MODE_CURSOR | MODE_WRAP; screen_write_clearscreen(ctx, 8); screen_write_cursormove(ctx, 0, 0); From f9881b3b5de0c5ea8ee70dc95f5a5dd095e37bea Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 6 Nov 2018 15:13:13 +0000 Subject: [PATCH 266/836] Correctly unzoom and redraw panes in switch-client. --- cmd-switch-client.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 6181073dca..3e19346ee5 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -113,8 +113,11 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) if (item->client == NULL) return (CMD_RETURN_NORMAL); if (wl != NULL) { - if (wp != NULL) + server_unzoom_window(wl->window); + if (wp != NULL) { + window_redraw_active_switch(wp->window, wp); window_set_active_pane(wp->window, wp); + } session_set_current(s, wl); cmd_find_from_session(&item->shared->current, s, 0); } From 7339845c01727b209b3b96e5b1d917129b2c8a83 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 7 Nov 2018 07:58:16 +0000 Subject: [PATCH 267/836] There is no reason wait-for has to be restricted to outside tmux. --- cmd-wait-for.c | 4 ++-- tmux.1 | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd-wait-for.c b/cmd-wait-for.c index 396548a7f5..33600edad3 100644 --- a/cmd-wait-for.c +++ b/cmd-wait-for.c @@ -170,7 +170,7 @@ cmd_wait_for_wait(struct cmdq_item *item, const char *name, struct client *c = item->client; struct wait_item *wi; - if (c == NULL || c->session != NULL) { + if (c == NULL) { cmdq_error(item, "not able to wait"); return (CMD_RETURN_ERROR); } @@ -198,7 +198,7 @@ cmd_wait_for_lock(struct cmdq_item *item, const char *name, { struct wait_item *wi; - if (item->client == NULL || item->client->session != NULL) { + if (item->client == NULL) { cmdq_error(item, "not able to lock"); return (CMD_RETURN_ERROR); } diff --git a/tmux.1 b/tmux.1 index eb1c68077b..e3409a967d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4430,8 +4430,6 @@ is used, the channel is locked and any clients that try to lock the same channel are made to wait until the channel is unlocked with .Ic wait-for .Fl U . -This command only works from outside -.Nm . .El .Sh TERMINFO EXTENSIONS .Nm From ff77010f709da6c23475ffb2129f9d60a102218a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 7 Nov 2018 08:00:15 +0000 Subject: [PATCH 268/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 5886eea599..cac3a469cd 100644 --- a/TODO +++ b/TODO @@ -52,6 +52,7 @@ need to be suspended * allow the prefix for automatic buffers to be specified as part of the key binding to allow session buffers or similar (GitHub issue 1501) + * copy-pipe should be synchronous (GitHub issue 1517) - layout stuff * way to tag a layout as a number/name From 0c7f64458fe97f51373775bb0fed01c183bac45b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 7 Nov 2018 08:06:28 +0000 Subject: [PATCH 269/836] If a non-repeating key is used when repeating, it should be treated as an entirely new key press, not checked in root table and ignored if not found. GitHub issue 1513. --- server-client.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server-client.c b/server-client.c index aefe006eb7..3d939163ba 100644 --- a/server-client.c +++ b/server-client.c @@ -1022,6 +1022,7 @@ server_client_handle_key(struct client *c, key_code key) } flags = c->flags; +try_again: /* Log key table. */ if (wp == NULL) log_debug("key table %s (no pane)", table->name); @@ -1030,7 +1031,6 @@ server_client_handle_key(struct client *c, key_code key) if (c->flags & CLIENT_REPEAT) log_debug("currently repeating"); -try_again: /* Try to see if there is a key binding in the current table. */ bd = key_bindings_get(table, key0); if (bd != NULL) { @@ -1041,10 +1041,12 @@ server_client_handle_key(struct client *c, key_code key) */ if ((c->flags & CLIENT_REPEAT) && (~bd->flags & KEY_BINDING_REPEAT)) { + log_debug("found in key table %s (not repeating)", + table->name); server_client_set_key_table(c, NULL); + first = table = c->keytable; c->flags &= ~CLIENT_REPEAT; server_status_client(c); - table = c->keytable; goto table_changed; } log_debug("found in key table %s", table->name); @@ -1094,10 +1096,13 @@ server_client_handle_key(struct client *c, key_code key) log_debug("not found in key table %s", table->name); if (!server_client_is_default_key_table(c, table) || (c->flags & CLIENT_REPEAT)) { + log_debug("trying in root table"); server_client_set_key_table(c, NULL); + table = c->keytable; + if (c->flags & CLIENT_REPEAT) + first = table; c->flags &= ~CLIENT_REPEAT; server_status_client(c); - table = c->keytable; goto table_changed; } From 09aee537632eba2c3fa5fe4559e0073dc4c67d68 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 8 Nov 2018 18:49:19 +0000 Subject: [PATCH 270/836] It isn't possible to specify buffer name to copy mode commands now, so remove the function argument. --- window-copy.c | 54 ++++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/window-copy.c b/window-copy.c index e35e607093..516eb71e01 100644 --- a/window-copy.c +++ b/window-copy.c @@ -69,13 +69,11 @@ static int window_copy_set_selection(struct window_pane *, int); static int window_copy_update_selection(struct window_pane *, int); static void window_copy_synchronize_cursor(struct window_pane *); static void *window_copy_get_selection(struct window_pane *, size_t *); -static void window_copy_copy_buffer(struct window_pane *, const char *, - void *, size_t); +static void window_copy_copy_buffer(struct window_pane *, void *, size_t); static void window_copy_copy_pipe(struct window_pane *, struct session *, - const char *, const char *); -static void window_copy_copy_selection(struct window_pane *, const char *); -static void window_copy_append_selection(struct window_pane *, const char *); +static void window_copy_copy_selection(struct window_pane *); +static void window_copy_append_selection(struct window_pane *); static void window_copy_clear_selection(struct window_pane *); static void window_copy_copy_line(struct window_pane *, char **, size_t *, u_int, u_int, u_int); @@ -535,13 +533,13 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (args->argc == 1) { if (strcmp(command, "append-selection") == 0) { if (s != NULL) - window_copy_append_selection(wp, NULL); + window_copy_append_selection(wp); window_copy_clear_selection(wp); redraw = 1; } if (strcmp(command, "append-selection-and-cancel") == 0) { if (s != NULL) - window_copy_append_selection(wp, NULL); + window_copy_append_selection(wp); window_copy_clear_selection(wp); redraw = 1; cancel = 1; @@ -579,7 +577,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp, NULL); + window_copy_copy_selection(wp); cancel = 1; } } @@ -592,19 +590,19 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp, NULL); + window_copy_copy_selection(wp); cancel = 1; } } if (strcmp(command, "copy-selection") == 0) { if (s != NULL) - window_copy_copy_selection(wp, NULL); + window_copy_copy_selection(wp); window_copy_clear_selection(wp); redraw = 1; } if (strcmp(command, "copy-selection-and-cancel") == 0) { if (s != NULL) - window_copy_copy_selection(wp, NULL); + window_copy_copy_selection(wp); window_copy_clear_selection(wp); redraw = 1; cancel = 1; @@ -828,11 +826,11 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, argument = args->argv[1]; if (strcmp(command, "copy-pipe") == 0) { if (s != NULL) - window_copy_copy_pipe(wp, s, NULL, argument); + window_copy_copy_pipe(wp, s, argument); } if (strcmp(command, "copy-pipe-and-cancel") == 0) { if (s != NULL) { - window_copy_copy_pipe(wp, s, NULL, argument); + window_copy_copy_pipe(wp, s, argument); cancel = 1; } } @@ -1657,8 +1655,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) } static void -window_copy_copy_buffer(struct window_pane *wp, const char *bufname, void *buf, - size_t len) +window_copy_copy_buffer(struct window_pane *wp, void *buf, size_t len) { struct screen_write_ctx ctx; @@ -1669,13 +1666,13 @@ window_copy_copy_buffer(struct window_pane *wp, const char *bufname, void *buf, notify_pane("pane-set-clipboard", wp); } - if (paste_set(buf, len, bufname, NULL) != 0) + if (paste_set(buf, len, NULL, NULL) != 0) free(buf); } static void window_copy_copy_pipe(struct window_pane *wp, struct session *s, - const char *bufname, const char *arg) + const char *fmt) { void *buf; size_t len; @@ -1685,34 +1682,32 @@ window_copy_copy_pipe(struct window_pane *wp, struct session *s, buf = window_copy_get_selection(wp, &len); if (buf == NULL) return; - expanded = format_single(NULL, arg, NULL, s, NULL, wp); + expanded = format_single(NULL, fmt, NULL, s, NULL, wp); job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT); bufferevent_write(job_get_event(job), buf, len); free(expanded); - window_copy_copy_buffer(wp, bufname, buf, len); + window_copy_copy_buffer(wp, buf, len); } static void -window_copy_copy_selection(struct window_pane *wp, const char *bufname) +window_copy_copy_selection(struct window_pane *wp) { - void *buf; + char *buf; size_t len; buf = window_copy_get_selection(wp, &len); - if (buf == NULL) - return; - - window_copy_copy_buffer(wp, bufname, buf, len); + if (buf != NULL) + window_copy_copy_buffer(wp, buf, len); } static void -window_copy_append_selection(struct window_pane *wp, const char *bufname) +window_copy_append_selection(struct window_pane *wp) { char *buf; struct paste_buffer *pb; - const char *bufdata; + const char *bufdata, *bufname; size_t len, bufsize; struct screen_write_ctx ctx; @@ -1727,10 +1722,7 @@ window_copy_append_selection(struct window_pane *wp, const char *bufname) notify_pane("pane-set-clipboard", wp); } - if (bufname == NULL || *bufname == '\0') - pb = paste_get_top(&bufname); - else - pb = paste_get_name(bufname); + pb = paste_get_top(&bufname); if (pb != NULL) { bufdata = paste_buffer_data(pb, &bufsize); buf = xrealloc(buf, len + bufsize); From 86e648d906d84b8b0522e3d8d6ec6baa171c2423 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 12 Nov 2018 14:18:10 +0000 Subject: [PATCH 271/836] Allow style #[] in mode formats. --- mode-tree.c | 4 ++-- screen-write.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mode-tree.c b/mode-tree.c index 2e4b907238..eb18bdf7a8 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -582,10 +582,10 @@ mode_tree_draw(struct mode_tree_data *mtd) } if (i != mtd->current) { - screen_write_nputs(&ctx, w, &gc0, "%s", text); + screen_write_cnputs(&ctx, w, &gc0, "%s", text); screen_write_clearendofline(&ctx, 8); } else { - screen_write_nputs(&ctx, w, &gc, "%s", text); + screen_write_cnputs(&ctx, w, &gc, "%s", text); screen_write_clearendofline(&ctx, gc.bg); } free(text); diff --git a/screen-write.c b/screen-write.c index 00994e48e6..c65ae6887b 100644 --- a/screen-write.c +++ b/screen-write.c @@ -350,7 +350,6 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, ptr = last + 1; continue; } - if (*ptr > 0x7f && utf8_open(ud, *ptr) == UTF8_MORE) { ptr++; @@ -376,7 +375,9 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, if (maxlen > 0 && size + 1 > (size_t)maxlen) break; - if (*ptr > 0x1f && *ptr < 0x7f) { + if (*ptr == '\001') + gc.attr ^= GRID_ATTR_CHARSET; + else if (*ptr > 0x1f && *ptr < 0x7f) { size++; screen_write_putc(ctx, &gc, *ptr); } From 50cdfc06fbbfe8fd51d74ce938bde528cd2ff65a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 13 Nov 2018 11:36:37 +0000 Subject: [PATCH 272/836] Initialize context property in alignment test handler function. --- screen-write.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/screen-write.c b/screen-write.c index c65ae6887b..0147f51655 100644 --- a/screen-write.c +++ b/screen-write.c @@ -775,6 +775,8 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx) s->rupper = 0; s->rlower = screen_size_y(s) - 1; + screen_write_initctx(ctx, &ttyctx); + screen_write_collect_clear(ctx, 0, screen_size_y(s) - 1); tty_write(tty_cmd_alignmenttest, &ttyctx); } From f103927a5232e0d3e8e7ad0e13aa53b4dfa2c87b Mon Sep 17 00:00:00 2001 From: kn Date: Thu, 15 Nov 2018 10:38:53 +0000 Subject: [PATCH 273/836] Add [template] to display-panes and choose-{buffer,client,tree} usage OK nicm --- cmd-choose-tree.c | 6 +++--- cmd-display-panes.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index 23914178b8..5eb58ff5e6 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -32,7 +32,7 @@ const struct cmd_entry cmd_choose_tree_entry = { .args = { "F:Gf:NO:st:wZ", 0, 1 }, .usage = "[-GNsw] [-F format] [-f filter] [-O sort-order] " - CMD_TARGET_PANE_USAGE, + CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -46,7 +46,7 @@ const struct cmd_entry cmd_choose_client_entry = { .args = { "F:f:NO:t:Z", 0, 1 }, .usage = "[-N] [-F format] [-f filter] [-O sort-order] " - CMD_TARGET_PANE_USAGE, + CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -60,7 +60,7 @@ const struct cmd_entry cmd_choose_buffer_entry = { .args = { "F:f:NO:t:Z", 0, 1 }, .usage = "[-N] [-F format] [-f filter] [-O sort-order] " - CMD_TARGET_PANE_USAGE, + CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/cmd-display-panes.c b/cmd-display-panes.c index ea20caa2a1..d5b3fb5c4e 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -38,7 +38,7 @@ const struct cmd_entry cmd_display_panes_entry = { .alias = "displayp", .args = { "d:t:", 0, 1 }, - .usage = "[-d duration] " CMD_TARGET_CLIENT_USAGE, + .usage = "[-d duration] " CMD_TARGET_CLIENT_USAGE " [template]", .flags = CMD_AFTERHOOK, .exec = cmd_display_panes_exec From 749f67b7d801eed03345fef9c04206fbd079c3cb Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 19 Nov 2018 13:35:40 +0000 Subject: [PATCH 274/836] evbuffer_new and bufferevent_new can both fail (when malloc fails) and return NULL. GitHub issue 1547. --- cmd-pipe-pane.c | 2 ++ control-notify.c | 2 ++ format.c | 4 ++++ input.c | 2 ++ job.c | 2 ++ server-client.c | 6 ++++++ tty.c | 4 ++++ window.c | 2 ++ 8 files changed, 24 insertions(+) diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index 199dd5754a..4650959ce2 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -166,6 +166,8 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) cmd_pipe_pane_write_callback, cmd_pipe_pane_error_callback, wp); + if (wp->pipe_event == NULL) + fatalx("out of memory"); if (out) bufferevent_enable(wp->pipe_event, EV_WRITE); if (in) diff --git a/control-notify.c b/control-notify.c index 4929148300..7b28e8f0a0 100644 --- a/control-notify.c +++ b/control-notify.c @@ -47,6 +47,8 @@ control_notify_input(struct client *c, struct window_pane *wp, */ if (winlink_find_by_window(&c->session->windows, wp->window) != NULL) { message = evbuffer_new(); + if (message == NULL) + fatalx("out of memory"); evbuffer_add_printf(message, "%%output %%%u ", wp->id); for (i = 0; i < len; i++) { if (buf[i] < ' ' || buf[i] == '\\') diff --git a/format.c b/format.c index 2136545798..77f5f59d9a 100644 --- a/format.c +++ b/format.c @@ -573,6 +573,8 @@ format_cb_pane_tabs(struct format_tree *ft, struct format_entry *fe) return; buffer = evbuffer_new(); + if (buffer == NULL) + fatalx("out of memory"); for (i = 0; i < wp->base.grid->sx; i++) { if (!bit_test(wp->base.tabs, i)) continue; @@ -603,6 +605,8 @@ format_cb_session_group_list(struct format_tree *ft, struct format_entry *fe) return; buffer = evbuffer_new(); + if (buffer == NULL) + fatalx("out of memory"); TAILQ_FOREACH(loop, &sg->sessions, gentry) { if (EVBUFFER_LENGTH(buffer) > 0) evbuffer_add(buffer, ",", 1); diff --git a/input.c b/input.c index 41cdfb70fd..d9f419fe23 100644 --- a/input.c +++ b/input.c @@ -767,6 +767,8 @@ input_init(struct window_pane *wp) ictx->input_buf = xmalloc(INPUT_BUF_START); ictx->since_ground = evbuffer_new(); + if (ictx->since_ground == NULL) + fatalx("out of memory"); evtimer_set(&ictx->timer, input_timer_callback, ictx); diff --git a/job.c b/job.c index 66315bd2ca..73f62359f8 100644 --- a/job.c +++ b/job.c @@ -155,6 +155,8 @@ job_run(const char *cmd, struct session *s, const char *cwd, job->event = bufferevent_new(job->fd, job_read_callback, job_write_callback, job_error_callback, job); + if (job->event == NULL) + fatalx("out of memory"); bufferevent_enable(job->event, EV_READ|EV_WRITE); log_debug("run job %p: %s, pid %ld", job, job->cmd, (long) job->pid); diff --git a/server-client.c b/server-client.c index 3d939163ba..94cc9e925d 100644 --- a/server-client.c +++ b/server-client.c @@ -186,8 +186,14 @@ server_client_create(int fd) TAILQ_INIT(&c->queue); c->stdin_data = evbuffer_new(); + if (c->stdin_data == NULL) + fatalx("out of memory"); c->stdout_data = evbuffer_new(); + if (c->stdout_data == NULL) + fatalx("out of memory"); c->stderr_data = evbuffer_new(); + if (c->stderr_data == NULL) + fatalx("out of memory"); c->tty.fd = -1; c->title = NULL; diff --git a/tty.c b/tty.c index 6b63aa3bd9..df47c9726d 100644 --- a/tty.c +++ b/tty.c @@ -258,9 +258,13 @@ tty_open(struct tty *tty, char **cause) event_set(&tty->event_in, tty->fd, EV_PERSIST|EV_READ, tty_read_callback, tty); tty->in = evbuffer_new(); + if (tty->in == NULL) + fatal("out of memory"); event_set(&tty->event_out, tty->fd, EV_WRITE, tty_write_callback, tty); tty->out = evbuffer_new(); + if (tty->out == NULL) + fatal("out of memory"); evtimer_set(&tty->timer, tty_timer_callback, tty); diff --git a/window.c b/window.c index 6e76b480df..530d95743c 100644 --- a/window.c +++ b/window.c @@ -997,6 +997,8 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, wp->event = bufferevent_new(wp->fd, window_pane_read_callback, NULL, window_pane_error_callback, wp); + if (wp->event == NULL) + fatalx("out of memory"); bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); bufferevent_enable(wp->event, EV_READ|EV_WRITE); From c4b04b162444222cfbc0b5943c6e5db433e8d427 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 21 Nov 2018 08:50:22 +0000 Subject: [PATCH 275/836] Fixes for GNU/kFreeBSD from James Clarke. --- configure.ac | 3 +++ osdep-freebsd.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac index 8cd33b6c7c..1a3ba43c56 100644 --- a/configure.ac +++ b/configure.ac @@ -478,6 +478,9 @@ if test "x$found_forkpty" = xyes; then fi AM_CONDITIONAL(NEED_FORKPTY, test "x$found_forkpty" = xno) +# Look for kinfo_getfile in libutil. +AC_SEARCH_LIBS(kinfo_getfile, [util util-freebsd]) + # Look for a suitable queue.h. AC_CHECK_DECL( TAILQ_CONCAT, diff --git a/osdep-freebsd.c b/osdep-freebsd.c index 61f3f5071d..a7d0293035 100644 --- a/osdep-freebsd.c +++ b/osdep-freebsd.c @@ -31,6 +31,8 @@ #include #include +#include "compat.h" + struct kinfo_proc *cmp_procs(struct kinfo_proc *, struct kinfo_proc *); char *osdep_get_name(int, char *); char *osdep_get_cwd(int); From 2eca63b98e21a4e76d77dedf339da42f7291cc76 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 21 Nov 2018 09:49:49 +0000 Subject: [PATCH 276/836] Add to TODO. --- TODO | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODO b/TODO index cac3a469cd..9810347328 100644 --- a/TODO +++ b/TODO @@ -118,6 +118,7 @@ * flag to specify environment to new-window, split-window, new-session (issue 1498) * multiple column panes (issue 1503) + * stack of modes rather than first one sticking (issue 1542) - hooks * more hooks for various things @@ -141,3 +142,6 @@ visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? + +* issues that are not too hard to do: + 1501, 1517, 1498, 1542 From 3a7b9d57355c4b2b521f05049a5c6f5eb2939b5d Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 22 Nov 2018 10:36:40 +0000 Subject: [PATCH 277/836] Do not use PWD unless it actually matches the real working directory. --- client.c | 6 ++---- tmux.c | 29 ++++++++++++++++++++++++++--- tmux.h | 1 + 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/client.c b/client.c index 7e8bd7345d..1054ccaef9 100644 --- a/client.c +++ b/client.c @@ -222,7 +222,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags) const char *ttynam, *cwd; pid_t ppid; enum msgtype msg; - char *cause, path[PATH_MAX]; + char *cause; struct termios tio, saved_tio; size_t size; @@ -277,9 +277,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags) client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL); /* Save these before pledge(). */ - if ((cwd = getenv("PWD")) == NULL && - (cwd = getcwd(path, sizeof path)) == NULL && - (cwd = find_home()) == NULL) + if ((cwd = find_cwd()) == NULL && (cwd = find_home()) == NULL) cwd = "/"; if ((ttynam = ttyname(STDIN_FILENO)) == NULL) ttynam = ""; diff --git a/tmux.c b/tmux.c index dd98678346..d7f8ab536f 100644 --- a/tmux.c +++ b/tmux.c @@ -166,6 +166,31 @@ setblocking(int fd, int state) } } +const char * +find_cwd(void) +{ + char resolved1[PATH_MAX], resolved2[PATH_MAX]; + static char cwd[PATH_MAX]; + const char *pwd; + + if (getcwd(cwd, sizeof cwd) == NULL) + return (NULL); + if ((pwd = getenv("PWD")) == NULL || *pwd == '\0') + return (cwd); + + /* + * We want to use PWD so that symbolic links are maintained, + * but only if it matches the actual working directory. + */ + if (realpath(pwd, resolved1) == NULL) + return (cwd); + if (realpath(cwd, resolved2) == NULL) + return (cwd); + if (strcmp(resolved1, resolved2) != 0) + return (cwd); + return (pwd); +} + const char * find_home(void) { @@ -191,7 +216,6 @@ int main(int argc, char **argv) { char *path, *label, *cause, **var; - char tmp[PATH_MAX]; const char *s, *shell, *cwd; int opt, flags, keys; const struct options_table_entry *oe; @@ -293,8 +317,7 @@ main(int argc, char **argv) global_environ = environ_create(); for (var = environ; *var != NULL; var++) environ_put(global_environ, *var); - if ((cwd = getenv("PWD")) == NULL && - (cwd = getcwd(tmp, sizeof tmp)) != NULL) + if ((cwd = find_cwd()) != NULL) environ_set(global_environ, "PWD", "%s", cwd); global_options = options_create(NULL); diff --git a/tmux.h b/tmux.h index 8b41a7852b..b76d15e8e3 100644 --- a/tmux.h +++ b/tmux.h @@ -1506,6 +1506,7 @@ extern int ptm_fd; extern const char *shell_command; int areshell(const char *); void setblocking(int, int); +const char *find_cwd(void); const char *find_home(void); /* proc.c */ From 40d246b29c8e0ee012d7836969dc8b41d6516444 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 28 Nov 2018 11:20:13 +0000 Subject: [PATCH 278/836] Handle UTF-8 in word-separators option, GitHub issue 1551. --- window-copy.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/window-copy.c b/window-copy.c index 516eb71e01..59fb24d357 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1817,15 +1817,27 @@ window_copy_in_set(struct window_pane *wp, u_int px, u_int py, const char *set) struct window_copy_mode_data *data = wp->modedata; struct grid_cell gc; const struct utf8_data *ud; + struct utf8_data *copy; + struct utf8_data *loop; + int found = 0; grid_get_cell(data->backing->grid, px, py, &gc); - - ud = &gc.data; - if (ud->size != 1 || (gc.flags & GRID_FLAG_PADDING)) - return (0); - if (*ud->data == 0x00 || *ud->data == 0x7f) + if (gc.flags & GRID_FLAG_PADDING) return (0); - return (strchr(set, *ud->data) != NULL); + ud = &gc.data; + + copy = utf8_fromcstr(set); + for (loop = copy; loop->size != 0; loop++) { + if (loop->size != ud->size) + continue; + if (memcmp(loop->data, ud->data, loop->size) == 0) { + found = 1; + break; + } + } + free(copy); + + return (found); } static u_int From 6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 29 Nov 2018 10:37:27 +0000 Subject: [PATCH 279/836] osdep_get_cwd for NetBSD, from Leonardo Taccari. --- osdep-netbsd.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/osdep-netbsd.c b/osdep-netbsd.c index 823eeebf87..daca1abb21 100644 --- a/osdep-netbsd.c +++ b/osdep-netbsd.c @@ -23,14 +23,17 @@ #include #include +#include #include #include #include +#include "tmux.h" + #define is_runnable(p) \ - ((p)->p_stat == LSRUN || (p)->p_stat == SIDL) + ((p)->p_stat == LSRUN || (p)->p_stat == SIDL) #define is_stopped(p) \ - ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB) + ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB) struct kinfo_proc2 *cmp_procs(struct kinfo_proc2 *, struct kinfo_proc2 *); char *osdep_get_name(int, char *); @@ -129,6 +132,22 @@ osdep_get_name(int fd, __unused char *tty) char * osdep_get_cwd(int fd) { + static char target[PATH_MAX + 1]; + char *path; + pid_t pgrp; + ssize_t n; + + if ((pgrp = tcgetpgrp(fd)) == -1) + return (NULL); + + xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp); + n = readlink(path, target, sizeof(target) - 1); + free(path); + if (n > 0) { + target[n] = '\0'; + return (target); + } + return (NULL); } From 67254ed8df2434d7c974f66fbdbf3e4c58f61319 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 30 Nov 2018 08:44:40 +0000 Subject: [PATCH 280/836] Clear PANE_EXITED flag when starting new child process in case the pane has been respawned. --- cmd-pipe-pane.c | 5 ++++- server-fn.c | 1 + window.c | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index 4650959ce2..e1bdb82db0 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -158,7 +158,10 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) close(pipe_fd[1]); wp->pipe_fd = pipe_fd[0]; - wp->pipe_off = EVBUFFER_LENGTH(wp->event->input); + if (wp->fd != -1) + wp->pipe_off = EVBUFFER_LENGTH(wp->event->input); + else + wp->pipe_off = 0; setblocking(wp->pipe_fd, 0); wp->pipe_event = bufferevent_new(wp->pipe_fd, diff --git a/server-fn.c b/server-fn.c index ae90f0c4c2..5655346dc3 100644 --- a/server-fn.c +++ b/server-fn.c @@ -302,6 +302,7 @@ server_destroy_pane(struct window_pane *wp, int notify) if (wp->fd != -1) { bufferevent_free(wp->event); + wp->event = NULL; close(wp->fd); wp->fd = -1; } diff --git a/window.c b/window.c index 530d95743c..9a6c729cc8 100644 --- a/window.c +++ b/window.c @@ -921,6 +921,7 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, sigprocmask(SIG_BLOCK, &set, &oldset); switch (wp->pid = fdforkpty(ptm_fd, &wp->fd, wp->tty, NULL, &ws)) { case -1: + wp->event = NULL; wp->fd = -1; xasprintf(cause, "%s: %s", cmd, strerror(errno)); @@ -1000,6 +1001,9 @@ window_pane_spawn(struct window_pane *wp, int argc, char **argv, if (wp->event == NULL) fatalx("out of memory"); + wp->pipe_off = 0; + wp->flags &= ~PANE_EXITED; + bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); bufferevent_enable(wp->event, EV_READ|EV_WRITE); From 4e3d6612845e190a490f40cce79c858dadaee74b Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 17 Dec 2018 21:52:59 +0000 Subject: [PATCH 281/836] Fix parsing of empty colon-separated fields, reported by Siarhei Siniak. --- input.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index d9f419fe23..12527264df 100644 --- a/input.c +++ b/input.c @@ -1862,7 +1862,8 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) free(copy); return; } - } + } else + n++; log_debug("%s: %u = %d", __func__, n - 1, p[n - 1]); } free(copy); From bde0224deb0d0ba87929d2abfb262f3bd187b889 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 18 Dec 2018 13:20:44 +0000 Subject: [PATCH 282/836] Pass window into mode functions. --- cmd-send-keys.c | 10 ++++++---- server-client.c | 6 ++++-- tmux.h | 9 ++++++--- window-buffer.c | 7 ++++--- window-client.c | 7 ++++--- window-clock.c | 7 ++++--- window-copy.c | 5 +++-- window-tree.c | 7 ++++--- window.c | 4 ++-- 9 files changed, 37 insertions(+), 25 deletions(-) diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 6230ecf766..8fc00023be 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -60,13 +60,14 @@ cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) { struct window_pane *wp = item->target.wp; struct session *s = item->target.s; + struct winlink *wl = item->target.wl; struct key_table *table; struct key_binding *bd; if (wp->mode == NULL || wp->mode->key_table == NULL) { if (options_get_number(wp->window->options, "xterm-keys")) key |= KEYC_XTERM; - window_pane_key(wp, NULL, s, key, NULL); + window_pane_key(wp, NULL, s, wl, key, NULL); return; } table = key_bindings_get_table(wp->mode->key_table(wp), 1); @@ -86,6 +87,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) struct client *c = cmd_find_client(item, NULL, 1); struct window_pane *wp = item->target.wp; struct session *s = item->target.s; + struct winlink *wl = item->target.wl; struct mouse_event *m = &item->shared->mouse; struct utf8_data *ud, *uc; wchar_t wc; @@ -111,9 +113,9 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } if (!m->valid) - wp->mode->command(wp, c, s, args, NULL); + wp->mode->command(wp, c, s, wl, args, NULL); else - wp->mode->command(wp, c, s, args, m); + wp->mode->command(wp, c, s, wl, args, m); return (CMD_RETURN_NORMAL); } @@ -123,7 +125,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "no mouse target"); return (CMD_RETURN_ERROR); } - window_pane_key(wp, NULL, s, m->key, m); + window_pane_key(wp, NULL, s, wl, m->key, m); return (CMD_RETURN_NORMAL); } diff --git a/server-client.c b/server-client.c index 94cc9e925d..0e105d7c0a 100644 --- a/server-client.c +++ b/server-client.c @@ -923,6 +923,7 @@ server_client_handle_key(struct client *c, key_code key) { struct mouse_event *m = &c->tty.mouse; struct session *s = c->session; + struct winlink *wl; struct window *w; struct window_pane *wp; struct timeval tv; @@ -935,7 +936,8 @@ server_client_handle_key(struct client *c, key_code key) /* Check the client is good to accept input. */ if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) return; - w = s->curw->window; + wl = s->curw; + w = wl->window; /* Update the activity timer. */ if (gettimeofday(&c->activity_time, NULL) != 0) @@ -1126,7 +1128,7 @@ server_client_handle_key(struct client *c, key_code key) if (c->flags & CLIENT_READONLY) return; if (wp != NULL) - window_pane_key(wp, c, s, key, m); + window_pane_key(wp, c, s, wl, key, m); } /* Client functions that need to happen every loop. */ diff --git a/tmux.h b/tmux.h index b76d15e8e3..b263b3714c 100644 --- a/tmux.h +++ b/tmux.h @@ -52,6 +52,7 @@ struct options_entry; struct session; struct tmuxpeer; struct tmuxproc; +struct winlink; /* Client-server protocol version. */ #define PROTOCOL_VERSION 8 @@ -699,11 +700,12 @@ struct window_mode { 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 *); + struct session *, struct winlink *, key_code, + struct mouse_event *); const char *(*key_table)(struct window_pane *); void (*command)(struct window_pane *, struct client *, - struct session *, struct args *, + struct session *, struct winlink *, struct args *, struct mouse_event *); }; #define WINDOW_MODE_TIMEOUT 180 @@ -2193,7 +2195,8 @@ int window_pane_set_mode(struct window_pane *, struct args *); void window_pane_reset_mode(struct window_pane *); void window_pane_key(struct window_pane *, struct client *, - struct session *, key_code, struct mouse_event *); + struct session *, struct winlink *, key_code, + struct mouse_event *); int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); const char *window_printable_flags(struct winlink *); diff --git a/window-buffer.c b/window-buffer.c index e0352be25d..c67fa008e7 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -31,8 +31,8 @@ static void window_buffer_free(struct window_pane *); static void window_buffer_resize(struct window_pane *, u_int, u_int); static void window_buffer_key(struct window_pane *, - struct client *, struct session *, key_code, - struct mouse_event *); + struct client *, struct session *, + struct winlink *, key_code, struct mouse_event *); #define WINDOW_BUFFER_DEFAULT_COMMAND "paste-buffer -b '%%'" @@ -338,7 +338,8 @@ window_buffer_do_paste(void* modedata, void *itemdata, struct client *c, static void window_buffer_key(struct window_pane *wp, struct client *c, - __unused struct session *s, key_code key, struct mouse_event *m) + __unused struct session *s, __unused struct winlink *wl, key_code key, + struct mouse_event *m) { struct window_buffer_modedata *data = wp->modedata; struct mode_tree_data *mtd = data->data; diff --git a/window-client.c b/window-client.c index 69f9990470..7ac13b0bb3 100644 --- a/window-client.c +++ b/window-client.c @@ -31,8 +31,8 @@ static void window_client_free(struct window_pane *); static void window_client_resize(struct window_pane *, u_int, u_int); static void window_client_key(struct window_pane *, - struct client *, struct session *, key_code, - struct mouse_event *); + struct client *, struct session *, + struct winlink *, key_code, struct mouse_event *); #define WINDOW_CLIENT_DEFAULT_COMMAND "detach-client -t '%%'" @@ -312,7 +312,8 @@ window_client_do_detach(void* modedata, void *itemdata, static void window_client_key(struct window_pane *wp, struct client *c, - __unused struct session *s, key_code key, struct mouse_event *m) + __unused struct session *s, __unused struct winlink *wl, key_code key, + struct mouse_event *m) { struct window_client_modedata *data = wp->modedata; struct mode_tree_data *mtd = data->data; diff --git a/window-clock.c b/window-clock.c index 9ecc68a13c..9642a141d3 100644 --- a/window-clock.c +++ b/window-clock.c @@ -29,7 +29,8 @@ static struct screen *window_clock_init(struct window_pane *, static void window_clock_free(struct window_pane *); static void window_clock_resize(struct window_pane *, u_int, u_int); static void window_clock_key(struct window_pane *, struct client *, - struct session *, key_code, struct mouse_event *); + struct session *, struct winlink *, key_code, + struct mouse_event *); static void window_clock_timer_callback(int, short, void *); static void window_clock_draw_screen(struct window_pane *); @@ -190,8 +191,8 @@ window_clock_resize(struct window_pane *wp, u_int sx, u_int sy) static void window_clock_key(struct window_pane *wp, __unused struct client *c, - __unused struct session *sess, __unused key_code key, - __unused struct mouse_event *m) + __unused struct session *s, __unused struct winlink *wl, + __unused key_code key, __unused struct mouse_event *m) { window_pane_reset_mode(wp); } diff --git a/window-copy.c b/window-copy.c index 59fb24d357..65b29df03a 100644 --- a/window-copy.c +++ b/window-copy.c @@ -26,7 +26,8 @@ static const char *window_copy_key_table(struct window_pane *); static void window_copy_command(struct window_pane *, struct client *, - struct session *, struct args *, struct mouse_event *); + struct session *, struct winlink *, struct args *, + struct mouse_event *); static struct screen *window_copy_init(struct window_pane *, struct cmd_find_state *, struct args *); static void window_copy_free(struct window_pane *); @@ -514,7 +515,7 @@ window_copy_key_table(struct window_pane *wp) static void window_copy_command(struct window_pane *wp, struct client *c, struct session *s, - struct args *args, struct mouse_event *m) + __unused struct winlink *wl, struct args *args, struct mouse_event *m) { struct window_copy_mode_data *data = wp->modedata; struct screen *sn = &data->screen; diff --git a/window-tree.c b/window-tree.c index 2eb31612bb..5b7f1994c0 100644 --- a/window-tree.c +++ b/window-tree.c @@ -29,8 +29,8 @@ static struct screen *window_tree_init(struct window_pane *, static void window_tree_free(struct window_pane *); static void window_tree_resize(struct window_pane *, u_int, u_int); static void window_tree_key(struct window_pane *, - struct client *, struct session *, key_code, - struct mouse_event *); + struct client *, struct session *, + struct winlink *, key_code, struct mouse_event *); #define WINDOW_TREE_DEFAULT_COMMAND "switch-client -t '%%'" @@ -1120,7 +1120,8 @@ window_tree_mouse(struct window_tree_modedata *data, key_code key, u_int x, static void window_tree_key(struct window_pane *wp, struct client *c, - __unused struct session *s, key_code key, struct mouse_event *m) + __unused struct session *s, __unused struct winlink *wl, key_code key, + struct mouse_event *m) { struct window_tree_modedata *data = wp->modedata; struct window_tree_itemdata *item, *new_item; diff --git a/window.c b/window.c index 9a6c729cc8..673cd84fb4 100644 --- a/window.c +++ b/window.c @@ -1258,7 +1258,7 @@ window_pane_reset_mode(struct window_pane *wp) void window_pane_key(struct window_pane *wp, struct client *c, struct session *s, - key_code key, struct mouse_event *m) + struct winlink *wl, key_code key, struct mouse_event *m) { struct window_pane *wp2; @@ -1268,7 +1268,7 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, if (wp->mode != NULL) { wp->modelast = time(NULL); if (wp->mode->key != NULL) - wp->mode->key(wp, c, s, (key & ~KEYC_XTERM), m); + wp->mode->key(wp, c, s, wl, (key & ~KEYC_XTERM), m); return; } From 34c0807be6add421bc4624d498adf9f55d00a120 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 15 Jan 2019 09:56:31 +0000 Subject: [PATCH 283/836] Do not highlight characters which will not be copied, reported by Jaroslaw Rzeszotko. --- screen.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/screen.c b/screen.c index 6fbd86f476..75d9d09df6 100644 --- a/screen.c +++ b/screen.c @@ -425,7 +425,11 @@ screen_check_selection(struct screen *s, u_int px, u_int py) if (py == sel->sy && px < sel->sx) return (0); - if (py == sel->ey && px > sel->ex) + if (sel->modekeys == MODEKEY_EMACS) + xx = (sel->ex == 0 ? 0 : sel->ex - 1); + else + xx = sel->ex; + if (py == sel->ey && px > xx) return (0); } else if (sel->sy > sel->ey) { /* starting line > ending line -- upward selection. */ @@ -456,7 +460,11 @@ screen_check_selection(struct screen *s, u_int px, u_int py) return (0); } else { /* selection start (sx) is on the left */ - if (px < sel->sx || px > sel->ex) + if (sel->modekeys == MODEKEY_EMACS) + xx = (sel->ex == 0 ? 0 : sel->ex - 1); + else + xx = sel->ex; + if (px < sel->sx || px > xx) return (0); } } From cd39920abdadb065ea4651dbd0c1f692dd6d555f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 15 Jan 2019 12:08:53 +0000 Subject: [PATCH 284/836] Should save the bg colour when setting it to default, not the fg. --- tty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty.c b/tty.c index df47c9726d..b0aa190ab9 100644 --- a/tty.c +++ b/tty.c @@ -2240,7 +2240,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) tty_puts(tty, "\033[49m"); else if (tc->bg != 0) tty_putcode1(tty, TTYC_SETAB, 0); - tc->bg = gc->fg; + tc->bg = gc->bg; } } } From 2ea22fce5e5904720220962aaef65cc3a3a94152 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 20 Jan 2019 15:57:27 +0000 Subject: [PATCH 285/836] Should use DECFRA if not default, not if default. From Karl Beldan. --- tty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty.c b/tty.c index b0aa190ab9..d3db798fbb 100644 --- a/tty.c +++ b/tty.c @@ -1102,7 +1102,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, * background colour isn't default (because it doesn't work * after SGR 0). */ - if (tty->term_type == TTY_VT420 && COLOUR_DEFAULT(bg)) { + if (tty->term_type == TTY_VT420 && !COLOUR_DEFAULT(bg)) { xsnprintf(tmp, sizeof tmp, "\033[32;%u;%u;%u;%u$x", py + 1, px + 1, py + ny, px + nx); tty_puts(tty, tmp); From afd3127d8902758ae50ced1b5cccd768d48c5fad Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 6 Feb 2019 07:36:06 +0000 Subject: [PATCH 286/836] Add -b to display-panes like run-shell, GitHub issue 1559. --- cmd-display-panes.c | 25 ++++++++++++++++++------- tmux.1 | 4 ++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index d5b3fb5c4e..1330ffac23 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -37,8 +37,8 @@ const struct cmd_entry cmd_display_panes_entry = { .name = "display-panes", .alias = "displayp", - .args = { "d:t:", 0, 1 }, - .usage = "[-d duration] " CMD_TARGET_CLIENT_USAGE " [template]", + .args = { "bd:t:", 0, 1 }, + .usage = "[-b] [-d duration] " CMD_TARGET_CLIENT_USAGE " [template]", .flags = CMD_AFTERHOOK, .exec = cmd_display_panes_exec @@ -65,7 +65,10 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) c->identify_callback_data = xstrdup(args->argv[0]); else c->identify_callback_data = xstrdup("select-pane -t '%%'"); - c->identify_callback_item = item; + if (args_has(args, 'b')) + c->identify_callback_item = NULL; + else + c->identify_callback_item = item; if (args_has(args, 'd')) { delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause); @@ -78,6 +81,8 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) delay = options_get_number(s->options, "display-panes-time"); server_client_set_identify(c, delay); + if (args_has(args, 'b')) + return (CMD_RETURN_NORMAL); return (CMD_RETURN_WAIT); } @@ -115,15 +120,21 @@ cmd_display_panes_callback(struct client *c, struct window_pane *wp) cmd_list_free(cmdlist); } - if (new_item != NULL) - cmdq_insert_after(c->identify_callback_item, new_item); + if (new_item != NULL) { + if (c->identify_callback_item != NULL) + cmdq_insert_after(c->identify_callback_item, new_item); + else + cmdq_append(c, new_item); + } free(cmd); free(expanded); out: - c->identify_callback_item->flags &= ~CMDQ_WAITING; - c->identify_callback_item = NULL; + if (c->identify_callback_item != NULL) { + c->identify_callback_item->flags &= ~CMDQ_WAITING; + c->identify_callback_item = NULL; + } free(c->identify_callback_data); c->identify_callback_data = NULL; diff --git a/tmux.1 b/tmux.1 index e3409a967d..756ee96403 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1526,6 +1526,7 @@ first. This command works only if at least one client is attached. .It Xo .Ic display-panes +.Op Fl b .Op Fl d Ar duration .Op Fl t Ar target-client .Op Ar template @@ -1559,6 +1560,9 @@ substituted by the pane ID. The default .Ar template is "select-pane -t '%%'". +With +.Fl b , +other commands are not blocked from running until the indicator is closed. .It Xo Ic find-window .Op Fl CNTZ .Op Fl t Ar target-pane From bdb7e48cbabe70a3b6ef6c6d80be987835e6c280 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 6 Feb 2019 14:45:19 +0000 Subject: [PATCH 287/836] Redirect which stderr. --- tools/24-bit-color.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/24-bit-color.sh b/tools/24-bit-color.sh index 73cff60aca..b83ef51f8f 100644 --- a/tools/24-bit-color.sh +++ b/tools/24-bit-color.sh @@ -14,7 +14,7 @@ # https://github.com/gnachman/iTerm2/blob/master/LICENSE # -if which gseq >/dev/null +if which gseq >/dev/null 2>&1 then SEQ=gseq else From f9c396db41927cd57d7c868c1b8c173cdce95b26 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 9 Feb 2019 18:18:36 +0000 Subject: [PATCH 288/836] Completion of command-alias members. --- status.c | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/status.c b/status.c index 211da9fc9a..2e2f573109 100644 --- a/status.c +++ b/status.c @@ -45,8 +45,8 @@ static const char *status_prompt_up_history(u_int *); static const char *status_prompt_down_history(u_int *); static void status_prompt_add_history(const char *); -static const char **status_prompt_complete_list(u_int *, const char *); -static char *status_prompt_complete_prefix(const char **, u_int); +static char **status_prompt_complete_list(u_int *, const char *); +static char *status_prompt_complete_prefix(char **, u_int); static char *status_prompt_complete(struct session *, const char *); /* Status prompt history. */ @@ -1479,12 +1479,16 @@ status_prompt_add_history(const char *line) } /* Build completion list. */ -static const char ** +char ** status_prompt_complete_list(u_int *size, const char *s) { - const char **list = NULL, **layout; + char **list = NULL; + const char **layout, *value, *cp; const struct cmd_entry **cmdent; const struct options_table_entry *oe; + u_int items, idx; + size_t slen = strlen(s), valuelen; + struct options_entry *o; const char *layouts[] = { "even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled", NULL @@ -1492,29 +1496,44 @@ status_prompt_complete_list(u_int *size, const char *s) *size = 0; for (cmdent = cmd_table; *cmdent != NULL; cmdent++) { - if (strncmp((*cmdent)->name, s, strlen(s)) == 0) { + if (strncmp((*cmdent)->name, s, slen) == 0) { list = xreallocarray(list, (*size) + 1, sizeof *list); - list[(*size)++] = (*cmdent)->name; + list[(*size)++] = xstrdup((*cmdent)->name); } } for (oe = options_table; oe->name != NULL; oe++) { - if (strncmp(oe->name, s, strlen(s)) == 0) { + if (strncmp(oe->name, s, slen) == 0) { list = xreallocarray(list, (*size) + 1, sizeof *list); - list[(*size)++] = oe->name; + list[(*size)++] = xstrdup(oe->name); } } for (layout = layouts; *layout != NULL; layout++) { - if (strncmp(*layout, s, strlen(s)) == 0) { + if (strncmp(*layout, s, slen) == 0) { list = xreallocarray(list, (*size) + 1, sizeof *list); - list[(*size)++] = *layout; + list[(*size)++] = xstrdup(*layout); } } + o = options_get_only(global_options, "command-alias"); + if (o != NULL && options_array_size(o, &items) != -1) { + for (idx = 0; idx < items; idx++) { + value = options_array_get(o, idx); + if (value == NULL || (cp = strchr(value, '=')) == NULL) + continue; + valuelen = cp - value; + if (slen > valuelen || strncmp(value, s, slen) != 0) + continue; + list = xreallocarray(list, (*size) + 1, sizeof *list); + list[(*size)++] = xstrndup(value, valuelen); + } + } + for (idx = 0; idx < (*size); idx++) + log_debug("complete %u: %s", idx, list[idx]); return (list); } /* Find longest prefix. */ static char * -status_prompt_complete_prefix(const char **list, u_int size) +status_prompt_complete_prefix(char **list, u_int size) { char *out; u_int i; @@ -1537,7 +1556,8 @@ status_prompt_complete_prefix(const char **list, u_int size) static char * status_prompt_complete(struct session *session, const char *s) { - const char **list = NULL, *colon; + char **list = NULL; + const char *colon; u_int size = 0, i; struct session *s_loop; struct winlink *wl; @@ -1556,6 +1576,8 @@ status_prompt_complete(struct session *session, const char *s) xasprintf(&out, "%s ", list[0]); else out = status_prompt_complete_prefix(list, size); + for (i = 0; i < size; i++) + free(list[i]); free(list); return (out); } From 82f0c859a2bcdfac79d242793b7720b74d62d04b Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 16 Feb 2019 11:42:08 +0000 Subject: [PATCH 289/836] Use starting client cwd in config file, GitHub issue 1606. --- cfg.c | 3 ++- server-client.c | 2 ++ tmux.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cfg.c b/cfg.c index a448c4b1ff..9cbb9c2afa 100644 --- a/cfg.c +++ b/cfg.c @@ -38,6 +38,7 @@ struct cfg_cond { }; TAILQ_HEAD(cfg_conds, cfg_cond); +struct client *cfg_client; static char *cfg_file; int cfg_finished; static char **cfg_causes; @@ -95,7 +96,7 @@ start_cfg(void) * command queue is currently empty and our callback will be at the * front - we need to get in before MSG_COMMAND. */ - c = TAILQ_FIRST(&clients); + cfg_client = c = TAILQ_FIRST(&clients); if (c != NULL) { cfg_item = cmdq_get_callback(cfg_client_done, NULL); cmdq_append(c, cfg_item); diff --git a/server-client.c b/server-client.c index 0e105d7c0a..bf69a9813e 100644 --- a/server-client.c +++ b/server-client.c @@ -1982,6 +1982,8 @@ server_client_get_cwd(struct client *c, struct session *s) { const char *home; + if (!cfg_finished && cfg_client != NULL) + return (cfg_client->cwd); if (c != NULL && c->session == NULL && c->cwd != NULL) return (c->cwd); if (s != NULL && s->cwd != NULL) diff --git a/tmux.h b/tmux.h index b263b3714c..44d5fbcc3a 100644 --- a/tmux.h +++ b/tmux.h @@ -1527,6 +1527,7 @@ void proc_toggle_log(struct tmuxproc *); /* cfg.c */ extern int cfg_finished; +extern struct client *cfg_client; void start_cfg(void); int load_cfg(const char *, struct client *, struct cmdq_item *, int); void set_cfg_file(const char *); From fa33603dc1eca5600aa5c6e0d2f4aa2291a75398 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 16 Feb 2019 19:04:34 +0000 Subject: [PATCH 290/836] Do not look at next key byte if the length is 0, originally from Shingo NISHIOKA in GitHub issue 1601. --- tty-keys.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tty-keys.c b/tty-keys.c index 068c502ff6..3eb8d428a5 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -464,6 +464,10 @@ tty_keys_find(struct tty *tty, const char *buf, size_t len, size_t *size) static struct tty_key * tty_keys_find1(struct tty_key *tk, const char *buf, size_t len, size_t *size) { + /* If no data, no match. */ + if (len == 0) + return (NULL); + /* If the node is NULL, this is the end of the tree. No match. */ if (tk == NULL) return (NULL); From a870c255c48afc15a79c3ea5b0a205485fb949f6 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 4 Mar 2019 09:29:40 +0000 Subject: [PATCH 291/836] Don't set client offset if client is not a terminal --- tty.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tty.c b/tty.c index d3db798fbb..a198b89ceb 100644 --- a/tty.c +++ b/tty.c @@ -807,6 +807,9 @@ tty_update_client_offset(struct client *c) { u_int ox, oy, sx, sy; + if (~c->flags & CLIENT_TERMINAL) + return; + c->tty.oflag = tty_window_offset1(&c->tty, &ox, &oy, &sx, &sy); if (ox == c->tty.oox && oy == c->tty.ooy && From 5cdd578906985c7abb9d1bba39384e201dada10e Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 4 Mar 2019 09:29:52 +0000 Subject: [PATCH 292/836] Fix sense of aggressive-resize flag. --- resize.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resize.c b/resize.c index fef8feeb99..2134165f1a 100644 --- a/resize.c +++ b/resize.c @@ -188,7 +188,7 @@ recalculate_sizes(void) type = options_get_number(w->options, "window-size"); if (type == WINDOW_SIZE_MANUAL) continue; - current = !options_get_number(w->options, "aggressive-resize"); + current = options_get_number(w->options, "aggressive-resize"); changed = 1; if (type == WINDOW_SIZE_LARGEST) { From 5a564a0c1ac768d6fc02669891fdcbd2487af0e8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 7 Mar 2019 15:34:10 +0000 Subject: [PATCH 293/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 9810347328..d764bca79a 100644 --- a/TODO +++ b/TODO @@ -119,6 +119,7 @@ new-session (issue 1498) * multiple column panes (issue 1503) * stack of modes rather than first one sticking (issue 1542) + * support for ZERO WIDTH JOINER U+200D - hooks * more hooks for various things From 7f093fcddcf82c01b6c4d1446af2ebfac5d8a686 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 7 Mar 2019 19:01:21 +0000 Subject: [PATCH 294/836] Make adding mode formats a function pointer as well. --- format.c | 3 ++- tmux.h | 4 ++-- window-copy.c | 27 +++++++++++++-------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/format.c b/format.c index 77f5f59d9a..f60a4019fa 100644 --- a/format.c +++ b/format.c @@ -1552,7 +1552,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "scroll_region_upper", "%u", wp->base.rupper); format_add(ft, "scroll_region_lower", "%u", wp->base.rlower); - window_copy_add_formats(wp, ft); + if (wp->mode != NULL && wp->mode->formats != NULL) + wp->mode->formats(wp, ft); format_add(ft, "alternate_on", "%d", wp->saved_grid ? 1 : 0); format_add(ft, "alternate_saved_x", "%u", wp->saved_cx); diff --git a/tmux.h b/tmux.h index 44d5fbcc3a..f0ee838ebc 100644 --- a/tmux.h +++ b/tmux.h @@ -43,6 +43,7 @@ struct cmdq_item; struct cmdq_list; struct environ; struct format_job_tree; +struct format_tree; struct input_ctx; struct job; struct mode_tree_data; @@ -707,6 +708,7 @@ struct window_mode { void (*command)(struct window_pane *, struct client *, struct session *, struct winlink *, struct args *, struct mouse_event *); + void (*formats)(struct window_pane *, struct format_tree *); }; #define WINDOW_MODE_TIMEOUT 180 @@ -2304,8 +2306,6 @@ void printflike(2, 3) window_copy_add(struct window_pane *, const char *, ...); void window_copy_vadd(struct window_pane *, const char *, va_list); void window_copy_pageup(struct window_pane *, int); void window_copy_start_drag(struct client *, struct mouse_event *); -void window_copy_add_formats(struct window_pane *, - struct format_tree *); /* names.c */ void check_window_name(struct window *); diff --git a/window-copy.c b/window-copy.c index 65b29df03a..ed36efc0f4 100644 --- a/window-copy.c +++ b/window-copy.c @@ -31,10 +31,11 @@ static void window_copy_command(struct window_pane *, struct client *, static struct screen *window_copy_init(struct window_pane *, struct cmd_find_state *, struct args *); static void window_copy_free(struct window_pane *); +static void window_copy_resize(struct window_pane *, u_int, u_int); +static void window_copy_formats(struct window_pane *, struct format_tree *); static int window_copy_pagedown(struct window_pane *, int, int); static void window_copy_next_paragraph(struct window_pane *); static void window_copy_previous_paragraph(struct window_pane *); -static void window_copy_resize(struct window_pane *, u_int, u_int); static void window_copy_redraw_selection(struct window_pane *, u_int); static void window_copy_redraw_lines(struct window_pane *, u_int, u_int); @@ -113,6 +114,7 @@ const struct window_mode window_copy_mode = { .resize = window_copy_resize, .key_table = window_copy_key_table, .command = window_copy_command, + .formats = window_copy_formats, }; enum { @@ -472,6 +474,16 @@ window_copy_next_paragraph(struct window_pane *wp) window_copy_scroll_to(wp, ox, oy); } +static void +window_copy_formats(struct window_pane *wp, struct format_tree *ft) +{ + struct window_copy_mode_data *data = wp->modedata; + + format_add(ft, "selection_present", "%d", data->screen.sel != NULL); + format_add(ft, "scroll_position", "%d", data->oy); + format_add(ft, "rectangle_toggle", "%d", data->rectflag); +} + static void window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) { @@ -2447,19 +2459,6 @@ window_copy_scroll_down(struct window_pane *wp, u_int ny) screen_write_stop(&ctx); } -void -window_copy_add_formats(struct window_pane *wp, struct format_tree *ft) -{ - struct window_copy_mode_data *data = wp->modedata; - - if (wp->mode != &window_copy_mode) - return; - - format_add(ft, "selection_present", "%d", data->screen.sel != NULL); - format_add(ft, "scroll_position", "%d", data->oy); - format_add(ft, "rectangle_toggle", "%d", data->rectflag); -} - static void window_copy_rectangle_toggle(struct window_pane *wp) { From 3c24bc5617bfdf90f94cc088f3769397c7569649 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 7 Mar 2019 19:34:22 +0000 Subject: [PATCH 295/836] Tidy changing the mode into window_copy_init_for_output. --- cfg.c | 1 - cmd-queue.c | 7 +------ cmd-run-shell.c | 6 ++---- window-copy.c | 6 ++++++ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/cfg.c b/cfg.c index 9cbb9c2afa..0842f6384b 100644 --- a/cfg.c +++ b/cfg.c @@ -348,7 +348,6 @@ cfg_show_causes(struct session *s) return; wp = s->curw->window->active; - window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); window_copy_init_for_output(wp); for (i = 0; i < cfg_ncauses; i++) { window_copy_add(wp, "%s", cfg_causes[i]); diff --git a/cmd-queue.c b/cmd-queue.c index ec65bd80a1..ccb25c9a0f 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -426,12 +426,7 @@ cmdq_print(struct cmdq_item *item, const char *fmt, ...) server_client_push_stdout(c); } else { w = c->session->curw->window; - if (w->active->mode != &window_copy_mode) { - window_pane_reset_mode(w->active); - window_pane_set_mode(w->active, &window_copy_mode, NULL, - NULL); - window_copy_init_for_output(w->active); - } + window_copy_init_for_output(w->active); window_copy_vadd(w->active, fmt, ap); } diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 47fceafeef..998ffcd888 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -75,10 +75,8 @@ cmd_run_shell_print(struct job *job, const char *msg) return; } - if (window_pane_set_mode(wp, &window_copy_mode, NULL, NULL) == 0) - window_copy_init_for_output(wp); - if (wp->mode == &window_copy_mode) - window_copy_add(wp, "%s", msg); + window_copy_init_for_output(wp); + window_copy_add(wp, "%s", msg); } static enum cmd_retval diff --git a/window-copy.c b/window-copy.c index ed36efc0f4..a79e3bf435 100644 --- a/window-copy.c +++ b/window-copy.c @@ -263,6 +263,12 @@ window_copy_init_for_output(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; + if (wp->mode == &window_copy_mode && data->backing != &wp->base) + return; + window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); + + data = wp->modedata; data->backing = xmalloc(sizeof *data->backing); screen_init(data->backing, screen_size_x(&wp->base), screen_size_y(&wp->base), UINT_MAX); From f98c66ece81953c777cd332c6bd29d707b1685e5 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 7 Mar 2019 20:24:21 +0000 Subject: [PATCH 296/836] Add a separate mode struct for the active window mode if any. --- cmd-capture-pane.c | 2 +- cmd-copy-mode.c | 6 +- cmd-send-keys.c | 53 +-- format.c | 6 +- server-client.c | 7 +- tmux.h | 32 +- window-buffer.c | 28 +- window-client.c | 28 +- window-clock.c | 47 +-- window-copy.c | 936 ++++++++++++++++++++++++--------------------- window-tree.c | 27 +- window.c | 26 +- 12 files changed, 639 insertions(+), 559 deletions(-) diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index d3d7e8f86e..cb01f50253 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -199,7 +199,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmdq_item *item) size_t len; if (self->entry == &cmd_clear_history_entry) { - if (wp->mode == &window_copy_mode) + if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) window_pane_reset_mode(wp); grid_clear_history(wp->base.grid); return (CMD_RETURN_NORMAL); diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index 699a868da4..1668029c17 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -74,18 +74,18 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } - if (wp->mode != &window_copy_mode) { + if (wp->mode == NULL || wp->mode->mode != &window_copy_mode) { flag = window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); if (flag != 0) return (CMD_RETURN_NORMAL); window_copy_init_from_pane(wp, args_has(self->args, 'e')); } if (args_has(args, 'M')) { - if (wp->mode != NULL && wp->mode != &window_copy_mode) + if (wp->mode != NULL && wp->mode->mode != &window_copy_mode) return (CMD_RETURN_NORMAL); window_copy_start_drag(c, &shared->mouse); } - if (wp->mode == &window_copy_mode && args_has(self->args, 'u')) + if (args_has(self->args, 'u')) window_copy_pageup(wp, 0); return (CMD_RETURN_NORMAL); diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 8fc00023be..80799c5431 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -58,19 +58,20 @@ const struct cmd_entry cmd_send_prefix_entry = { static void cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) { - struct window_pane *wp = item->target.wp; - struct session *s = item->target.s; - struct winlink *wl = item->target.wl; - struct key_table *table; - struct key_binding *bd; - - if (wp->mode == NULL || wp->mode->key_table == NULL) { + struct window_pane *wp = item->target.wp; + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; + struct window_mode_entry *wme = wp->mode; + struct key_table *table; + struct key_binding *bd; + + if (wme == NULL || wme->mode->key_table == NULL) { if (options_get_number(wp->window->options, "xterm-keys")) key |= KEYC_XTERM; window_pane_key(wp, NULL, s, wl, key, NULL); return; } - table = key_bindings_get_table(wp->mode->key_table(wp), 1); + table = key_bindings_get_table(wme->mode->key_table(wme), 1); bd = key_bindings_get(table, key & ~KEYC_XTERM); if (bd != NULL) { @@ -83,18 +84,19 @@ cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) static enum cmd_retval cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) { - struct args *args = self->args; - struct client *c = cmd_find_client(item, NULL, 1); - struct window_pane *wp = item->target.wp; - struct session *s = item->target.s; - struct winlink *wl = item->target.wl; - struct mouse_event *m = &item->shared->mouse; - struct utf8_data *ud, *uc; - wchar_t wc; - int i, literal; - key_code key; - u_int np = 1; - char *cause = NULL; + struct args *args = self->args; + struct client *c = cmd_find_client(item, NULL, 1); + struct window_pane *wp = item->target.wp; + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; + struct mouse_event *m = &item->shared->mouse; + struct window_mode_entry *wme = wp->mode; + struct utf8_data *ud, *uc; + wchar_t wc; + int i, literal; + key_code key; + u_int np = 1; + char *cause = NULL; if (args_has(args, 'N')) { np = args_strtonum(args, 'N', 1, UINT_MAX, &cause); @@ -103,19 +105,18 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) free(cause); return (CMD_RETURN_ERROR); } - if (args_has(args, 'X') || args->argc == 0) - wp->modeprefix = np; + if (wme != NULL && (args_has(args, 'X') || args->argc == 0)) + wme->prefix = np; } if (args_has(args, 'X')) { - if (wp->mode == NULL || wp->mode->command == NULL) { + if (wme == NULL || wme->mode->command == NULL) { cmdq_error(item, "not in a mode"); return (CMD_RETURN_ERROR); } if (!m->valid) - wp->mode->command(wp, c, s, wl, args, NULL); - else - wp->mode->command(wp, c, s, wl, args, m); + m = NULL; + wme->mode->command(wme, c, s, wl, args, m); return (CMD_RETURN_NORMAL); } diff --git a/format.c b/format.c index f60a4019fa..166b18a62e 100644 --- a/format.c +++ b/format.c @@ -1535,7 +1535,7 @@ 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_mode", "%s", wp->mode->mode->name); format_add(ft, "pane_synchronized", "%d", !!options_get_number(w->options, "synchronize-panes")); @@ -1552,8 +1552,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "scroll_region_upper", "%u", wp->base.rupper); format_add(ft, "scroll_region_lower", "%u", wp->base.rlower); - if (wp->mode != NULL && wp->mode->formats != NULL) - wp->mode->formats(wp, ft); + if (wp->mode != NULL && wp->mode->mode->formats != NULL) + wp->mode->mode->formats(wp->mode, ft); format_add(ft, "alternate_on", "%d", wp->saved_grid ? 1 : 0); format_add(ft, "alternate_saved_x", "%u", wp->saved_cx); diff --git a/server-client.c b/server-client.c index bf69a9813e..a311376ca0 100644 --- a/server-client.c +++ b/server-client.c @@ -928,6 +928,7 @@ server_client_handle_key(struct client *c, key_code key) struct window_pane *wp; struct timeval tv; struct key_table *table, *first; + const char *tablename; struct key_binding *bd; int xtimeout, flags; struct cmd_find_state fs; @@ -1009,8 +1010,10 @@ server_client_handle_key(struct client *c, key_code key) if (server_client_is_default_key_table(c, c->keytable) && wp != NULL && wp->mode != NULL && - wp->mode->key_table != NULL) - table = key_bindings_get_table(wp->mode->key_table(wp), 1); + wp->mode->mode->key_table != NULL) { + tablename = wp->mode->mode->key_table(wp->mode); + table = key_bindings_get_table(tablename, 1); + } else table = c->keytable; first = table; diff --git a/tmux.h b/tmux.h index f0ee838ebc..69935f17db 100644 --- a/tmux.h +++ b/tmux.h @@ -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; diff --git a/window-buffer.c b/window-buffer.c index c67fa008e7..e1008e6bc3 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -25,12 +25,12 @@ #include "tmux.h" -static struct screen *window_buffer_init(struct window_pane *, +static struct screen *window_buffer_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_buffer_free(struct window_pane *); -static void window_buffer_resize(struct window_pane *, u_int, +static void window_buffer_free(struct window_mode_entry *); +static void window_buffer_resize(struct window_mode_entry *, u_int, u_int); -static void window_buffer_key(struct window_pane *, +static void window_buffer_key(struct window_mode_entry *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); @@ -253,13 +253,14 @@ window_buffer_search(__unused void *modedata, void *itemdata, const char *ss) } static struct screen * -window_buffer_init(struct window_pane *wp, __unused struct cmd_find_state *fs, - struct args *args) +window_buffer_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, struct args *args) { + struct window_pane *wp = wme->wp; struct window_buffer_modedata *data; struct screen *s; - wp->modedata = data = xcalloc(1, sizeof *data); + wme->data = data = xcalloc(1, sizeof *data); if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_BUFFER_DEFAULT_FORMAT); @@ -282,9 +283,9 @@ window_buffer_init(struct window_pane *wp, __unused struct cmd_find_state *fs, } static void -window_buffer_free(struct window_pane *wp) +window_buffer_free(struct window_mode_entry *wme) { - struct window_buffer_modedata *data = wp->modedata; + struct window_buffer_modedata *data = wme->data; u_int i; if (data == NULL) @@ -303,9 +304,9 @@ window_buffer_free(struct window_pane *wp) } static void -window_buffer_resize(struct window_pane *wp, u_int sx, u_int sy) +window_buffer_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_buffer_modedata *data = wp->modedata; + struct window_buffer_modedata *data = wme->data; mode_tree_resize(data->data, sx, sy); } @@ -337,11 +338,12 @@ window_buffer_do_paste(void* modedata, void *itemdata, struct client *c, } static void -window_buffer_key(struct window_pane *wp, struct client *c, +window_buffer_key(struct window_mode_entry *wme, struct client *c, __unused struct session *s, __unused struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_buffer_modedata *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_buffer_modedata *data = wme->data; struct mode_tree_data *mtd = data->data; struct window_buffer_itemdata *item; int finished; diff --git a/window-client.c b/window-client.c index 7ac13b0bb3..f0c81cf00a 100644 --- a/window-client.c +++ b/window-client.c @@ -25,12 +25,12 @@ #include "tmux.h" -static struct screen *window_client_init(struct window_pane *, +static struct screen *window_client_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_client_free(struct window_pane *); -static void window_client_resize(struct window_pane *, u_int, +static void window_client_free(struct window_mode_entry *); +static void window_client_resize(struct window_mode_entry *, u_int, u_int); -static void window_client_key(struct window_pane *, +static void window_client_key(struct window_mode_entry *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); @@ -236,13 +236,14 @@ window_client_draw(__unused void *modedata, void *itemdata, } static struct screen * -window_client_init(struct window_pane *wp, __unused struct cmd_find_state *fs, - struct args *args) +window_client_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, struct args *args) { + struct window_pane *wp = wme->wp; struct window_client_modedata *data; struct screen *s; - wp->modedata = data = xcalloc(1, sizeof *data); + wme->data = data = xcalloc(1, sizeof *data); if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_CLIENT_DEFAULT_FORMAT); @@ -265,9 +266,9 @@ window_client_init(struct window_pane *wp, __unused struct cmd_find_state *fs, } static void -window_client_free(struct window_pane *wp) +window_client_free(struct window_mode_entry *wme) { - struct window_client_modedata *data = wp->modedata; + struct window_client_modedata *data = wme->data; u_int i; if (data == NULL) @@ -286,9 +287,9 @@ window_client_free(struct window_pane *wp) } static void -window_client_resize(struct window_pane *wp, u_int sx, u_int sy) +window_client_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_client_modedata *data = wp->modedata; + struct window_client_modedata *data = wme->data; mode_tree_resize(data->data, sx, sy); } @@ -311,11 +312,12 @@ window_client_do_detach(void* modedata, void *itemdata, } static void -window_client_key(struct window_pane *wp, struct client *c, +window_client_key(struct window_mode_entry *wme, struct client *c, __unused struct session *s, __unused struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_client_modedata *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_client_modedata *data = wme->data; struct mode_tree_data *mtd = data->data; struct window_client_itemdata *item; int finished; diff --git a/window-clock.c b/window-clock.c index 9642a141d3..c7074c0db9 100644 --- a/window-clock.c +++ b/window-clock.c @@ -24,16 +24,16 @@ #include "tmux.h" -static struct screen *window_clock_init(struct window_pane *, +static struct screen *window_clock_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_clock_free(struct window_pane *); -static void window_clock_resize(struct window_pane *, u_int, u_int); -static void window_clock_key(struct window_pane *, struct client *, +static void window_clock_free(struct window_mode_entry *); +static void window_clock_resize(struct window_mode_entry *, u_int, u_int); +static void window_clock_key(struct window_mode_entry *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); static void window_clock_timer_callback(int, short, void *); -static void window_clock_draw_screen(struct window_pane *); +static void window_clock_draw_screen(struct window_mode_entry *); const struct window_mode window_clock_mode = { .name = "clock-mode", @@ -126,8 +126,9 @@ const char window_clock_table[14][5][5] = { static void window_clock_timer_callback(__unused int fd, __unused short events, void *arg) { - struct window_pane *wp = arg; - struct window_clock_mode_data *data = wp->modedata; + struct window_mode_entry *wme = arg; + struct window_pane *wp = wme->wp; + struct window_clock_mode_data *data = wme->data; struct tm now, then; time_t t; struct timeval tv = { .tv_sec = 1 }; @@ -142,37 +143,38 @@ window_clock_timer_callback(__unused int fd, __unused short events, void *arg) return; data->tim = t; - window_clock_draw_screen(wp); + window_clock_draw_screen(wme); server_redraw_window(wp->window); } static struct screen * -window_clock_init(struct window_pane *wp, __unused struct cmd_find_state *fs, - __unused struct args *args) +window_clock_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, __unused struct args *args) { + struct window_pane *wp = wme->wp; struct window_clock_mode_data *data; struct screen *s; struct timeval tv = { .tv_sec = 1 }; - wp->modedata = data = xmalloc(sizeof *data); + wme->data = data = xmalloc(sizeof *data); data->tim = time(NULL); - evtimer_set(&data->timer, window_clock_timer_callback, wp); + evtimer_set(&data->timer, window_clock_timer_callback, wme); evtimer_add(&data->timer, &tv); s = &data->screen; screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); s->mode &= ~MODE_CURSOR; - window_clock_draw_screen(wp); + window_clock_draw_screen(wme); return (s); } static void -window_clock_free(struct window_pane *wp) +window_clock_free(struct window_mode_entry *wme) { - struct window_clock_mode_data *data = wp->modedata; + struct window_clock_mode_data *data = wme->data; evtimer_del(&data->timer); screen_free(&data->screen); @@ -180,27 +182,28 @@ window_clock_free(struct window_pane *wp) } static void -window_clock_resize(struct window_pane *wp, u_int sx, u_int sy) +window_clock_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_clock_mode_data *data = wp->modedata; + struct window_clock_mode_data *data = wme->data; struct screen *s = &data->screen; screen_resize(s, sx, sy, 0); - window_clock_draw_screen(wp); + window_clock_draw_screen(wme); } static void -window_clock_key(struct window_pane *wp, __unused struct client *c, +window_clock_key(struct window_mode_entry *wme, __unused struct client *c, __unused struct session *s, __unused struct winlink *wl, __unused key_code key, __unused struct mouse_event *m) { - window_pane_reset_mode(wp); + window_pane_reset_mode(wme->wp); } static void -window_clock_draw_screen(struct window_pane *wp) +window_clock_draw_screen(struct window_mode_entry *wme) { - struct window_clock_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_clock_mode_data *data = wme->data; struct screen_write_ctx ctx; int colour, style; struct screen *s = &data->screen; diff --git a/window-copy.c b/window-copy.c index a79e3bf435..9efc6a4641 100644 --- a/window-copy.c +++ b/window-copy.c @@ -24,85 +24,93 @@ #include "tmux.h" -static const char *window_copy_key_table(struct window_pane *); -static void window_copy_command(struct window_pane *, struct client *, +static const char *window_copy_key_table(struct window_mode_entry *); +static void window_copy_command(struct window_mode_entry *, struct client *, struct session *, struct winlink *, struct args *, struct mouse_event *); -static struct screen *window_copy_init(struct window_pane *, +static struct screen *window_copy_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_copy_free(struct window_pane *); -static void window_copy_resize(struct window_pane *, u_int, u_int); -static void window_copy_formats(struct window_pane *, struct format_tree *); -static int window_copy_pagedown(struct window_pane *, int, int); -static void window_copy_next_paragraph(struct window_pane *); -static void window_copy_previous_paragraph(struct window_pane *); - -static void window_copy_redraw_selection(struct window_pane *, u_int); -static void window_copy_redraw_lines(struct window_pane *, u_int, u_int); -static void window_copy_redraw_screen(struct window_pane *); -static void window_copy_write_line(struct window_pane *, +static void window_copy_free(struct window_mode_entry *); +static void window_copy_resize(struct window_mode_entry *, u_int, u_int); +static void window_copy_formats(struct window_mode_entry *, + struct format_tree *); +static void window_copy_pageup1(struct window_mode_entry *, int); +static int window_copy_pagedown(struct window_mode_entry *, int, int); +static void window_copy_next_paragraph(struct window_mode_entry *); +static void window_copy_previous_paragraph(struct window_mode_entry *); + +static void window_copy_redraw_selection(struct window_mode_entry *, u_int); +static void window_copy_redraw_lines(struct window_mode_entry *, u_int, + u_int); +static void window_copy_redraw_screen(struct window_mode_entry *); +static void window_copy_write_line(struct window_mode_entry *, struct screen_write_ctx *, u_int); -static void window_copy_write_lines(struct window_pane *, +static void window_copy_write_lines(struct window_mode_entry *, struct screen_write_ctx *, u_int, u_int); -static void window_copy_scroll_to(struct window_pane *, u_int, u_int); +static void window_copy_scroll_to(struct window_mode_entry *, u_int, u_int); static int window_copy_search_compare(struct grid *, u_int, u_int, struct grid *, u_int, int); static int window_copy_search_lr(struct grid *, struct grid *, u_int *, u_int, u_int, u_int, int); static int window_copy_search_rl(struct grid *, struct grid *, u_int *, u_int, u_int, u_int, int); -static int window_copy_search_marks(struct window_pane *, struct screen *); -static void window_copy_clear_marks(struct window_pane *); +static int window_copy_search_marks(struct window_mode_entry *, + struct screen *); +static void window_copy_clear_marks(struct window_mode_entry *); static void window_copy_move_left(struct screen *, u_int *, u_int *); static void window_copy_move_right(struct screen *, u_int *, u_int *); static int window_copy_is_lowercase(const char *); -static int window_copy_search_jump(struct window_pane *, struct grid *, - struct grid *, u_int, u_int, u_int, int, int, int); -static int window_copy_search(struct window_pane *, int); -static int window_copy_search_up(struct window_pane *); -static int window_copy_search_down(struct window_pane *); -static void window_copy_goto_line(struct window_pane *, const char *); -static void window_copy_update_cursor(struct window_pane *, u_int, u_int); -static void window_copy_start_selection(struct window_pane *); -static int window_copy_adjust_selection(struct window_pane *, u_int *, - u_int *); -static int window_copy_set_selection(struct window_pane *, int); -static int window_copy_update_selection(struct window_pane *, int); -static void window_copy_synchronize_cursor(struct window_pane *); -static void *window_copy_get_selection(struct window_pane *, size_t *); -static void window_copy_copy_buffer(struct window_pane *, void *, size_t); -static void window_copy_copy_pipe(struct window_pane *, struct session *, +static int window_copy_search_jump(struct window_mode_entry *, + struct grid *, struct grid *, u_int, u_int, u_int, int, int, + int); +static int window_copy_search(struct window_mode_entry *, int); +static int window_copy_search_up(struct window_mode_entry *); +static int window_copy_search_down(struct window_mode_entry *); +static void window_copy_goto_line(struct window_mode_entry *, const char *); +static void window_copy_update_cursor(struct window_mode_entry *, u_int, + u_int); +static void window_copy_start_selection(struct window_mode_entry *); +static int window_copy_adjust_selection(struct window_mode_entry *, + u_int *, u_int *); +static int window_copy_set_selection(struct window_mode_entry *, int); +static int window_copy_update_selection(struct window_mode_entry *, int); +static void window_copy_synchronize_cursor(struct window_mode_entry *); +static void *window_copy_get_selection(struct window_mode_entry *, size_t *); +static void window_copy_copy_buffer(struct window_mode_entry *, void *, + size_t); +static void window_copy_copy_pipe(struct window_mode_entry *, + struct session *, const char *); +static void window_copy_copy_selection(struct window_mode_entry *); +static void window_copy_append_selection(struct window_mode_entry *); +static void window_copy_clear_selection(struct window_mode_entry *); +static void window_copy_copy_line(struct window_mode_entry *, char **, + size_t *, u_int, u_int, u_int); +static int window_copy_in_set(struct window_mode_entry *, u_int, u_int, const char *); -static void window_copy_copy_selection(struct window_pane *); -static void window_copy_append_selection(struct window_pane *); -static void window_copy_clear_selection(struct window_pane *); -static void window_copy_copy_line(struct window_pane *, char **, size_t *, - u_int, u_int, u_int); -static int window_copy_in_set(struct window_pane *, u_int, u_int, +static u_int window_copy_find_length(struct window_mode_entry *, u_int); +static void window_copy_cursor_start_of_line(struct window_mode_entry *); +static void window_copy_cursor_back_to_indentation( + struct window_mode_entry *); +static void window_copy_cursor_end_of_line(struct window_mode_entry *); +static void window_copy_other_end(struct window_mode_entry *); +static void window_copy_cursor_left(struct window_mode_entry *); +static void window_copy_cursor_right(struct window_mode_entry *); +static void window_copy_cursor_up(struct window_mode_entry *, int); +static void window_copy_cursor_down(struct window_mode_entry *, int); +static void window_copy_cursor_jump(struct window_mode_entry *); +static void window_copy_cursor_jump_back(struct window_mode_entry *); +static void window_copy_cursor_jump_to(struct window_mode_entry *); +static void window_copy_cursor_jump_to_back(struct window_mode_entry *); +static void window_copy_cursor_next_word(struct window_mode_entry *, const char *); -static u_int window_copy_find_length(struct window_pane *, u_int); -static void window_copy_cursor_start_of_line(struct window_pane *); -static void window_copy_cursor_back_to_indentation(struct window_pane *); -static void window_copy_cursor_end_of_line(struct window_pane *); -static void window_copy_other_end(struct window_pane *); -static void window_copy_cursor_left(struct window_pane *); -static void window_copy_cursor_right(struct window_pane *); -static void window_copy_cursor_up(struct window_pane *, int); -static void window_copy_cursor_down(struct window_pane *, int); -static void window_copy_cursor_jump(struct window_pane *); -static void window_copy_cursor_jump_back(struct window_pane *); -static void window_copy_cursor_jump_to(struct window_pane *); -static void window_copy_cursor_jump_to_back(struct window_pane *); -static void window_copy_cursor_next_word(struct window_pane *, +static void window_copy_cursor_next_word_end(struct window_mode_entry *, const char *); -static void window_copy_cursor_next_word_end(struct window_pane *, +static void window_copy_cursor_previous_word(struct window_mode_entry *, const char *); -static void window_copy_cursor_previous_word(struct window_pane *, - const char *); -static void window_copy_scroll_up(struct window_pane *, u_int); -static void window_copy_scroll_down(struct window_pane *, u_int); -static void window_copy_rectangle_toggle(struct window_pane *); +static void window_copy_scroll_up(struct window_mode_entry *, u_int); +static void window_copy_scroll_down(struct window_mode_entry *, u_int); +static void window_copy_rectangle_toggle(struct window_mode_entry *); static void window_copy_move_mouse(struct mouse_event *); static void window_copy_drag_update(struct client *, struct mouse_event *); @@ -196,13 +204,14 @@ struct window_copy_mode_data { }; static struct screen * -window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, - __unused struct args *args) +window_copy_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, __unused struct args *args) { + struct window_pane *wp = wme->wp; struct window_copy_mode_data *data; struct screen *s; - wp->modedata = data = xcalloc(1, sizeof *data); + wme->data = data = xcalloc(1, sizeof *data); data->cursordrag = CURSORDRAG_NONE; data->lineflag = LINE_SEL_NONE; @@ -235,12 +244,13 @@ window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, void window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) { - struct window_copy_mode_data *data = wp->modedata; + struct window_mode_entry *wme = wp->mode; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; u_int i; - if (wp->mode != &window_copy_mode) + if (wme == NULL || wme->mode != &window_copy_mode) fatalx("not in copy mode"); data->backing = &wp->base; @@ -253,7 +263,7 @@ window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) screen_write_start(&ctx, NULL, s); for (i = 0; i < screen_size_y(s); i++) - window_copy_write_line(wp, &ctx, i); + window_copy_write_line(wme, &ctx, i); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); } @@ -261,23 +271,28 @@ window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) void window_copy_init_for_output(struct window_pane *wp) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data; - if (wp->mode == &window_copy_mode && data->backing != &wp->base) - return; + if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) { + data = wp->mode->data; + if (data->backing != &wp->base) + return; + } window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); + data = wp->mode->data; - data = wp->modedata; data->backing = xmalloc(sizeof *data->backing); screen_init(data->backing, screen_size_x(&wp->base), screen_size_y(&wp->base), UINT_MAX); } static void -window_copy_free(struct window_pane *wp) +window_copy_free(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; if (wp->fd != -1) bufferevent_enable(wp->event, EV_READ|EV_WRITE); @@ -307,7 +322,8 @@ window_copy_add(struct window_pane *wp, const char *fmt, ...) void window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) { - struct window_copy_mode_data *data = wp->modedata; + struct window_mode_entry *wme = wp->mode; + struct window_copy_mode_data *data = wme->data; struct screen *backing = data->backing; struct screen_write_ctx back_ctx, ctx; struct grid_cell gc; @@ -342,10 +358,10 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) * (If there's any history at all, it has changed.) */ if (screen_hsize(data->backing)) - window_copy_redraw_lines(wp, 0, 1); + window_copy_redraw_lines(wme, 0, 1); /* Write the new lines. */ - window_copy_redraw_lines(wp, old_cy, backing->cy - old_cy + 1); + window_copy_redraw_lines(wme, old_cy, backing->cy - old_cy + 1); screen_write_stop(&ctx); } @@ -353,12 +369,18 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) void window_copy_pageup(struct window_pane *wp, int half_page) { - struct window_copy_mode_data *data = wp->modedata; + window_copy_pageup1(wp->mode, half_page); +} + +static void +window_copy_pageup1(struct window_mode_entry *wme, int half_page) +{ + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int n, ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; @@ -385,25 +407,26 @@ window_copy_pageup(struct window_pane *wp, int half_page) if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static int -window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) +window_copy_pagedown(struct window_mode_entry *wme, int half_page, + int scroll_exit) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int n, ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; @@ -430,60 +453,60 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } if (scroll_exit && data->oy == 0) return (1); - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); return (0); } static void -window_copy_previous_paragraph(struct window_pane *wp) +window_copy_previous_paragraph(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int oy; oy = screen_hsize(data->backing) + data->cy - data->oy; - while (oy > 0 && window_copy_find_length(wp, oy) == 0) + while (oy > 0 && window_copy_find_length(wme, oy) == 0) oy--; - while (oy > 0 && window_copy_find_length(wp, oy) > 0) + while (oy > 0 && window_copy_find_length(wme, oy) > 0) oy--; - window_copy_scroll_to(wp, 0, oy); + window_copy_scroll_to(wme, 0, oy); } static void -window_copy_next_paragraph(struct window_pane *wp) +window_copy_next_paragraph(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int maxy, ox, oy; oy = screen_hsize(data->backing) + data->cy - data->oy; maxy = screen_hsize(data->backing) + screen_size_y(s) - 1; - while (oy < maxy && window_copy_find_length(wp, oy) == 0) + while (oy < maxy && window_copy_find_length(wme, oy) == 0) oy++; - while (oy < maxy && window_copy_find_length(wp, oy) > 0) + while (oy < maxy && window_copy_find_length(wme, oy) > 0) oy++; - ox = window_copy_find_length(wp, oy); - window_copy_scroll_to(wp, ox, oy); + ox = window_copy_find_length(wme, oy); + window_copy_scroll_to(wme, ox, oy); } static void -window_copy_formats(struct window_pane *wp, struct format_tree *ft) +window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; format_add(ft, "selection_present", "%d", data->screen.sel != NULL); format_add(ft, "scroll_position", "%d", data->oy); @@ -491,9 +514,10 @@ window_copy_formats(struct window_pane *wp, struct format_tree *ft) } static void -window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) +window_copy_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; @@ -508,37 +532,41 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) if (data->oy > screen_hsize(data->backing)) data->oy = screen_hsize(data->backing); - window_copy_clear_selection(wp); + window_copy_clear_selection(wme); screen_write_start(&ctx, NULL, s); - window_copy_write_lines(wp, &ctx, 0, screen_size_y(s) - 1); + window_copy_write_lines(wme, &ctx, 0, screen_size_y(s) - 1); screen_write_stop(&ctx); if (data->searchmark != NULL) - window_copy_search_marks(wp, NULL); + window_copy_search_marks(wme, NULL); data->searchx = data->cx; data->searchy = data->cy; data->searcho = data->oy; - window_copy_redraw_screen(wp); + window_copy_redraw_screen(wme); } static const char * -window_copy_key_table(struct window_pane *wp) +window_copy_key_table(struct window_mode_entry *wme) { + struct window_pane *wp = wme->wp; + if (options_get_number(wp->window->options, "mode-keys") == MODEKEY_VI) return ("copy-mode-vi"); return ("copy-mode"); } static void -window_copy_command(struct window_pane *wp, struct client *c, struct session *s, - __unused struct winlink *wl, struct args *args, struct mouse_event *m) +window_copy_command(struct window_mode_entry *wme, struct client *c, + struct session *s, __unused struct winlink *wl, struct args *args, + struct mouse_event *m) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *sn = &data->screen; const char *command, *argument, *ws; - u_int np = wp->modeprefix; + u_int np = wme->prefix; int cancel = 0, redraw = 0, scroll_exit; char prefix; @@ -552,25 +580,25 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (args->argc == 1) { if (strcmp(command, "append-selection") == 0) { if (s != NULL) - window_copy_append_selection(wp); - window_copy_clear_selection(wp); + window_copy_append_selection(wme); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "append-selection-and-cancel") == 0) { if (s != NULL) - window_copy_append_selection(wp); - window_copy_clear_selection(wp); + window_copy_append_selection(wme); + window_copy_clear_selection(wme); redraw = 1; cancel = 1; } if (strcmp(command, "back-to-indentation") == 0) - window_copy_cursor_back_to_indentation(wp); + window_copy_cursor_back_to_indentation(wme); if (strcmp(command, "begin-selection") == 0) { if (m != NULL) window_copy_start_drag(c, m); else { data->lineflag = LINE_SEL_NONE; - window_copy_start_selection(wp); + window_copy_start_selection(wme); redraw = 1; } } @@ -579,71 +607,71 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (strcmp(command, "bottom-line") == 0) { data->cx = 0; data->cy = screen_size_y(sn) - 1; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "cancel") == 0) cancel = 1; if (strcmp(command, "clear-selection") == 0) { - window_copy_clear_selection(wp); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "copy-end-of-line") == 0) { - window_copy_start_selection(wp); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp); + window_copy_copy_selection(wme); cancel = 1; } } if (strcmp(command, "copy-line") == 0) { - window_copy_cursor_start_of_line(wp); - window_copy_start_selection(wp); + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp); + window_copy_copy_selection(wme); cancel = 1; } } if (strcmp(command, "copy-selection") == 0) { if (s != NULL) - window_copy_copy_selection(wp); - window_copy_clear_selection(wp); + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "copy-selection-and-cancel") == 0) { if (s != NULL) - window_copy_copy_selection(wp); - window_copy_clear_selection(wp); + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); redraw = 1; cancel = 1; } if (strcmp(command, "cursor-down") == 0) { for (; np != 0; np--) - window_copy_cursor_down(wp, 0); + window_copy_cursor_down(wme, 0); } if (strcmp(command, "cursor-left") == 0) { for (; np != 0; np--) - window_copy_cursor_left(wp); + window_copy_cursor_left(wme); } if (strcmp(command, "cursor-right") == 0) { for (; np != 0; np--) - window_copy_cursor_right(wp); + window_copy_cursor_right(wme); } if (strcmp(command, "cursor-up") == 0) { for (; np != 0; np--) - window_copy_cursor_up(wp, 0); + window_copy_cursor_up(wme, 0); } if (strcmp(command, "end-of-line") == 0) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); if (strcmp(command, "halfpage-down") == 0 || strcmp(command, "halfpage-down-and-cancel") == 0) { if (strcmp(command, "halfpage-down-and-cancel") == 0) @@ -651,7 +679,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 1, scroll_exit)) { + if (window_copy_pagedown(wme, 1, scroll_exit)) { cancel = 1; break; } @@ -659,39 +687,39 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "halfpage-up") == 0) { for (; np != 0; np--) - window_copy_pageup(wp, 1); + window_copy_pageup1(wme, 1); } if (strcmp(command, "history-bottom") == 0) { data->cx = 0; data->cy = screen_size_y(sn) - 1; data->oy = 0; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "history-top") == 0) { data->cx = 0; data->cy = 0; data->oy = screen_hsize(data->backing); - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "jump-again") == 0) { switch (data->jumptype) { case WINDOW_COPY_JUMPFORWARD: for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); break; case WINDOW_COPY_JUMPBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); break; case WINDOW_COPY_JUMPTOFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); break; case WINDOW_COPY_JUMPTOBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); break; } } @@ -699,53 +727,53 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, switch (data->jumptype) { case WINDOW_COPY_JUMPFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); break; case WINDOW_COPY_JUMPBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); break; case WINDOW_COPY_JUMPTOFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); break; case WINDOW_COPY_JUMPTOBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); break; } } if (strcmp(command, "middle-line") == 0) { data->cx = 0; data->cy = (screen_size_y(sn) - 1) / 2; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "next-paragraph") == 0) { for (; np != 0; np--) - window_copy_next_paragraph(wp); + window_copy_next_paragraph(wme); } if (strcmp(command, "next-space") == 0) { for (; np != 0; np--) - window_copy_cursor_next_word(wp, " "); + window_copy_cursor_next_word(wme, " "); } if (strcmp(command, "next-space-end") == 0) { for (; np != 0; np--) - window_copy_cursor_next_word_end(wp, " "); + window_copy_cursor_next_word_end(wme, " "); } if (strcmp(command, "next-word") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_next_word(wp, ws); + window_copy_cursor_next_word(wme, ws); } if (strcmp(command, "next-word-end") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_next_word_end(wp, ws); + window_copy_cursor_next_word_end(wme, ws); } if (strcmp(command, "other-end") == 0) { if ((np % 2) != 0) - window_copy_other_end(wp); + window_copy_other_end(wme); } if (strcmp(command, "page-down") == 0 || strcmp(command, "page-down-and-cancel") == 0) { @@ -754,7 +782,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 0, scroll_exit)) { + if (window_copy_pagedown(wme, 0, scroll_exit)) { cancel = 1; break; } @@ -762,24 +790,24 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "page-up") == 0) { for (; np != 0; np--) - window_copy_pageup(wp, 0); + window_copy_pageup1(wme, 0); } if (strcmp(command, "previous-paragraph") == 0) { for (; np != 0; np--) - window_copy_previous_paragraph(wp); + window_copy_previous_paragraph(wme); } if (strcmp(command, "previous-space") == 0) { for (; np != 0; np--) - window_copy_cursor_previous_word(wp, " "); + window_copy_cursor_previous_word(wme, " "); } if (strcmp(command, "previous-word") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_previous_word(wp, ws); + window_copy_cursor_previous_word(wme, ws); } if (strcmp(command, "rectangle-toggle") == 0) { data->lineflag = LINE_SEL_NONE; - window_copy_rectangle_toggle(wp); + window_copy_rectangle_toggle(wme); } if (strcmp(command, "scroll-down") == 0 || strcmp(command, "scroll-down-and-cancel") == 0) { @@ -788,110 +816,110 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) - window_copy_cursor_down(wp, 1); + window_copy_cursor_down(wme, 1); if (scroll_exit && data->oy == 0) cancel = 1; } if (strcmp(command, "scroll-up") == 0) { for (; np != 0; np--) - window_copy_cursor_up(wp, 1); + window_copy_cursor_up(wme, 1); } if (strcmp(command, "search-again") == 0) { if (data->searchtype == WINDOW_COPY_SEARCHUP) { for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } } if (strcmp(command, "search-reverse") == 0) { if (data->searchtype == WINDOW_COPY_SEARCHUP) { for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } } if (strcmp(command, "select-line") == 0) { data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; - window_copy_cursor_start_of_line(wp); - window_copy_start_selection(wp); + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; } if (strcmp(command, "select-word") == 0) { data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; ws = options_get_string(s->options, "word-separators"); - window_copy_cursor_previous_word(wp, ws); - window_copy_start_selection(wp); - window_copy_cursor_next_word_end(wp, ws); + window_copy_cursor_previous_word(wme, ws); + window_copy_start_selection(wme); + window_copy_cursor_next_word_end(wme, ws); redraw = 1; } if (strcmp(command, "start-of-line") == 0) - window_copy_cursor_start_of_line(wp); + window_copy_cursor_start_of_line(wme); if (strcmp(command, "top-line") == 0) { data->cx = 0; data->cy = 0; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } } else if (args->argc == 2 && *args->argv[1] != '\0') { argument = args->argv[1]; if (strcmp(command, "copy-pipe") == 0) { if (s != NULL) - window_copy_copy_pipe(wp, s, argument); + window_copy_copy_pipe(wme, s, argument); } if (strcmp(command, "copy-pipe-and-cancel") == 0) { if (s != NULL) { - window_copy_copy_pipe(wp, s, argument); + window_copy_copy_pipe(wme, s, argument); cancel = 1; } } if (strcmp(command, "goto-line") == 0) - window_copy_goto_line(wp, argument); + window_copy_goto_line(wme, argument); if (strcmp(command, "jump-backward") == 0) { data->jumptype = WINDOW_COPY_JUMPBACKWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); } if (strcmp(command, "jump-forward") == 0) { data->jumptype = WINDOW_COPY_JUMPFORWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); } if (strcmp(command, "jump-to-backward") == 0) { data->jumptype = WINDOW_COPY_JUMPTOBACKWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); } if (strcmp(command, "jump-to-forward") == 0) { data->jumptype = WINDOW_COPY_JUMPTOFORWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); } if (strcmp(command, "search-backward") == 0) { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } if (strcmp(command, "search-forward") == 0) { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } if (strcmp(command, "search-backward-incremental") == 0) { prefix = *argument++; @@ -907,22 +935,22 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; } if (*argument == '\0') { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; } else if (prefix == '=' || prefix == '-') { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } else if (prefix == '+') { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } @@ -941,22 +969,22 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; } if (*argument == '\0') { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; } else if (prefix == '=' || prefix == '+') { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } else if (prefix == '-') { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } @@ -964,7 +992,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strncmp(command, "search-", 7) != 0 && data->searchmark != NULL) { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; data->searchx = data->searchy = -1; } @@ -972,14 +1000,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (cancel) window_pane_reset_mode(wp); else if (redraw) - window_copy_redraw_screen(wp); - wp->modeprefix = 1; + window_copy_redraw_screen(wme); + wme->prefix = 1; } static void -window_copy_scroll_to(struct window_pane *wp, u_int px, u_int py) +window_copy_scroll_to(struct window_mode_entry *wme, u_int px, u_int py) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct grid *gd = data->backing->grid; u_int offset, gap; @@ -1002,8 +1030,8 @@ window_copy_scroll_to(struct window_pane *wp, u_int px, u_int py) data->oy = gd->hsize - offset; } - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static int @@ -1119,7 +1147,7 @@ window_copy_is_lowercase(const char *ptr) * not found. */ static int -window_copy_search_jump(struct window_pane *wp, struct grid *gd, +window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd, struct grid *sgd, u_int fx, u_int fy, u_int endline, int cis, int wrap, int direction) { @@ -1148,11 +1176,11 @@ window_copy_search_jump(struct window_pane *wp, struct grid *gd, } if (found) { - window_copy_scroll_to(wp, px, i); + window_copy_scroll_to(wme, px, i); return (1); } if (wrap) { - return (window_copy_search_jump(wp, gd, sgd, + return (window_copy_search_jump(wme, gd, sgd, direction ? 0 : gd->sx - 1, direction ? 0 : gd->hsize + gd->sy - 1, fy, cis, 0, direction)); @@ -1165,9 +1193,10 @@ window_copy_search_jump(struct window_pane *wp, struct grid *gd, * down. */ static int -window_copy_search(struct window_pane *wp, int direction) +window_copy_search(struct window_mode_entry *wme, int direction) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = data->backing, ss; struct screen_write_ctx ctx; struct grid *gd = s->grid; @@ -1197,20 +1226,20 @@ window_copy_search(struct window_pane *wp, int direction) endline = gd->hsize + gd->sy - 1; else endline = 0; - found = window_copy_search_jump(wp, gd, ss.grid, fx, fy, endline, cis, + found = window_copy_search_jump(wme, gd, ss.grid, fx, fy, endline, cis, wrapflag, direction); - if (window_copy_search_marks(wp, &ss)) - window_copy_redraw_screen(wp); + if (window_copy_search_marks(wme, &ss)) + window_copy_redraw_screen(wme); screen_free(&ss); return (found); } static int -window_copy_search_marks(struct window_pane *wp, struct screen *ssp) +window_copy_search_marks(struct window_mode_entry *wme, struct screen *ssp) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = data->backing, ss; struct screen_write_ctx ctx; struct grid *gd = s->grid; @@ -1264,30 +1293,30 @@ window_copy_search_marks(struct window_pane *wp, struct screen *ssp) } static void -window_copy_clear_marks(struct window_pane *wp) +window_copy_clear_marks(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; free(data->searchmark); data->searchmark = NULL; } static int -window_copy_search_up(struct window_pane *wp) +window_copy_search_up(struct window_mode_entry *wme) { - return (window_copy_search(wp, 0)); + return (window_copy_search(wme, 0)); } static int -window_copy_search_down(struct window_pane *wp) +window_copy_search_down(struct window_mode_entry *wme) { - return (window_copy_search(wp, 1)); + return (window_copy_search(wme, 1)); } static void -window_copy_goto_line(struct window_pane *wp, const char *linestr) +window_copy_goto_line(struct window_mode_entry *wme, const char *linestr) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; const char *errstr; int lineno; @@ -1298,15 +1327,16 @@ window_copy_goto_line(struct window_pane *wp, const char *linestr) lineno = screen_hsize(data->backing); data->oy = lineno; - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static void -window_copy_write_line(struct window_pane *wp, struct screen_write_ctx *ctx, - u_int py) +window_copy_write_line(struct window_mode_entry *wme, + struct screen_write_ctx *ctx, u_int py) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct options *oo = wp->window->options; struct grid_cell gc; @@ -1354,19 +1384,19 @@ window_copy_write_line(struct window_pane *wp, struct screen_write_ctx *ctx, } static void -window_copy_write_lines(struct window_pane *wp, struct screen_write_ctx *ctx, - u_int py, u_int ny) +window_copy_write_lines(struct window_mode_entry *wme, + struct screen_write_ctx *ctx, u_int py, u_int ny) { u_int yy; for (yy = py; yy < py + ny; yy++) - window_copy_write_line(wp, ctx, py); + window_copy_write_line(wme, ctx, py); } static void -window_copy_redraw_selection(struct window_pane *wp, u_int old_y) +window_copy_redraw_selection(struct window_mode_entry *wme, u_int old_y) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int new_y, start, end; new_y = data->cy; @@ -1377,35 +1407,36 @@ window_copy_redraw_selection(struct window_pane *wp, u_int old_y) start = new_y; end = old_y; } - window_copy_redraw_lines(wp, start, end - start + 1); + window_copy_redraw_lines(wme, start, end - start + 1); } static void -window_copy_redraw_lines(struct window_pane *wp, u_int py, u_int ny) +window_copy_redraw_lines(struct window_mode_entry *wme, u_int py, u_int ny) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen_write_ctx ctx; u_int i; screen_write_start(&ctx, wp, NULL); for (i = py; i < py + ny; i++) - window_copy_write_line(wp, &ctx, i); + window_copy_write_line(wme, &ctx, i); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); } static void -window_copy_redraw_screen(struct window_pane *wp) +window_copy_redraw_screen(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; - window_copy_redraw_lines(wp, 0, screen_size_y(&data->screen)); + window_copy_redraw_lines(wme, 0, screen_size_y(&data->screen)); } static void -window_copy_synchronize_cursor(struct window_pane *wp) +window_copy_synchronize_cursor(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int xx, yy; xx = data->cx; @@ -1426,9 +1457,10 @@ window_copy_synchronize_cursor(struct window_pane *wp) } static void -window_copy_update_cursor(struct window_pane *wp, u_int cx, u_int cy) +window_copy_update_cursor(struct window_mode_entry *wme, u_int cx, u_int cy) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; u_int old_cx, old_cy; @@ -1436,9 +1468,9 @@ window_copy_update_cursor(struct window_pane *wp, u_int cx, u_int cy) old_cx = data->cx; old_cy = data->cy; data->cx = cx; data->cy = cy; if (old_cx == screen_size_x(s)) - window_copy_redraw_lines(wp, old_cy, 1); + window_copy_redraw_lines(wme, old_cy, 1); if (data->cx == screen_size_x(s)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_redraw_lines(wme, data->cy, 1); else { screen_write_start(&ctx, wp, NULL); screen_write_cursormove(&ctx, data->cx, data->cy); @@ -1447,9 +1479,9 @@ window_copy_update_cursor(struct window_pane *wp, u_int cx, u_int cy) } static void -window_copy_start_selection(struct window_pane *wp) +window_copy_start_selection(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; data->selx = data->cx; data->sely = screen_hsize(data->backing) + data->cy - data->oy; @@ -1459,13 +1491,14 @@ window_copy_start_selection(struct window_pane *wp) data->cursordrag = CURSORDRAG_ENDSEL; - window_copy_set_selection(wp, 1); + window_copy_set_selection(wme, 1); } static int -window_copy_adjust_selection(struct window_pane *wp, u_int *selx, u_int *sely) +window_copy_adjust_selection(struct window_mode_entry *wme, u_int *selx, + u_int *sely) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int sx, sy, ty; int relpos; @@ -1495,37 +1528,38 @@ window_copy_adjust_selection(struct window_pane *wp, u_int *selx, u_int *sely) } static int -window_copy_update_selection(struct window_pane *wp, int may_redraw) +window_copy_update_selection(struct window_mode_entry *wme, int may_redraw) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; if (s->sel == NULL && data->lineflag == LINE_SEL_NONE) return (0); - return (window_copy_set_selection(wp, may_redraw)); + return (window_copy_set_selection(wme, may_redraw)); } static int -window_copy_set_selection(struct window_pane *wp, int may_redraw) +window_copy_set_selection(struct window_mode_entry *wme, int may_redraw) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct options *oo = wp->window->options; struct grid_cell gc; u_int sx, sy, cy, endsx, endsy; int startrelpos, endrelpos; - window_copy_synchronize_cursor(wp); + window_copy_synchronize_cursor(wme); /* Adjust the selection. */ sx = data->selx; sy = data->sely; - startrelpos = window_copy_adjust_selection(wp, &sx, &sy); + startrelpos = window_copy_adjust_selection(wme, &sx, &sy); /* Adjust the end of selection. */ endsx = data->endselx; endsy = data->endsely; - endrelpos = window_copy_adjust_selection(wp, &endsx, &endsy); + endrelpos = window_copy_adjust_selection(wme, &endsx, &endsy); /* Selection is outside of the current screen */ if (startrelpos == endrelpos && @@ -1549,14 +1583,17 @@ window_copy_set_selection(struct window_pane *wp, int may_redraw) cy = data->cy; if (data->cursordrag == CURSORDRAG_ENDSEL) { if (sy < cy) - window_copy_redraw_lines(wp, sy, cy - sy + 1); + window_copy_redraw_lines(wme, sy, cy - sy + 1); else - window_copy_redraw_lines(wp, cy, sy - cy + 1); + window_copy_redraw_lines(wme, cy, sy - cy + 1); } else { - if (endsy < cy) - window_copy_redraw_lines(wp, endsy, cy - endsy + 1); - else - window_copy_redraw_lines(wp, cy, endsy - cy + 1); + if (endsy < cy) { + window_copy_redraw_lines(wme, endsy, + cy - endsy + 1); + } else { + window_copy_redraw_lines(wme, cy, + endsy - cy + 1); + } } } @@ -1564,9 +1601,10 @@ window_copy_set_selection(struct window_pane *wp, int may_redraw) } static void * -window_copy_get_selection(struct window_pane *wp, size_t *len) +window_copy_get_selection(struct window_mode_entry *wme, size_t *len) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; char *buf; size_t off; @@ -1599,7 +1637,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) } /* Trim ex to end of line. */ - ey_last = window_copy_find_length(wp, ey); + ey_last = window_copy_find_length(wme, ey); if (ex > ey_last) ex = ey_last; @@ -1657,7 +1695,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) /* Copy the lines. */ for (i = sy; i <= ey; i++) { - window_copy_copy_line(wp, &buf, &off, i, + window_copy_copy_line(wme, &buf, &off, i, (i == sy ? firstsx : restsx), (i == ey ? lastex : restex)); } @@ -1674,9 +1712,10 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) } static void -window_copy_copy_buffer(struct window_pane *wp, void *buf, size_t len) +window_copy_copy_buffer(struct window_mode_entry *wme, void *buf, size_t len) { - struct screen_write_ctx ctx; + struct window_pane *wp = wme->wp; + struct screen_write_ctx ctx; if (options_get_number(global_options, "set-clipboard") != 0) { screen_write_start(&ctx, wp, NULL); @@ -1690,15 +1729,16 @@ window_copy_copy_buffer(struct window_pane *wp, void *buf, size_t len) } static void -window_copy_copy_pipe(struct window_pane *wp, struct session *s, +window_copy_copy_pipe(struct window_mode_entry *wme, struct session *s, const char *fmt) { - void *buf; - size_t len; - struct job *job; - char *expanded; + struct window_pane *wp = wme->wp; + void *buf; + size_t len; + struct job *job; + char *expanded; - buf = window_copy_get_selection(wp, &len); + buf = window_copy_get_selection(wme, &len); if (buf == NULL) return; expanded = format_single(NULL, fmt, NULL, s, NULL, wp); @@ -1707,30 +1747,31 @@ window_copy_copy_pipe(struct window_pane *wp, struct session *s, bufferevent_write(job_get_event(job), buf, len); free(expanded); - window_copy_copy_buffer(wp, buf, len); + window_copy_copy_buffer(wme, buf, len); } static void -window_copy_copy_selection(struct window_pane *wp) +window_copy_copy_selection(struct window_mode_entry *wme) { char *buf; size_t len; - buf = window_copy_get_selection(wp, &len); + buf = window_copy_get_selection(wme, &len); if (buf != NULL) - window_copy_copy_buffer(wp, buf, len); + window_copy_copy_buffer(wme, buf, len); } static void -window_copy_append_selection(struct window_pane *wp) +window_copy_append_selection(struct window_mode_entry *wme) { + struct window_pane *wp = wme->wp; char *buf; struct paste_buffer *pb; const char *bufdata, *bufname; size_t len, bufsize; struct screen_write_ctx ctx; - buf = window_copy_get_selection(wp, &len); + buf = window_copy_get_selection(wme, &len); if (buf == NULL) return; @@ -1754,10 +1795,10 @@ window_copy_append_selection(struct window_pane *wp) } static void -window_copy_copy_line(struct window_pane *wp, char **buf, size_t *off, u_int sy, - u_int sx, u_int ex) +window_copy_copy_line(struct window_mode_entry *wme, char **buf, size_t *off, + u_int sy, u_int sx, u_int ex) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct grid *gd = data->backing->grid; struct grid_cell gc; struct grid_line *gl; @@ -1780,7 +1821,7 @@ window_copy_copy_line(struct window_pane *wp, char **buf, size_t *off, u_int sy, if (wrapped) xx = gl->cellsize; else - xx = window_copy_find_length(wp, sy); + xx = window_copy_find_length(wme, sy); if (ex > xx) ex = xx; if (sx > xx) @@ -1814,9 +1855,9 @@ window_copy_copy_line(struct window_pane *wp, char **buf, size_t *off, u_int sy, } static void -window_copy_clear_selection(struct window_pane *wp) +window_copy_clear_selection(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int px, py; screen_clear_selection(&data->screen); @@ -1825,15 +1866,16 @@ window_copy_clear_selection(struct window_pane *wp) data->lineflag = LINE_SEL_NONE; py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if (data->cx > px) - window_copy_update_cursor(wp, px, data->cy); + window_copy_update_cursor(wme, px, data->cy); } static int -window_copy_in_set(struct window_pane *wp, u_int px, u_int py, const char *set) +window_copy_in_set(struct window_mode_entry *wme, u_int px, u_int py, + const char *set) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct grid_cell gc; const struct utf8_data *ud; struct utf8_data *copy; @@ -1860,9 +1902,9 @@ window_copy_in_set(struct window_pane *wp, u_int px, u_int py, const char *set) } static u_int -window_copy_find_length(struct window_pane *wp, u_int py) +window_copy_find_length(struct window_mode_entry *wme, u_int py) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = data->backing; struct grid_cell gc; u_int px; @@ -1886,9 +1928,9 @@ window_copy_find_length(struct window_pane *wp, u_int py) } static void -window_copy_cursor_start_of_line(struct window_pane *wp) +window_copy_cursor_start_of_line(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid *gd = back_s->grid; u_int py; @@ -1897,25 +1939,25 @@ window_copy_cursor_start_of_line(struct window_pane *wp) py = screen_hsize(back_s) + data->cy - data->oy; while (py > 0 && grid_get_line(gd, py - 1)->flags & GRID_LINE_WRAPPED) { - window_copy_cursor_up(wp, 0); + window_copy_cursor_up(wme, 0); py = screen_hsize(back_s) + data->cy - data->oy; } } - window_copy_update_cursor(wp, 0, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, 0, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } static void -window_copy_cursor_back_to_indentation(struct window_pane *wp) +window_copy_cursor_back_to_indentation(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int px, py, xx; struct grid_cell gc; px = 0; py = screen_hsize(data->backing) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); while (px < xx) { grid_get_cell(data->backing->grid, px, py, &gc); @@ -1924,22 +1966,22 @@ window_copy_cursor_back_to_indentation(struct window_pane *wp) px++; } - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } static void -window_copy_cursor_end_of_line(struct window_pane *wp) +window_copy_cursor_end_of_line(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid *gd = back_s->grid; struct grid_line *gl; u_int px, py; py = screen_hsize(back_s) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if (data->cx == px && data->lineflag == LINE_SEL_NONE) { if (data->screen.sel != NULL && data->rectflag) @@ -1950,22 +1992,22 @@ window_copy_cursor_end_of_line(struct window_pane *wp) gl = grid_get_line(gd, py); if (~gl->flags & GRID_LINE_WRAPPED) break; - window_copy_cursor_down(wp, 0); + window_copy_cursor_down(wme, 0); py = screen_hsize(back_s) + data->cy - data->oy; } - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); } } - window_copy_update_cursor(wp, px, data->cy); + window_copy_update_cursor(wme, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } static void -window_copy_other_end(struct window_pane *wp) +window_copy_other_end(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int selx, sely, cy, yy, hsize; @@ -2009,14 +2051,14 @@ window_copy_other_end(struct window_pane *wp) } else data->cy = cy + sely - yy; - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static void -window_copy_cursor_left(struct window_pane *wp) +window_copy_cursor_left(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int py, cx; struct grid_cell gc; @@ -2029,19 +2071,19 @@ window_copy_cursor_left(struct window_pane *wp) cx--; } if (cx == 0 && py > 0) { - window_copy_cursor_up(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_up(wme, 0); + window_copy_cursor_end_of_line(wme); } else if (cx > 0) { - window_copy_update_cursor(wp, cx - 1, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, cx - 1, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } } static void -window_copy_cursor_right(struct window_pane *wp) +window_copy_cursor_right(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int px, py, yy, cx, cy; struct grid_cell gc; @@ -2050,11 +2092,11 @@ window_copy_cursor_right(struct window_pane *wp) if (data->screen.sel != NULL && data->rectflag) px = screen_size_x(&data->screen); else - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if (data->cx >= px && py < yy) { - window_copy_cursor_start_of_line(wp); - window_copy_cursor_down(wp, 0); + window_copy_cursor_start_of_line(wme); + window_copy_cursor_down(wme, 0); } else if (data->cx < px) { cx = data->cx + 1; cy = screen_hsize(data->backing) + data->cy - data->oy; @@ -2064,123 +2106,123 @@ window_copy_cursor_right(struct window_pane *wp) break; cx++; } - window_copy_update_cursor(wp, cx, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, cx, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } } static void -window_copy_cursor_up(struct window_pane *wp, int scroll_only) +window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) - window_copy_other_end(wp); + window_copy_other_end(wme); data->cx = data->lastcx; if (scroll_only || data->cy == 0) { - window_copy_scroll_down(wp, 1); + window_copy_scroll_down(wme, 1); if (scroll_only) { if (data->cy == screen_size_y(s) - 1) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_redraw_lines(wme, data->cy, 1); else - window_copy_redraw_lines(wp, data->cy, 2); + window_copy_redraw_lines(wme, data->cy, 2); } } else { - window_copy_update_cursor(wp, data->cx, data->cy - 1); - if (window_copy_update_selection(wp, 1)) { + window_copy_update_cursor(wme, data->cx, data->cy - 1); + if (window_copy_update_selection(wme, 1)) { if (data->cy == screen_size_y(s) - 1) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_redraw_lines(wme, data->cy, 1); else - window_copy_redraw_lines(wp, data->cy, 2); + window_copy_redraw_lines(wme, data->cy, 2); } } if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } if (data->lineflag == LINE_SEL_LEFT_RIGHT) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); else if (data->lineflag == LINE_SEL_RIGHT_LEFT) - window_copy_cursor_start_of_line(wp); + window_copy_cursor_start_of_line(wme); } static void -window_copy_cursor_down(struct window_pane *wp, int scroll_only) +window_copy_cursor_down(struct window_mode_entry *wme, int scroll_only) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->endsely) - window_copy_other_end(wp); + window_copy_other_end(wme); data->cx = data->lastcx; if (scroll_only || data->cy == screen_size_y(s) - 1) { - window_copy_scroll_up(wp, 1); + window_copy_scroll_up(wme, 1); if (scroll_only && data->cy > 0) - window_copy_redraw_lines(wp, data->cy - 1, 2); + window_copy_redraw_lines(wme, data->cy - 1, 2); } else { - window_copy_update_cursor(wp, data->cx, data->cy + 1); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy - 1, 2); + window_copy_update_cursor(wme, data->cx, data->cy + 1); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy - 1, 2); } if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } if (data->lineflag == LINE_SEL_LEFT_RIGHT) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); else if (data->lineflag == LINE_SEL_RIGHT_LEFT) - window_copy_cursor_start_of_line(wp); + window_copy_cursor_start_of_line(wme); } static void -window_copy_cursor_jump(struct window_pane *wp) +window_copy_cursor_jump(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid_cell gc; u_int px, py, xx; px = data->cx + 1; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); while (px < xx) { grid_get_cell(back_s->grid, px, py, &gc); if (!(gc.flags & GRID_FLAG_PADDING) && gc.data.size == 1 && *gc.data.data == data->jumpchar) { - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); return; } px++; @@ -2188,9 +2230,9 @@ window_copy_cursor_jump(struct window_pane *wp) } static void -window_copy_cursor_jump_back(struct window_pane *wp) +window_copy_cursor_jump_back(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid_cell gc; u_int px, py; @@ -2205,9 +2247,9 @@ window_copy_cursor_jump_back(struct window_pane *wp) grid_get_cell(back_s->grid, px, py, &gc); if (!(gc.flags & GRID_FLAG_PADDING) && gc.data.size == 1 && *gc.data.data == data->jumpchar) { - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); return; } if (px == 0) @@ -2217,24 +2259,24 @@ window_copy_cursor_jump_back(struct window_pane *wp) } static void -window_copy_cursor_jump_to(struct window_pane *wp) +window_copy_cursor_jump_to(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid_cell gc; u_int px, py, xx; px = data->cx + 2; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); while (px < xx) { grid_get_cell(back_s->grid, px, py, &gc); if (!(gc.flags & GRID_FLAG_PADDING) && gc.data.size == 1 && *gc.data.data == data->jumpchar) { - window_copy_update_cursor(wp, px - 1, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px - 1, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); return; } px++; @@ -2242,9 +2284,9 @@ window_copy_cursor_jump_to(struct window_pane *wp) } static void -window_copy_cursor_jump_to_back(struct window_pane *wp) +window_copy_cursor_jump_to_back(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; struct grid_cell gc; u_int px, py; @@ -2262,9 +2304,9 @@ window_copy_cursor_jump_to_back(struct window_pane *wp) grid_get_cell(back_s->grid, px, py, &gc); if (!(gc.flags & GRID_FLAG_PADDING) && gc.data.size == 1 && *gc.data.data == data->jumpchar) { - window_copy_update_cursor(wp, px + 1, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px + 1, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); return; } if (px == 0) @@ -2274,16 +2316,17 @@ window_copy_cursor_jump_to_back(struct window_pane *wp) } static void -window_copy_cursor_next_word(struct window_pane *wp, const char *separators) +window_copy_cursor_next_word(struct window_mode_entry *wme, + const char *separators) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *back_s = data->backing; u_int px, py, xx, yy; int expected = 0; px = data->cx; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); yy = screen_hsize(back_s) + screen_size_y(back_s) - 1; /* @@ -2294,32 +2337,33 @@ window_copy_cursor_next_word(struct window_pane *wp, const char *separators) */ do { while (px > xx || - window_copy_in_set(wp, px, py, separators) == expected) { + window_copy_in_set(wme, px, py, separators) == expected) { /* Move down if we're past the end of the line. */ if (px > xx) { if (py == yy) return; - window_copy_cursor_down(wp, 0); + window_copy_cursor_down(wme, 0); px = 0; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); } else px++; } expected = !expected; } while (expected == 1); - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } static void -window_copy_cursor_next_word_end(struct window_pane *wp, +window_copy_cursor_next_word_end(struct window_mode_entry *wme, const char *separators) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct options *oo = wp->window->options; struct screen *back_s = data->backing; u_int px, py, xx, yy; @@ -2327,11 +2371,11 @@ window_copy_cursor_next_word_end(struct window_pane *wp, px = data->cx; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); yy = screen_hsize(back_s) + screen_size_y(back_s) - 1; keys = options_get_number(oo, "mode-keys"); - if (keys == MODEKEY_VI && !window_copy_in_set(wp, px, py, separators)) + if (keys == MODEKEY_VI && !window_copy_in_set(wme, px, py, separators)) px++; /* @@ -2342,16 +2386,16 @@ window_copy_cursor_next_word_end(struct window_pane *wp, */ do { while (px > xx || - window_copy_in_set(wp, px, py, separators) == expected) { + window_copy_in_set(wme, px, py, separators) == expected) { /* Move down if we're past the end of the line. */ if (px > xx) { if (py == yy) return; - window_copy_cursor_down(wp, 0); + window_copy_cursor_down(wme, 0); px = 0; py = screen_hsize(back_s) + data->cy - data->oy; - xx = window_copy_find_length(wp, py); + xx = window_copy_find_length(wme, py); } else px++; } @@ -2361,17 +2405,17 @@ window_copy_cursor_next_word_end(struct window_pane *wp, if (keys == MODEKEY_VI && px != 0) px--; - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } /* Move to the previous place where a word begins. */ static void -window_copy_cursor_previous_word(struct window_pane *wp, +window_copy_cursor_previous_word(struct window_mode_entry *wme, const char *separators) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int px, py; px = data->cx; @@ -2381,34 +2425,35 @@ window_copy_cursor_previous_word(struct window_pane *wp, for (;;) { if (px > 0) { px--; - if (!window_copy_in_set(wp, px, py, separators)) + if (!window_copy_in_set(wme, px, py, separators)) break; } else { if (data->cy == 0 && (screen_hsize(data->backing) == 0 || data->oy >= screen_hsize(data->backing) - 1)) goto out; - window_copy_cursor_up(wp, 0); + window_copy_cursor_up(wme, 0); py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); } } /* Move back to the beginning of this word. */ - while (px > 0 && !window_copy_in_set(wp, px - 1, py, separators)) + while (px > 0 && !window_copy_in_set(wme, px - 1, py, separators)) px--; out: - window_copy_update_cursor(wp, px, data->cy); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_lines(wp, data->cy, 1); + window_copy_update_cursor(wme, px, data->cy); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_lines(wme, data->cy, 1); } static void -window_copy_scroll_up(struct window_pane *wp, u_int ny) +window_copy_scroll_up(struct window_mode_entry *wme, u_int ny) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; @@ -2418,27 +2463,28 @@ window_copy_scroll_up(struct window_pane *wp, u_int ny) return; data->oy -= ny; - window_copy_update_selection(wp, 0); + window_copy_update_selection(wme, 0); screen_write_start(&ctx, wp, NULL); screen_write_cursormove(&ctx, 0, 0); screen_write_deleteline(&ctx, ny, 8); - window_copy_write_lines(wp, &ctx, screen_size_y(s) - ny, ny); - window_copy_write_line(wp, &ctx, 0); + window_copy_write_lines(wme, &ctx, screen_size_y(s) - ny, ny); + window_copy_write_line(wme, &ctx, 0); if (screen_size_y(s) > 1) - window_copy_write_line(wp, &ctx, 1); + window_copy_write_line(wme, &ctx, 1); if (screen_size_y(s) > 3) - window_copy_write_line(wp, &ctx, screen_size_y(s) - 2); + window_copy_write_line(wme, &ctx, screen_size_y(s) - 2); if (s->sel != NULL && screen_size_y(s) > ny) - window_copy_write_line(wp, &ctx, screen_size_y(s) - ny - 1); + window_copy_write_line(wme, &ctx, screen_size_y(s) - ny - 1); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); } static void -window_copy_scroll_down(struct window_pane *wp, u_int ny) +window_copy_scroll_down(struct window_mode_entry *wme, u_int ny) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; @@ -2451,35 +2497,35 @@ window_copy_scroll_down(struct window_pane *wp, u_int ny) return; data->oy += ny; - window_copy_update_selection(wp, 0); + window_copy_update_selection(wme, 0); screen_write_start(&ctx, wp, NULL); screen_write_cursormove(&ctx, 0, 0); screen_write_insertline(&ctx, ny, 8); - window_copy_write_lines(wp, &ctx, 0, ny); + window_copy_write_lines(wme, &ctx, 0, ny); if (s->sel != NULL && screen_size_y(s) > ny) - window_copy_write_line(wp, &ctx, ny); + window_copy_write_line(wme, &ctx, ny); else if (ny == 1) /* nuke position */ - window_copy_write_line(wp, &ctx, 1); + window_copy_write_line(wme, &ctx, 1); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); } static void -window_copy_rectangle_toggle(struct window_pane *wp) +window_copy_rectangle_toggle(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int px, py; data->rectflag = !data->rectflag; py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if (data->cx > px) - window_copy_update_cursor(wp, px, data->cy); + window_copy_update_cursor(wme, px, data->cy); - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static void @@ -2489,13 +2535,15 @@ window_copy_move_mouse(struct mouse_event *m) u_int x, y; wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || wp->mode != &window_copy_mode) + if (wp == NULL || + wp->mode == NULL || + wp->mode->mode != &window_copy_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; - window_copy_update_cursor(wp, x, y); + window_copy_update_cursor(wp->mode, x, y); } void @@ -2508,7 +2556,9 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) return; wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || wp->mode != &window_copy_mode) + if (wp == NULL || + wp->mode == NULL || + wp->mode->mode != &window_copy_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 1) != 0) @@ -2517,9 +2567,9 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) c->tty.mouse_drag_update = window_copy_drag_update; c->tty.mouse_drag_release = NULL; /* will fire MouseDragEnd key */ - window_copy_update_cursor(wp, x, y); - window_copy_start_selection(wp); - window_copy_redraw_screen(wp); + window_copy_update_cursor(wp->mode, x, y); + window_copy_start_selection(wp->mode); + window_copy_redraw_screen(wp->mode); } static void @@ -2530,15 +2580,17 @@ window_copy_drag_update(__unused struct client *c, struct mouse_event *m) u_int x, y, old_cy; wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || wp->mode != &window_copy_mode) + if (wp == NULL || + wp->mode == NULL || + wp->mode->mode != &window_copy_mode) return; - data = wp->modedata; + data = wp->mode->data; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; old_cy = data->cy; - window_copy_update_cursor(wp, x, y); - if (window_copy_update_selection(wp, 1)) - window_copy_redraw_selection(wp, old_cy); + window_copy_update_cursor(wp->mode, x, y); + if (window_copy_update_selection(wp->mode, 1)) + window_copy_redraw_selection(wp->mode, old_cy); } diff --git a/window-tree.c b/window-tree.c index 5b7f1994c0..56bd2b07a6 100644 --- a/window-tree.c +++ b/window-tree.c @@ -24,11 +24,12 @@ #include "tmux.h" -static struct screen *window_tree_init(struct window_pane *, +static struct screen *window_tree_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_tree_free(struct window_pane *); -static void window_tree_resize(struct window_pane *, u_int, u_int); -static void window_tree_key(struct window_pane *, +static void window_tree_free(struct window_mode_entry *); +static void window_tree_resize(struct window_mode_entry *, u_int, + u_int); +static void window_tree_key(struct window_mode_entry *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); @@ -810,13 +811,14 @@ window_tree_search(__unused void *modedata, void *itemdata, const char *ss) } static struct screen * -window_tree_init(struct window_pane *wp, struct cmd_find_state *fs, +window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct args *args) { + struct window_pane *wp = wme->wp; struct window_tree_modedata *data; struct screen *s; - wp->modedata = data = xcalloc(1, sizeof *data); + wme->data = data = xcalloc(1, sizeof *data); if (args_has(args, 's')) data->type = WINDOW_TREE_SESSION; @@ -871,9 +873,9 @@ window_tree_destroy(struct window_tree_modedata *data) } static void -window_tree_free(struct window_pane *wp) +window_tree_free(struct window_mode_entry *wme) { - struct window_tree_modedata *data = wp->modedata; + struct window_tree_modedata *data = wme->data; if (data == NULL) return; @@ -884,9 +886,9 @@ window_tree_free(struct window_pane *wp) } static void -window_tree_resize(struct window_pane *wp, u_int sx, u_int sy) +window_tree_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_tree_modedata *data = wp->modedata; + struct window_tree_modedata *data = wme->data; mode_tree_resize(data->data, sx, sy); } @@ -1119,11 +1121,12 @@ window_tree_mouse(struct window_tree_modedata *data, key_code key, u_int x, } static void -window_tree_key(struct window_pane *wp, struct client *c, +window_tree_key(struct window_mode_entry *wme, struct client *c, __unused struct session *s, __unused struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_tree_modedata *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_tree_modedata *data = wme->data; struct window_tree_itemdata *item, *new_item; char *name, *prompt = NULL; struct cmd_find_state fs; diff --git a/window.c b/window.c index 673cd84fb4..366df79754 100644 --- a/window.c +++ b/window.c @@ -811,7 +811,6 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->event = NULL; wp->mode = NULL; - wp->modeprefix = 1; wp->layout_cell = NULL; @@ -1054,8 +1053,8 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) wp->sy = sy; screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL); - if (wp->mode != NULL) - wp->mode->resize(wp, sx, sy); + if (wp->mode != NULL && wp->mode->mode->resize != NULL) + wp->mode->mode->resize(wp->mode, sx, sy); wp->flags |= PANE_RESIZE; } @@ -1222,13 +1221,17 @@ window_pane_set_mode(struct window_pane *wp, const struct window_mode *mode, if (wp->mode != NULL) return (1); - wp->mode = mode; + + wp->mode = xcalloc(1, sizeof *wp->mode); + wp->mode->wp = wp; + wp->mode->mode = mode; + wp->mode->prefix = 1; wp->modelast = time(NULL); evtimer_set(&wp->modetimer, window_pane_mode_timer, wp); evtimer_add(&wp->modetimer, &tv); - if ((s = wp->mode->init(wp, fs, args)) != NULL) + if ((s = wp->mode->mode->init(wp->mode, fs, args)) != NULL) wp->screen = s; wp->flags |= (PANE_REDRAW|PANE_CHANGED); @@ -1245,9 +1248,9 @@ window_pane_reset_mode(struct window_pane *wp) evtimer_del(&wp->modetimer); - wp->mode->free(wp); + wp->mode->mode->free(wp->mode); + free(wp->mode); wp->mode = NULL; - wp->modeprefix = 1; wp->screen = &wp->base; wp->flags |= (PANE_REDRAW|PANE_CHANGED); @@ -1260,15 +1263,16 @@ void window_pane_key(struct window_pane *wp, struct client *c, struct session *s, struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_pane *wp2; + struct window_mode_entry *wme = wp->mode; + struct window_pane *wp2; if (KEYC_IS_MOUSE(key) && m == NULL) return; - if (wp->mode != NULL) { + if (wme != NULL) { wp->modelast = time(NULL); - if (wp->mode->key != NULL) - wp->mode->key(wp, c, s, wl, (key & ~KEYC_XTERM), m); + if (wme->mode->key != NULL) + wme->mode->key(wme, c, s, wl, (key & ~KEYC_XTERM), m); return; } From 9cc04a0f9a62c5f4d9e643538f0f866115d6b16d Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Mar 2019 10:29:25 +0000 Subject: [PATCH 297/836] Do not use window mode entry after free. --- window-copy.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index 9efc6a4641..94c34980ef 100644 --- a/window-copy.c +++ b/window-copy.c @@ -997,11 +997,12 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, data->searchx = data->searchy = -1; } + wme->prefix = 1; + if (cancel) window_pane_reset_mode(wp); else if (redraw) window_copy_redraw_screen(wme); - wme->prefix = 1; } static void From de730f68a4bc97e26f8f5dcb404ed27dc489c0fd Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Mar 2019 10:34:20 +0000 Subject: [PATCH 298/836] Make the mode used to view command output (a variant of copy mode) use its own mode definition struct with a different init function rather than calling special setup functions. --- cfg.c | 5 ++- cmd-copy-mode.c | 3 +- cmd-queue.c | 17 +++++----- cmd-run-shell.c | 5 ++- tmux.h | 3 +- window-copy.c | 84 +++++++++++++++++++++++++++---------------------- 6 files changed, 66 insertions(+), 51 deletions(-) diff --git a/cfg.c b/cfg.c index 0842f6384b..fc7e345c44 100644 --- a/cfg.c +++ b/cfg.c @@ -348,7 +348,10 @@ cfg_show_causes(struct session *s) return; wp = s->curw->window->active; - window_copy_init_for_output(wp); + if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { + window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_view_mode, NULL, NULL); + } for (i = 0; i < cfg_ncauses; i++) { window_copy_add(wp, "%s", cfg_causes[i]); free(cfg_causes[i]); diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index 1668029c17..d9471aab92 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -75,10 +75,9 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) } if (wp->mode == NULL || wp->mode->mode != &window_copy_mode) { - flag = window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); + flag = window_pane_set_mode(wp, &window_copy_mode, NULL, args); if (flag != 0) return (CMD_RETURN_NORMAL); - window_copy_init_from_pane(wp, args_has(self->args, 'e')); } if (args_has(args, 'M')) { if (wp->mode != NULL && wp->mode->mode != &window_copy_mode) diff --git a/cmd-queue.c b/cmd-queue.c index ccb25c9a0f..2a95a3e5f4 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -404,10 +404,10 @@ cmdq_guard(struct cmdq_item *item, const char *guard, int flags) void cmdq_print(struct cmdq_item *item, const char *fmt, ...) { - struct client *c = item->client; - struct window *w; - va_list ap; - char *tmp, *msg; + struct client *c = item->client; + struct window_pane *wp; + va_list ap; + char *tmp, *msg; va_start(ap, fmt); @@ -425,9 +425,12 @@ cmdq_print(struct cmdq_item *item, const char *fmt, ...) evbuffer_add(c->stdout_data, "\n", 1); server_client_push_stdout(c); } else { - w = c->session->curw->window; - window_copy_init_for_output(w->active); - window_copy_vadd(w->active, fmt, ap); + wp = c->session->curw->window->active; + if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { + window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_view_mode, NULL, NULL); + } + window_copy_vadd(wp, fmt, ap); } va_end(ap); diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 998ffcd888..8e99f90b3e 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -75,7 +75,10 @@ cmd_run_shell_print(struct job *job, const char *msg) return; } - window_copy_init_for_output(wp); + if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { + window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_view_mode, NULL, NULL); + } window_copy_add(wp, "%s", msg); } diff --git a/tmux.h b/tmux.h index 69935f17db..1053ddcda3 100644 --- a/tmux.h +++ b/tmux.h @@ -2310,8 +2310,7 @@ extern const struct window_mode window_client_mode; /* window-copy.c */ extern const struct window_mode window_copy_mode; -void window_copy_init_from_pane(struct window_pane *, int); -void window_copy_init_for_output(struct window_pane *); +extern const struct window_mode window_view_mode; void printflike(2, 3) window_copy_add(struct window_pane *, const char *, ...); void window_copy_vadd(struct window_pane *, const char *, va_list); void window_copy_pageup(struct window_pane *, int); diff --git a/window-copy.c b/window-copy.c index 94c34980ef..d7ce3e8a5b 100644 --- a/window-copy.c +++ b/window-copy.c @@ -30,6 +30,8 @@ static void window_copy_command(struct window_mode_entry *, struct client *, struct mouse_event *); static struct screen *window_copy_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); +static struct screen *window_copy_view_init(struct window_mode_entry *, + struct cmd_find_state *, struct args *); static void window_copy_free(struct window_mode_entry *); static void window_copy_resize(struct window_mode_entry *, u_int, u_int); static void window_copy_formats(struct window_mode_entry *, @@ -125,6 +127,17 @@ const struct window_mode window_copy_mode = { .formats = window_copy_formats, }; +const struct window_mode window_view_mode = { + .name = "view-mode", + + .init = window_copy_view_init, + .free = window_copy_free, + .resize = window_copy_resize, + .key_table = window_copy_key_table, + .command = window_copy_command, + .formats = window_copy_formats, +}; + enum { WINDOW_COPY_OFF, WINDOW_COPY_SEARCHUP, @@ -203,13 +216,12 @@ struct window_copy_mode_data { char jumpchar; }; -static struct screen * -window_copy_init(struct window_mode_entry *wme, - __unused struct cmd_find_state *fs, __unused struct args *args) +static struct window_copy_mode_data * +window_copy_common_init(struct window_mode_entry *wme) { struct window_pane *wp = wme->wp; struct window_copy_mode_data *data; - struct screen *s; + struct screen *base = &wp->base; wme->data = data = xcalloc(1, sizeof *data); @@ -226,66 +238,62 @@ window_copy_init(struct window_mode_entry *wme, data->searchmark = NULL; data->searchx = data->searchy = data->searcho = -1; - if (wp->fd != -1) - bufferevent_disable(wp->event, EV_READ|EV_WRITE); - data->jumptype = WINDOW_COPY_OFF; data->jumpchar = '\0'; - s = &data->screen; - screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); + screen_init(&data->screen, screen_size_x(base), screen_size_y(base), 0); data->modekeys = options_get_number(wp->window->options, "mode-keys"); - data->backing = NULL; - - return (s); + return (data); } -void -window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) +static struct screen * +window_copy_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, struct args *args) { - struct window_mode_entry *wme = wp->mode; - struct window_copy_mode_data *data = wme->data; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data; + struct screen_write_ctx ctx; u_int i; - if (wme == NULL || wme->mode != &window_copy_mode) - fatalx("not in copy mode"); + data = window_copy_common_init(wme); + + if (wp->fd != -1) + bufferevent_disable(wp->event, EV_READ|EV_WRITE); data->backing = &wp->base; data->cx = data->backing->cx; data->cy = data->backing->cy; - data->scroll_exit = scroll_exit; - s->cx = data->cx; - s->cy = data->cy; + data->scroll_exit = args_has(args, 'e'); - screen_write_start(&ctx, NULL, s); - for (i = 0; i < screen_size_y(s); i++) + data->screen.cx = data->cx; + data->screen.cy = data->cy; + + screen_write_start(&ctx, NULL, &data->screen); + for (i = 0; i < screen_size_y(&data->screen); i++) window_copy_write_line(wme, &ctx, i); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); + + return (&data->screen); } -void -window_copy_init_for_output(struct window_pane *wp) +static struct screen * +window_copy_view_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, __unused struct args *args) { + struct window_pane *wp = wme->wp; struct window_copy_mode_data *data; + struct screen *base = &wp->base; + struct screen *s; - if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) { - data = wp->mode->data; - if (data->backing != &wp->base) - return; - } - window_pane_reset_mode(wp); + data = window_copy_common_init(wme); - window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); - data = wp->mode->data; + data->backing = s = xmalloc(sizeof *data->backing); + screen_init(s, screen_size_x(base), screen_size_y(base), UINT_MAX); - data->backing = xmalloc(sizeof *data->backing); - screen_init(data->backing, screen_size_x(&wp->base), - screen_size_y(&wp->base), UINT_MAX); + return (&data->screen); } static void From ff4c80d53df96bb46eaa64107673e42d402f0d49 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 07:39:27 +0000 Subject: [PATCH 299/836] Add support for origin mode (DECOM, SM/RM ?6), from Marc Reisner. --- input.c | 8 ++++++++ screen-write.c | 46 +++++++++++++++++++++++++++------------------- tmux.h | 1 + 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/input.c b/input.c index 12527264df..c498bc502e 100644 --- a/input.c +++ b/input.c @@ -1572,6 +1572,10 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) screen_write_clearscreen(&ictx->ctx, ictx->cell.cell.bg); break; + case 6: /* DECOM */ + screen_write_mode_clear(&ictx->ctx, MODE_ORIGIN); + screen_write_cursormove(&ictx->ctx, 0, 0); + break; case 7: /* DECAWM */ screen_write_mode_clear(&ictx->ctx, MODE_WRAP); break; @@ -1655,6 +1659,10 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) screen_write_clearscreen(&ictx->ctx, ictx->cell.cell.bg); break; + case 6: /* DECOM */ + screen_write_mode_set(&ictx->ctx, MODE_ORIGIN); + screen_write_cursormove(&ictx->ctx, 0, 0); + break; case 7: /* DECAWM */ screen_write_mode_set(&ictx->ctx, MODE_WRAP); break; diff --git a/screen-write.c b/screen-write.c index 0147f51655..e8aa09731c 100644 --- a/screen-write.c +++ b/screen-write.c @@ -74,10 +74,16 @@ screen_write_set_cursor(struct screen_write_ctx *ctx, int cx, int cy) if (cx != -1 && (u_int)cx == s->cx && cy != -1 && (u_int)cy == s->cy) return; - if (cx != -1) + if (cx != -1) { + if ((u_int)cx > screen_size_x(s) - 1) + cx = screen_size_x(s) - 1; s->cx = cx; - if (cy != -1) + } + if (cy != -1) { + if ((u_int)cy > screen_size_y(s) - 1) + cy = screen_size_y(s) - 1; s->cy = cy; + } if (wp == NULL) return; @@ -147,7 +153,7 @@ screen_write_reset(struct screen_write_ctx *ctx) s->mode = MODE_CURSOR | MODE_WRAP; screen_write_clearscreen(ctx, 8); - screen_write_cursormove(ctx, 0, 0); + screen_write_set_cursor(ctx, 0, 0); } /* Write character. */ @@ -419,7 +425,7 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, screen_write_cell(ctx, &gc); } cy++; - screen_write_cursormove(ctx, cx, cy); + screen_write_set_cursor(ctx, cx, cy); } } @@ -477,7 +483,7 @@ screen_write_hline(struct screen_write_ctx *ctx, u_int nx, int left, int right) screen_write_putc(ctx, &gc, 'q'); screen_write_putc(ctx, &gc, right ? 'u' : 'q'); - screen_write_cursormove(ctx, cx, cy); + screen_write_set_cursor(ctx, cx, cy); } /* Draw a horizontal line on screen. */ @@ -496,13 +502,13 @@ screen_write_vline(struct screen_write_ctx *ctx, u_int ny, int top, int bottom) screen_write_putc(ctx, &gc, top ? 'w' : 'x'); for (i = 1; i < ny - 1; i++) { - screen_write_cursormove(ctx, cx, cy + i); + screen_write_set_cursor(ctx, cx, cy + i); screen_write_putc(ctx, &gc, 'x'); } - screen_write_cursormove(ctx, cx, cy + ny - 1); + screen_write_set_cursor(ctx, cx, cy + ny - 1); screen_write_putc(ctx, &gc, bottom ? 'v' : 'x'); - screen_write_cursormove(ctx, cx, cy); + screen_write_set_cursor(ctx, cx, cy); } /* Draw a box on screen. */ @@ -524,22 +530,22 @@ screen_write_box(struct screen_write_ctx *ctx, u_int nx, u_int ny) screen_write_putc(ctx, &gc, 'q'); screen_write_putc(ctx, &gc, 'k'); - screen_write_cursormove(ctx, cx, cy + ny - 1); + screen_write_set_cursor(ctx, cx, cy + ny - 1); screen_write_putc(ctx, &gc, 'm'); for (i = 1; i < nx - 1; i++) screen_write_putc(ctx, &gc, 'q'); screen_write_putc(ctx, &gc, 'j'); for (i = 1; i < ny - 1; i++) { - screen_write_cursormove(ctx, cx, cy + i); + screen_write_set_cursor(ctx, cx, cy + i); screen_write_putc(ctx, &gc, 'x'); } for (i = 1; i < ny - 1; i++) { - screen_write_cursormove(ctx, cx + nx - 1, cy + i); + screen_write_set_cursor(ctx, cx + nx - 1, cy + i); screen_write_putc(ctx, &gc, 'x'); } - screen_write_cursormove(ctx, cx, cy); + screen_write_set_cursor(ctx, cx, cy); } /* @@ -594,7 +600,7 @@ screen_write_preview(struct screen_write_ctx *ctx, struct screen *src, u_int nx, if (src->mode & MODE_CURSOR) { grid_view_get_cell(src->grid, src->cx, src->cy, &gc); gc.attr |= GRID_ATTR_REVERSE; - screen_write_cursormove(ctx, cx + (src->cx - px), + screen_write_set_cursor(ctx, cx + (src->cx - px), cy + (src->cy - py)); screen_write_cell(ctx, &gc); } @@ -1032,10 +1038,12 @@ screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) { struct screen *s = ctx->s; - if (px > screen_size_x(s) - 1) - px = screen_size_x(s) - 1; - if (py > screen_size_y(s) - 1) - py = screen_size_y(s) - 1; + if (s->mode & MODE_ORIGIN) { + if (py > s->rlower - s->rupper) + py = s->rlower; + else + py += s->rupper; + } screen_write_set_cursor(ctx, px, py); } @@ -1296,7 +1304,7 @@ screen_write_collect_flush(struct screen_write_ctx *ctx, int scroll_only) cx = s->cx; cy = s->cy; for (y = 0; y < screen_size_y(s); y++) { TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) { - screen_write_cursormove(ctx, ci->x, y); + screen_write_set_cursor(ctx, ci->x, y); screen_write_initctx(ctx, &ttyctx); ttyctx.cell = &ci->gc; ttyctx.wrapped = ci->wrapped; @@ -1441,7 +1449,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) screen_write_collect_flush(ctx, 0); if ((gc = screen_write_combine(ctx, &gc->data, &xx)) != 0) { cx = s->cx; cy = s->cy; - screen_write_cursormove(ctx, xx, s->cy); + screen_write_set_cursor(ctx, xx, s->cy); screen_write_initctx(ctx, &ttyctx); ttyctx.cell = gc; tty_write(tty_cmd_cell, &ttyctx); diff --git a/tmux.h b/tmux.h index 1053ddcda3..9c98620226 100644 --- a/tmux.h +++ b/tmux.h @@ -517,6 +517,7 @@ struct msg_stderr_data { #define MODE_BRACKETPASTE 0x400 #define MODE_FOCUSON 0x800 #define MODE_MOUSE_ALL 0x1000 +#define MODE_ORIGIN 0x2000 #define ALL_MODES 0xffffff #define ALL_MOUSE_MODES (MODE_MOUSE_STANDARD|MODE_MOUSE_BUTTON|MODE_MOUSE_ALL) From 3f6bfbaf2babcc7f08f628a82ff31b0b52014e58 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 11:16:49 +0000 Subject: [PATCH 300/836] Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new. --- cfg.c | 10 ++--- cmd-capture-pane.c | 3 +- cmd-copy-mode.c | 13 ++----- cmd-queue.c | 14 +++---- cmd-respawn-pane.c | 2 +- cmd-respawn-window.c | 2 +- cmd-run-shell.c | 6 +-- cmd-send-keys.c | 12 ++++-- format.c | 38 ++++++++++++++----- input.c | 4 +- server-client.c | 32 ++++++++-------- tmux.h | 7 +++- window-clock.c | 5 ++- window-copy.c | 61 ++++++++++++++++++------------- window.c | 87 +++++++++++++++++++++++++++++++------------- 15 files changed, 181 insertions(+), 115 deletions(-) diff --git a/cfg.c b/cfg.c index fc7e345c44..d8ce40d36e 100644 --- a/cfg.c +++ b/cfg.c @@ -341,17 +341,17 @@ cfg_print_causes(struct cmdq_item *item) void cfg_show_causes(struct session *s) { - struct window_pane *wp; - u_int i; + struct window_pane *wp; + struct window_mode_entry *wme; + u_int i; if (s == NULL || cfg_ncauses == 0) return; wp = s->curw->window->active; - if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { - window_pane_reset_mode(wp); + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_view_mode) window_pane_set_mode(wp, &window_view_mode, NULL, NULL); - } for (i = 0; i < cfg_ncauses; i++) { window_copy_add(wp, "%s", cfg_causes[i]); free(cfg_causes[i]); diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index cb01f50253..dd1576c409 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -199,8 +199,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmdq_item *item) size_t len; if (self->entry == &cmd_clear_history_entry) { - if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) - window_pane_reset_mode(wp); + window_pane_reset_mode_all(wp); grid_clear_history(wp->base.grid); return (CMD_RETURN_NORMAL); } diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index d9471aab92..bd05f8a232 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -60,7 +60,6 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) struct client *c = item->client; struct session *s; struct window_pane *wp = item->target.wp; - int flag; if (args_has(args, 'M')) { if ((wp = cmd_mouse_pane(&shared->mouse, &s, NULL)) == NULL) @@ -74,16 +73,10 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } - if (wp->mode == NULL || wp->mode->mode != &window_copy_mode) { - flag = window_pane_set_mode(wp, &window_copy_mode, NULL, args); - if (flag != 0) - return (CMD_RETURN_NORMAL); - } - if (args_has(args, 'M')) { - if (wp->mode != NULL && wp->mode->mode != &window_copy_mode) - return (CMD_RETURN_NORMAL); + if (window_pane_set_mode(wp, &window_copy_mode, NULL, args) != 0) + return (CMD_RETURN_NORMAL); + if (args_has(args, 'M')) window_copy_start_drag(c, &shared->mouse); - } if (args_has(self->args, 'u')) window_copy_pageup(wp, 0); diff --git a/cmd-queue.c b/cmd-queue.c index 2a95a3e5f4..97b3c1c97e 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -404,10 +404,11 @@ cmdq_guard(struct cmdq_item *item, const char *guard, int flags) void cmdq_print(struct cmdq_item *item, const char *fmt, ...) { - struct client *c = item->client; - struct window_pane *wp; - va_list ap; - char *tmp, *msg; + struct client *c = item->client; + struct window_pane *wp; + struct window_mode_entry *wme; + va_list ap; + char *tmp, *msg; va_start(ap, fmt); @@ -426,10 +427,9 @@ cmdq_print(struct cmdq_item *item, const char *fmt, ...) server_client_push_stdout(c); } else { wp = c->session->curw->window->active; - if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { - window_pane_reset_mode(wp); + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_view_mode) window_pane_set_mode(wp, &window_view_mode, NULL, NULL); - } window_copy_vadd(wp, fmt, ap); } diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index 3d78c495ed..eb4a7e09e1 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -67,7 +67,7 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - window_pane_reset_mode(wp); + window_pane_reset_mode_all(wp); screen_reinit(&wp->base); input_init(wp); diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index a1e2611779..6879199063 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -99,7 +99,7 @@ cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) free(cwd); layout_init(w, wp); - window_pane_reset_mode(wp); + window_pane_reset_mode_all(wp); screen_reinit(&wp->base); input_init(wp); window_set_active_pane(w, wp); diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 8e99f90b3e..c9a478c7da 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -60,6 +60,7 @@ cmd_run_shell_print(struct job *job, const char *msg) struct cmd_run_shell_data *cdata = job_get_data(job); struct window_pane *wp = NULL; struct cmd_find_state fs; + struct window_mode_entry *wme; if (cdata->wp_id != -1) wp = window_pane_find_by_id(cdata->wp_id); @@ -75,10 +76,9 @@ cmd_run_shell_print(struct job *job, const char *msg) return; } - if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { - window_pane_reset_mode(wp); + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_view_mode) window_pane_set_mode(wp, &window_view_mode, NULL, NULL); - } window_copy_add(wp, "%s", msg); } diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 80799c5431..d9c39f6353 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -61,10 +61,11 @@ cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) struct window_pane *wp = item->target.wp; struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window_mode_entry *wme = wp->mode; + struct window_mode_entry *wme; struct key_table *table; struct key_binding *bd; + wme = TAILQ_FIRST(&wp->modes); if (wme == NULL || wme->mode->key_table == NULL) { if (options_get_number(wp->window->options, "xterm-keys")) key |= KEYC_XTERM; @@ -90,7 +91,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct mouse_event *m = &item->shared->mouse; - struct window_mode_entry *wme = wp->mode; + struct window_mode_entry *wme = TAILQ_FIRST(&wp->modes); struct utf8_data *ud, *uc; wchar_t wc; int i, literal; @@ -105,8 +106,13 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) free(cause); return (CMD_RETURN_ERROR); } - if (wme != NULL && (args_has(args, 'X') || args->argc == 0)) + if (wme != NULL && (args_has(args, 'X') || args->argc == 0)) { + if (wme == NULL || wme->mode->command == NULL) { + cmdq_error(item, "not in a mode"); + return (CMD_RETURN_ERROR); + } wme->prefix = np; + } } if (args_has(args, 'X')) { diff --git a/format.c b/format.c index 166b18a62e..7645667832 100644 --- a/format.c +++ b/format.c @@ -617,6 +617,22 @@ format_cb_session_group_list(struct format_tree *ft, struct format_entry *fe) evbuffer_free(buffer); } +/* Callback for pane_in_mode. */ +static void +format_cb_pane_in_mode(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp = ft->wp; + u_int n = 0; + struct window_mode_entry *wme; + + if (wp == NULL) + return; + + TAILQ_FOREACH(wme, &wp->modes, entry) + n++; + xasprintf(&fe->value, "%u", n); +} + /* Merge a format tree. */ static void format_merge(struct format_tree *ft, struct format_tree *from) @@ -1495,10 +1511,11 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) void format_defaults_pane(struct format_tree *ft, struct window_pane *wp) { - struct window *w = wp->window; - struct grid *gd = wp->base.grid; - int status = wp->status; - u_int idx; + struct window *w = wp->window; + struct grid *gd = wp->base.grid; + int status = wp->status; + u_int idx; + struct window_mode_entry *wme; if (ft->w == NULL) ft->w = w; @@ -1533,9 +1550,13 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == w->sx); format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == w->sy); - format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); - if (wp->mode != NULL) - format_add(ft, "pane_mode", "%s", wp->mode->mode->name); + wme = TAILQ_FIRST(&wp->modes); + if (wme != NULL) { + format_add(ft, "pane_mode", "%s", wme->mode->name); + if (wme->mode->formats != NULL) + wme->mode->formats(wme, ft); + } + format_add_cb(ft, "pane_in_mode", format_cb_pane_in_mode); format_add(ft, "pane_synchronized", "%d", !!options_get_number(w->options, "synchronize-panes")); @@ -1552,9 +1573,6 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "scroll_region_upper", "%u", wp->base.rupper); format_add(ft, "scroll_region_lower", "%u", wp->base.rlower); - if (wp->mode != NULL && wp->mode->mode->formats != NULL) - wp->mode->mode->formats(wp->mode, ft); - format_add(ft, "alternate_on", "%d", wp->saved_grid ? 1 : 0); format_add(ft, "alternate_saved_x", "%u", wp->saved_cx); format_add(ft, "alternate_saved_y", "%u", wp->saved_cy); diff --git a/input.c b/input.c index c498bc502e..049b82e1bc 100644 --- a/input.c +++ b/input.c @@ -805,7 +805,7 @@ input_reset(struct window_pane *wp, int clear) input_reset_cell(ictx); if (clear) { - if (wp->mode == NULL) + if (TAILQ_EMPTY(&wp->modes)) screen_write_start(&ictx->ctx, wp, &wp->base); else screen_write_start(&ictx->ctx, NULL, &wp->base); @@ -861,7 +861,7 @@ input_parse(struct window_pane *wp) * Open the screen. Use NULL wp if there is a mode set as don't want to * update the tty. */ - if (wp->mode == NULL) + if (TAILQ_EMPTY(&wp->modes)) screen_write_start(&ictx->ctx, wp, &wp->base); else screen_write_start(&ictx->ctx, NULL, &wp->base); diff --git a/server-client.c b/server-client.c index a311376ca0..b7d052a078 100644 --- a/server-client.c +++ b/server-client.c @@ -921,18 +921,18 @@ server_client_assume_paste(struct session *s) void server_client_handle_key(struct client *c, key_code key) { - struct mouse_event *m = &c->tty.mouse; - struct session *s = c->session; - struct winlink *wl; - struct window *w; - struct window_pane *wp; - struct timeval tv; - struct key_table *table, *first; - const char *tablename; - struct key_binding *bd; - int xtimeout, flags; - struct cmd_find_state fs; - key_code key0; + struct mouse_event *m = &c->tty.mouse; + struct session *s = c->session; + struct winlink *wl; + struct window *w; + struct window_pane *wp; + struct window_mode_entry *wme; + struct timeval tv; + struct key_table *table, *first; + struct key_binding *bd; + int xtimeout, flags; + struct cmd_find_state fs; + key_code key0; /* Check the client is good to accept input. */ if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) @@ -1009,11 +1009,9 @@ server_client_handle_key(struct client *c, key_code key) */ if (server_client_is_default_key_table(c, c->keytable) && wp != NULL && - wp->mode != NULL && - wp->mode->mode->key_table != NULL) { - tablename = wp->mode->mode->key_table(wp->mode); - table = key_bindings_get_table(tablename, 1); - } + (wme = TAILQ_FIRST(&wp->modes)) != NULL && + wme->mode->key_table != NULL) + table = key_bindings_get_table(wme->mode->key_table(wme), 1); else table = c->keytable; first = table; diff --git a/tmux.h b/tmux.h index 9c98620226..329af6b294 100644 --- a/tmux.h +++ b/tmux.h @@ -722,7 +722,10 @@ struct window_mode_entry { const struct window_mode *mode; void *data; + struct screen *screen; u_int prefix; + + TAILQ_ENTRY (window_mode_entry) entry; }; /* Child window structure. */ @@ -768,6 +771,7 @@ struct window_pane { int fd; struct bufferevent *event; + u_int disabled; struct event resize_timer; @@ -793,7 +797,7 @@ struct window_pane { struct grid *saved_grid; struct grid_cell saved_cell; - struct window_mode_entry *mode; + TAILQ_HEAD (, window_mode_entry) modes; struct event modetimer; time_t modelast; char *searchstr; @@ -2208,6 +2212,7 @@ int window_pane_set_mode(struct window_pane *, const struct window_mode *, struct cmd_find_state *, struct args *); void window_pane_reset_mode(struct window_pane *); +void window_pane_reset_mode_all(struct window_pane *); void window_pane_key(struct window_pane *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); diff --git a/window-clock.c b/window-clock.c index c7074c0db9..f98d792320 100644 --- a/window-clock.c +++ b/window-clock.c @@ -136,6 +136,9 @@ window_clock_timer_callback(__unused int fd, __unused short events, void *arg) evtimer_del(&data->timer); evtimer_add(&data->timer, &tv); + if (TAILQ_FIRST(&wp->modes) != wme) + return; + t = time(NULL); gmtime_r(&t, &now); gmtime_r(&data->tim, &then); @@ -144,7 +147,7 @@ window_clock_timer_callback(__unused int fd, __unused short events, void *arg) data->tim = t; window_clock_draw_screen(wme); - server_redraw_window(wp->window); + wp->flags |= PANE_REDRAW; } static struct screen * diff --git a/window-copy.c b/window-copy.c index d7ce3e8a5b..223741d12c 100644 --- a/window-copy.c +++ b/window-copy.c @@ -258,7 +258,7 @@ window_copy_init(struct window_mode_entry *wme, data = window_copy_common_init(wme); - if (wp->fd != -1) + if (wp->fd != -1 && wp->disabled++ == 0) bufferevent_disable(wp->event, EV_READ|EV_WRITE); data->backing = &wp->base; @@ -302,7 +302,7 @@ window_copy_free(struct window_mode_entry *wme) struct window_pane *wp = wme->wp; struct window_copy_mode_data *data = wme->data; - if (wp->fd != -1) + if (wp->fd != -1 && --wp->disabled == 0) bufferevent_enable(wp->event, EV_READ|EV_WRITE); free(data->searchmark); @@ -330,7 +330,7 @@ window_copy_add(struct window_pane *wp, const char *fmt, ...) void window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) { - struct window_mode_entry *wme = wp->mode; + struct window_mode_entry *wme = TAILQ_FIRST(&wp->modes); struct window_copy_mode_data *data = wme->data; struct screen *backing = data->backing; struct screen_write_ctx back_ctx, ctx; @@ -377,7 +377,7 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) void window_copy_pageup(struct window_pane *wp, int half_page) { - window_copy_pageup1(wp->mode, half_page); + window_copy_pageup1(TAILQ_FIRST(&wp->modes), half_page); } static void @@ -2540,34 +2540,38 @@ window_copy_rectangle_toggle(struct window_mode_entry *wme) static void window_copy_move_mouse(struct mouse_event *m) { - struct window_pane *wp; - u_int x, y; + struct window_pane *wp; + struct window_mode_entry *wme; + u_int x, y; wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || - wp->mode == NULL || - wp->mode->mode != &window_copy_mode) + if (wp == NULL) + return; + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_copy_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; - window_copy_update_cursor(wp->mode, x, y); + window_copy_update_cursor(wme, x, y); } void window_copy_start_drag(struct client *c, struct mouse_event *m) { - struct window_pane *wp; - u_int x, y; + struct window_pane *wp; + struct window_mode_entry *wme; + u_int x, y; if (c == NULL) return; wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || - wp->mode == NULL || - wp->mode->mode != &window_copy_mode) + if (wp == NULL) + return; + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_copy_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 1) != 0) @@ -2576,30 +2580,35 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) c->tty.mouse_drag_update = window_copy_drag_update; c->tty.mouse_drag_release = NULL; /* will fire MouseDragEnd key */ - window_copy_update_cursor(wp->mode, x, y); - window_copy_start_selection(wp->mode); - window_copy_redraw_screen(wp->mode); + window_copy_update_cursor(wme, x, y); + window_copy_start_selection(wme); + window_copy_redraw_screen(wme); } static void -window_copy_drag_update(__unused struct client *c, struct mouse_event *m) +window_copy_drag_update(struct client *c, struct mouse_event *m) { struct window_pane *wp; + struct window_mode_entry *wme; struct window_copy_mode_data *data; u_int x, y, old_cy; + if (c == NULL) + return; + wp = cmd_mouse_pane(m, NULL, NULL); - if (wp == NULL || - wp->mode == NULL || - wp->mode->mode != &window_copy_mode) + if (wp == NULL) return; - data = wp->mode->data; + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_copy_mode) + return; + data = wme->data; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; old_cy = data->cy; - window_copy_update_cursor(wp->mode, x, y); - if (window_copy_update_selection(wp->mode, 1)) - window_copy_redraw_selection(wp->mode, old_cy); + window_copy_update_cursor(wme, x, y); + if (window_copy_update_selection(wme, 1)) + window_copy_redraw_selection(wme, old_cy); } diff --git a/window.c b/window.c index 366df79754..05adc58641 100644 --- a/window.c +++ b/window.c @@ -810,7 +810,7 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->fd = -1; wp->event = NULL; - wp->mode = NULL; + TAILQ_INIT(&wp->modes); wp->layout_cell = NULL; @@ -844,7 +844,7 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) static void window_pane_destroy(struct window_pane *wp) { - window_pane_reset_mode(wp); + window_pane_reset_mode_all(wp); free(wp->searchstr); if (wp->fd != -1) { @@ -1047,14 +1047,18 @@ window_pane_error_callback(__unused struct bufferevent *bufev, void window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) { + struct window_mode_entry *wme; + if (sx == wp->sx && sy == wp->sy) return; wp->sx = sx; wp->sy = sy; screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL); - if (wp->mode != NULL && wp->mode->mode->resize != NULL) - wp->mode->mode->resize(wp->mode, sx, sy); + + wme = TAILQ_FIRST(&wp->modes); + if (wme != NULL && wme->mode->resize != NULL) + wme->mode->resize(wme, sx, sy); wp->flags |= PANE_RESIZE; } @@ -1208,7 +1212,7 @@ window_pane_mode_timer(__unused int fd, __unused short events, void *arg) if (wp->modelast < time(NULL) - WINDOW_MODE_TIMEOUT) { if (ioctl(wp->fd, FIONREAD, &n) == -1 || n > 0) - window_pane_reset_mode(wp); + window_pane_reset_mode_all(wp); } } @@ -1216,59 +1220,90 @@ int window_pane_set_mode(struct window_pane *wp, const struct window_mode *mode, struct cmd_find_state *fs, struct args *args) { - struct screen *s; - struct timeval tv = { .tv_sec = 10 }; + struct timeval tv = { .tv_sec = 10 }; + struct window_mode_entry *wme; - if (wp->mode != NULL) + if (!TAILQ_EMPTY(&wp->modes) && TAILQ_FIRST(&wp->modes)->mode == mode) return (1); - wp->mode = xcalloc(1, sizeof *wp->mode); - wp->mode->wp = wp; - wp->mode->mode = mode; - wp->mode->prefix = 1; - wp->modelast = time(NULL); - evtimer_set(&wp->modetimer, window_pane_mode_timer, wp); - evtimer_add(&wp->modetimer, &tv); + if (TAILQ_EMPTY(&wp->modes)) { + evtimer_set(&wp->modetimer, window_pane_mode_timer, wp); + evtimer_add(&wp->modetimer, &tv); + } - if ((s = wp->mode->mode->init(wp->mode, fs, args)) != NULL) - wp->screen = s; + TAILQ_FOREACH(wme, &wp->modes, entry) { + if (wme->mode == mode) + break; + } + if (wme != NULL) + TAILQ_REMOVE(&wp->modes, wme, entry); + else { + wme = xcalloc(1, sizeof *wme); + wme->wp = wp; + wme->mode = mode; + wme->prefix = 1; + wme->screen = wme->mode->init(wme, fs, args); + } + TAILQ_INSERT_HEAD(&wp->modes, wme, entry); + + wp->screen = wme->screen; wp->flags |= (PANE_REDRAW|PANE_CHANGED); server_status_window(wp->window); notify_pane("pane-mode-changed", wp); + return (0); } void window_pane_reset_mode(struct window_pane *wp) { - if (wp->mode == NULL) - return; + struct window_mode_entry *wme, *next; - evtimer_del(&wp->modetimer); + if (TAILQ_EMPTY(&wp->modes)) + return; - wp->mode->mode->free(wp->mode); - free(wp->mode); - wp->mode = NULL; + wme = TAILQ_FIRST(&wp->modes); + TAILQ_REMOVE(&wp->modes, wme, entry); + wme->mode->free(wme); + free(wme); - wp->screen = &wp->base; + next = TAILQ_FIRST(&wp->modes); + if (next == NULL) { + log_debug("%s: no next mode", __func__); + evtimer_del(&wp->modetimer); + wp->screen = &wp->base; + } else { + log_debug("%s: next mode is %s", __func__, next->mode->name); + wp->screen = next->screen; + if (next != NULL && next->mode->resize != NULL) + next->mode->resize(next, wp->sx, wp->sy); + } wp->flags |= (PANE_REDRAW|PANE_CHANGED); server_status_window(wp->window); notify_pane("pane-mode-changed", wp); } +void +window_pane_reset_mode_all(struct window_pane *wp) +{ + while (!TAILQ_EMPTY(&wp->modes)) + window_pane_reset_mode(wp); +} + void window_pane_key(struct window_pane *wp, struct client *c, struct session *s, struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_mode_entry *wme = wp->mode; + struct window_mode_entry *wme; struct window_pane *wp2; if (KEYC_IS_MOUSE(key) && m == NULL) return; + wme = TAILQ_FIRST(&wp->modes); if (wme != NULL) { wp->modelast = time(NULL); if (wme->mode->key != NULL) @@ -1286,7 +1321,7 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, if (options_get_number(wp->window->options, "synchronize-panes")) { TAILQ_FOREACH(wp2, &wp->window->panes, entry) { if (wp2 != wp && - wp2->mode == NULL && + TAILQ_EMPTY(&wp2->modes) && wp2->fd != -1 && (~wp2->flags & PANE_INPUTOFF) && window_pane_visible(wp2)) From f8a30e158821876e8c30d46ab2728bce739e35de Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 11:20:21 +0000 Subject: [PATCH 301/836] Update CHANGES. --- CHANGES | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGES b/CHANGES index 5c0bf03b4f..b8d96b7704 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,18 @@ CHANGES FROM 2.8 to X.X +* Allow more than one mode to be opened in a pane. Modes are kept on a + stack and retrieved if the same mode is entered again. Exiting the + active mode goes back to the previous one. + +* Add support for origin mode. + +* When showing command output in copy mode, call it view mode instead + (affects pane_mode format). + +* Add -b to display-panes like run-shell. + +* Handle UTF-8 in word-separators option. + * New "terminal" colour allowing options to use the terminal default colour rather than inheriting the default from a parent option. From 595b52490e796f87ee163615b5d7f6c624f1fd89 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 12:12:20 +0000 Subject: [PATCH 302/836] Add to TODO. --- TODO | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/TODO b/TODO index d764bca79a..d767dd1071 100644 --- a/TODO +++ b/TODO @@ -118,7 +118,6 @@ * flag to specify environment to new-window, split-window, new-session (issue 1498) * multiple column panes (issue 1503) - * stack of modes rather than first one sticking (issue 1542) * support for ZERO WIDTH JOINER U+200D - hooks @@ -145,4 +144,4 @@ moved offset when it gets close to an edge? * issues that are not too hard to do: - 1501, 1517, 1498, 1542 + 1501, 1517, 1498 From 7b819357ff5a0f014527a94ce0abb98e472ea358 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 12:49:46 +0000 Subject: [PATCH 303/836] Tweak target debug logging. --- cmd-find.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index fe5bb3e030..3cee9d149e 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -971,7 +971,7 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, { struct mouse_event *m; struct cmd_find_state current; - char *colon, *period, *copy = NULL; + char *colon, *period, *copy = NULL, tmp[256]; const char *session, *window, *pane, *s; int window_only = 0, pane_only = 0; @@ -988,11 +988,25 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, s = "session"; else s = "unknown"; - if (target == NULL) - log_debug("%s: target none, type %s", __func__, s); - else - log_debug("%s: target %s, type %s", __func__, target, s); - log_debug("%s: item %p, flags %#x", __func__, item, flags); + *tmp = '\0'; + if (flags & CMD_FIND_PREFER_UNATTACHED) + strlcat(tmp, "PREFER_UNATTACHED,", sizeof tmp); + if (flags & CMD_FIND_QUIET) + strlcat(tmp, "QUIET,", sizeof tmp); + if (flags & CMD_FIND_WINDOW_INDEX) + strlcat(tmp, "WINDOW_INDEX,", sizeof tmp); + if (flags & CMD_FIND_DEFAULT_MARKED) + strlcat(tmp, "DEFAULT_MARKED,", sizeof tmp); + if (flags & CMD_FIND_EXACT_SESSION) + strlcat(tmp, "EXACT_SESSION,", sizeof tmp); + if (flags & CMD_FIND_EXACT_WINDOW) + strlcat(tmp, "EXACT_WINDOW,", sizeof tmp); + if (flags & CMD_FIND_CANFAIL) + strlcat(tmp, "CANFAIL,", sizeof tmp); + if (*tmp != '\0') + tmp[strlen(tmp) - 1] = '\0'; + log_debug("%s: target %s, type %s, item %p, flags %s", __func__, + target == NULL ? "none" : target, s, item, tmp); /* Clear new state. */ cmd_find_clear_state(fs, flags); @@ -1132,9 +1146,16 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, if (pane != NULL) pane = cmd_find_map_table(cmd_find_pane_table, pane); - log_debug("%s: target %s (flags %#x): session=%s, window=%s, pane=%s", - __func__, target, flags, session == NULL ? "none" : session, - window == NULL ? "none" : window, pane == NULL ? "none" : pane); + if (session != NULL || window != NULL || pane != NULL) { + log_debug("%s: target %s is %s%s%s%s%s%s", + __func__, target, + session == NULL ? "" : "session ", + session == NULL ? "" : session, + window == NULL ? "" : "window ", + window == NULL ? "" : window, + pane == NULL ? "" : "pane ", + pane == NULL ? "" : pane); + } /* No pane is allowed if want an index. */ if (pane != NULL && (flags & CMD_FIND_WINDOW_INDEX)) { From 7804fa1b82b14a28a6bfe72d5ee7aebd03584333 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 12:58:40 +0000 Subject: [PATCH 304/836] Revert to not clearing history on RIS, apparently some bootloaders send this and it doesn't really do any harm. --- input.c | 1 - 1 file changed, 1 deletion(-) diff --git a/input.c b/input.c index 049b82e1bc..73bd099bc5 100644 --- a/input.c +++ b/input.c @@ -1197,7 +1197,6 @@ input_esc_dispatch(struct input_ctx *ictx) window_pane_reset_palette(ictx->wp); input_reset_cell(ictx); screen_write_reset(sctx); - screen_write_clearhistory(sctx); break; case INPUT_ESC_IND: screen_write_linefeed(sctx, 0, ictx->cell.cell.bg); From 3f0efc050aabcc68115f37764d49c1c73d98437f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 13:14:04 +0000 Subject: [PATCH 305/836] When asked for a window index, return it even if the window exists. --- cmd-find.c | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-find.c b/cmd-find.c index 3cee9d149e..2711c26b6b 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -454,6 +454,7 @@ cmd_find_get_window_with_session(struct cmd_find_state *fs, const char *window) if (errstr == NULL) { fs->wl = winlink_find_by_index(&fs->s->windows, idx); if (fs->wl != NULL) { + fs->idx = fs->wl->idx; fs->w = fs->wl->window; return (0); } From 303d20a758a2779f76854b6df10f8764e44fc407 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 13:14:14 +0000 Subject: [PATCH 306/836] Fix wrapping after origin mode change. --- screen-write.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/screen-write.c b/screen-write.c index e8aa09731c..a6e78f42fe 100644 --- a/screen-write.c +++ b/screen-write.c @@ -75,7 +75,7 @@ screen_write_set_cursor(struct screen_write_ctx *ctx, int cx, int cy) return; if (cx != -1) { - if ((u_int)cx > screen_size_x(s) - 1) + if ((u_int)cx > screen_size_x(s)) /* allow last column */ cx = screen_size_x(s) - 1; s->cx = cx; } @@ -1045,6 +1045,11 @@ screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) py += s->rupper; } + if (px > screen_size_x(s) - 1) + px = screen_size_x(s) - 1; + if (py > screen_size_y(s) - 1) + py = screen_size_y(s) - 1; + screen_write_set_cursor(ctx, px, py); } From 028f9d1d879255f9dbb80df53f44d37736b68e00 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 13:56:30 +0000 Subject: [PATCH 307/836] Fix resizing of control clients, should be ignored until SIZECHANGED flag set. --- cmd-new-session.c | 4 +--- resize.c | 42 +++++++++++++++++++++++------------------- tmux.h | 3 +-- window.c | 4 ++-- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 162a50bd13..e1be350b9e 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -222,9 +222,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (!detached && !is_control) { sx = c->tty.sx; sy = c->tty.sy; - if (!is_control && - sy > 0 && - options_get_number(global_s_options, "status")) + if (sy > 0 && options_get_number(global_s_options, "status")) sy--; } else { value = options_get_string(global_s_options, "default-size"); diff --git a/resize.c b/resize.c index 2134165f1a..3726298fbb 100644 --- a/resize.c +++ b/resize.c @@ -61,6 +61,18 @@ resize_window(struct window *w, u_int sx, u_int sy) notify_window("window-layout-changed", w); } +static int +ignore_client_size(struct client *c) +{ + if (c->session == NULL) + return (1); + if (c->flags & CLIENT_NOSIZEFLAGS) + return (1); + if ((c->flags & CLIENT_CONTROL) && (~c->flags & CLIENT_SIZECHANGED)) + return (1); + return (0); +} + void default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, int type) @@ -77,9 +89,7 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, if (type == WINDOW_SIZE_LARGEST) { *sx = *sy = 0; TAILQ_FOREACH(c, &clients, entry) { - if (c->session == NULL) - continue; - if (c->flags & CLIENT_NOSIZEFLAGS) + if (ignore_client_size(c)) continue; if (w != NULL && !session_has(c->session, w)) continue; @@ -99,9 +109,7 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, } else { *sx = *sy = UINT_MAX; TAILQ_FOREACH(c, &clients, entry) { - if (c->session == NULL) - continue; - if (c->flags & CLIENT_NOSIZEFLAGS) + if (ignore_client_size(c)) continue; if (w != NULL && !session_has(c->session, w)) continue; @@ -146,7 +154,7 @@ recalculate_sizes(void) struct client *c; struct window *w; u_int sx, sy, cx, cy; - int flags, type, current, has, changed; + int type, current, has, changed; /* * Clear attached count and update saved status line information for @@ -162,21 +170,13 @@ recalculate_sizes(void) * client. */ TAILQ_FOREACH(c, &clients, entry) { - if ((s = c->session) == NULL) - continue; - - flags = c->flags; - if (flags & CLIENT_SUSPENDED) - continue; - if ((flags & CLIENT_CONTROL) && (~flags & CLIENT_SIZECHANGED)) + if (ignore_client_size(c)) continue; - if (c->tty.sy <= status_line_size(c)) c->flags |= CLIENT_STATUSOFF; else c->flags &= ~CLIENT_STATUSOFF; - - s->attached++; + c->session->attached++; } /* Walk each window and adjust the size. */ @@ -194,8 +194,10 @@ recalculate_sizes(void) if (type == WINDOW_SIZE_LARGEST) { sx = sy = 0; TAILQ_FOREACH(c, &clients, entry) { - if ((s = c->session) == NULL) + if (ignore_client_size(c)) continue; + s = c->session; + if (current) has = (s->curw->window == w); else @@ -216,8 +218,10 @@ recalculate_sizes(void) } else { sx = sy = UINT_MAX; TAILQ_FOREACH(c, &clients, entry) { - if ((s = c->session) == NULL) + if (ignore_client_size(c)) continue; + s = c->session; + if (current) has = (s->curw->window == w); else diff --git a/tmux.h b/tmux.h index 329af6b294..beb862dd9f 100644 --- a/tmux.h +++ b/tmux.h @@ -1393,8 +1393,7 @@ struct client { CLIENT_REDRAWSTATUSALWAYS| \ CLIENT_REDRAWBORDERS) #define CLIENT_NOSIZEFLAGS \ - (CLIENT_EXIT| \ - CLIENT_DEAD| \ + (CLIENT_DEAD| \ CLIENT_SUSPENDED| \ CLIENT_DETACHING) int flags; diff --git a/window.c b/window.c index 05adc58641..117c47e77a 100644 --- a/window.c +++ b/window.c @@ -503,8 +503,8 @@ window_get_active_at(struct window *w, u_int x, u_int y) struct window_pane *wp; TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; + if (!window_pane_visible(wp)) + continue; if (x < wp->xoff || x > wp->xoff + wp->sx) continue; if (y < wp->yoff || y > wp->yoff + wp->sy) From 860acecc0d0dccad41176e20026707492f0f5826 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 13:57:06 +0000 Subject: [PATCH 308/836] Fix up regress test for control client size. --- regress/control-client-size.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/regress/control-client-size.sh b/regress/control-client-size.sh index 55f7eed1ad..b8d9aef0f9 100644 --- a/regress/control-client-size.sh +++ b/regress/control-client-size.sh @@ -13,37 +13,37 @@ $TMUX kill-server 2>/dev/null TMP=$(mktemp) OUT=$(mktemp) -#trap "rm -f $TMP $OUT" 0 1 15 +trap "rm -f $TMP $OUT" 0 1 15 $TMUX -f/dev/null new -d || exit 1 sleep 1 cat <$TMP -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' refresh -C 100,50 -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:100 50\n"|cmp -s $OUT - || exit 1 +printf ":80 24\n:100 49\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d || exit 1 sleep 1 cat <$TMP -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' refresh -C 80,24 -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:80 24\n"|cmp -s $OUT - || exit 1 +printf ":80 24\n:80 23\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null cat <$TMP -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' refresh -C 80,24 -ls -F':#{session_width} #{session_height}' +ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":100 50\n:80 24\n"|cmp -s $OUT - || exit 1 +printf ":100 50\n:80 23\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null exit 0 From 4002dbf0c1dd922704022acf717e1350488e345c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 13:58:25 +0000 Subject: [PATCH 309/836] Fix session size regress. --- regress/new-session-size.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regress/new-session-size.sh b/regress/new-session-size.sh index 5493054b6b..89fc580d61 100644 --- a/regress/new-session-size.sh +++ b/regress/new-session-size.sh @@ -14,13 +14,13 @@ trap "rm -f $TMP" 0 1 15 $TMUX -f/dev/null new -d $TMP +$TMUX ls -F "#{window_width} #{window_height}" >$TMP printf "80 24\n"|cmp -s $TMP - || exit 1 $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d -x 100 -y 50 $TMP +$TMUX ls -F "#{window_width} #{window_height}" >$TMP printf "100 50\n"|cmp -s $TMP - || exit 1 $TMUX kill-server 2>/dev/null From 2f0ffe6adb635f28ec5005776de00d98e7fe4162 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 17:52:22 +0000 Subject: [PATCH 310/836] Add to TODO. --- TODO | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index d767dd1071..56b964b624 100644 --- a/TODO +++ b/TODO @@ -29,7 +29,7 @@ * perhaps monitor /all/ panes in the window not just one - improve mouse support: - * bind commands to mouse in different areas? + * bind commands to mouse in different areas? * commands executed when clicking on a pattern (URL) - warts on current naming: @@ -143,5 +143,40 @@ * rather than centering cursor it might be better if only moved offset when it gets close to an edge? -* issues that are not too hard to do: - 1501, 1517, 1498 +---- + +TODO soonish maybe: + +- Horizontal cursor position is incorrect after resize (bug), issue 1323. +- Multiple status lines: + + 1) Extend formats to include some way to loop over every window + (or pane or session), perhaps something like + #{W:#{window_name} }. It would need to be able to reach + into a window's options in order to allow different windows + to have different format, maybe an operator to evaluate an + option value as a format, maybe make it so ! on evaluates + the result as a format again something like, so end up with + something like #{W:#{!window-status-format} } + + 2) Some way to include alignment information for part of a format. + + 3) Then the entire status line can be drawn with one option, + instead of status-left/status-right. But how to stay + backwards compatible, even slightly? Can probably keep + status-left and right and the default status-format becomes + something like (plus some bits for current window): + + #{L:#{!status-left} #{M:#{W:{!window-status-format}}} #{R:#{!status-right}} + + Where L = left, M = middle, R = right; W = for each window; + ! = get option value and evaluate as format. + + 4) Then status-format can be an array option specifying + multiple status lines. Perhaps one option for top and one + for bottom. + +- Store hooks as options, issue 1619. +- Support buffer prefixes, issue 1501. +- copy-pipe should be synchronous, issue 1517. +- -E flag to pass environment to new-*, issue 1498. From 6c3ee42568f3fef75f5daae890f6fb31dd378d95 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 12 Mar 2019 17:59:46 +0000 Subject: [PATCH 311/836] Add a couple of things. --- TODO | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/TODO b/TODO index 56b964b624..f37992bf9a 100644 --- a/TODO +++ b/TODO @@ -180,3 +180,10 @@ TODO soonish maybe: - Support buffer prefixes, issue 1501. - copy-pipe should be synchronous, issue 1517. - -E flag to pass environment to new-*, issue 1498. +- Copy mode searching is slow when there is a big history, issue 1545. +- Grid "block" stuff - some work done, there is an issue + somewhere. Can be used potentially for compression of history (bit + silly really though), reflow performance (can reflow blocks on + demand). It would possibly be good if history-limit could be global + and collected LRU. + From f3f534a3a0361ed11d0fc455f9a42ba82e6aa471 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 18:26:57 +0000 Subject: [PATCH 312/836] Tidy up a lot of &ictx->ctx by using a local variable. --- input.c | 149 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 79 insertions(+), 70 deletions(-) diff --git a/input.c b/input.c index 73bd099bc5..0503c52a11 100644 --- a/input.c +++ b/input.c @@ -801,16 +801,17 @@ void input_reset(struct window_pane *wp, int clear) { struct input_ctx *ictx = wp->ictx; + struct screen_write_ctx *sctx = &ictx->ctx; input_reset_cell(ictx); if (clear) { if (TAILQ_EMPTY(&wp->modes)) - screen_write_start(&ictx->ctx, wp, &wp->base); + screen_write_start(sctx, wp, &wp->base); else - screen_write_start(&ictx->ctx, NULL, &wp->base); - screen_write_reset(&ictx->ctx); - screen_write_stop(&ictx->ctx); + screen_write_start(sctx, NULL, &wp->base); + screen_write_reset(sctx); + screen_write_stop(sctx); } input_clear(ictx); @@ -846,6 +847,7 @@ void input_parse(struct window_pane *wp) { struct input_ctx *ictx = wp->ictx; + struct screen_write_ctx *sctx = &ictx->ctx; const struct input_transition *itr; struct evbuffer *evb = wp->event->input; u_char *buf; @@ -862,9 +864,9 @@ input_parse(struct window_pane *wp) * update the tty. */ if (TAILQ_EMPTY(&wp->modes)) - screen_write_start(&ictx->ctx, wp, &wp->base); + screen_write_start(sctx, wp, &wp->base); else - screen_write_start(&ictx->ctx, NULL, &wp->base); + screen_write_start(sctx, NULL, &wp->base); ictx->wp = wp; buf = EVBUFFER_DATA(evb); @@ -900,7 +902,7 @@ input_parse(struct window_pane *wp) * be the minority. */ if (itr->handler != input_print) - screen_write_collect_end(&ictx->ctx); + screen_write_collect_end(sctx); /* * Execute the handler, if any. Don't switch state if it @@ -919,7 +921,7 @@ input_parse(struct window_pane *wp) } /* Close the screen. */ - screen_write_stop(&ictx->ctx); + screen_write_stop(sctx); evbuffer_drain(evb, len); } @@ -1048,7 +1050,8 @@ input_ground(struct input_ctx *ictx) static int input_print(struct input_ctx *ictx) { - int set; + struct screen_write_ctx *sctx = &ictx->ctx; + int set; ictx->utf8started = 0; /* can't be valid UTF-8 */ @@ -1059,7 +1062,7 @@ input_print(struct input_ctx *ictx) ictx->cell.cell.attr &= ~GRID_ATTR_CHARSET; utf8_set(&ictx->cell.cell.data, ictx->ch); - screen_write_collect_add(&ictx->ctx, &ictx->cell.cell); + screen_write_collect_add(sctx, &ictx->cell.cell); ictx->last = ictx->ch; ictx->cell.cell.attr &= ~GRID_ATTR_CHARSET; @@ -1533,17 +1536,18 @@ input_csi_dispatch(struct input_ctx *ictx) static void input_csi_dispatch_rm(struct input_ctx *ictx) { - u_int i; + struct screen_write_ctx *sctx = &ictx->ctx; + u_int i; for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { case -1: break; case 4: /* IRM */ - screen_write_mode_clear(&ictx->ctx, MODE_INSERT); + screen_write_mode_clear(sctx, MODE_INSERT); break; case 34: - screen_write_mode_set(&ictx->ctx, MODE_BLINKING); + screen_write_mode_set(sctx, MODE_BLINKING); break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); @@ -1556,6 +1560,7 @@ input_csi_dispatch_rm(struct input_ctx *ictx) static void input_csi_dispatch_rm_private(struct input_ctx *ictx) { + struct screen_write_ctx *sctx = &ictx->ctx; struct window_pane *wp = ictx->wp; u_int i; @@ -1564,40 +1569,39 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) case -1: break; case 1: /* DECCKM */ - screen_write_mode_clear(&ictx->ctx, MODE_KCURSOR); + screen_write_mode_clear(sctx, MODE_KCURSOR); break; case 3: /* DECCOLM */ - screen_write_cursormove(&ictx->ctx, 0, 0); - screen_write_clearscreen(&ictx->ctx, - ictx->cell.cell.bg); + screen_write_cursormove(sctx, 0, 0); + screen_write_clearscreen(sctx, ictx->cell.cell.bg); break; case 6: /* DECOM */ - screen_write_mode_clear(&ictx->ctx, MODE_ORIGIN); - screen_write_cursormove(&ictx->ctx, 0, 0); + screen_write_mode_clear(sctx, MODE_ORIGIN); + screen_write_cursormove(sctx, 0, 0); break; case 7: /* DECAWM */ - screen_write_mode_clear(&ictx->ctx, MODE_WRAP); + screen_write_mode_clear(sctx, MODE_WRAP); break; case 12: - screen_write_mode_clear(&ictx->ctx, MODE_BLINKING); + screen_write_mode_clear(sctx, MODE_BLINKING); break; case 25: /* TCEM */ - screen_write_mode_clear(&ictx->ctx, MODE_CURSOR); + screen_write_mode_clear(sctx, MODE_CURSOR); break; case 1000: case 1001: case 1002: case 1003: - screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES); + screen_write_mode_clear(sctx, ALL_MOUSE_MODES); break; case 1004: - screen_write_mode_clear(&ictx->ctx, MODE_FOCUSON); + screen_write_mode_clear(sctx, MODE_FOCUSON); break; case 1005: - screen_write_mode_clear(&ictx->ctx, MODE_MOUSE_UTF8); + screen_write_mode_clear(sctx, MODE_MOUSE_UTF8); break; case 1006: - screen_write_mode_clear(&ictx->ctx, MODE_MOUSE_SGR); + screen_write_mode_clear(sctx, MODE_MOUSE_SGR); break; case 47: case 1047: @@ -1607,7 +1611,7 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) window_pane_alternate_off(wp, &ictx->cell.cell, 1); break; case 2004: - screen_write_mode_clear(&ictx->ctx, MODE_BRACKETPASTE); + screen_write_mode_clear(sctx, MODE_BRACKETPASTE); break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); @@ -1620,17 +1624,18 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) static void input_csi_dispatch_sm(struct input_ctx *ictx) { - u_int i; + struct screen_write_ctx *sctx = &ictx->ctx; + u_int i; for (i = 0; i < ictx->param_list_len; i++) { switch (input_get(ictx, i, 0, -1)) { case -1: break; case 4: /* IRM */ - screen_write_mode_set(&ictx->ctx, MODE_INSERT); + screen_write_mode_set(sctx, MODE_INSERT); break; case 34: - screen_write_mode_clear(&ictx->ctx, MODE_BLINKING); + screen_write_mode_clear(sctx, MODE_BLINKING); break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); @@ -1643,6 +1648,7 @@ input_csi_dispatch_sm(struct input_ctx *ictx) static void input_csi_dispatch_sm_private(struct input_ctx *ictx) { + struct screen_write_ctx *sctx = &ictx->ctx; struct window_pane *wp = ictx->wp; u_int i; @@ -1651,49 +1657,48 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) case -1: break; case 1: /* DECCKM */ - screen_write_mode_set(&ictx->ctx, MODE_KCURSOR); + screen_write_mode_set(sctx, MODE_KCURSOR); break; case 3: /* DECCOLM */ - screen_write_cursormove(&ictx->ctx, 0, 0); - screen_write_clearscreen(&ictx->ctx, - ictx->cell.cell.bg); + screen_write_cursormove(sctx, 0, 0); + screen_write_clearscreen(sctx, ictx->cell.cell.bg); break; case 6: /* DECOM */ - screen_write_mode_set(&ictx->ctx, MODE_ORIGIN); - screen_write_cursormove(&ictx->ctx, 0, 0); + screen_write_mode_set(sctx, MODE_ORIGIN); + screen_write_cursormove(sctx, 0, 0); break; case 7: /* DECAWM */ - screen_write_mode_set(&ictx->ctx, MODE_WRAP); + screen_write_mode_set(sctx, MODE_WRAP); break; case 12: - screen_write_mode_set(&ictx->ctx, MODE_BLINKING); + screen_write_mode_set(sctx, MODE_BLINKING); break; case 25: /* TCEM */ - screen_write_mode_set(&ictx->ctx, MODE_CURSOR); + screen_write_mode_set(sctx, MODE_CURSOR); break; case 1000: - screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES); - screen_write_mode_set(&ictx->ctx, MODE_MOUSE_STANDARD); + screen_write_mode_clear(sctx, ALL_MOUSE_MODES); + screen_write_mode_set(sctx, MODE_MOUSE_STANDARD); break; case 1002: - screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES); - screen_write_mode_set(&ictx->ctx, MODE_MOUSE_BUTTON); + screen_write_mode_clear(sctx, ALL_MOUSE_MODES); + screen_write_mode_set(sctx, MODE_MOUSE_BUTTON); break; case 1003: - screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES); - screen_write_mode_set(&ictx->ctx, MODE_MOUSE_ALL); + screen_write_mode_clear(sctx, ALL_MOUSE_MODES); + screen_write_mode_set(sctx, MODE_MOUSE_ALL); break; case 1004: - if (ictx->ctx.s->mode & MODE_FOCUSON) + if (sctx->s->mode & MODE_FOCUSON) break; - screen_write_mode_set(&ictx->ctx, MODE_FOCUSON); + screen_write_mode_set(sctx, MODE_FOCUSON); wp->flags |= PANE_FOCUSPUSH; /* force update */ break; case 1005: - screen_write_mode_set(&ictx->ctx, MODE_MOUSE_UTF8); + screen_write_mode_set(sctx, MODE_MOUSE_UTF8); break; case 1006: - screen_write_mode_set(&ictx->ctx, MODE_MOUSE_SGR); + screen_write_mode_set(sctx, MODE_MOUSE_SGR); break; case 47: case 1047: @@ -1703,7 +1708,7 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) window_pane_alternate_on(wp, &ictx->cell.cell, 1); break; case 2004: - screen_write_mode_set(&ictx->ctx, MODE_BRACKETPASTE); + screen_write_mode_set(sctx, MODE_BRACKETPASTE); break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); @@ -1716,6 +1721,7 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) static void input_csi_dispatch_winops(struct input_ctx *ictx) { + struct screen_write_ctx *sctx = &ictx->ctx; struct window_pane *wp = ictx->wp; int n, m; @@ -1755,7 +1761,7 @@ input_csi_dispatch_winops(struct input_ctx *ictx) return; case 0: case 2: - screen_push_title(ictx->ctx.s); + screen_push_title(sctx->s); break; } break; @@ -1766,7 +1772,7 @@ input_csi_dispatch_winops(struct input_ctx *ictx) return; case 0: case 2: - screen_pop_title(ictx->ctx.s); + screen_pop_title(sctx->s); server_status_window(ictx->wp->window); break; } @@ -2089,20 +2095,19 @@ input_enter_dcs(struct input_ctx *ictx) static int input_dcs_dispatch(struct input_ctx *ictx) { - const char prefix[] = "tmux;"; - const u_int prefix_len = (sizeof prefix) - 1; + struct screen_write_ctx *sctx = &ictx->ctx; + u_char *buf = ictx->input_buf; + size_t len = ictx->input_len; + const char prefix[] = "tmux;"; + const u_int prefixlen = (sizeof prefix) - 1; if (ictx->flags & INPUT_DISCARD) return (0); - log_debug("%s: \"%s\"", __func__, ictx->input_buf); + log_debug("%s: \"%s\"", __func__, buf); - /* Check for tmux prefix. */ - if (ictx->input_len >= prefix_len && - strncmp(ictx->input_buf, prefix, prefix_len) == 0) { - screen_write_rawstring(&ictx->ctx, - ictx->input_buf + prefix_len, ictx->input_len - prefix_len); - } + if (len >= prefixlen && strncmp(buf, prefix, prefixlen) == 0) + screen_write_rawstring(sctx, buf + prefixlen, len - prefixlen); return (0); } @@ -2122,8 +2127,9 @@ input_enter_osc(struct input_ctx *ictx) static void input_exit_osc(struct input_ctx *ictx) { - u_char *p = ictx->input_buf; - u_int option; + struct screen_write_ctx *sctx = &ictx->ctx; + u_char *p = ictx->input_buf; + u_int option; if (ictx->flags & INPUT_DISCARD) return; @@ -2143,7 +2149,7 @@ input_exit_osc(struct input_ctx *ictx) case 0: case 2: if (utf8_isvalid(p)) { - screen_set_title(ictx->ctx.s, p); + screen_set_title(sctx->s, p); server_status_window(ictx->wp->window); } break; @@ -2158,7 +2164,7 @@ input_exit_osc(struct input_ctx *ictx) break; case 12: if (utf8_isvalid(p) && *p != '?') /* ? is colour request */ - screen_set_cursor_colour(ictx->ctx.s, p); + screen_set_cursor_colour(sctx->s, p); break; case 52: input_osc_52(ictx, p); @@ -2168,7 +2174,7 @@ input_exit_osc(struct input_ctx *ictx) break; case 112: if (*p == '\0') /* no arguments allowed */ - screen_set_cursor_colour(ictx->ctx.s, ""); + screen_set_cursor_colour(sctx->s, ""); break; default: log_debug("%s: unknown '%u'", __func__, option); @@ -2191,13 +2197,15 @@ input_enter_apc(struct input_ctx *ictx) static void input_exit_apc(struct input_ctx *ictx) { + struct screen_write_ctx *sctx = &ictx->ctx; + if (ictx->flags & INPUT_DISCARD) return; log_debug("%s: \"%s\"", __func__, ictx->input_buf); if (!utf8_isvalid(ictx->input_buf)) return; - screen_set_title(ictx->ctx.s, ictx->input_buf); + screen_set_title(sctx->s, ictx->input_buf); server_status_window(ictx->wp->window); } @@ -2233,6 +2241,7 @@ input_exit_rename(struct input_ctx *ictx) static int input_top_bit_set(struct input_ctx *ictx) { + struct screen_write_ctx *sctx = &ictx->ctx; struct utf8_data *ud = &ictx->utf8data; ictx->last = -1; @@ -2259,7 +2268,7 @@ input_top_bit_set(struct input_ctx *ictx) (int)ud->size, ud->data, ud->width); utf8_copy(&ictx->cell.cell.data, ud); - screen_write_collect_add(&ictx->ctx, &ictx->cell.cell); + screen_write_collect_add(sctx, &ictx->cell.cell); return (0); } @@ -2270,7 +2279,7 @@ input_osc_4(struct input_ctx *ictx, const char *p) { struct window_pane *wp = ictx->wp; char *copy, *s, *next = NULL; - long idx; + long idx; u_int r, g, b; copy = s = xstrdup(p); @@ -2410,7 +2419,7 @@ input_osc_104(struct input_ctx *ictx, const char *p) { struct window_pane *wp = ictx->wp; char *copy, *s; - long idx; + long idx; if (*p == '\0') { window_pane_reset_palette(wp); From 2796ae81d0be04df161cffdf447c2d0e5ec895e2 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 18:30:08 +0000 Subject: [PATCH 313/836] Fix HPA in origin mode. --- input.c | 4 ++-- screen-write.c | 10 +++++----- tmux.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/input.c b/input.c index 0503c52a11..dcfb677222 100644 --- a/input.c +++ b/input.c @@ -1447,7 +1447,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_HPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, n - 1, s->cy); + screen_write_cursormove(sctx, n - 1, -1); break; case INPUT_CSI_ICH: n = input_get(ictx, 0, 1, 1); @@ -1519,7 +1519,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_VPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, s->cx, n - 1); + screen_write_cursormove(sctx, -1, n - 1); break; case INPUT_CSI_DECSCUSR: n = input_get(ictx, 0, 0, 0); diff --git a/screen-write.c b/screen-write.c index a6e78f42fe..c9cba2bd63 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1034,20 +1034,20 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg) /* Move cursor to px,py. */ void -screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) +screen_write_cursormove(struct screen_write_ctx *ctx, int px, int py) { struct screen *s = ctx->s; - if (s->mode & MODE_ORIGIN) { - if (py > s->rlower - s->rupper) + if (py != -1 && (s->mode & MODE_ORIGIN)) { + if ((u_int)py > s->rlower - s->rupper) py = s->rlower; else py += s->rupper; } - if (px > screen_size_x(s) - 1) + if (px != -1 && (u_int)px > screen_size_x(s) - 1) px = screen_size_x(s) - 1; - if (py > screen_size_y(s) - 1) + if (py != -1 && (u_int)py > screen_size_y(s) - 1) py = screen_size_y(s) - 1; screen_write_set_cursor(ctx, px, py); diff --git a/tmux.h b/tmux.h index beb862dd9f..6a94524c66 100644 --- a/tmux.h +++ b/tmux.h @@ -2100,7 +2100,7 @@ void screen_write_deleteline(struct screen_write_ctx *, u_int, u_int); void screen_write_clearline(struct screen_write_ctx *, u_int); void screen_write_clearendofline(struct screen_write_ctx *, u_int); void screen_write_clearstartofline(struct screen_write_ctx *, u_int); -void screen_write_cursormove(struct screen_write_ctx *, u_int, u_int); +void screen_write_cursormove(struct screen_write_ctx *, int, int); void screen_write_reverseindex(struct screen_write_ctx *, u_int); void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int); void screen_write_linefeed(struct screen_write_ctx *, int, u_int); From 938156d73b0cc0692c727ac9a94bf65b235cfe40 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 20:02:47 +0000 Subject: [PATCH 314/836] DECRC and DECSC apparently need to preserve origin mode as well, based on a fix from Marc Reisner. --- input.c | 55 ++++++++++++++++++++++++++++++++++--------------- mode-tree.c | 8 +++---- screen-redraw.c | 2 +- screen-write.c | 5 +++-- server-fn.c | 2 +- status.c | 18 ++++++++-------- tmux.h | 2 +- window-buffer.c | 2 +- window-client.c | 4 ++-- window-clock.c | 4 ++-- window-copy.c | 20 +++++++++--------- window-tree.c | 28 ++++++++++++------------- 12 files changed, 86 insertions(+), 64 deletions(-) diff --git a/input.c b/input.c index dcfb677222..57a45a920c 100644 --- a/input.c +++ b/input.c @@ -81,6 +81,7 @@ struct input_ctx { struct input_cell old_cell; u_int old_cx; u_int old_cy; + int old_mode; u_char interm_buf[4]; size_t interm_len; @@ -755,6 +756,32 @@ input_reset_cell(struct input_ctx *ictx) ictx->old_cy = 0; } +/* Save screen state. */ +static void +input_save_state(struct input_ctx *ictx) +{ + struct screen_write_ctx *sctx = &ictx->ctx; + struct screen *s = sctx->s; + + memcpy(&ictx->old_cell, &ictx->cell, sizeof ictx->old_cell); + ictx->old_cx = s->cx; + ictx->old_cy = s->cy; + ictx->old_mode = s->mode; +} + +static void +input_restore_state(struct input_ctx *ictx) +{ + struct screen_write_ctx *sctx = &ictx->ctx; + + memcpy(&ictx->cell, &ictx->old_cell, sizeof ictx->cell); + if (ictx->old_mode & MODE_ORIGIN) + screen_write_mode_set(sctx, MODE_ORIGIN); + else + screen_write_mode_clear(sctx, MODE_ORIGIN); + screen_write_cursormove(sctx, ictx->old_cx, ictx->old_cy, 0); +} + /* Initialise input parser. */ void input_init(struct window_pane *wp) @@ -1222,13 +1249,10 @@ input_esc_dispatch(struct input_ctx *ictx) screen_write_mode_clear(sctx, MODE_KKEYPAD); break; case INPUT_ESC_DECSC: - memcpy(&ictx->old_cell, &ictx->cell, sizeof ictx->old_cell); - ictx->old_cx = s->cx; - ictx->old_cy = s->cy; + input_save_state(ictx); break; case INPUT_ESC_DECRC: - memcpy(&ictx->cell, &ictx->old_cell, sizeof ictx->cell); - screen_write_cursormove(sctx, ictx->old_cx, ictx->old_cy); + input_restore_state(ictx); break; case INPUT_ESC_DECALN: screen_write_alignmenttest(sctx); @@ -1315,7 +1339,7 @@ input_csi_dispatch(struct input_ctx *ictx) n = input_get(ictx, 0, 1, 1); m = input_get(ictx, 1, 1, 1); if (n != -1 && m != -1) - screen_write_cursormove(sctx, m - 1, n - 1); + screen_write_cursormove(sctx, m - 1, n - 1, 1); break; case INPUT_CSI_WINOPS: input_csi_dispatch_winops(ictx); @@ -1447,7 +1471,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_HPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, n - 1, -1); + screen_write_cursormove(sctx, n - 1, -1, 1); break; case INPUT_CSI_ICH: n = input_get(ictx, 0, 1, 1); @@ -1472,8 +1496,7 @@ input_csi_dispatch(struct input_ctx *ictx) input_print(ictx); break; case INPUT_CSI_RCP: - memcpy(&ictx->cell, &ictx->old_cell, sizeof ictx->cell); - screen_write_cursormove(sctx, ictx->old_cx, ictx->old_cy); + input_restore_state(ictx); break; case INPUT_CSI_RM: input_csi_dispatch_rm(ictx); @@ -1482,9 +1505,7 @@ input_csi_dispatch(struct input_ctx *ictx) input_csi_dispatch_rm_private(ictx); break; case INPUT_CSI_SCP: - memcpy(&ictx->old_cell, &ictx->cell, sizeof ictx->old_cell); - ictx->old_cx = s->cx; - ictx->old_cy = s->cy; + input_save_state(ictx); break; case INPUT_CSI_SGR: input_csi_dispatch_sgr(ictx); @@ -1519,7 +1540,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_VPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, -1, n - 1); + screen_write_cursormove(sctx, -1, n - 1, 1); break; case INPUT_CSI_DECSCUSR: n = input_get(ictx, 0, 0, 0); @@ -1572,12 +1593,12 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx) screen_write_mode_clear(sctx, MODE_KCURSOR); break; case 3: /* DECCOLM */ - screen_write_cursormove(sctx, 0, 0); + screen_write_cursormove(sctx, 0, 0, 1); screen_write_clearscreen(sctx, ictx->cell.cell.bg); break; case 6: /* DECOM */ screen_write_mode_clear(sctx, MODE_ORIGIN); - screen_write_cursormove(sctx, 0, 0); + screen_write_cursormove(sctx, 0, 0, 1); break; case 7: /* DECAWM */ screen_write_mode_clear(sctx, MODE_WRAP); @@ -1660,12 +1681,12 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) screen_write_mode_set(sctx, MODE_KCURSOR); break; case 3: /* DECCOLM */ - screen_write_cursormove(sctx, 0, 0); + screen_write_cursormove(sctx, 0, 0, 1); screen_write_clearscreen(sctx, ictx->cell.cell.bg); break; case 6: /* DECOM */ screen_write_mode_set(sctx, MODE_ORIGIN); - screen_write_cursormove(sctx, 0, 0); + screen_write_cursormove(sctx, 0, 0, 1); break; case 7: /* DECAWM */ screen_write_mode_set(sctx, MODE_WRAP); diff --git a/mode-tree.c b/mode-tree.c index eb18bdf7a8..112969eae4 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -530,7 +530,7 @@ mode_tree_draw(struct mode_tree_data *mtd) line = &mtd->line_list[i]; mti = line->item; - screen_write_cursormove(&ctx, 0, i - mtd->offset); + screen_write_cursormove(&ctx, 0, i - mtd->offset, 0); if (i < 10) snprintf(key, sizeof key, "(%c) ", '0' + i); @@ -605,13 +605,13 @@ mode_tree_draw(struct mode_tree_data *mtd) line = &mtd->line_list[mtd->current]; mti = line->item; - screen_write_cursormove(&ctx, 0, h); + screen_write_cursormove(&ctx, 0, h, 0); screen_write_box(&ctx, w, sy - h); xasprintf(&text, " %s (sort: %s)", mti->name, mtd->sort_list[mtd->sort_type]); if (w - 2 >= strlen(text)) { - screen_write_cursormove(&ctx, 1, h); + screen_write_cursormove(&ctx, 1, h, 0); screen_write_puts(&ctx, &gc0, "%s", text); if (mtd->no_matches) @@ -633,7 +633,7 @@ mode_tree_draw(struct mode_tree_data *mtd) box_y = sy - h - 2; if (box_x != 0 && box_y != 0) { - screen_write_cursormove(&ctx, 2, h + 1); + screen_write_cursormove(&ctx, 2, h + 1, 0); mtd->drawcb(mtd->modedata, mti->itemdata, &ctx, box_x, box_y); } diff --git a/screen-redraw.c b/screen-redraw.c index 167389b444..0c53763082 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -300,7 +300,7 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, screen_resize(&wp->status_screen, outlen, 1, 0); screen_write_start(&ctx, NULL, &wp->status_screen); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); screen_write_clearline(&ctx, 8); screen_write_cnputs(&ctx, outlen, &gc, "%s", out); screen_write_stop(&ctx); diff --git a/screen-write.c b/screen-write.c index c9cba2bd63..9153ad27fb 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1034,11 +1034,12 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg) /* Move cursor to px,py. */ void -screen_write_cursormove(struct screen_write_ctx *ctx, int px, int py) +screen_write_cursormove(struct screen_write_ctx *ctx, int px, int py, + int origin) { struct screen *s = ctx->s; - if (py != -1 && (s->mode & MODE_ORIGIN)) { + if (origin && py != -1 && (s->mode & MODE_ORIGIN)) { if ((u_int)py > s->rlower - s->rupper) py = s->rlower; else diff --git a/server-fn.c b/server-fn.c index 5655346dc3..f947d8ffa3 100644 --- a/server-fn.c +++ b/server-fn.c @@ -320,7 +320,7 @@ server_destroy_pane(struct window_pane *wp, int notify) screen_write_start(&ctx, wp, &wp->base); screen_write_scrollregion(&ctx, 0, screen_size_y(ctx.s) - 1); - screen_write_cursormove(&ctx, 0, screen_size_y(ctx.s) - 1); + screen_write_cursormove(&ctx, 0, screen_size_y(ctx.s) - 1, 0); screen_write_linefeed(&ctx, 1, 8); memcpy(&gc, &grid_default_cell, sizeof gc); diff --git a/status.c b/status.c index 2e2f573109..4da7286610 100644 --- a/status.c +++ b/status.c @@ -465,7 +465,7 @@ status_redraw(struct client *c) screen_write_start(&ctx, NULL, &c->status.status); /* Draw the left string and arrow. */ - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); if (llen != 0) screen_write_cnputs(&ctx, llen, &lgc, "%s", left); if (larrow != 0) { @@ -477,13 +477,13 @@ status_redraw(struct client *c) /* Draw the right string and arrow. */ if (rarrow != 0) { - screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, 0); + screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, 0, 0); memcpy(&gc, &stdgc, sizeof gc); if (rarrow == -1) gc.attr ^= GRID_ATTR_REVERSE; screen_write_putc(&ctx, &gc, '>'); } else - screen_write_cursormove(&ctx, c->tty.sx - rlen, 0); + screen_write_cursormove(&ctx, c->tty.sx - rlen, 0, 0); if (rlen != 0) screen_write_cnputs(&ctx, rlen, &rgc, "%s", right); @@ -507,7 +507,7 @@ status_redraw(struct client *c) /* Copy the window list. */ c->status.window_list_offset = -wloffset + wlstart; - screen_write_cursormove(&ctx, wloffset, 0); + screen_write_cursormove(&ctx, wloffset, 0, 0); screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); screen_free(&window_list); @@ -677,10 +677,10 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); screen_write_start(&ctx, NULL, &c->status.status); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); - screen_write_cursormove(&ctx, 0, lines - 1); + screen_write_cursormove(&ctx, 0, lines - 1, 0); screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); screen_write_stop(&ctx); @@ -839,12 +839,12 @@ status_prompt_redraw(struct client *c) start = c->tty.sx; screen_write_start(&ctx, NULL, &c->status.status); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); screen_write_nputs(&ctx, start, &gc, "%s", c->prompt_string); - screen_write_cursormove(&ctx, start, 0); + screen_write_cursormove(&ctx, start, 0, 0); left = c->tty.sx - start; if (left == 0) diff --git a/tmux.h b/tmux.h index 6a94524c66..c25f80b430 100644 --- a/tmux.h +++ b/tmux.h @@ -2100,7 +2100,7 @@ void screen_write_deleteline(struct screen_write_ctx *, u_int, u_int); void screen_write_clearline(struct screen_write_ctx *, u_int); void screen_write_clearendofline(struct screen_write_ctx *, u_int); void screen_write_clearstartofline(struct screen_write_ctx *, u_int); -void screen_write_cursormove(struct screen_write_ctx *, int, int); +void screen_write_cursormove(struct screen_write_ctx *, int, int, int); void screen_write_reverseindex(struct screen_write_ctx *, u_int); void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int); void screen_write_linefeed(struct screen_write_ctx *, int, u_int); diff --git a/window-buffer.c b/window-buffer.c index e1008e6bc3..7c918c70c7 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -226,7 +226,7 @@ window_buffer_draw(__unused void *modedata, void *itemdata, line[at] = '\0'; if (*line != '\0') { - screen_write_cursormove(ctx, cx, cy + i); + screen_write_cursormove(ctx, cx, cy + i, 0); screen_write_puts(ctx, &grid_default_cell, "%s", line); } diff --git a/window-client.c b/window-client.c index f0c81cf00a..f86d8676dc 100644 --- a/window-client.c +++ b/window-client.c @@ -225,10 +225,10 @@ window_client_draw(__unused void *modedata, void *itemdata, screen_write_preview(ctx, &wp->base, sx, sy - 3); - screen_write_cursormove(ctx, cx, cy + sy - 2); + screen_write_cursormove(ctx, cx, cy + sy - 2, 0); screen_write_hline(ctx, sx, 0, 0); - screen_write_cursormove(ctx, cx, cy + sy - 1); + screen_write_cursormove(ctx, cx, cy + sy - 1, 0); if (c->status.old_status != NULL) screen_write_fast_copy(ctx, c->status.old_status, 0, 0, sx, 1); else diff --git a/window-clock.c b/window-clock.c index f98d792320..45d4d47ba9 100644 --- a/window-clock.c +++ b/window-clock.c @@ -238,7 +238,7 @@ window_clock_draw_screen(struct window_mode_entry *wme) if (screen_size_x(s) >= strlen(tim) && screen_size_y(s) != 0) { x = (screen_size_x(s) / 2) - (strlen(tim) / 2); y = screen_size_y(s) / 2; - screen_write_cursormove(&ctx, x, y); + screen_write_cursormove(&ctx, x, y, 0); memcpy(&gc, &grid_default_cell, sizeof gc); gc.flags |= GRID_FLAG_NOPALETTE; @@ -274,7 +274,7 @@ window_clock_draw_screen(struct window_mode_entry *wme) for (j = 0; j < 5; j++) { for (i = 0; i < 5; i++) { - screen_write_cursormove(&ctx, x + i, y + j); + screen_write_cursormove(&ctx, x + i, y + j, 0); if (window_clock_table[idx][j][i]) screen_write_putc(&ctx, &gc, ' '); } diff --git a/window-copy.c b/window-copy.c index 223741d12c..062d687f1c 100644 --- a/window-copy.c +++ b/window-copy.c @@ -273,7 +273,7 @@ window_copy_init(struct window_mode_entry *wme, screen_write_start(&ctx, NULL, &data->screen); for (i = 0; i < screen_size_y(&data->screen); i++) window_copy_write_line(wme, &ctx, i); - screen_write_cursormove(&ctx, data->cx, data->cy); + screen_write_cursormove(&ctx, data->cx, data->cy, 0); screen_write_stop(&ctx); return (&data->screen); @@ -1373,13 +1373,13 @@ window_copy_write_line(struct window_mode_entry *wme, } if (size > screen_size_x(s)) size = screen_size_x(s); - screen_write_cursormove(ctx, screen_size_x(s) - size, 0); + screen_write_cursormove(ctx, screen_size_x(s) - size, 0, 0); screen_write_puts(ctx, &gc, "%s", hdr); } else size = 0; if (size < screen_size_x(s)) { - screen_write_cursormove(ctx, 0, py); + screen_write_cursormove(ctx, 0, py, 0); screen_write_copy(ctx, data->backing, 0, (screen_hsize(data->backing) - data->oy) + py, screen_size_x(s) - size, 1, data->searchmark, &gc); @@ -1387,7 +1387,7 @@ window_copy_write_line(struct window_mode_entry *wme, if (py == data->cy && data->cx == screen_size_x(s)) { memcpy(&gc, &grid_default_cell, sizeof gc); - screen_write_cursormove(ctx, screen_size_x(s) - 1, py); + screen_write_cursormove(ctx, screen_size_x(s) - 1, py, 0); screen_write_putc(ctx, &gc, '$'); } } @@ -1430,7 +1430,7 @@ window_copy_redraw_lines(struct window_mode_entry *wme, u_int py, u_int ny) screen_write_start(&ctx, wp, NULL); for (i = py; i < py + ny; i++) window_copy_write_line(wme, &ctx, i); - screen_write_cursormove(&ctx, data->cx, data->cy); + screen_write_cursormove(&ctx, data->cx, data->cy, 0); screen_write_stop(&ctx); } @@ -1482,7 +1482,7 @@ window_copy_update_cursor(struct window_mode_entry *wme, u_int cx, u_int cy) window_copy_redraw_lines(wme, data->cy, 1); else { screen_write_start(&ctx, wp, NULL); - screen_write_cursormove(&ctx, data->cx, data->cy); + screen_write_cursormove(&ctx, data->cx, data->cy, 0); screen_write_stop(&ctx); } } @@ -2475,7 +2475,7 @@ window_copy_scroll_up(struct window_mode_entry *wme, u_int ny) window_copy_update_selection(wme, 0); screen_write_start(&ctx, wp, NULL); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); screen_write_deleteline(&ctx, ny, 8); window_copy_write_lines(wme, &ctx, screen_size_y(s) - ny, ny); window_copy_write_line(wme, &ctx, 0); @@ -2485,7 +2485,7 @@ window_copy_scroll_up(struct window_mode_entry *wme, u_int ny) window_copy_write_line(wme, &ctx, screen_size_y(s) - 2); if (s->sel != NULL && screen_size_y(s) > ny) window_copy_write_line(wme, &ctx, screen_size_y(s) - ny - 1); - screen_write_cursormove(&ctx, data->cx, data->cy); + screen_write_cursormove(&ctx, data->cx, data->cy, 0); screen_write_stop(&ctx); } @@ -2509,14 +2509,14 @@ window_copy_scroll_down(struct window_mode_entry *wme, u_int ny) window_copy_update_selection(wme, 0); screen_write_start(&ctx, wp, NULL); - screen_write_cursormove(&ctx, 0, 0); + screen_write_cursormove(&ctx, 0, 0, 0); screen_write_insertline(&ctx, ny, 8); window_copy_write_lines(wme, &ctx, 0, ny); if (s->sel != NULL && screen_size_y(s) > ny) window_copy_write_line(wme, &ctx, ny); else if (ny == 1) /* nuke position */ window_copy_write_line(wme, &ctx, 1); - screen_write_cursormove(&ctx, data->cx, data->cy); + screen_write_cursormove(&ctx, data->cx, data->cy, 0); screen_write_stop(&ctx); } diff --git a/window-tree.c b/window-tree.c index 56bd2b07a6..46b28eaea9 100644 --- a/window-tree.c +++ b/window-tree.c @@ -476,10 +476,10 @@ window_tree_draw_label(struct screen_write_ctx *ctx, u_int px, u_int py, oy = (sy + 1) / 2; if (ox > 1 && ox + len < sx - 1 && sy >= 3) { - screen_write_cursormove(ctx, px + ox - 1, py + oy - 1); + screen_write_cursormove(ctx, px + ox - 1, py + oy - 1, 0); screen_write_box(ctx, len + 2, 3); } - screen_write_cursormove(ctx, px + ox, py + oy); + screen_write_cursormove(ctx, px + ox, py + oy, 0); screen_write_puts(ctx, gc, "%s", label); } @@ -554,17 +554,17 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, if (left) { data->left = cx + 2; - screen_write_cursormove(ctx, cx + 2, cy); + screen_write_cursormove(ctx, cx + 2, cy, 0); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, cx, cy + sy / 2); + screen_write_cursormove(ctx, cx, cy + sy / 2, 0); screen_write_puts(ctx, &grid_default_cell, "<"); } else data->left = -1; if (right) { data->right = cx + sx - 3; - screen_write_cursormove(ctx, cx + sx - 3, cy); + screen_write_cursormove(ctx, cx + sx - 3, cy, 0); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); + screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2, 0); screen_write_puts(ctx, &grid_default_cell, ">"); } else data->right = -1; @@ -597,7 +597,7 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, else width = each - 1; - screen_write_cursormove(ctx, cx + offset, cy); + screen_write_cursormove(ctx, cx + offset, cy, 0); screen_write_preview(ctx, &w->active->base, width, sy); xasprintf(&label, " %u:%s ", wl->idx, w->name); @@ -608,7 +608,7 @@ window_tree_draw_session(struct window_tree_modedata *data, struct session *s, free(label); if (loop != end - 1) { - screen_write_cursormove(ctx, cx + offset + width, cy); + screen_write_cursormove(ctx, cx + offset + width, cy, 0); screen_write_vline(ctx, sy, 0, 0); } loop++; @@ -687,17 +687,17 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, if (left) { data->left = cx + 2; - screen_write_cursormove(ctx, cx + 2, cy); + screen_write_cursormove(ctx, cx + 2, cy, 0); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, cx, cy + sy / 2); + screen_write_cursormove(ctx, cx, cy + sy / 2, 0); screen_write_puts(ctx, &grid_default_cell, "<"); } else data->left = -1; if (right) { data->right = cx + sx - 3; - screen_write_cursormove(ctx, cx + sx - 3, cy); + screen_write_cursormove(ctx, cx + sx - 3, cy, 0); screen_write_vline(ctx, sy, 0, 0); - screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2); + screen_write_cursormove(ctx, cx + sx - 1, cy + sy / 2, 0); screen_write_puts(ctx, &grid_default_cell, ">"); } else data->right = -1; @@ -729,7 +729,7 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, else width = each - 1; - screen_write_cursormove(ctx, cx + offset, cy); + screen_write_cursormove(ctx, cx + offset, cy, 0); screen_write_preview(ctx, &wp->base, width, sy); if (window_pane_index(wp, &pane_idx) != 0) @@ -740,7 +740,7 @@ window_tree_draw_window(struct window_tree_modedata *data, struct session *s, free(label); if (loop != end - 1) { - screen_write_cursormove(ctx, cx + offset + width, cy); + screen_write_cursormove(ctx, cx + offset + width, cy, 0); screen_write_vline(ctx, sy, 0, 0); } loop++; From b2bc34af12e6871faae82d1c46005e278d9cfe1d Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 23:21:45 +0000 Subject: [PATCH 315/836] Set a flag on cells are genuinely empty (cleared and never written to) and use tty_clear_line (which will choose the best escape sequence) to clear any batches of cells with that flag when redrawing a line from the stored screen. --- grid.c | 78 ++++++++++++++++++++++++++++++++++++---------------------- tmux.h | 1 + tty.c | 40 ++++++++++++++++-------------- 3 files changed, 72 insertions(+), 47 deletions(-) diff --git a/grid.c b/grid.c index 7329f855e7..2ca4e6c5c4 100644 --- a/grid.c +++ b/grid.c @@ -39,8 +39,13 @@ const struct grid_cell grid_default_cell = { 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } }; -static const struct grid_cell_entry grid_default_entry = { - 0, { .data = { 0, 8, 8, ' ' } } + +/* Cleared grid cell data. */ +const struct grid_cell grid_cleared_cell = { + GRID_FLAG_CLEARED, 0, 8, 8, { { ' ' }, 0, 1, 1 } +}; +static const struct grid_cell_entry grid_cleared_entry = { + GRID_FLAG_CLEARED, { .data = { 0, 8, 8, ' ' } } }; static void grid_empty_line(struct grid *, u_int, u_int); @@ -50,7 +55,7 @@ static void grid_store_cell(struct grid_cell_entry *gce, const struct grid_cell *gc, u_char c) { - gce->flags = gc->flags; + gce->flags = (gc->flags & ~GRID_FLAG_CLEARED); gce->data.fg = gc->fg & 0xff; if (gc->fg & COLOUR_FLAG_256) @@ -64,7 +69,7 @@ grid_store_cell(struct grid_cell_entry *gce, const struct grid_cell *gc, gce->data.data = c; } -/* Check if a cell should be extended. */ +/* Check if a cell should be an extended cell. */ static int grid_need_extended_cell(const struct grid_cell_entry *gce, const struct grid_cell *gc) @@ -80,6 +85,40 @@ grid_need_extended_cell(const struct grid_cell_entry *gce, return (0); } +/* Get an extended cell. */ +static void +grid_get_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce, + int flags) +{ + u_int at = gl->extdsize + 1; + + gl->extddata = xreallocarray(gl->extddata, at, sizeof *gl->extddata); + gl->extdsize = at; + + gce->offset = at - 1; + gce->flags = (flags | GRID_FLAG_EXTENDED); +} + +/* Set cell as extended. */ +static struct grid_cell * +grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce, + const struct grid_cell *gc) +{ + struct grid_cell *gcp; + int flags = (gc->flags & ~GRID_FLAG_CLEARED); + + if (~gce->flags & GRID_FLAG_EXTENDED) + grid_get_extended_cell(gl, gce, flags); + else if (gce->offset >= gl->extdsize) + fatalx("offset too big"); + gl->flags |= GRID_LINE_EXTENDED; + + gcp = &gl->extddata[gce->offset]; + memcpy(gcp, gc, sizeof *gcp); + gcp->flags = flags; + return (gcp); +} + /* Free up unused extended cells. */ static void grid_compact_line(struct grid_line *gl) @@ -122,29 +161,6 @@ grid_compact_line(struct grid_line *gl) gl->extdsize = new_extdsize; } -/* Set cell as extended. */ -static struct grid_cell * -grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce, - const struct grid_cell *gc) -{ - struct grid_cell *gcp; - - gl->flags |= GRID_LINE_EXTENDED; - - if (~gce->flags & GRID_FLAG_EXTENDED) { - gl->extddata = xreallocarray(gl->extddata, gl->extdsize + 1, - sizeof *gl->extddata); - gce->offset = gl->extdsize++; - gce->flags = gc->flags | GRID_FLAG_EXTENDED; - } - if (gce->offset >= gl->extdsize) - fatalx("offset too big"); - - gcp = &gl->extddata[gce->offset]; - memcpy(gcp, gc, sizeof *gcp); - return (gcp); -} - /* Get line data. */ struct grid_line * grid_get_line(struct grid *gd, u_int line) @@ -167,9 +183,13 @@ grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) struct grid_cell_entry *gce = &gl->celldata[px]; struct grid_cell *gc; - memcpy(gce, &grid_default_entry, sizeof *gce); + memcpy(gce, &grid_cleared_entry, sizeof *gce); if (bg & COLOUR_FLAG_RGB) { - gc = grid_extended_cell(gl, gce, &grid_default_cell); + grid_get_extended_cell(gl, gce, gce->flags); + gl->flags |= GRID_LINE_EXTENDED; + + gc = &gl->extddata[gce->offset]; + memcpy(gc, &grid_cleared_cell, sizeof *gc); gc->bg = bg; } else { if (bg & COLOUR_FLAG_256) diff --git a/tmux.h b/tmux.h index c25f80b430..0a2545d050 100644 --- a/tmux.h +++ b/tmux.h @@ -579,6 +579,7 @@ enum utf8_state { #define GRID_FLAG_EXTENDED 0x8 #define GRID_FLAG_SELECTED 0x10 #define GRID_FLAG_NOPALETTE 0x20 +#define GRID_FLAG_CLEARED 0x40 /* Grid line flags. */ #define GRID_LINE_WRAPPED 0x1 diff --git a/tty.c b/tty.c index a198b89ceb..cd3ea5e044 100644 --- a/tty.c +++ b/tty.c @@ -1208,7 +1208,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, u_int i, j, ux, sx, width; int flags, cleared = 0; char buf[512]; - size_t len, old_len; + size_t len; u_int cellsize; log_debug("%s: px=%u py=%u nx=%u atx=%u aty=%u", __func__, @@ -1263,8 +1263,6 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, tty_putcode(tty, TTYC_EL1); cleared = 1; } - if (px + sx != 0) - tty_cursor(tty, atx, aty); } else log_debug("%s: wrapped line %u", __func__, aty); @@ -1281,10 +1279,17 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, gcp->attr != last.attr || gcp->fg != last.fg || gcp->bg != last.bg || - ux + width + gcp->data.width >= nx || + ux + width + gcp->data.width > nx || (sizeof buf) - len < gcp->data.size)) { - tty_attributes(tty, &last, wp); - tty_putn(tty, buf, len, width); + if (last.flags & GRID_FLAG_CLEARED) { + log_debug("%s: %zu cleared", __func__, len); + tty_clear_line(tty, wp, aty, atx + ux, width, + last.bg); + } else { + tty_attributes(tty, &last, wp); + tty_cursor(tty, atx + ux, aty); + tty_putn(tty, buf, len, width); + } ux += width; len = 0; @@ -1297,6 +1302,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, memcpy(&last, gcp, sizeof last); if (ux + gcp->data.width > nx) { tty_attributes(tty, &last, wp); + tty_cursor(tty, atx + ux, aty); for (j = 0; j < gcp->data.width; j++) { if (ux + j > nx) break; @@ -1305,6 +1311,7 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } } else if (gcp->attr & GRID_ATTR_CHARSET) { tty_attributes(tty, &last, wp); + tty_cursor(tty, atx + ux, aty); for (j = 0; j < gcp->data.size; j++) tty_putc(tty, gcp->data.data[j]); ux += gc.data.width; @@ -1314,24 +1321,21 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, width += gcp->data.width; } } - if (len != 0) { - if (grid_cells_equal(&last, &grid_default_cell)) { - old_len = len; - while (len > 0 && buf[len - 1] == ' ') { - len--; - width--; - } - log_debug("%s: trimmed %zu spaces", __func__, - old_len - len); - } - if (len != 0) { + if (len != 0 && ((~last.flags & GRID_FLAG_CLEARED) || last.bg != 8)) { + if (last.flags & GRID_FLAG_CLEARED) { + log_debug("%s: %zu cleared (end)", __func__, len); + tty_clear_line(tty, wp, aty, atx + ux, width, last.bg); + } else { tty_attributes(tty, &last, wp); + tty_cursor(tty, atx + ux, aty); tty_putn(tty, buf, len, width); - ux += width; } + ux += width; } if (!cleared && ux < nx) { + log_debug("%s: %u to end of line (%zu cleared)", __func__, + nx - ux, len); tty_default_attributes(tty, wp, 8); tty_clear_line(tty, wp, aty, atx + ux, nx - ux, 8); } From feaa5660a3151d11bdc9da4b280b293f107061da Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 07:34:36 +0000 Subject: [PATCH 316/836] Do not use origin for VPA. --- input.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/input.c b/input.c index 57a45a920c..99174cd6a0 100644 --- a/input.c +++ b/input.c @@ -1471,7 +1471,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_HPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, n - 1, -1, 1); + screen_write_cursormove(sctx, n - 1, -1, 0); break; case INPUT_CSI_ICH: n = input_get(ictx, 0, 1, 1); @@ -1540,7 +1540,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_VPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, -1, n - 1, 1); + screen_write_cursormove(sctx, -1, n - 1, 0); break; case INPUT_CSI_DECSCUSR: n = input_get(ictx, 0, 0, 0); From 4f5cb88c2b16c4e651f3974d8bf651badfe92822 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 13 Mar 2019 07:25:17 +0000 Subject: [PATCH 317/836] Add to TODO. --- TODO | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/TODO b/TODO index f37992bf9a..7a4a7a7dd8 100644 --- a/TODO +++ b/TODO @@ -172,7 +172,11 @@ TODO soonish maybe: Where L = left, M = middle, R = right; W = for each window; ! = get option value and evaluate as format. - 4) Then status-format can be an array option specifying + 4) Also need a way to return mouse positioning, so a format + like the alignment that stores the offset/size for + Mouse*Status{Left,Right}. + + 5) Then status-format can be an array option specifying multiple status lines. Perhaps one option for top and one for bottom. From 7a6b21de6514736ef5f0a7cbdf429b8f38c25016 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 13 Mar 2019 09:30:30 +0000 Subject: [PATCH 318/836] Add to TODO. --- TODO | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index 7a4a7a7dd8..1a25d9b06b 100644 --- a/TODO +++ b/TODO @@ -155,9 +155,9 @@ TODO soonish maybe: #{W:#{window_name} }. It would need to be able to reach into a window's options in order to allow different windows to have different format, maybe an operator to evaluate an - option value as a format, maybe make it so ! on evaluates + option value as a format, maybe make it so E: on evaluates the result as a format again something like, so end up with - something like #{W:#{!window-status-format} } + something like #{W:#{E:window-status-format} } 2) Some way to include alignment information for part of a format. @@ -167,16 +167,45 @@ TODO soonish maybe: status-left and right and the default status-format becomes something like (plus some bits for current window): - #{L:#{!status-left} #{M:#{W:{!window-status-format}}} #{R:#{!status-right}} + #{L:#{E:status-left} #{M:#{W:{E:window-status-format}}} #{R:#{E:status-right}} Where L = left, M = middle, R = right; W = for each window; - ! = get option value and evaluate as format. + E = get option value and evaluate as format. 4) Also need a way to return mouse positioning, so a format like the alignment that stores the offset/size for Mouse*Status{Left,Right}. - 5) Then status-format can be an array option specifying + 5) Likewise, styles. Alignment, mouse, styles can all be done + similarly - format_expand can be given the available width + and then build a list of format_range with type (ALIGN_LEFT, + STYLE, MOUSE_LEFT and so on) which a format_draw function + can use to draw the format, and can be stored to be used by + the mouse positioning check code. + + 6) status-left-length and similar will need to be taken into + account, perhaps add an alternative form of the length limit + eg #{l:#{status-left-length},#{...}}. + + 7) Supporting trimming the window list and adding <> might be + tricky, probably a second pass over the format_range list to + trim as appropriate. But it will need to know which element + to trim first, so some way to mark that is needed (maybe a + priority or something in the alignment/length limit). + + 8) Formats are going to get very long so perhaps standardize + them a bit so they are all something like #{F/argument:text} + then then could be #{A/foo;B/bar:text} rather than + #{A:foo,#{B:bar,text}} and so on. Need to keep the old style + for compatibility, at least for the most popular formats. So + the status-left part would be something like: + + #{A/left;S/#{status-left-style};M/left;l/#{status-left-length};E:status-left} + + Where A = alignment, S = style, M = mouse, l = length limit, + E = expand again. + + 9) Then status-format can be an array option specifying multiple status lines. Perhaps one option for top and one for bottom. From 71e00c718ca5b573686e70c72eac8989c21b71b5 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 14:10:34 +0000 Subject: [PATCH 319/836] Make format parsing build the modifiers into a list, standardize how arguments are given and allow multiple modifiers on a format (separated by ;). --- format.c | 498 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 322 insertions(+), 176 deletions(-) diff --git a/format.c b/format.c index 7645667832..cb19635169 100644 --- a/format.c +++ b/format.c @@ -92,8 +92,8 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_TIMESTRING 0x1 #define FORMAT_BASENAME 0x2 #define FORMAT_DIRNAME 0x4 -#define FORMAT_SUBSTITUTE 0x8 -#define FORMAT_QUOTE 0x10 +#define FORMAT_QUOTE 0x8 +#define FORMAT_LITERAL 0x10 /* Entry in format tree. */ struct format_entry { @@ -121,6 +121,15 @@ struct format_tree { static int format_entry_cmp(struct format_entry *, struct format_entry *); RB_GENERATE_STATIC(format_entry_tree, format_entry, entry, format_entry_cmp); +/* Format modifiers. */ +struct format_modifier { + char modifier[3]; + u_int size; + + char **argv; + int argc; +}; + /* Format entry tree comparison function. */ static int format_entry_cmp(struct format_entry *fe1, struct format_entry *fe2) @@ -885,7 +894,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) /* Skip until end. */ static const char * -format_skip(const char *s, char end) +format_skip(const char *s, const char *end) { int brackets = 0; @@ -898,7 +907,7 @@ format_skip(const char *s, char end) } if (*s == '}') brackets--; - if (*s == end && brackets == 0) + if (strchr(end, *s) != NULL && brackets == 0) break; } if (*s == '\0') @@ -908,17 +917,25 @@ format_skip(const char *s, char end) /* Return left and right alternatives separated by commas. */ static int -format_choose(char *s, char **left, char **right) +format_choose(struct format_tree *ft, const char *s, char **left, char **right, + int expand) { - char *cp; + const char *cp; + char *left0, *right0; - cp = (char *)format_skip(s, ','); + cp = format_skip(s, ","); if (cp == NULL) return (-1); - *cp = '\0'; + left0 = xstrndup(s, cp - s); + right0 = xstrdup(cp + 1); - *left = s; - *right = cp + 1; + if (expand) { + *left = format_expand(ft, left0); + *right = format_expand(ft, right0); + } else { + *left = left0; + *right = right0; + } return (0); } @@ -931,191 +948,339 @@ format_true(const char *s) return (0); } -/* Replace a key. */ +/* Check if modifier end. */ static int -format_replace(struct format_tree *ft, const char *key, size_t keylen, - char **buf, size_t *len, size_t *off) +format_is_end(char c) { - struct window_pane *wp = ft->wp; - char *copy, *copy0, *endptr, *ptr, *found, *new, sep; - char *value, *from = NULL, *to = NULL, *left, *right; - size_t valuelen, newlen, fromlen, tolen, used; - long limit = 0; - int modifiers = 0, compare = 0, search = 0; - int literal = 0; + return (c == ';' || c == ':'); +} - /* Make a copy of the key. */ - copy0 = copy = xmalloc(keylen + 1); - memcpy(copy, key, keylen); - copy[keylen] = '\0'; - - /* Is there a length limit or whatnot? */ - switch (copy[0]) { - case 'l': - if (copy[1] != ':') - break; - literal = 1; - copy += 2; - break; - case 'm': - if (copy[1] != ':') - break; - compare = -2; - copy += 2; - break; - case 'C': - if (copy[1] != ':') - break; - search = 1; - copy += 2; - break; - case '|': - if (copy[1] != '|' || copy[2] != ':') - break; - compare = -3; - copy += 3; - break; - case '&': - if (copy[1] != '&' || copy[2] != ':') - break; - compare = -4; - copy += 3; - break; - case '!': - if (copy[1] == '=' && copy[2] == ':') { - compare = -1; - copy += 3; - break; +/* Add to modifier list. */ +static void +format_add_modifier(struct format_modifier **list, u_int *count, + const char *c, size_t n, char **argv, int argc) +{ + struct format_modifier *fm; + + *list = xreallocarray(*list, (*count) + 1, sizeof **list); + fm = &(*list)[(*count)++]; + + memcpy(fm->modifier, c, n); + fm->modifier[n] = '\0'; + fm->size = n; + + fm->argv = argv; + fm->argc = argc; +} + +/* Free modifier list. */ +static void +format_free_modifiers(struct format_modifier *list, u_int count) +{ + u_int i; + + for (i = 0; i < count; i++) + cmd_free_argv(list[i].argc, list[i].argv); + free(list); +} + +/* Build modifier list. */ +static struct format_modifier * +format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) +{ + const char *cp = *s, *end; + struct format_modifier *list = NULL; + char c, last[] = "X;:", **argv, *value; + int argc; + + /* + * Modifiers are a ; separated list of the forms: + * l,m,C,b,d,t,q + * =a + * =/a + * =/a/ + * s/a/b/ + * s/a/b + * ||,&&,!=,== + */ + + *count = 0; + + while (*cp != '\0' && *cp != ':') { + /* Skip and separator character. */ + if (*cp == ';') + cp++; + + /* Check single character modifiers with no arguments. */ + if (strchr("lmCbdtq", cp[0]) != NULL && format_is_end(cp[1])) { + format_add_modifier(&list, count, cp, 1, NULL, 0); + cp++; + continue; } - break; - case '=': - if (copy[1] == '=' && copy[2] == ':') { - compare = 1; - copy += 3; - break; + + /* Then try double character with no arguments. */ + if ((memcmp("||", cp, 2) == 0 || + memcmp("&&", cp, 2) == 0 || + memcmp("!=", cp, 2) == 0 || + memcmp("==", cp, 2) == 0) && + format_is_end(cp[2])) { + format_add_modifier(&list, count, cp, 2, NULL, 0); + cp += 2; + continue; } - errno = 0; - limit = strtol(copy + 1, &endptr, 10); - if (errno == ERANGE && (limit == LONG_MIN || limit == LONG_MAX)) - break; - if (*endptr != ':') - break; - copy = endptr + 1; - break; - case 'b': - if (copy[1] != ':') - break; - modifiers |= FORMAT_BASENAME; - copy += 2; - break; - case 'd': - if (copy[1] != ':') - break; - modifiers |= FORMAT_DIRNAME; - copy += 2; - break; - case 't': - if (copy[1] != ':') - break; - modifiers |= FORMAT_TIMESTRING; - copy += 2; - break; - case 'q': - if (copy[1] != ':') - break; - modifiers |= FORMAT_QUOTE; - copy += 2; - break; - case 's': - sep = copy[1]; - if (sep == ':' || !ispunct((u_char)sep)) - break; - from = copy + 2; - for (copy = from; *copy != '\0' && *copy != sep; copy++) - /* nothing */; - if (copy[0] != sep || copy == from) { - copy = copy0; + + /* Now try single character with arguments. */ + if (strchr("s=", cp[0]) == NULL) break; + c = cp[0]; + + /* No arguments provided. */ + if (format_is_end(cp[1])) { + format_add_modifier(&list, count, cp, 1, NULL, 0); + cp++; + continue; } - copy[0] = '\0'; - to = copy + 1; - for (copy = to; *copy != '\0' && *copy != sep; copy++) - /* nothing */; - if (copy[0] != sep || copy[1] != ':') { - copy = copy0; - break; + argv = NULL; + argc = 0; + + /* Single argument with no wrapper character. */ + if (!ispunct(cp[1]) || cp[1] == '-') { + end = format_skip(cp + 1, ":;"); + if (end == NULL) + break; + + argv = xcalloc(1, sizeof *argv); + value = xstrndup(cp + 1, end - (cp + 1)); + argv[0] = format_expand(ft, value); + free(value); + argc = 1; + + format_add_modifier(&list, count, &c, 1, argv, argc); + cp = end; + continue; } - copy[0] = '\0'; - modifiers |= FORMAT_SUBSTITUTE; - copy += 2; - break; + /* Multiple arguments with a wrapper character. */ + last[0] = cp[1]; + cp++; + do { + if (cp[0] == last[0] && format_is_end(cp[1])) { + cp++; + break; + } + end = format_skip(cp + 1, last); + if (end == NULL) + break; + cp++; + + argv = xreallocarray (argv, argc + 1, sizeof *argv); + value = xstrndup(cp, end - cp); + argv[argc++] = format_expand(ft, value); + free(value); + + cp = end; + } while (!format_is_end(cp[0])); + format_add_modifier(&list, count, &c, 1, argv, argc); + } + if (*cp != ':') { + format_free_modifiers(list, *count); + *count = 0; + return (NULL); + } + *s = cp + 1; + return list; +} + +/* Perform substitution in string. */ +static char * +format_substitute(const char *source, const char *from, const char *to) +{ + char *copy, *new; + const char *cp; + size_t fromlen, tolen, newlen, used; + + fromlen = strlen(from); + tolen = strlen(to); + + newlen = strlen(source) + 1; + copy = new = xmalloc(newlen); + + for (cp = source; *cp != '\0'; /* nothing */) { + if (strncmp(cp, from, fromlen) != 0) { + *new++ = *cp++; + continue; + } + used = new - copy; + + newlen += tolen; + copy = xrealloc(copy, newlen); + + new = copy + used; + memcpy(new, to, tolen); + + new += tolen; + cp += fromlen; + } + + *new = '\0'; + return (copy); +} + +/* Replace a key. */ +static int +format_replace(struct format_tree *ft, const char *key, size_t keylen, + char **buf, size_t *len, size_t *off) +{ + struct window_pane *wp = ft->wp; + const char *errptr, *copy, *cp; + char *copy0, *condition, *found, *new; + char *value, *left, *right; + char tmp[64]; + size_t valuelen; + int modifiers = 0, limit = 0; + struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; + struct format_modifier *sub = NULL; + u_int i, count; + + /* Make a copy of the key. */ + copy = copy0 = xstrndup(key, keylen); + + /* Process modifier list. */ + list = format_build_modifiers(ft, ©, &count); + for (i = 0; i < count; i++) { + xsnprintf(tmp, sizeof tmp, "%s: modifier %u", __func__, i); + log_debug("%s = %s", tmp, list[i].modifier); + cmd_log_argv(list[i].argc, list[i].argv, tmp); + + fm = &list[i]; + if (fm->size == 1) { + switch (fm->modifier[0]) { + case 'm': + cmp = fm; + break; + case 'C': + search = fm; + break; + case 's': + if (fm->argc != 2) + break; + sub = fm; + break; + case '=': + if (fm->argc != 1) + break; + limit = strtonum(fm->argv[0], INT_MIN, INT_MAX, + &errptr); + if (errptr != NULL) + limit = 0; + break; + case 'l': + modifiers |= FORMAT_LITERAL; + break; + case 'b': + modifiers |= FORMAT_BASENAME; + break; + case 'd': + modifiers |= FORMAT_DIRNAME; + break; + case 't': + modifiers |= FORMAT_TIMESTRING; + break; + case 'q': + modifiers |= FORMAT_QUOTE; + break; + } + } else if (fm->size == 2) { + if (strcmp(fm->modifier, "||") == 0 || + strcmp(fm->modifier, "&&") == 0 || + strcmp(fm->modifier, "==") == 0 || + strcmp(fm->modifier, "!=") == 0) + cmp = fm; + } } + log_debug("%s: remaining = '%s'", __func__, copy); /* Is this a literal string? */ - if (literal) { + if (modifiers & FORMAT_LITERAL) { value = xstrdup(copy); goto done; } /* Is this a comparison or a conditional? */ - if (search) { + if (search != NULL) { /* Search in pane. */ if (wp == NULL) value = xstrdup("0"); else xasprintf(&value, "%u", window_pane_search(wp, copy)); - } else if (compare != 0) { - /* Comparison: compare comma-separated left and right. */ - if (format_choose(copy, &left, &right) != 0) + } else if (cmp != NULL) { + /* Comparison of left and right. */ + if (format_choose(ft, copy, &left, &right, 1) != 0) goto fail; - left = format_expand(ft, left); - right = format_expand(ft, right); - if (compare == -3 && - (format_true(left) || format_true(right))) - value = xstrdup("1"); - else if (compare == -4 && - (format_true(left) && format_true(right))) - value = xstrdup("1"); - else if (compare == 1 && strcmp(left, right) == 0) - value = xstrdup("1"); - else if (compare == -1 && strcmp(left, right) != 0) - value = xstrdup("1"); - else if (compare == -2 && fnmatch(left, right, 0) == 0) - value = xstrdup("1"); - else - value = xstrdup("0"); + + if (strcmp(cmp->modifier, "||") == 0) { + if (format_true(left) || format_true(right)) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, "&&") == 0) { + if (format_true(left) && format_true(right)) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, "==") == 0) { + if (strcmp(left, right) == 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, "!=") == 0) { + if (strcmp(left, right) != 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } + else if (strcmp(cmp->modifier, "m") == 0) { + if (fnmatch(left, right, 0) == 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } + free(right); free(left); } else if (*copy == '?') { /* Conditional: check first and choose second or third. */ - ptr = (char *)format_skip(copy, ','); - if (ptr == NULL) + cp = format_skip(copy + 1, ","); + if (cp == NULL) goto fail; - *ptr = '\0'; + condition = xstrndup(copy + 1, cp - (copy + 1)); - found = format_find(ft, copy + 1, modifiers); + found = format_find(ft, condition, modifiers); if (found == NULL) { /* - * If the conditional not found, try to expand it. If + * If the condition not found, try to expand it. If * the expansion doesn't have any effect, then assume * false. */ - found = format_expand(ft, copy + 1); - if (strcmp(found, copy + 1) == 0) { + found = format_expand(ft, condition); + if (strcmp(found, condition) == 0) { free(found); found = xstrdup(""); } } - if (format_choose(ptr + 1, &left, &right) != 0) { + free(condition); + + if (format_choose(ft, cp + 1, &left, &right, 0) != 0) { free(found); goto fail; } - if (format_true(found)) value = format_expand(ft, left); else value = format_expand(ft, right); + free(right); + free(left); + free(found); } else { /* Neither: look up directly. */ @@ -1125,31 +1290,10 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, } /* Perform substitution if any. */ - if (modifiers & FORMAT_SUBSTITUTE) { - fromlen = strlen(from); - tolen = strlen(to); - - newlen = strlen(value) + 1; - copy = new = xmalloc(newlen); - for (ptr = value; *ptr != '\0'; /* nothing */) { - if (strncmp(ptr, from, fromlen) != 0) { - *new++ = *ptr++; - continue; - } - used = new - copy; - - newlen += tolen; - copy = xrealloc(copy, newlen); - - new = copy + used; - memcpy(new, to, tolen); - - new += tolen; - ptr += fromlen; - } - *new = '\0'; + if (sub != NULL) { + new = format_substitute(value, sub->argv[0], sub->argv[1]); free(value); - value = copy; + value = new; } /* Truncate the value if needed. */ @@ -1174,10 +1318,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, *off += valuelen; free(value); + format_free_modifiers(list, count); free(copy0); return (0); fail: + format_free_modifiers(list, count); free(copy0); return (-1); } @@ -1262,7 +1408,7 @@ format_expand(struct format_tree *ft, const char *fmt) fmt += n + 1; continue; case '{': - ptr = format_skip(fmt - 2, '}'); + ptr = format_skip((char *)fmt - 2, "}"); if (ptr == NULL) break; n = ptr - fmt; @@ -1305,7 +1451,7 @@ format_expand(struct format_tree *ft, const char *fmt) } buf[off] = '\0'; - log_debug("format '%s' -> '%s'", saved, buf); + log_debug("%s: '%s' -> '%s'", __func__, saved, buf); return (buf); } From 9032ac2a05e0b769056a0d5a5814cc00ba065825 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 14:19:54 +0000 Subject: [PATCH 320/836] Add E: format to expand a format twice (useful to expand the value of an option). --- format.c | 13 ++++++++++++- tmux.1 | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/format.c b/format.c index cb19635169..55cb502828 100644 --- a/format.c +++ b/format.c @@ -94,6 +94,7 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_DIRNAME 0x4 #define FORMAT_QUOTE 0x8 #define FORMAT_LITERAL 0x10 +#define FORMAT_EXPAND 0x20 /* Entry in format tree. */ struct format_entry { @@ -1012,7 +1013,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) cp++; /* Check single character modifiers with no arguments. */ - if (strchr("lmCbdtq", cp[0]) != NULL && format_is_end(cp[1])) { + if (strchr("lmCbdtqE", cp[0]) != NULL && format_is_end(cp[1])) { format_add_modifier(&list, count, cp, 1, NULL, 0); cp++; continue; @@ -1189,6 +1190,9 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, case 'q': modifiers |= FORMAT_QUOTE; break; + case 'E': + modifiers |= FORMAT_EXPAND; + break; } } else if (fm->size == 2) { if (strcmp(fm->modifier, "||") == 0 || @@ -1289,6 +1293,13 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = xstrdup(""); } + /* Expand again if required. */ + if (modifiers & FORMAT_EXPAND) { + new = format_expand(ft, value); + free(value); + value = new; + } + /* Perform substitution if any. */ if (sub != NULL) { new = format_substitute(value, sub->argv[0], sub->argv[1]); diff --git a/tmux.1 b/tmux.1 index 756ee96403..3476a1aee6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3713,6 +3713,12 @@ of the variable respectively. will escape .Xr sh 1 special characters. +.Ql E: +will expand the format twice, for example +.Ql #{E:status-left} +is the result of expanding the content of the +.Ic status-left +option rather than the content itself. A prefix of the form .Ql s/foo/bar/: will substitute From 1aeac384f3838629d797113c71c3e25b187ebd4b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 13 Mar 2019 14:20:58 +0000 Subject: [PATCH 321/836] Add to TODO. --- TODO | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index 1a25d9b06b..876ae3c55a 100644 --- a/TODO +++ b/TODO @@ -154,7 +154,7 @@ TODO soonish maybe: (or pane or session), perhaps something like #{W:#{window_name} }. It would need to be able to reach into a window's options in order to allow different windows - to have different format, maybe an operator to evaluate an + to have different format. (DONE) An operator to evaluate an option value as a format, maybe make it so E: on evaluates the result as a format again something like, so end up with something like #{W:#{E:window-status-format} } @@ -185,7 +185,7 @@ TODO soonish maybe: 6) status-left-length and similar will need to be taken into account, perhaps add an alternative form of the length limit - eg #{l:#{status-left-length},#{...}}. + eg #{L:#{status-left-length},#{...}}. 7) Supporting trimming the window list and adding <> might be tricky, probably a second pass over the format_range list to @@ -193,18 +193,42 @@ TODO soonish maybe: to trim first, so some way to mark that is needed (maybe a priority or something in the alignment/length limit). - 8) Formats are going to get very long so perhaps standardize +(DONE) 8) Formats are going to get very long so perhaps standardize them a bit so they are all something like #{F/argument:text} then then could be #{A/foo;B/bar:text} rather than #{A:foo,#{B:bar,text}} and so on. Need to keep the old style for compatibility, at least for the most popular formats. So the status-left part would be something like: - #{A/left;S/#{status-left-style};M/left;l/#{status-left-length};E:status-left} + #{A/left;S/#{status-left-style};M/left;L/#{status-left-length};E:status-left} - Where A = alignment, S = style, M = mouse, l = length limit, + Where A = alignment, S = style, M = mouse, L = length limit, E = expand again. + Existing formats are: + + #{l:foo} <-- literal + #{m:foo} <-- match + #{C:foo} <-- search + #{b:foo} <-- basename + #{d:foo} <-- dirname + #{t:foo} <-- time + #{q:foo} <-- quote + #{s/a/b/:foo} <-- sub + #{=123:foo} <-- length + + #{||:foo,bar} <-- or + #{&&:foo,bar} <-- and + #{!=:foo,bar} <-- neq + #{==:foo,bar} <-- eq + #{?foo,bar,baz} <-- if + + So comparisons and ? can stay as they are. + + All other formats can be parsed as #{X/arg1/arg2/arg3:...} + with an optional leading and trailing /. Each argument can + be expanded. + 9) Then status-format can be an array option specifying multiple status lines. Perhaps one option for top and one for bottom. From 49f04a997a578daff49e4c0b1ed32eb80e7aecfb Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 14:27:17 +0000 Subject: [PATCH 322/836] Apply length limits and substitution even to literal formats. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index 55cb502828..111d358b30 100644 --- a/format.c +++ b/format.c @@ -1293,6 +1293,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = xstrdup(""); } +done: /* Expand again if required. */ if (modifiers & FORMAT_EXPAND) { new = format_expand(ft, value); @@ -1318,7 +1319,6 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = new; } -done: /* Expand the buffer and copy in the value. */ valuelen = strlen(value); while (*len - *off < valuelen + 1) { From f628afc85054014a00f4a32e12c9b04366df9603 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 13 Mar 2019 14:51:19 +0000 Subject: [PATCH 323/836] Update TODO. --- TODO | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index 876ae3c55a..dad421dacc 100644 --- a/TODO +++ b/TODO @@ -183,9 +183,8 @@ TODO soonish maybe: can use to draw the format, and can be stored to be used by the mouse positioning check code. - 6) status-left-length and similar will need to be taken into - account, perhaps add an alternative form of the length limit - eg #{L:#{status-left-length},#{...}}. +(DONE) 6) status-left-length and similar will need to be taken into + account. 7) Supporting trimming the window list and adding <> might be tricky, probably a second pass over the format_range list to @@ -200,9 +199,9 @@ TODO soonish maybe: for compatibility, at least for the most popular formats. So the status-left part would be something like: - #{A/left;S/#{status-left-style};M/left;L/#{status-left-length};E:status-left} + #{A/left;S/#{status-left-style};M/left;=/#{status-left-length};E:status-left} - Where A = alignment, S = style, M = mouse, L = length limit, + Where A = alignment, S = style, M = mouse, = = length limit, E = expand again. Existing formats are: From 95ab1aaaecdf834e2b66b8743da51125b3a907a5 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 15:37:28 +0000 Subject: [PATCH 324/836] Add formats to list sessions, windows or panes. --- format.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- tmux.1 | 11 +++++ 2 files changed, 146 insertions(+), 3 deletions(-) diff --git a/format.c b/format.c index 111d358b30..d82d18055f 100644 --- a/format.c +++ b/format.c @@ -95,6 +95,9 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_QUOTE 0x8 #define FORMAT_LITERAL 0x10 #define FORMAT_EXPAND 0x20 +#define FORMAT_SESSIONS 0x40 +#define FORMAT_WINDOWS 0x80 +#define FORMAT_PANES 0x100 /* Entry in format tree. */ struct format_entry { @@ -113,6 +116,7 @@ struct format_tree { struct window *w; struct window_pane *wp; + struct cmdq_item *item; struct client *client; u_int tag; int flags; @@ -673,6 +677,7 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) ft->client = c; ft->client->references++; } + ft->item = item; ft->tag = tag; ft->flags = flags; @@ -1013,7 +1018,8 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) cp++; /* Check single character modifiers with no arguments. */ - if (strchr("lmCbdtqE", cp[0]) != NULL && format_is_end(cp[1])) { + if (strchr("lmCbdtqESWP", cp[0]) != NULL && + format_is_end(cp[1])) { format_add_modifier(&list, count, cp, 1, NULL, 0); cp++; continue; @@ -1127,6 +1133,111 @@ format_substitute(const char *source, const char *from, const char *to) return (copy); } +/* Loop over sessions. */ +static char * +format_loop_sessions(struct format_tree *ft, const char *fmt) +{ + struct cmdq_item *item = ft->item; + char *expanded, *value; + size_t valuelen; + struct session *s; + + value = xcalloc(1, 1); + valuelen = 1; + + RB_FOREACH(s, sessions, &sessions) { + expanded = format_single(item, fmt, ft->c, ft->s, NULL, NULL); + + valuelen += strlen(expanded); + value = xrealloc(value, valuelen); + + strlcat(value, expanded, valuelen); + free(expanded); + } + + return (value); +} + +/* Loop over windows. */ +static char * +format_loop_windows(struct format_tree *ft, const char *fmt) +{ + struct cmdq_item *item = ft->item; + char *all, *active, *use, *expanded, *value; + size_t valuelen; + struct winlink *wl; + + if (ft->s == NULL) + return (NULL); + + if (format_choose(ft, fmt, &all, &active, 0) != 0) { + all = xstrdup(fmt); + active = NULL; + } + + value = xcalloc(1, 1); + valuelen = 1; + + RB_FOREACH(wl, winlinks, &ft->s->windows) { + if (active != NULL && wl == ft->s->curw) + use = active; + else + use = all; + expanded = format_single(item, use, ft->c, ft->s, wl, NULL); + + valuelen += strlen(expanded); + value = xrealloc(value, valuelen); + + strlcat(value, expanded, valuelen); + free(expanded); + } + + free(active); + free(all); + + return (value); +} + +/* Loop over panes. */ +static char * +format_loop_panes(struct format_tree *ft, const char *fmt) +{ + struct cmdq_item *item = ft->item; + char *all, *active, *use, *expanded, *value; + size_t valuelen; + struct window_pane *wp; + + if (ft->w == NULL) + return (NULL); + + if (format_choose(ft, fmt, &all, &active, 0) != 0) { + all = xstrdup(fmt); + active = NULL; + } + + value = xcalloc(1, 1); + valuelen = 1; + + TAILQ_FOREACH(wp, &ft->w->panes, entry) { + if (active != NULL && wp == ft->w->active) + use = active; + else + use = all; + expanded = format_single(item, use, ft->c, ft->s, ft->wl, wp); + + valuelen += strlen(expanded); + value = xrealloc(value, valuelen); + + strlcat(value, expanded, valuelen); + free(expanded); + } + + free(active); + free(all); + + return (value); +} + /* Replace a key. */ static int format_replace(struct format_tree *ft, const char *key, size_t keylen, @@ -1193,6 +1304,15 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, case 'E': modifiers |= FORMAT_EXPAND; break; + case 'S': + modifiers |= FORMAT_SESSIONS; + break; + case 'W': + modifiers |= FORMAT_WINDOWS; + break; + case 'P': + modifiers |= FORMAT_PANES; + break; } } else if (fm->size == 2) { if (strcmp(fm->modifier, "||") == 0 || @@ -1210,8 +1330,20 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, goto done; } - /* Is this a comparison or a conditional? */ - if (search != NULL) { + /* Is this a loop, comparison or condition? */ + if (modifiers & FORMAT_SESSIONS) { + value = format_loop_sessions(ft, copy); + if (value == NULL) + goto fail; + } else if (modifiers & FORMAT_WINDOWS) { + value = format_loop_windows(ft, copy); + if (value == NULL) + goto fail; + } else if (modifiers & FORMAT_PANES) { + value = format_loop_panes(ft, copy); + if (value == NULL) + goto fail; + } else if (search != NULL) { /* Search in pane. */ if (wp == NULL) value = xstrdup("0"); diff --git a/tmux.1 b/tmux.1 index 3476a1aee6..df35d839ef 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3719,6 +3719,17 @@ will expand the format twice, for example is the result of expanding the content of the .Ic status-left option rather than the content itself. +.Ql S: , +.Ql W: +or +.Ql P: +will loop over each session, window or pane and insert the format once +for each. For windows and panes, two comma-separated formats may be +given, the second is used for the current window or active pane. For +example to get a list of windows formatted like the status line: +.Bd -literal -offset indent +#{W:#{E:window-status-format} ,#{E:window-status-current-format} } +.Ed A prefix of the form .Ql s/foo/bar/: will substitute From 6dffbc4849e856025bc491c761e6422b996535a0 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 18:09:12 +0000 Subject: [PATCH 325/836] Tweak format_replace logging. --- format.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/format.c b/format.c index d82d18055f..ae3086d1e6 100644 --- a/format.c +++ b/format.c @@ -1256,6 +1256,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Make a copy of the key. */ copy = copy0 = xstrndup(key, keylen); + log_debug("%s: format = '%s'", __func__, copy); /* Process modifier list. */ list = format_build_modifiers(ft, ©, &count); @@ -1322,7 +1323,6 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, cmp = fm; } } - log_debug("%s: remaining = '%s'", __func__, copy); /* Is this a literal string? */ if (modifiers & FORMAT_LITERAL) { @@ -1452,6 +1452,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, } /* Expand the buffer and copy in the value. */ + log_debug("%s: '%s' -> '%s'", __func__, copy0, value); valuelen = strlen(value); while (*len - *off < valuelen + 1) { *buf = xreallocarray(*buf, 2, *len); From 10f0094be9157eba9d6dad8eace00641de960748 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 21:39:21 +0000 Subject: [PATCH 326/836] The pane's style should be initialized to default before parsing the argument. --- cmd-select-pane.c | 3 +++ colour.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 90ca46ba45..87156250aa 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -19,6 +19,7 @@ #include #include +#include #include "tmux.h" @@ -143,6 +144,8 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'P') || args_has(self->args, 'g')) { if (args_has(args, 'P')) { style = args_get(args, 'P'); + memcpy(&wp->colgc, &grid_default_cell, + sizeof wp->colgc); if (style_parse(&grid_default_cell, &wp->colgc, style) == -1) { cmdq_error(item, "bad style: %s", style); diff --git a/colour.c b/colour.c index a0274dd370..eaee60588c 100644 --- a/colour.c +++ b/colour.c @@ -160,7 +160,7 @@ colour_tostring(int c) case 97: return ("brightwhite"); } - return (NULL); + return ("invalid"); } /* Convert colour from string. */ From 5755bfc619d9d638e82b53afc91cf06096f4dfd9 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 13 Mar 2019 22:01:22 +0000 Subject: [PATCH 327/836] Need to set attributes before clearing. --- tty.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tty.c b/tty.c index cd3ea5e044..118904a435 100644 --- a/tty.c +++ b/tty.c @@ -1281,12 +1281,12 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, gcp->bg != last.bg || ux + width + gcp->data.width > nx || (sizeof buf) - len < gcp->data.size)) { + tty_attributes(tty, &last, wp); if (last.flags & GRID_FLAG_CLEARED) { log_debug("%s: %zu cleared", __func__, len); tty_clear_line(tty, wp, aty, atx + ux, width, last.bg); } else { - tty_attributes(tty, &last, wp); tty_cursor(tty, atx + ux, aty); tty_putn(tty, buf, len, width); } @@ -1322,11 +1322,11 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, } } if (len != 0 && ((~last.flags & GRID_FLAG_CLEARED) || last.bg != 8)) { + tty_attributes(tty, &last, wp); if (last.flags & GRID_FLAG_CLEARED) { log_debug("%s: %zu cleared (end)", __func__, len); tty_clear_line(tty, wp, aty, atx + ux, width, last.bg); } else { - tty_attributes(tty, &last, wp); tty_cursor(tty, atx + ux, aty); tty_putn(tty, buf, len, width); } From 2fbd491ff0a6154ead554ae80fac647f7f8cd4f7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 06:33:43 +0000 Subject: [PATCH 328/836] Add actual HPA (\033[`), the existing one is CHA. From Marc Reisner. --- input.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/input.c b/input.c index 99174cd6a0..adc28eba03 100644 --- a/input.c +++ b/input.c @@ -272,6 +272,7 @@ static const struct input_table_entry input_csi_table[] = { { 'S', "", INPUT_CSI_SU }, { 'X', "", INPUT_CSI_ECH }, { 'Z', "", INPUT_CSI_CBT }, + { '`', "", INPUT_CSI_HPA }, { 'b', "", INPUT_CSI_REP }, { 'c', "", INPUT_CSI_DA }, { 'c', ">", INPUT_CSI_DA_TWO }, @@ -1471,7 +1472,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_HPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, n - 1, -1, 0); + screen_write_cursormove(sctx, n - 1, -1, 1); break; case INPUT_CSI_ICH: n = input_get(ictx, 0, 1, 1); @@ -1540,7 +1541,7 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_VPA: n = input_get(ictx, 0, 1, 1); if (n != -1) - screen_write_cursormove(sctx, -1, n - 1, 0); + screen_write_cursormove(sctx, -1, n - 1, 1); break; case INPUT_CSI_DECSCUSR: n = input_get(ictx, 0, 0, 0); From 1e9f8a3523ac93203036bd4a3740674a91fc4f1c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 06:36:21 +0000 Subject: [PATCH 329/836] Missing space in capture-pane usage, from Ben Boeckel. Also man page fixed from jmc. --- cmd-capture-pane.c | 2 +- tmux.1 | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index dd1576c409..a3ec066c84 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -41,7 +41,7 @@ const struct cmd_entry cmd_capture_pane_entry = { .args = { "ab:CeE:JpPqS:t:", 0, 0 }, .usage = "[-aCeJpPq] " CMD_BUFFER_USAGE " [-E end-line] " - "[-S start-line]" CMD_TARGET_PANE_USAGE, + "[-S start-line] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/tmux.1 b/tmux.1 index df35d839ef..49e82643be 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3724,9 +3724,10 @@ option rather than the content itself. or .Ql P: will loop over each session, window or pane and insert the format once -for each. For windows and panes, two comma-separated formats may be -given, the second is used for the current window or active pane. For -example to get a list of windows formatted like the status line: +for each. +For windows and panes, two comma-separated formats may be given: +the second is used for the current window or active pane. +For example, to get a list of windows formatted like the status line: .Bd -literal -offset indent #{W:#{E:window-status-format} ,#{E:window-status-current-format} } .Ed From 13f9a061acd966757ae2f42c3a8ac24765ac65bd Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 09:53:52 +0000 Subject: [PATCH 330/836] Add a wrapper (struct style) around styles rather than using the grid_cell directly. There will be some non-cell members soon. --- cmd-select-pane.c | 12 ++-- input.c | 4 +- options.c | 30 ++++----- screen-write.c | 16 ++--- style.c | 154 +++++++++++++++++++++++++++++----------------- tmux.h | 32 ++++++---- tty.c | 79 +++++++++++------------- window.c | 22 +++---- 8 files changed, 195 insertions(+), 154 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 87156250aa..2873737f7b 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -90,6 +90,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) struct window *w = wl->window; struct session *s = item->target.s; struct window_pane *wp = item->target.wp, *lastwp, *markedwp; + struct style *sy = &wp->style; char *pane_title; const char *style; @@ -142,19 +143,16 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) } if (args_has(self->args, 'P') || args_has(self->args, 'g')) { - if (args_has(args, 'P')) { - style = args_get(args, 'P'); - memcpy(&wp->colgc, &grid_default_cell, - sizeof wp->colgc); - if (style_parse(&grid_default_cell, &wp->colgc, - style) == -1) { + if ((style = args_get(args, 'P')) != NULL) { + style_set(sy, &grid_default_cell); + if (style_parse(sy, &grid_default_cell, style) == -1) { cmdq_error(item, "bad style: %s", style); return (CMD_RETURN_ERROR); } wp->flags |= PANE_REDRAW; } if (args_has(self->args, 'g')) - cmdq_print(item, "%s", style_tostring(&wp->colgc)); + cmdq_print(item, "%s", style_tostring(sy)); return (CMD_RETURN_NORMAL); } diff --git a/input.c b/input.c index adc28eba03..9679367412 100644 --- a/input.c +++ b/input.c @@ -2340,7 +2340,7 @@ input_osc_10(struct input_ctx *ictx, const char *p) if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; - wp->colgc.fg = colour_join_rgb(r, g, b); + wp->style.gc.fg = colour_join_rgb(r, g, b); wp->flags |= PANE_REDRAW; return; @@ -2359,7 +2359,7 @@ input_osc_11(struct input_ctx *ictx, const char *p) if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; - wp->colgc.bg = colour_join_rgb(r, g, b); + wp->style.gc.bg = colour_join_rgb(r, g, b); wp->flags |= PANE_REDRAW; return; diff --git a/options.c b/options.c index a607dab776..08d9275fc2 100644 --- a/options.c +++ b/options.c @@ -39,7 +39,7 @@ struct options_entry { union { char *string; long long number; - struct grid_cell style; + struct style style; struct { const char **array; u_int arraysize; @@ -177,8 +177,8 @@ options_default(struct options *oo, const struct options_table_entry *oe) else if (oe->type == OPTIONS_TABLE_STRING) o->string = xstrdup(oe->default_str); else if (oe->type == OPTIONS_TABLE_STYLE) { - memcpy(&o->style, &grid_default_cell, sizeof o->style); - style_parse(&grid_default_cell, &o->style, oe->default_str); + style_set(&o->style, &grid_default_cell); + style_parse(&o->style, &grid_default_cell, oe->default_str); } else o->number = oe->default_num; return (o); @@ -504,7 +504,7 @@ options_get_number(struct options *oo, const char *name) return (o->number); } -const struct grid_cell * +struct style * options_get_style(struct options *oo, const char *name) { struct options_entry *o; @@ -576,17 +576,17 @@ options_set_style(struct options *oo, const char *name, int append, const char *value) { struct options_entry *o; - struct grid_cell gc; + struct style sy; if (*name == '@') fatalx("user option %s must be a string", name); o = options_get_only(oo, name); if (o != NULL && append && OPTIONS_IS_STYLE(o)) - memcpy(&gc, &o->style, sizeof gc); + style_copy(&sy, &o->style); else - memcpy(&gc, &grid_default_cell, sizeof gc); - if (style_parse(&grid_default_cell, &gc, value) == -1) + style_set(&sy, &grid_default_cell); + if (style_parse(&sy, &grid_default_cell, value) == -1) return (NULL); if (o == NULL) { o = options_default(oo, options_parent_table_entry(oo, name)); @@ -596,7 +596,7 @@ options_set_style(struct options *oo, const char *name, int append, if (!OPTIONS_IS_STYLE(o)) fatalx("option %s is not a style", name); - memcpy(&o->style, &gc, sizeof o->style); + style_copy(&o->style, &sy); return (o); } @@ -657,11 +657,11 @@ options_style_update_new(struct options *oo, struct options_entry *o) new = options_set_style(oo, newname, 0, "default"); if (strstr(o->name, "-bg") != NULL) - new->style.bg = o->number; + new->style.gc.bg = o->number; else if (strstr(o->name, "-fg") != NULL) - new->style.fg = o->number; + new->style.gc.fg = o->number; else if (strstr(o->name, "-attr") != NULL) - new->style.attr = o->number; + new->style.gc.attr = o->number; } void @@ -674,13 +674,13 @@ options_style_update_old(struct options *oo, struct options_entry *o) xsnprintf(newname, sizeof newname, "%.*s-bg", size, o->name); if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.bg); + options_set_number(oo, newname, o->style.gc.bg); xsnprintf(newname, sizeof newname, "%.*s-fg", size, o->name); if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.fg); + options_set_number(oo, newname, o->style.gc.fg); xsnprintf(newname, sizeof newname, "%.*s-attr", size, o->name); if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.attr); + options_set_number(oo, newname, o->style.gc.attr); } diff --git a/screen-write.c b/screen-write.c index 9153ad27fb..eb12474d8a 100644 --- a/screen-write.c +++ b/screen-write.c @@ -327,15 +327,15 @@ void screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, const struct grid_cell *gcp, const char *fmt, ...) { - struct grid_cell gc; - struct utf8_data *ud = &gc.data; + struct style sy; + struct utf8_data *ud = &sy.gc.data; va_list ap; char *msg; u_char *ptr, *last; size_t left, size = 0; enum utf8_state more; - memcpy(&gc, gcp, sizeof gc); + style_set(&sy, gcp); va_start(ap, fmt); xvasprintf(&msg, fmt, ap); @@ -352,7 +352,7 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, } *last = '\0'; - style_parse(gcp, &gc, ptr); + style_parse(&sy, gcp, ptr); ptr = last + 1; continue; } @@ -370,22 +370,22 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, continue; if (maxlen > 0 && size + ud->width > (size_t)maxlen) { while (size < (size_t)maxlen) { - screen_write_putc(ctx, &gc, ' '); + screen_write_putc(ctx, &sy.gc, ' '); size++; } break; } size += ud->width; - screen_write_cell(ctx, &gc); + screen_write_cell(ctx, &sy.gc); } else { if (maxlen > 0 && size + 1 > (size_t)maxlen) break; if (*ptr == '\001') - gc.attr ^= GRID_ATTR_CHARSET; + sy.gc.attr ^= GRID_ATTR_CHARSET; else if (*ptr > 0x1f && *ptr < 0x7f) { size++; - screen_write_putc(ctx, &gc, *ptr); + screen_write_putc(ctx, &sy.gc, *ptr); } ptr++; } diff --git a/style.c b/style.c index 6e78b3a9b6..fd88764ae0 100644 --- a/style.c +++ b/style.c @@ -23,27 +23,40 @@ #include "tmux.h" -/* Parse an embedded style of the form "fg=colour,bg=colour,bright,...". */ +/* Mask for bits not included in style. */ +#define STYLE_ATTR_MASK (~GRID_ATTR_CHARSET) + +/* Default style. */ +static struct style style_default = { + { 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } } +}; + +/* + * Parse an embedded style of the form "fg=colour,bg=colour,bright,...". + * Note that this adds onto the given style, so it must have been initialized + * alredy. + */ int -style_parse(const struct grid_cell *defgc, struct grid_cell *gc, - const char *in) +style_parse(struct style *sy, const struct grid_cell *base, const char *in) { - struct grid_cell savedgc; - const char delimiters[] = " ,"; - char tmp[32]; - int val, fg, bg, attr, flags; - size_t end; + struct grid_cell *gc = &sy->gc; + struct grid_cell saved; + const char delimiters[] = " ,"; + char tmp[32]; + int value, fg, bg, attr, flags; + size_t end; if (*in == '\0') return (0); if (strchr(delimiters, in[strlen(in) - 1]) != NULL) return (-1); - memcpy(&savedgc, gc, sizeof savedgc); + memcpy(&saved, base, sizeof saved); fg = gc->fg; bg = gc->bg; attr = gc->attr; flags = gc->flags; + do { end = strcspn(in, delimiters); if (end > (sizeof tmp) - 1) @@ -52,39 +65,40 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc, tmp[end] = '\0'; if (strcasecmp(tmp, "default") == 0) { - fg = defgc->fg; - bg = defgc->bg; - attr = defgc->attr; - flags = defgc->flags; + fg = base->fg; + bg = base->bg; + attr = base->attr; + flags = base->flags; } else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) { - if ((val = colour_fromstring(tmp + 3)) == -1) + if ((value = colour_fromstring(tmp + 3)) == -1) goto error; if (*in == 'f' || *in == 'F') { - if (val != 8) - fg = val; + if (value != 8) + fg = value; else - fg = defgc->fg; + fg = base->fg; } else if (*in == 'b' || *in == 'B') { - if (val != 8) - bg = val; + if (value != 8) + bg = value; else - bg = defgc->bg; + bg = base->bg; } else goto error; } else if (strcasecmp(tmp, "none") == 0) attr = 0; else if (end > 2 && strncasecmp(tmp, "no", 2) == 0) { - if ((val = attributes_fromstring(tmp + 2)) == -1) + if ((value = attributes_fromstring(tmp + 2)) == -1) goto error; - attr &= ~val; + attr &= ~value; } else { - if ((val = attributes_fromstring(tmp)) == -1) + if ((value = attributes_fromstring(tmp)) == -1) goto error; - attr |= val; + attr |= value; } in += end + strspn(in + end, delimiters); } while (*in != '\0'); + gc->fg = fg; gc->bg = bg; gc->attr = attr; @@ -93,33 +107,35 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc, return (0); error: - memcpy(gc, &savedgc, sizeof *gc); + memcpy(gc, &saved, sizeof *gc); return (-1); } /* Convert style to a string. */ const char * -style_tostring(struct grid_cell *gc) +style_tostring(struct style *sy) { - int off = 0, comma = 0; - static char s[256]; + struct grid_cell *gc = &sy->gc; + int off = 0; + const char *comma = ""; + static char s[256]; *s = '\0'; if (gc->fg != 8) { - off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(gc->fg)); - comma = 1; + off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", + comma, colour_tostring(gc->fg)); + comma = ","; } - if (gc->bg != 8) { off += xsnprintf(s + off, sizeof s - off, "%sbg=%s", - comma ? "," : "", colour_tostring(gc->bg)); - comma = 1; + comma, colour_tostring(gc->bg)); + comma = ","; } - if (gc->attr != 0 && gc->attr != GRID_ATTR_CHARSET) { xsnprintf(s + off, sizeof s - off, "%s%s", - comma ? "," : "", attributes_tostring(gc->attr)); + comma, attributes_tostring(gc->attr)); + comma = ","; } if (*s == '\0') @@ -131,38 +147,64 @@ style_tostring(struct grid_cell *gc) void style_apply(struct grid_cell *gc, struct options *oo, const char *name) { - const struct grid_cell *gcp; + struct style *sy; memcpy(gc, &grid_default_cell, sizeof *gc); - gcp = options_get_style(oo, name); - gc->fg = gcp->fg; - gc->bg = gcp->bg; - gc->attr |= gcp->attr; + sy = options_get_style(oo, name); + gc->fg = sy->gc.fg; + gc->bg = sy->gc.bg; + gc->attr |= sy->gc.attr; } /* Apply a style, updating if default. */ void style_apply_update(struct grid_cell *gc, struct options *oo, const char *name) { - const struct grid_cell *gcp; - - gcp = options_get_style(oo, name); - if (gcp->fg != 8) - gc->fg = gcp->fg; - if (gcp->bg != 8) - gc->bg = gcp->bg; - if (gcp->attr != 0) - gc->attr |= gcp->attr; + struct style *sy; + + sy = options_get_style(oo, name); + if (sy->gc.fg != 8) + gc->fg = sy->gc.fg; + if (sy->gc.bg != 8) + gc->bg = sy->gc.bg; + if (sy->gc.attr != 0) + gc->attr |= sy->gc.attr; +} + +/* Initialize style from cell. */ +void +style_set(struct style *sy, const struct grid_cell *gc) +{ + memset(sy, 0, sizeof *sy); + memcpy(&sy->gc, gc, sizeof sy->gc); +} + +/* Copy style. */ +void +style_copy(struct style *dst, struct style *src) +{ + memcpy(dst, src, sizeof *dst); } /* Check if two styles are the same. */ int -style_equal(const struct grid_cell *gc1, const struct grid_cell *gc2) +style_equal(struct style *sy1, struct style *sy2) +{ + struct grid_cell *gc1 = &sy1->gc; + struct grid_cell *gc2 = &sy2->gc; + + if (gc1->fg != gc2->fg) + return (0); + if (gc1->bg != gc2->bg) + return (0); + if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK)) + return (0); + return (1); +} + +/* Is this style default? */ +int +style_is_default(struct style *sy) { - return (gc1->fg == gc2->fg && - gc1->bg == gc2->bg && - (gc1->flags & ~GRID_FLAG_PADDING) == - (gc2->flags & ~GRID_FLAG_PADDING) && - (gc1->attr & ~GRID_ATTR_CHARSET) == - (gc2->attr & ~GRID_ATTR_CHARSET)); + return (style_equal(sy, &style_default)); } diff --git a/tmux.h b/tmux.h index 0a2545d050..87873bf666 100644 --- a/tmux.h +++ b/tmux.h @@ -634,6 +634,11 @@ struct grid { struct grid_line *linedata; }; +/* Style option. */ +struct style { + struct grid_cell gc; +}; + /* Hook data structures. */ struct hook { const char *name; @@ -778,8 +783,7 @@ struct window_pane { struct input_ctx *ictx; - struct grid_cell colgc; - + struct style style; int *palette; int pipe_fd; @@ -847,8 +851,8 @@ struct window { struct options *options; - struct grid_cell style; - struct grid_cell active_style; + struct style style; + struct style active_style; u_int references; TAILQ_HEAD(, winlink) winlinks; @@ -1649,7 +1653,7 @@ struct options_entry *options_match_get(struct options *, const char *, int *, int, int *); const char *options_get_string(struct options *, const char *); long long options_get_number(struct options *, const char *); -const struct grid_cell *options_get_style(struct options *, const char *); +struct style *options_get_style(struct options *, const char *); struct options_entry * printflike(4, 5) options_set_string(struct options *, const char *, int, const char *, ...); struct options_entry *options_set_number(struct options *, const char *, @@ -1707,7 +1711,7 @@ void tty_update_window_offset(struct window *); void tty_update_client_offset(struct client *); void tty_raw(struct tty *, const char *); void tty_attributes(struct tty *, const struct grid_cell *, - const struct window_pane *); + struct window_pane *); void tty_reset(struct tty *); void tty_region_off(struct tty *); void tty_margin_off(struct tty *); @@ -1729,7 +1733,7 @@ void tty_start_tty(struct tty *); void tty_stop_tty(struct tty *); void tty_set_title(struct tty *, const char *); void tty_update_mode(struct tty *, int, struct screen *); -void tty_draw_line(struct tty *, const struct window_pane *, struct screen *, +void tty_draw_line(struct tty *, struct window_pane *, struct screen *, u_int, u_int, u_int, u_int, u_int); int tty_open(struct tty *, char **); void tty_close(struct tty *); @@ -2207,7 +2211,7 @@ void window_pane_alternate_off(struct window_pane *, void window_pane_set_palette(struct window_pane *, u_int, int); void window_pane_unset_palette(struct window_pane *, u_int); void window_pane_reset_palette(struct window_pane *); -int window_pane_get_palette(const struct window_pane *, int); +int window_pane_get_palette(struct window_pane *, int); int window_pane_set_mode(struct window_pane *, const struct window_mode *, struct cmd_find_state *, struct args *); @@ -2420,14 +2424,16 @@ __dead void printflike(1, 2) fatal(const char *, ...); __dead void printflike(1, 2) fatalx(const char *, ...); /* style.c */ -int style_parse(const struct grid_cell *, - struct grid_cell *, const char *); -const char *style_tostring(struct grid_cell *); +int style_parse(struct style *,const struct grid_cell *, + const char *); +const char *style_tostring(struct style *); void style_apply(struct grid_cell *, struct options *, const char *); void style_apply_update(struct grid_cell *, struct options *, const char *); -int style_equal(const struct grid_cell *, - const struct grid_cell *); +int style_equal(struct style *, struct style *); +void style_set(struct style *, const struct grid_cell *); +void style_copy(struct style *, struct style *); +int style_is_default(struct style *); #endif /* TMUX_H */ diff --git a/tty.c b/tty.c index 118904a435..5db8658025 100644 --- a/tty.c +++ b/tty.c @@ -45,9 +45,9 @@ static void tty_cursor_pane_unless_wrap(struct tty *, const struct tty_ctx *, u_int, u_int); static void tty_invalidate(struct tty *); static void tty_colours(struct tty *, const struct grid_cell *); -static void tty_check_fg(struct tty *, const struct window_pane *, +static void tty_check_fg(struct tty *, struct window_pane *, struct grid_cell *); -static void tty_check_bg(struct tty *, const struct window_pane *, +static void tty_check_bg(struct tty *, struct window_pane *, struct grid_cell *); static void tty_colours_fg(struct tty *, const struct grid_cell *); static void tty_colours_bg(struct tty *, const struct grid_cell *); @@ -58,18 +58,16 @@ static void tty_region(struct tty *, u_int, u_int); static void tty_margin_pane(struct tty *, const struct tty_ctx *); static void tty_margin(struct tty *, u_int, u_int); static int tty_large_region(struct tty *, const struct tty_ctx *); -static int tty_fake_bce(const struct tty *, const struct window_pane *, - u_int); +static int tty_fake_bce(const struct tty *, struct window_pane *, u_int); static void tty_redraw_region(struct tty *, const struct tty_ctx *); static void tty_emulate_repeat(struct tty *, enum tty_code_code, enum tty_code_code, u_int); static void tty_repeat_space(struct tty *, u_int); static void tty_draw_pane(struct tty *, const struct tty_ctx *, u_int); static void tty_cell(struct tty *, const struct grid_cell *, - const struct window_pane *); -static void tty_default_colours(struct grid_cell *, - const struct window_pane *); -static void tty_default_attributes(struct tty *, const struct window_pane *, + struct window_pane *); +static void tty_default_colours(struct grid_cell *, struct window_pane *); +static void tty_default_attributes(struct tty *, struct window_pane *, u_int); #define tty_use_margin(tty) \ @@ -847,7 +845,7 @@ tty_large_region(__unused struct tty *tty, const struct tty_ctx *ctx) * emulated. */ static int -tty_fake_bce(const struct tty *tty, const struct window_pane *wp, u_int bg) +tty_fake_bce(const struct tty *tty, struct window_pane *wp, u_int bg) { struct grid_cell gc; @@ -956,8 +954,8 @@ tty_clamp_line(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, /* Clear a line. */ static void -tty_clear_line(struct tty *tty, const struct window_pane *wp, u_int py, - u_int px, u_int nx, u_int bg) +tty_clear_line(struct tty *tty, struct window_pane *wp, u_int py, u_int px, + u_int nx, u_int bg) { struct client *c = tty->client; @@ -1075,8 +1073,8 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, /* Clear an area, adjusting to visible part of pane. */ static void -tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, - u_int ny, u_int px, u_int nx, u_int bg) +tty_clear_area(struct tty *tty, struct window_pane *wp, u_int py, u_int ny, + u_int px, u_int nx, u_int bg) { struct client *c = tty->client; u_int yy; @@ -1198,8 +1196,8 @@ tty_check_codeset(struct tty *tty, const struct grid_cell *gc) } void -tty_draw_line(struct tty *tty, const struct window_pane *wp, - struct screen *s, u_int px, u_int py, u_int nx, u_int atx, u_int aty) +tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, + u_int px, u_int py, u_int nx, u_int atx, u_int aty) { struct grid *gd = s->grid; struct grid_cell gc, last; @@ -1802,8 +1800,7 @@ tty_cmd_rawstring(struct tty *tty, const struct tty_ctx *ctx) } static void -tty_cell(struct tty *tty, const struct grid_cell *gc, - const struct window_pane *wp) +tty_cell(struct tty *tty, const struct grid_cell *gc, struct window_pane *wp) { const struct grid_cell *gcp; @@ -2117,7 +2114,7 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) void tty_attributes(struct tty *tty, const struct grid_cell *gc, - const struct window_pane *wp) + struct window_pane *wp) { struct grid_cell *tc = &tty->cell, gc2; int changed; @@ -2265,8 +2262,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) } static void -tty_check_fg(struct tty *tty, const struct window_pane *wp, - struct grid_cell *gc) +tty_check_fg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) { u_char r, g, b; u_int colours; @@ -2326,8 +2322,7 @@ tty_check_fg(struct tty *tty, const struct window_pane *wp, } static void -tty_check_bg(struct tty *tty, const struct window_pane *wp, - struct grid_cell *gc) +tty_check_bg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) { u_char r, g, b; u_int colours; @@ -2499,32 +2494,32 @@ tty_try_colour(struct tty *tty, int colour, const char *type) } static void -tty_default_colours(struct grid_cell *gc, const struct window_pane *wp) +tty_default_colours(struct grid_cell *gc, struct window_pane *wp) { struct window *w = wp->window; struct options *oo = w->options; - const struct grid_cell *agc, *pgc, *wgc; + struct style *active, *pane, *window; int c; if (w->flags & WINDOW_STYLECHANGED) { w->flags &= ~WINDOW_STYLECHANGED; - agc = options_get_style(oo, "window-active-style"); - memcpy(&w->active_style, agc, sizeof w->active_style); - wgc = options_get_style(oo, "window-style"); - memcpy(&w->style, wgc, sizeof w->style); + active = options_get_style(oo, "window-active-style"); + style_copy(&w->active_style, active); + window = options_get_style(oo, "window-style"); + style_copy(&w->style, window); } else { - agc = &w->active_style; - wgc = &w->style; + active = &w->active_style; + window = &w->style; } - pgc = &wp->colgc; + pane = &wp->style; if (gc->fg == 8) { - if (pgc->fg != 8) - gc->fg = pgc->fg; - else if (wp == w->active && agc->fg != 8) - gc->fg = agc->fg; + if (pane->gc.fg != 8) + gc->fg = pane->gc.fg; + else if (wp == w->active && active->gc.fg != 8) + gc->fg = active->gc.fg; else - gc->fg = wgc->fg; + gc->fg = window->gc.fg; if (gc->fg != 8) { c = window_pane_get_palette(wp, gc->fg); @@ -2534,12 +2529,12 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp) } if (gc->bg == 8) { - if (pgc->bg != 8) - gc->bg = pgc->bg; - else if (wp == w->active && agc->bg != 8) - gc->bg = agc->bg; + if (pane->gc.bg != 8) + gc->bg = pane->gc.bg; + else if (wp == w->active && active->gc.bg != 8) + gc->bg = active->gc.bg; else - gc->bg = wgc->bg; + gc->bg = window->gc.bg; if (gc->bg != 8) { c = window_pane_get_palette(wp, gc->bg); @@ -2550,7 +2545,7 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp) } static void -tty_default_attributes(struct tty *tty, const struct window_pane *wp, u_int bg) +tty_default_attributes(struct tty *tty, struct window_pane *wp, u_int bg) { static struct grid_cell gc; diff --git a/window.c b/window.c index 117c47e77a..a253e8bf39 100644 --- a/window.c +++ b/window.c @@ -470,7 +470,7 @@ window_set_active_pane(struct window *w, struct window_pane *wp) void window_redraw_active_switch(struct window *w, struct window_pane *wp) { - const struct grid_cell *gc; + struct style *sy; if (wp == w->active) return; @@ -479,21 +479,21 @@ window_redraw_active_switch(struct window *w, struct window_pane *wp) * If window-style and window-active-style are the same, we don't need * to redraw panes when switching active panes. */ - gc = options_get_style(w->options, "window-active-style"); - if (style_equal(gc, options_get_style(w->options, "window-style"))) + sy = options_get_style(w->options, "window-active-style"); + if (style_equal(sy, options_get_style(w->options, "window-style"))) return; /* * If the now active or inactive pane do not have a custom style or if * the palette is different, they need to be redrawn. */ - if (window_pane_get_palette(w->active, w->active->colgc.fg) != -1 || - window_pane_get_palette(w->active, w->active->colgc.bg) != -1 || - style_equal(&grid_default_cell, &w->active->colgc)) + if (window_pane_get_palette(w->active, w->active->style.gc.fg) != -1 || + window_pane_get_palette(w->active, w->active->style.gc.bg) != -1 || + style_is_default(&w->active->style)) w->active->flags |= PANE_REDRAW; - if (window_pane_get_palette(wp, wp->colgc.fg) != -1 || - window_pane_get_palette(wp, wp->colgc.bg) != -1 || - style_equal(&grid_default_cell, &wp->colgc)) + if (window_pane_get_palette(wp, wp->style.gc.fg) != -1 || + window_pane_get_palette(wp, wp->style.gc.bg) != -1 || + style_is_default(&wp->style)) wp->flags |= PANE_REDRAW; } @@ -826,7 +826,7 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->saved_grid = NULL; - memcpy(&wp->colgc, &grid_default_cell, sizeof wp->colgc); + style_set(&wp->style, &grid_default_cell); screen_init(&wp->base, sx, sy, hlimit); wp->screen = &wp->base; @@ -1179,7 +1179,7 @@ window_pane_reset_palette(struct window_pane *wp) } int -window_pane_get_palette(const struct window_pane *wp, int c) +window_pane_get_palette(struct window_pane *wp, int c) { int new; From 0425e3178d2f7cc0d33cd9aa8ed74b096b31727e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 10:19:52 +0000 Subject: [PATCH 331/836] A little tidying in style_parse. --- style.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/style.c b/style.c index fd88764ae0..af4affc867 100644 --- a/style.c +++ b/style.c @@ -39,23 +39,22 @@ static struct style style_default = { int style_parse(struct style *sy, const struct grid_cell *base, const char *in) { - struct grid_cell *gc = &sy->gc; - struct grid_cell saved; - const char delimiters[] = " ,"; - char tmp[32]; - int value, fg, bg, attr, flags; - size_t end; + struct style saved; + const char delimiters[] = " ,"; + char tmp[32]; + int value, fg, bg, attr, flags; + size_t end; if (*in == '\0') return (0); if (strchr(delimiters, in[strlen(in) - 1]) != NULL) return (-1); - memcpy(&saved, base, sizeof saved); + style_copy(&saved, sy); - fg = gc->fg; - bg = gc->bg; - attr = gc->attr; - flags = gc->flags; + fg = sy->gc.fg; + bg = sy->gc.bg; + attr = sy->gc.attr; + flags = sy->gc.flags; do { end = strcspn(in, delimiters); @@ -99,15 +98,15 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) in += end + strspn(in + end, delimiters); } while (*in != '\0'); - gc->fg = fg; - gc->bg = bg; - gc->attr = attr; - gc->flags = flags; + sy->gc.fg = fg; + sy->gc.bg = bg; + sy->gc.attr = attr; + sy->gc.flags = flags; return (0); error: - memcpy(gc, &saved, sizeof *gc); + style_copy(sy, &saved); return (-1); } From 9bd4b96766cbbdc8f8e166baf726d69e8a6024ff Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 17:58:52 +0000 Subject: [PATCH 332/836] Fix ED1 (clear end of screen), reported by Marc Reisner. --- tty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty.c b/tty.c index 5db8658025..855f8e6a5b 100644 --- a/tty.c +++ b/tty.c @@ -1672,7 +1672,7 @@ tty_cmd_clearstartofscreen(struct tty *tty, const struct tty_ctx *ctx) px = 0; nx = screen_size_x(wp->screen); py = 0; - ny = ctx->ocy - 1; + ny = ctx->ocy; tty_clear_pane_area(tty, ctx, py, ny, px, nx, ctx->bg); From 1416ceb57589ba119a36d9f32d919d3444f7b0d0 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 21:27:26 +0000 Subject: [PATCH 333/836] Accept 0 time as a shorthand for now to format_expand_time. --- cmd-display-message.c | 2 +- cmd-pipe-pane.c | 2 +- format.c | 2 ++ server-client.c | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 5856e2d85a..6dd210ac6d 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -86,7 +86,7 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) ft = format_create(item->client, item, FORMAT_NONE, 0); format_defaults(ft, target_c, s, wl, wp); - msg = format_expand_time(ft, template, time(NULL)); + msg = format_expand_time(ft, template, 0); if (args_has(self->args, 'p')) cmdq_print(item, "%s", msg); else if (c != NULL) diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index e1bdb82db0..c0d2939f46 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -110,7 +110,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) /* Expand the command. */ ft = format_create(item->client, item, FORMAT_NONE, 0); format_defaults(ft, c, s, wl, wp); - cmd = format_expand_time(ft, args->argv[0], time(NULL)); + cmd = format_expand_time(ft, args->argv[0], 0); format_free(ft); /* Fork the child. */ diff --git a/format.c b/format.c index ae3086d1e6..6f042f8ab5 100644 --- a/format.c +++ b/format.c @@ -1482,6 +1482,8 @@ format_expand_time(struct format_tree *ft, const char *fmt, time_t t) if (fmt == NULL || *fmt == '\0') return (xstrdup("")); + if (t == 0) + t = time(NULL); tm = localtime(&t); if (strftime(s, sizeof s, fmt, tm) == 0) diff --git a/server-client.c b/server-client.c index b7d052a078..5bd77c848e 100644 --- a/server-client.c +++ b/server-client.c @@ -1537,7 +1537,7 @@ server_client_set_title(struct client *c) ft = format_create(c, NULL, FORMAT_NONE, 0); format_defaults(ft, c, NULL, NULL, NULL); - title = format_expand_time(ft, template, time(NULL)); + title = format_expand_time(ft, template, 0); if (c->title == NULL || strcmp(title, c->title) != 0) { free(c->title); c->title = xstrdup(title); From 38064e759342b38fbeea48ea716b7d29679271b1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 21:31:43 +0000 Subject: [PATCH 334/836] Add T format modifier like E but also do strftime(3). --- format.c | 19 ++++++++++++++----- tmux.1 | 6 ++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/format.c b/format.c index 6f042f8ab5..530e2403cc 100644 --- a/format.c +++ b/format.c @@ -95,9 +95,10 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_QUOTE 0x8 #define FORMAT_LITERAL 0x10 #define FORMAT_EXPAND 0x20 -#define FORMAT_SESSIONS 0x40 -#define FORMAT_WINDOWS 0x80 -#define FORMAT_PANES 0x100 +#define FORMAT_EXPANDTIME 0x40 +#define FORMAT_SESSIONS 0x80 +#define FORMAT_WINDOWS 0x100 +#define FORMAT_PANES 0x200 /* Entry in format tree. */ struct format_entry { @@ -1001,7 +1002,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) /* * Modifiers are a ; separated list of the forms: - * l,m,C,b,d,t,q + * l,m,C,b,d,t,q,E,T,S,W,P * =a * =/a * =/a/ @@ -1018,7 +1019,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) cp++; /* Check single character modifiers with no arguments. */ - if (strchr("lmCbdtqESWP", cp[0]) != NULL && + if (strchr("lmCbdtqETSWP", cp[0]) != NULL && format_is_end(cp[1])) { format_add_modifier(&list, count, cp, 1, NULL, 0); cp++; @@ -1305,6 +1306,9 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, case 'E': modifiers |= FORMAT_EXPAND; break; + case 'T': + modifiers |= FORMAT_EXPANDTIME; + break; case 'S': modifiers |= FORMAT_SESSIONS; break; @@ -1432,6 +1436,11 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, free(value); value = new; } + else if (modifiers & FORMAT_EXPANDTIME) { + new = format_expand_time(ft, value, 0); + free(value); + value = new; + } /* Perform substitution if any. */ if (sub != NULL) { diff --git a/tmux.1 b/tmux.1 index 49e82643be..12da91ec0d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3719,6 +3719,12 @@ will expand the format twice, for example is the result of expanding the content of the .Ic status-left option rather than the content itself. +.Ql T: +is like +.Ql E: +but also expands +.Xr strftime 3 +specifiers. .Ql S: , .Ql W: or From 4206bcc10ef936a34eabb32f94a58a6cdd4ec907 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 21:41:30 +0000 Subject: [PATCH 335/836] Add format flags for start and end window. --- format.c | 5 +++++ tmux.1 | 2 ++ 2 files changed, 7 insertions(+) diff --git a/format.c b/format.c index 530e2403cc..17e5499682 100644 --- a/format.c +++ b/format.c @@ -1797,6 +1797,11 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) format_add(ft, "window_flags", "%s", window_printable_flags(wl)); format_add(ft, "window_active", "%d", wl == s->curw); + format_add(ft, "window_start_flag", "%d", + !!(wl == RB_MIN(winlinks, &s->windows))); + format_add(ft, "window_end_flag", "%d", + !!(wl == RB_MAX(winlinks, &s->windows))); + format_add(ft, "window_bell_flag", "%d", !!(wl->flags & WINLINK_BELL)); format_add(ft, "window_activity_flag", "%d", diff --git a/tmux.1 b/tmux.1 index 12da91ec0d..91c60f8e00 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3875,6 +3875,7 @@ The following variables are available, where appropriate: .It Li "window_activity_flag" Ta "" Ta "1 if window has activity" .It Li "window_active" Ta "" Ta "1 if window active" .It Li "window_bell_flag" Ta "" Ta "1 if window has bell" +.It Li "window_end_flag" Ta "" Ta "1 if window has the highest index" .It Li "window_flags" Ta "#F" Ta "Window flags" .It Li "window_format" Ta "" Ta "1 if format is for a window (not assuming the current)" .It Li "window_height" Ta "" Ta "Height of window" @@ -3887,6 +3888,7 @@ The following variables are available, where appropriate: .It Li "window_panes" Ta "" Ta "Number of panes in window" .It Li "window_silence_flag" Ta "" Ta "1 if window has silence alert" .It Li "window_stack_index" Ta "" Ta "Index in session most recent stack" +.It Li "window_start_flag" Ta "" Ta "1 if window has the lowest index" .It Li "window_visible_layout" Ta "" Ta "Window layout description, respecting zoomed window panes" .It Li "window_width" Ta "" Ta "Width of window" .It Li "window_zoomed_flag" Ta "" Ta "1 if window is zoomed" From bace79a5715932f093d4c17db5d49af8e6594916 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 21:46:08 +0000 Subject: [PATCH 336/836] Remove some unnecessary temporary variables and be much less strict about spacing in style_parse. --- style.c | 65 ++++++++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/style.c b/style.c index af4affc867..293c70f161 100644 --- a/style.c +++ b/style.c @@ -39,24 +39,24 @@ static struct style style_default = { int style_parse(struct style *sy, const struct grid_cell *base, const char *in) { - struct style saved; - const char delimiters[] = " ,"; - char tmp[32]; - int value, fg, bg, attr, flags; - size_t end; + struct style saved; + const char delimiters[] = " ,"; + char tmp[32]; + int value; + size_t end; if (*in == '\0') return (0); - if (strchr(delimiters, in[strlen(in) - 1]) != NULL) - return (-1); style_copy(&saved, sy); - fg = sy->gc.fg; - bg = sy->gc.bg; - attr = sy->gc.attr; - flags = sy->gc.flags; - do { + while (*in != '\0' && strchr(delimiters, *in) != NULL) { + in++; + end--; + } + if (*in == '\0') + break; + end = strcspn(in, delimiters); if (end > (sizeof tmp) - 1) goto error; @@ -64,45 +64,40 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) tmp[end] = '\0'; if (strcasecmp(tmp, "default") == 0) { - fg = base->fg; - bg = base->bg; - attr = base->attr; - flags = base->flags; + sy->gc.fg = base->fg; + sy->gc.bg = base->bg; + sy->gc.attr = base->attr; + sy->gc.flags = base->flags; } else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) { if ((value = colour_fromstring(tmp + 3)) == -1) goto error; if (*in == 'f' || *in == 'F') { if (value != 8) - fg = value; + sy->gc.fg = value; else - fg = base->fg; + sy->gc.fg = base->fg; } else if (*in == 'b' || *in == 'B') { if (value != 8) - bg = value; + sy->gc.bg = value; else - bg = base->bg; + sy->gc.bg = base->bg; } else goto error; } else if (strcasecmp(tmp, "none") == 0) - attr = 0; + sy->gc.attr = 0; else if (end > 2 && strncasecmp(tmp, "no", 2) == 0) { if ((value = attributes_fromstring(tmp + 2)) == -1) goto error; - attr &= ~value; + sy->gc.attr &= ~value; } else { if ((value = attributes_fromstring(tmp)) == -1) goto error; - attr |= value; + sy->gc.attr |= value; } in += end + strspn(in + end, delimiters); } while (*in != '\0'); - sy->gc.fg = fg; - sy->gc.bg = bg; - sy->gc.attr = attr; - sy->gc.flags = flags; - return (0); error: @@ -122,18 +117,18 @@ style_tostring(struct style *sy) *s = '\0'; if (gc->fg != 8) { - off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", - comma, colour_tostring(gc->fg)); + off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma, + colour_tostring(gc->fg)); comma = ","; } if (gc->bg != 8) { - off += xsnprintf(s + off, sizeof s - off, "%sbg=%s", - comma, colour_tostring(gc->bg)); + off += xsnprintf(s + off, sizeof s - off, "%sbg=%s", comma, + colour_tostring(gc->bg)); comma = ","; } if (gc->attr != 0 && gc->attr != GRID_ATTR_CHARSET) { - xsnprintf(s + off, sizeof s - off, "%s%s", - comma, attributes_tostring(gc->attr)); + xsnprintf(s + off, sizeof s - off, "%s%s", comma, + attributes_tostring(gc->attr)); comma = ","; } @@ -174,7 +169,7 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name) void style_set(struct style *sy, const struct grid_cell *gc) { - memset(sy, 0, sizeof *sy); + memcpy(sy, &style_default, sizeof *sy); memcpy(&sy->gc, gc, sizeof sy->gc); } From 10d60faba5d06db707a752be47dbb12abd4b8168 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 23:14:27 +0000 Subject: [PATCH 337/836] Store the time in the format tree rather than passing it around. --- cmd-display-message.c | 2 +- cmd-pipe-pane.c | 2 +- format.c | 11 ++++----- server-client.c | 2 +- status.c | 55 +++++++++++++++++-------------------------- tmux.h | 2 +- 6 files changed, 31 insertions(+), 43 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 6dd210ac6d..c55cf1e214 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -86,7 +86,7 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) ft = format_create(item->client, item, FORMAT_NONE, 0); format_defaults(ft, target_c, s, wl, wp); - msg = format_expand_time(ft, template, 0); + msg = format_expand_time(ft, template); if (args_has(self->args, 'p')) cmdq_print(item, "%s", msg); else if (c != NULL) diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index c0d2939f46..084eafe541 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -110,7 +110,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmdq_item *item) /* Expand the command. */ ft = format_create(item->client, item, FORMAT_NONE, 0); format_defaults(ft, c, s, wl, wp); - cmd = format_expand_time(ft, args->argv[0], 0); + cmd = format_expand_time(ft, args->argv[0]); format_free(ft); /* Fork the child. */ diff --git a/format.c b/format.c index 17e5499682..369c0a6d7f 100644 --- a/format.c +++ b/format.c @@ -121,6 +121,7 @@ struct format_tree { struct client *client; u_int tag; int flags; + time_t time; RB_HEAD(format_entry_tree, format_entry) tree; }; @@ -682,6 +683,7 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) ft->tag = tag; ft->flags = flags; + ft->time = time(NULL); format_add_cb(ft, "host", format_cb_host); format_add_cb(ft, "host_short", format_cb_host_short); @@ -1437,7 +1439,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = new; } else if (modifiers & FORMAT_EXPANDTIME) { - new = format_expand_time(ft, value, 0); + new = format_expand_time(ft, value); free(value); value = new; } @@ -1483,7 +1485,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Expand keys in a template, passing through strftime first. */ char * -format_expand_time(struct format_tree *ft, const char *fmt, time_t t) +format_expand_time(struct format_tree *ft, const char *fmt) { struct tm *tm; char s[2048]; @@ -1491,10 +1493,7 @@ format_expand_time(struct format_tree *ft, const char *fmt, time_t t) if (fmt == NULL || *fmt == '\0') return (xstrdup("")); - if (t == 0) - t = time(NULL); - tm = localtime(&t); - + tm = localtime(&ft->time); if (strftime(s, sizeof s, fmt, tm) == 0) return (xstrdup("")); diff --git a/server-client.c b/server-client.c index 5bd77c848e..ba24034b47 100644 --- a/server-client.c +++ b/server-client.c @@ -1537,7 +1537,7 @@ server_client_set_title(struct client *c) ft = format_create(c, NULL, FORMAT_NONE, 0); format_defaults(ft, c, NULL, NULL, NULL); - title = format_expand_time(ft, template, 0); + title = format_expand_time(ft, template); if (c->title == NULL || strcmp(title, c->title) != 0) { free(c->title); c->title = xstrdup(title); diff --git a/status.c b/status.c index 4da7286610..bd639d79ac 100644 --- a/status.c +++ b/status.c @@ -29,14 +29,14 @@ #include "tmux.h" -static char *status_redraw_get_left(struct client *, time_t, - struct grid_cell *, size_t *); -static char *status_redraw_get_right(struct client *, time_t, - struct grid_cell *, size_t *); -static char *status_print(struct client *, struct winlink *, time_t, +static char *status_redraw_get_left(struct client *, struct grid_cell *, + size_t *); +static char *status_redraw_get_right(struct client *, struct grid_cell *, + size_t *); +static char *status_print(struct client *, struct winlink *, struct grid_cell *); -static char *status_replace(struct client *, struct winlink *, const char *, - time_t); +static char *status_replace(struct client *, struct winlink *, + const char *); static void status_message_callback(int, short, void *); static void status_timer_callback(int, short, void *); @@ -232,8 +232,7 @@ status_line_size(struct client *c) /* Retrieve options for left string. */ static char * -status_redraw_get_left(struct client *c, time_t t, struct grid_cell *gc, - size_t *size) +status_redraw_get_left(struct client *c, struct grid_cell *gc, size_t *size) { struct session *s = c->session; const char *template; @@ -243,7 +242,7 @@ status_redraw_get_left(struct client *c, time_t t, struct grid_cell *gc, style_apply_update(gc, s->options, "status-left-style"); template = options_get_string(s->options, "status-left"); - left = status_replace(c, NULL, template, t); + left = status_replace(c, NULL, template); *size = options_get_number(s->options, "status-left-length"); leftlen = screen_write_cstrlen("%s", left); @@ -254,8 +253,7 @@ status_redraw_get_left(struct client *c, time_t t, struct grid_cell *gc, /* Retrieve options for right string. */ static char * -status_redraw_get_right(struct client *c, time_t t, struct grid_cell *gc, - size_t *size) +status_redraw_get_right(struct client *c, struct grid_cell *gc, size_t *size) { struct session *s = c->session; const char *template; @@ -265,7 +263,7 @@ status_redraw_get_right(struct client *c, time_t t, struct grid_cell *gc, style_apply_update(gc, s->options, "status-right-style"); template = options_get_string(s->options, "status-right"); - right = status_replace(c, NULL, template, t); + right = status_replace(c, NULL, template); *size = options_get_number(s->options, "status-right-length"); rightlen = screen_write_cstrlen("%s", right); @@ -308,7 +306,6 @@ status_redraw(struct client *c) struct screen old_status, window_list; struct grid_cell stdgc, lgc, rgc, gc; struct options *oo; - time_t t; char *left, *right; const char *sep; u_int offset, needed, lines; @@ -330,9 +327,6 @@ status_redraw(struct client *c) left = right = NULL; larrow = rarrow = 0; - /* Store current time. */ - t = time(NULL); - /* Set up default colour. */ style_apply(&stdgc, s->options, "status-style"); @@ -350,9 +344,9 @@ status_redraw(struct client *c) /* Work out left and right strings. */ memcpy(&lgc, &stdgc, sizeof lgc); - left = status_redraw_get_left(c, t, &lgc, &llen); + left = status_redraw_get_left(c, &lgc, &llen); memcpy(&rgc, &stdgc, sizeof rgc); - right = status_redraw_get_right(c, t, &rgc, &rlen); + right = status_redraw_get_right(c, &rgc, &rlen); /* * Figure out how much space we have for the window list. If there @@ -372,7 +366,7 @@ status_redraw(struct client *c) RB_FOREACH(wl, winlinks, &s->windows) { free(wl->status_text); memcpy(&wl->status_cell, &stdgc, sizeof wl->status_cell); - wl->status_text = status_print(c, wl, t, &wl->status_cell); + wl->status_text = status_print(c, wl, &wl->status_cell); wl->status_width = screen_write_cstrlen("%s", wl->status_text); if (wl == s->curw) @@ -531,7 +525,7 @@ status_redraw(struct client *c) /* Replace special sequences in fmt. */ static char * -status_replace(struct client *c, struct winlink *wl, const char *fmt, time_t t) +status_replace(struct client *c, struct winlink *wl, const char *fmt) { struct format_tree *ft; char *expanded; @@ -550,7 +544,7 @@ status_replace(struct client *c, struct winlink *wl, const char *fmt, time_t t) ft = format_create(c, NULL, tag, FORMAT_STATUS); format_defaults(ft, c, NULL, wl, NULL); - expanded = format_expand_time(ft, fmt, t); + expanded = format_expand_time(ft, fmt); format_free(ft); return (expanded); @@ -558,8 +552,7 @@ status_replace(struct client *c, struct winlink *wl, const char *fmt, time_t t) /* Return winlink status line entry and adjust gc as necessary. */ static char * -status_print(struct client *c, struct winlink *wl, time_t t, - struct grid_cell *gc) +status_print(struct client *c, struct winlink *wl, struct grid_cell *gc) { struct options *oo = wl->window->options; struct session *s = c->session; @@ -580,7 +573,7 @@ status_print(struct client *c, struct winlink *wl, time_t t, else if (wl->flags & (WINLINK_ACTIVITY|WINLINK_SILENCE)) style_apply_update(gc, oo, "window-status-activity-style"); - text = status_replace(c, wl, fmt, t); + text = status_replace(c, wl, fmt); return (text); } @@ -698,19 +691,17 @@ status_prompt_set(struct client *c, const char *msg, const char *input, prompt_input_cb inputcb, prompt_free_cb freecb, void *data, int flags) { struct format_tree *ft; - time_t t; char *tmp, *cp; ft = format_create(c, NULL, FORMAT_NONE, 0); format_defaults(ft, c, NULL, NULL, NULL); - t = time(NULL); if (input == NULL) input = ""; if (flags & PROMPT_NOFORMAT) tmp = xstrdup(input); else - tmp = format_expand_time(ft, input, t); + tmp = format_expand_time(ft, input); status_message_clear(c); status_prompt_clear(c); @@ -722,7 +713,7 @@ status_prompt_set(struct client *c, const char *msg, const char *input, screen_init(&c->status.status, c->tty.sx, 1, 0); } - c->prompt_string = format_expand_time(ft, msg, t); + c->prompt_string = format_expand_time(ft, msg); c->prompt_buffer = utf8_fromcstr(tmp); c->prompt_index = utf8_strlen(c->prompt_buffer); @@ -780,17 +771,15 @@ void status_prompt_update(struct client *c, const char *msg, const char *input) { struct format_tree *ft; - time_t t; char *tmp; ft = format_create(c, NULL, FORMAT_NONE, 0); format_defaults(ft, c, NULL, NULL, NULL); - t = time(NULL); - tmp = format_expand_time(ft, input, t); + tmp = format_expand_time(ft, input); free(c->prompt_string); - c->prompt_string = format_expand_time(ft, msg, t); + c->prompt_string = format_expand_time(ft, msg); free(c->prompt_buffer); c->prompt_buffer = utf8_fromcstr(tmp); diff --git a/tmux.h b/tmux.h index 87873bf666..95e59e36f0 100644 --- a/tmux.h +++ b/tmux.h @@ -1585,7 +1585,7 @@ struct format_tree *format_create(struct client *, struct cmdq_item *, int, void format_free(struct format_tree *); void printflike(3, 4) format_add(struct format_tree *, const char *, const char *, ...); -char *format_expand_time(struct format_tree *, const char *, time_t); +char *format_expand_time(struct format_tree *, const char *); char *format_expand(struct format_tree *, const char *); char *format_single(struct cmdq_item *, const char *, struct client *, struct session *, struct winlink *, From 25e2e227913095c79d3c043da84db254c51f9c8c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Mar 2019 23:34:41 +0000 Subject: [PATCH 338/836] Add a limit on how far format_expand can recurse. --- format.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/format.c b/format.c index 369c0a6d7f..482248618f 100644 --- a/format.c +++ b/format.c @@ -100,6 +100,9 @@ format_job_cmp(struct format_job *fj1, struct format_job *fj2) #define FORMAT_WINDOWS 0x100 #define FORMAT_PANES 0x200 +/* Limit on recursion. */ +#define FORMAT_LOOP_LIMIT 10 + /* Entry in format tree. */ struct format_entry { char *key; @@ -122,6 +125,7 @@ struct format_tree { u_int tag; int flags; time_t time; + u_int loop; RB_HEAD(format_entry_tree, format_entry) tree; }; @@ -1512,6 +1516,10 @@ format_expand(struct format_tree *ft, const char *fmt) if (fmt == NULL) return (xstrdup("")); + if (ft->loop == FORMAT_LOOP_LIMIT) + return (xstrdup("")); + ft->loop++; + len = 64; buf = xmalloc(len); off = 0; @@ -1606,6 +1614,8 @@ format_expand(struct format_tree *ft, const char *fmt) buf[off] = '\0'; log_debug("%s: '%s' -> '%s'", __func__, saved, buf); + + ft->loop--; return (buf); } From 27578815dace7addeaaf15227aa102705046f843 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 10:04:13 +0000 Subject: [PATCH 339/836] Add a -v flag to display-message to show verbose messages as the format is parsed, this gives the user a way to debug problems with formats rather than just being confronted with (for example) a blank status line. --- cmd-display-message.c | 11 ++- format.c | 184 +++++++++++++++++++++++++++++++----------- tmux.1 | 6 +- tmux.h | 1 + 4 files changed, 151 insertions(+), 51 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index c55cf1e214..07cd12a889 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_display_message_entry = { .name = "display-message", .alias = "display", - .args = { "c:pt:F:", 0, 1 }, - .usage = "[-p] [-c target-client] [-F format] " + .args = { "c:pt:F:v", 0, 1 }, + .usage = "[-pv] [-c target-client] [-F format] " CMD_TARGET_PANE_USAGE " [message]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -60,6 +60,7 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) const char *template; char *msg; struct format_tree *ft; + int flags; if (args_has(args, 'F') && args->argc != 0) { cmdq_error(item, "only one of -F or argument must be given"); @@ -83,7 +84,11 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) target_c = c; else target_c = cmd_find_best_client(s); - ft = format_create(item->client, item, FORMAT_NONE, 0); + if (args_has(self->args, 'v')) + flags = FORMAT_VERBOSE; + else + flags = 0; + ft = format_create(item->client, item, FORMAT_NONE, flags); format_defaults(ft, target_c, s, wl, wp); msg = format_expand_time(ft, template); diff --git a/format.c b/format.c index 482248618f..d15faefceb 100644 --- a/format.c +++ b/format.c @@ -208,6 +208,36 @@ static const char *format_lower[] = { NULL /* z */ }; +/* Is logging enabled? */ +static inline int +format_logging(struct format_tree *ft) +{ + return (log_get_level() != 0 || (ft->flags & FORMAT_VERBOSE)); +} + +/* Log a message if verbose. */ +static void printflike(3, 4) +format_log1(struct format_tree *ft, const char *from, const char *fmt, ...) +{ + va_list ap; + char *s; + static const char spaces[] = " "; + + if (!format_logging(ft)) + return; + + va_start(ap, fmt); + vasprintf(&s, fmt, ap); + va_end(ap); + + log_debug("%s: %s", from, s); + if (ft->item != NULL) + cmdq_print(ft->item, "#%.*s%s", ft->loop, spaces, s); + + free(s); +} +#define format_log(ft, fmt, ...) format_log1(ft, __func__, fmt, ##__VA_ARGS__) + /* Format job update callback. */ static void format_job_update(struct job *job) @@ -1153,6 +1183,7 @@ format_loop_sessions(struct format_tree *ft, const char *fmt) valuelen = 1; RB_FOREACH(s, sessions, &sessions) { + format_log(ft, "session loop: $%u", s->id); expanded = format_single(item, fmt, ft->c, ft->s, NULL, NULL); valuelen += strlen(expanded); @@ -1174,8 +1205,10 @@ format_loop_windows(struct format_tree *ft, const char *fmt) size_t valuelen; struct winlink *wl; - if (ft->s == NULL) + if (ft->s == NULL) { + format_log(ft, "window loop but no session"); return (NULL); + } if (format_choose(ft, fmt, &all, &active, 0) != 0) { all = xstrdup(fmt); @@ -1186,6 +1219,7 @@ format_loop_windows(struct format_tree *ft, const char *fmt) valuelen = 1; RB_FOREACH(wl, winlinks, &ft->s->windows) { + format_log(ft, "window loop: %u @%u", wl->idx, wl->window->id); if (active != NULL && wl == ft->s->curw) use = active; else @@ -1214,8 +1248,10 @@ format_loop_panes(struct format_tree *ft, const char *fmt) size_t valuelen; struct window_pane *wp; - if (ft->w == NULL) + if (ft->w == NULL) { + format_log(ft, "pane loop but no window"); return (NULL); + } if (format_choose(ft, fmt, &all, &active, 0) != 0) { all = xstrdup(fmt); @@ -1226,6 +1262,7 @@ format_loop_panes(struct format_tree *ft, const char *fmt) valuelen = 1; TAILQ_FOREACH(wp, &ft->w->panes, entry) { + format_log(ft, "pane loop: %%%u", wp->id); if (active != NULL && wp == ft->w->active) use = active; else @@ -1254,25 +1291,27 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, const char *errptr, *copy, *cp; char *copy0, *condition, *found, *new; char *value, *left, *right; - char tmp[64]; size_t valuelen; int modifiers = 0, limit = 0; struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; struct format_modifier *sub = NULL; u_int i, count; + int j; /* Make a copy of the key. */ copy = copy0 = xstrndup(key, keylen); - log_debug("%s: format = '%s'", __func__, copy); /* Process modifier list. */ list = format_build_modifiers(ft, ©, &count); for (i = 0; i < count; i++) { - xsnprintf(tmp, sizeof tmp, "%s: modifier %u", __func__, i); - log_debug("%s = %s", tmp, list[i].modifier); - cmd_log_argv(list[i].argc, list[i].argv, tmp); - fm = &list[i]; + if (format_logging(ft)) { + format_log(ft, "modifier %u is %s", i, fm->modifier); + for (j = 0; j < fm->argc; j++) { + format_log(ft, "modifier %u argument %d: %s", i, + j, fm->argv[j]); + } + } if (fm->size == 1) { switch (fm->modifier[0]) { case 'm': @@ -1355,14 +1394,22 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, goto fail; } else if (search != NULL) { /* Search in pane. */ - if (wp == NULL) + if (wp == NULL) { + format_log(ft, "search '%s' but no pane", copy); value = xstrdup("0"); - else + } else { + format_log(ft, "search '%s' pane %%%u", copy, wp->id); xasprintf(&value, "%u", window_pane_search(wp, copy)); + } } else if (cmp != NULL) { /* Comparison of left and right. */ - if (format_choose(ft, copy, &left, &right, 1) != 0) + if (format_choose(ft, copy, &left, &right, 1) != 0) { + format_log(ft, "compare %s syntax error: %s", + cmp->modifier, copy); goto fail; + } + format_log(ft, "compare %s left is: %s", cmp->modifier, left); + format_log(ft, "compare %s right is: %s", cmp->modifier, right); if (strcmp(cmp->modifier, "||") == 0) { if (format_true(left) || format_true(right)) @@ -1397,9 +1444,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, } else if (*copy == '?') { /* Conditional: check first and choose second or third. */ cp = format_skip(copy + 1, ","); - if (cp == NULL) + if (cp == NULL) { + format_log(ft, "condition syntax error: %s", copy + 1); goto fail; + } condition = xstrndup(copy + 1, cp - (copy + 1)); + format_log(ft, "condition is: %s", condition); found = format_find(ft, condition, modifiers); if (found == NULL) { @@ -1412,27 +1462,42 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, if (strcmp(found, condition) == 0) { free(found); found = xstrdup(""); + format_log(ft, "condition '%s' found: %s", + condition, found); + } else { + format_log(ft, + "condition '%s' not found; assuming false", + condition); } - } - free(condition); + } else + format_log(ft, "condition '%s' found", condition); if (format_choose(ft, cp + 1, &left, &right, 0) != 0) { + format_log(ft, "condition '%s' syntax error: %s", + condition, cp + 1); free(found); goto fail; } - if (format_true(found)) + if (format_true(found)) { + format_log(ft, "condition '%s' is true", condition); value = format_expand(ft, left); - else + } else { + format_log(ft, "condition '%s' is false", condition); value = format_expand(ft, right); + } free(right); free(left); + free(condition); free(found); } else { /* Neither: look up directly. */ value = format_find(ft, copy, modifiers); - if (value == NULL) + if (value == NULL) { + format_log(ft, "format '%s' not found", copy); value = xstrdup(""); + } else + format_log(ft, "format '%s' found: %s", copy, value); } done: @@ -1451,6 +1516,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Perform substitution if any. */ if (sub != NULL) { new = format_substitute(value, sub->argv[0], sub->argv[1]); + format_log(ft, "substituted '%s' to '%s: %s", sub->argv[0], + sub->argv[1], new); free(value); value = new; } @@ -1458,16 +1525,17 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Truncate the value if needed. */ if (limit > 0) { new = utf8_trimcstr(value, limit); + format_log(ft, "applied length limit %d: %s", limit, new); free(value); value = new; } else if (limit < 0) { new = utf8_rtrimcstr(value, -limit); + format_log(ft, "applied length limit %d: %s", limit, new); free(value); value = new; } /* Expand the buffer and copy in the value. */ - log_debug("%s: '%s' -> '%s'", __func__, copy0, value); valuelen = strlen(value); while (*len - *off < valuelen + 1) { *buf = xreallocarray(*buf, 2, *len); @@ -1476,50 +1544,51 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, memcpy(*buf + *off, value, valuelen); *off += valuelen; + format_log(ft, "replaced '%s' with '%s'", copy0, value); free(value); + format_free_modifiers(list, count); free(copy0); return (0); fail: + format_log(ft, "failed %s", copy0); format_free_modifiers(list, count); free(copy0); return (-1); } -/* Expand keys in a template, passing through strftime first. */ -char * -format_expand_time(struct format_tree *ft, const char *fmt) -{ - struct tm *tm; - char s[2048]; - - if (fmt == NULL || *fmt == '\0') - return (xstrdup("")); - - tm = localtime(&ft->time); - if (strftime(s, sizeof s, fmt, tm) == 0) - return (xstrdup("")); - - return (format_expand(ft, s)); -} - /* Expand keys in a template. */ -char * -format_expand(struct format_tree *ft, const char *fmt) +static char * +format_expand1(struct format_tree *ft, const char *fmt, int time) { char *buf, *out, *name; - const char *ptr, *s, *saved = fmt; + const char *ptr, *s; size_t off, len, n, outlen; int ch, brackets; + struct tm *tm; + char expanded[8192]; - if (fmt == NULL) + if (fmt == NULL || *fmt == '\0') return (xstrdup("")); if (ft->loop == FORMAT_LOOP_LIMIT) return (xstrdup("")); ft->loop++; + format_log(ft, "expanding format: %s", fmt); + + if (time) { + tm = localtime(&ft->time); + if (strftime(expanded, sizeof expanded, fmt, tm) == 0) { + format_log(ft, "format is too long"); + return (xstrdup("")); + } + if (format_logging(ft) && strcmp(expanded, fmt) != 0) + format_log(ft, "after time expanded: %s", expanded); + fmt = expanded; + } + len = 64; buf = xmalloc(len); off = 0; @@ -1535,7 +1604,7 @@ format_expand(struct format_tree *ft, const char *fmt) } fmt++; - ch = (u_char) *fmt++; + ch = (u_char)*fmt++; switch (ch) { case '(': brackets = 1; @@ -1549,15 +1618,19 @@ format_expand(struct format_tree *ft, const char *fmt) break; n = ptr - fmt; - if (ft->flags & FORMAT_NOJOBS) + name = xstrndup(fmt, n); + format_log(ft, "found #(): %s", name); + + if (ft->flags & FORMAT_NOJOBS) { out = xstrdup(""); - else { - name = xstrndup(fmt, n); + format_log(ft, "#() is disabled"); + } else { out = format_job_get(ft, name); - free(name); + format_log(ft, "#() result: %s", out); } - outlen = strlen(out); + free(name); + outlen = strlen(out); while (len - off < outlen + 1) { buf = xreallocarray(buf, 2, len); len *= 2; @@ -1575,6 +1648,7 @@ format_expand(struct format_tree *ft, const char *fmt) break; n = ptr - fmt; + format_log(ft, "found #{}: %.*s", (int)n, fmt); if (format_replace(ft, fmt, n, &buf, &len, &off) != 0) break; fmt += n + 1; @@ -1582,6 +1656,7 @@ format_expand(struct format_tree *ft, const char *fmt) case '}': case '#': case ',': + format_log(ft, "found #%c", ch); while (len - off < 2) { buf = xreallocarray(buf, 2, len); len *= 2; @@ -1604,6 +1679,7 @@ format_expand(struct format_tree *ft, const char *fmt) continue; } n = strlen(s); + format_log(ft, "found #%c: %s", ch, s); if (format_replace(ft, s, n, &buf, &len, &off) != 0) break; continue; @@ -1613,12 +1689,26 @@ format_expand(struct format_tree *ft, const char *fmt) } buf[off] = '\0'; - log_debug("%s: '%s' -> '%s'", __func__, saved, buf); - + format_log(ft, "result is: %s", buf); ft->loop--; + return (buf); } +/* Expand keys in a template, passing through strftime first. */ +char * +format_expand_time(struct format_tree *ft, const char *fmt) +{ + return (format_expand1(ft, fmt, 1)); +} + +/* Expand keys in a template. */ +char * +format_expand(struct format_tree *ft, const char *fmt) +{ + return (format_expand1(ft, fmt, 0)); +} + /* Expand a single string. */ char * format_single(struct cmdq_item *item, const char *fmt, struct client *c, diff --git a/tmux.1 b/tmux.1 index 91c60f8e00..4a4b18fa45 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4174,7 +4174,7 @@ option. This command works only from inside .Nm . .It Xo Ic display-message -.Op Fl p +.Op Fl pv .Op Fl c Ar target-client .Op Fl t Ar target-pane .Op Ar message @@ -4196,6 +4196,10 @@ if .Fl t is given, otherwise the active pane for the session attached to .Ar target-client . +.Pp +With +.Fl v , +verbose logging is printed as the format is parsed. .El .Sh BUFFERS .Nm diff --git a/tmux.h b/tmux.h index 95e59e36f0..d6264357c4 100644 --- a/tmux.h +++ b/tmux.h @@ -1575,6 +1575,7 @@ char *paste_make_sample(struct paste_buffer *); #define FORMAT_STATUS 0x1 #define FORMAT_FORCE 0x2 #define FORMAT_NOJOBS 0x4 +#define FORMAT_VERBOSE 0x8 #define FORMAT_NONE 0 #define FORMAT_PANE 0x80000000U #define FORMAT_WINDOW 0x40000000U From 672c49d5129e130c21a019f989594f02af99e967 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 10:07:24 +0000 Subject: [PATCH 340/836] The pane and window loops need to pass the window and pane tags when they build their format. --- format.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/format.c b/format.c index d15faefceb..93c11651a9 100644 --- a/format.c +++ b/format.c @@ -132,7 +132,7 @@ struct format_tree { static int format_entry_cmp(struct format_entry *, struct format_entry *); RB_GENERATE_STATIC(format_entry_tree, format_entry, entry, format_entry_cmp); -/* Format modifiers. */ +/* Format modifier. */ struct format_modifier { char modifier[3]; u_int size; @@ -1174,7 +1174,9 @@ format_substitute(const char *source, const char *from, const char *to) static char * format_loop_sessions(struct format_tree *ft, const char *fmt) { + struct client *c = ft->client; struct cmdq_item *item = ft->item; + struct format_tree *nft; char *expanded, *value; size_t valuelen; struct session *s; @@ -1184,7 +1186,10 @@ format_loop_sessions(struct format_tree *ft, const char *fmt) RB_FOREACH(s, sessions, &sessions) { format_log(ft, "session loop: $%u", s->id); - expanded = format_single(item, fmt, ft->c, ft->s, NULL, NULL); + nft = format_create(c, item, FORMAT_NONE, ft->flags); + format_defaults(nft, ft->c, s, NULL, NULL); + expanded = format_expand(nft, fmt); + format_free(nft); valuelen += strlen(expanded); value = xrealloc(value, valuelen); @@ -1200,10 +1205,13 @@ format_loop_sessions(struct format_tree *ft, const char *fmt) static char * format_loop_windows(struct format_tree *ft, const char *fmt) { + struct client *c = ft->client; struct cmdq_item *item = ft->item; + struct format_tree *nft; char *all, *active, *use, *expanded, *value; size_t valuelen; struct winlink *wl; + struct window *w; if (ft->s == NULL) { format_log(ft, "window loop but no session"); @@ -1219,12 +1227,16 @@ format_loop_windows(struct format_tree *ft, const char *fmt) valuelen = 1; RB_FOREACH(wl, winlinks, &ft->s->windows) { - format_log(ft, "window loop: %u @%u", wl->idx, wl->window->id); + w = wl->window; + format_log(ft, "window loop: %u @%u", wl->idx, w->id); if (active != NULL && wl == ft->s->curw) use = active; else use = all; - expanded = format_single(item, use, ft->c, ft->s, wl, NULL); + nft = format_create(c, item, FORMAT_WINDOW|w->id, ft->flags); + format_defaults(nft, ft->c, ft->s, wl, NULL); + expanded = format_expand(nft, use); + format_free(nft); valuelen += strlen(expanded); value = xrealloc(value, valuelen); @@ -1243,7 +1255,9 @@ format_loop_windows(struct format_tree *ft, const char *fmt) static char * format_loop_panes(struct format_tree *ft, const char *fmt) { + struct client *c = ft->client; struct cmdq_item *item = ft->item; + struct format_tree *nft; char *all, *active, *use, *expanded, *value; size_t valuelen; struct window_pane *wp; @@ -1267,7 +1281,10 @@ format_loop_panes(struct format_tree *ft, const char *fmt) use = active; else use = all; - expanded = format_single(item, use, ft->c, ft->s, ft->wl, wp); + nft = format_create(c, item, FORMAT_PANE|wp->id, ft->flags); + format_defaults(nft, ft->c, ft->s, ft->wl, wp); + expanded = format_expand(nft, use); + format_free(nft); valuelen += strlen(expanded); value = xrealloc(value, valuelen); From f6d34f066cd872a981196027477a749f58849a02 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 10:22:57 +0000 Subject: [PATCH 341/836] Only print format logging when the flag is set, even if also sending to log_debug. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index 93c11651a9..d1df2b54f4 100644 --- a/format.c +++ b/format.c @@ -231,7 +231,7 @@ format_log1(struct format_tree *ft, const char *from, const char *fmt, ...) va_end(ap); log_debug("%s: %s", from, s); - if (ft->item != NULL) + if (ft->item != NULL && (ft->flags & FORMAT_VERBOSE)) cmdq_print(ft->item, "#%.*s%s", ft->loop, spaces, s); free(s); From 2d71bef0ca3d0c31975f70118f632fe30393b059 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 10:48:05 +0000 Subject: [PATCH 342/836] Remove unused member of struct client. --- tmux.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/tmux.h b/tmux.h index d6264357c4..eb55a588d6 100644 --- a/tmux.h +++ b/tmux.h @@ -1434,8 +1434,6 @@ struct client { struct session *session; struct session *last_session; - int wlmouse; - int references; void *pan_window; From 85044a634bbcd660ae4b7c9ff4aed7e3891af5d4 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 14:46:58 +0000 Subject: [PATCH 343/836] Move status line free into its own function. --- server-client.c | 8 +------- status.c | 18 +++++++++++++++++- tmux.h | 1 + 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/server-client.c b/server-client.c index ba24034b47..b436267d00 100644 --- a/server-client.c +++ b/server-client.c @@ -281,13 +281,7 @@ server_client_lost(struct client *c) if (c->stderr_data != c->stdout_data) evbuffer_free(c->stderr_data); - if (event_initialized(&c->status.timer)) - evtimer_del(&c->status.timer); - screen_free(&c->status.status); - if (c->status.old_status != NULL) { - screen_free(c->status.old_status); - free(c->status.old_status); - } + status_free(c); free(c->title); free((void *)c->cwd); diff --git a/status.c b/status.c index bd639d79ac..65579a2660 100644 --- a/status.c +++ b/status.c @@ -296,7 +296,23 @@ status_get_window_at(struct client *c, u_int x) return (NULL); } -/* Draw status for client on the last lines of given context. */ +/* Free status line. */ +void +status_free(struct client *c) +{ + struct status_line *sl = &c->status; + + if (event_initialized(&sl->timer)) + evtimer_del(&sl->timer); + + screen_free(&sl->status); + if (sl->old_status != NULL) { + screen_free(sl->old_status); + free(sl->old_status); + } +} + +/* Draw status line for client. */ int status_redraw(struct client *c) { diff --git a/tmux.h b/tmux.h index eb55a588d6..26f11e238f 100644 --- a/tmux.h +++ b/tmux.h @@ -1970,6 +1970,7 @@ void status_update_saved(struct session *); int status_at_line(struct client *); u_int status_line_size(struct client *); struct window *status_get_window_at(struct client *, u_int); +void status_free(struct client *); int status_redraw(struct client *); void printflike(2, 3) status_message_set(struct client *, const char *, ...); void status_message_clear(struct client *); From 33595a255f8af5d368a1897d09cb23171aa302ef Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 15:02:25 +0000 Subject: [PATCH 344/836] Copy recursion counter into new formats when looping. --- format.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/format.c b/format.c index d1df2b54f4..bcc31d3c64 100644 --- a/format.c +++ b/format.c @@ -1187,6 +1187,7 @@ format_loop_sessions(struct format_tree *ft, const char *fmt) RB_FOREACH(s, sessions, &sessions) { format_log(ft, "session loop: $%u", s->id); nft = format_create(c, item, FORMAT_NONE, ft->flags); + nft->loop = ft->loop; format_defaults(nft, ft->c, s, NULL, NULL); expanded = format_expand(nft, fmt); format_free(nft); @@ -1234,6 +1235,7 @@ format_loop_windows(struct format_tree *ft, const char *fmt) else use = all; nft = format_create(c, item, FORMAT_WINDOW|w->id, ft->flags); + nft->loop = ft->loop; format_defaults(nft, ft->c, ft->s, wl, NULL); expanded = format_expand(nft, use); format_free(nft); @@ -1282,6 +1284,7 @@ format_loop_panes(struct format_tree *ft, const char *fmt) else use = all; nft = format_create(c, item, FORMAT_PANE|wp->id, ft->flags); + nft->loop = ft->loop; format_defaults(nft, ft->c, ft->s, ft->wl, wp); expanded = format_expand(nft, use); format_free(nft); From 1d306e926a9f0cc6ab93f30857a8ca6d145ede83 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 15:20:00 +0000 Subject: [PATCH 345/836] Add a : to make error messages clearer. --- cmd-find.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 2711c26b6b..2fa53b9c7a 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -1264,17 +1264,17 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, no_session: if (~flags & CMD_FIND_QUIET) - cmdq_error(item, "can't find session %s", session); + cmdq_error(item, "can't find session: %s", session); goto error; no_window: if (~flags & CMD_FIND_QUIET) - cmdq_error(item, "can't find window %s", window); + cmdq_error(item, "can't find window: %s", window); goto error; no_pane: if (~flags & CMD_FIND_QUIET) - cmdq_error(item, "can't find pane %s", pane); + cmdq_error(item, "can't find pane: %s", pane); goto error; } @@ -1344,7 +1344,7 @@ cmd_find_client(struct cmdq_item *item, const char *target, int quiet) /* If no client found, report an error. */ if (c == NULL && !quiet) - cmdq_error(item, "can't find client %s", copy); + cmdq_error(item, "can't find client: %s", copy); free(copy); log_debug("%s: target %s, return %p", __func__, target, c); From e8b33af780d8b9622de422cbcd4f82a47ccd0c6e Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Mar 2019 21:54:47 +0000 Subject: [PATCH 346/836] Add a way to set individual defaults for an array option. --- options.c | 13 +++++++++---- tmux.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/options.c b/options.c index 08d9275fc2..9ea5c118d4 100644 --- a/options.c +++ b/options.c @@ -169,12 +169,17 @@ options_empty(struct options *oo, const struct options_table_entry *oe) struct options_entry * options_default(struct options *oo, const struct options_table_entry *oe) { - struct options_entry *o; + struct options_entry *o; + u_int i; o = options_empty(oo, oe); - if (oe->type == OPTIONS_TABLE_ARRAY) - options_array_assign(o, oe->default_str); - else if (oe->type == OPTIONS_TABLE_STRING) + if (oe->type == OPTIONS_TABLE_ARRAY) { + if (oe->default_arr != NULL) { + for (i = 0; oe->default_arr[i] != NULL; i++) + options_array_set(o, i, oe->default_arr[i], 0); + } else + options_array_assign(o, oe->default_str); + } else if (oe->type == OPTIONS_TABLE_STRING) o->string = xstrdup(oe->default_str); else if (oe->type == OPTIONS_TABLE_STYLE) { style_set(&o->style, &grid_default_cell); diff --git a/tmux.h b/tmux.h index 26f11e238f..4b16eb832d 100644 --- a/tmux.h +++ b/tmux.h @@ -1497,6 +1497,7 @@ struct options_table_entry { const char *default_str; long long default_num; + const char **default_arr; const char *separator; const char *style; From b4f5b99e4b3c6b266e53c6c4ff748320a197011d Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 16 Mar 2019 17:14:07 +0000 Subject: [PATCH 347/836] Tidy and rename some bits of status line code. --- cmd-set-option.c | 2 +- resize.c | 2 +- screen-redraw.c | 2 +- server-client.c | 2 +- session.c | 2 +- status.c | 111 +++++++++++++++++++++++++++-------------------- tmux.h | 7 +-- window-client.c | 6 +-- 8 files changed, 77 insertions(+), 57 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index c4b82004de..a55472cae9 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -264,7 +264,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) layout_fix_panes(w); } RB_FOREACH(s, sessions, &sessions) - status_update_saved(s); + status_update_cache(s); /* * Update sizes and redraw. May not always be necessary but do it diff --git a/resize.c b/resize.c index 3726298fbb..868ddac817 100644 --- a/resize.c +++ b/resize.c @@ -162,7 +162,7 @@ recalculate_sizes(void) */ RB_FOREACH(s, sessions, &sessions) { s->attached = 0; - status_update_saved(s); + status_update_cache(s); } /* diff --git a/screen-redraw.c b/screen-redraw.c index 0c53763082..e8a62ea5e1 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -569,7 +569,7 @@ screen_redraw_draw_status(struct screen_redraw_ctx *ctx) struct client *c = ctx->c; struct window *w = c->session->curw->window; struct tty *tty = &c->tty; - struct screen *s = &c->status.status; + struct screen *s = &c->status.screen; u_int i, y; log_debug("%s: %s @%u", __func__, c->name, w->id); diff --git a/server-client.c b/server-client.c index b436267d00..fe79163f65 100644 --- a/server-client.c +++ b/server-client.c @@ -204,7 +204,7 @@ server_client_create(int fd) c->tty.sx = 80; c->tty.sy = 24; - screen_init(&c->status.status, c->tty.sx, 1, 0); + status_init(c); c->message_string = NULL; TAILQ_INIT(&c->message_log); diff --git a/session.c b/session.c index 061ff4998e..43ca321a7e 100644 --- a/session.c +++ b/session.c @@ -136,7 +136,7 @@ session_create(const char *prefix, const char *name, int argc, char **argv, s->options = oo; s->hooks = hooks_create(global_hooks); - status_update_saved(s); + status_update_cache(s); s->tio = NULL; if (tio != NULL) { diff --git a/status.c b/status.c index 65579a2660..3065415daa 100644 --- a/status.c +++ b/status.c @@ -194,7 +194,7 @@ status_timer_start_all(void) /* Update status cache. */ void -status_update_saved(struct session *s) +status_update_cache(struct session *s) { if (!options_get_number(s->options, "status")) s->statusat = -1; @@ -296,6 +296,15 @@ status_get_window_at(struct client *c, u_int x) return (NULL); } +/* Initialize status line. */ +void +status_init(struct client *c) +{ + struct status_line *sl = &c->status; + + screen_init(&sl->screen, c->tty.sx, 1, 0); +} + /* Free status line. */ void status_free(struct client *c) @@ -305,10 +314,31 @@ status_free(struct client *c) if (event_initialized(&sl->timer)) evtimer_del(&sl->timer); - screen_free(&sl->status); - if (sl->old_status != NULL) { - screen_free(sl->old_status); - free(sl->old_status); + screen_free(&sl->screen); + if (sl->old_screen != NULL) { + screen_free(sl->old_screen); + free(sl->old_screen); + } +} + +/* Save as old status line. */ +static void +status_save_old(struct status_line *sl) +{ + if (sl->old_screen == NULL) { + sl->old_screen = xmalloc(sizeof *sl->old_screen); + memcpy(sl->old_screen, &sl->screen, sizeof *sl->old_screen); + } +} + +/* Free old status line. */ +static void +status_free_old(struct status_line *sl) +{ + if (sl->old_screen != NULL) { + screen_free(sl->old_screen); + free(sl->old_screen); + sl->old_screen = NULL; } } @@ -316,10 +346,11 @@ status_free(struct client *c) int status_redraw(struct client *c) { + struct status_line *sl = &c->status; struct screen_write_ctx ctx; struct session *s = c->session; struct winlink *wl; - struct screen old_status, window_list; + struct screen old_screen, window_list; struct grid_cell stdgc, lgc, rgc, gc; struct options *oo; char *left, *right; @@ -330,11 +361,7 @@ status_redraw(struct client *c) int larrow, rarrow; /* Delete the saved status line, if any. */ - if (c->status.old_status != NULL) { - screen_free(c->status.old_status); - free(c->status.old_status); - c->status.old_status = NULL; - } + status_free_old(sl); /* No status line? */ lines = status_line_size(c); @@ -347,9 +374,9 @@ status_redraw(struct client *c) style_apply(&stdgc, s->options, "status-style"); /* Create the target screen. */ - memcpy(&old_status, &c->status.status, sizeof old_status); - screen_init(&c->status.status, c->tty.sx, lines, 0); - screen_write_start(&ctx, NULL, &c->status.status); + memcpy(&old_screen, &sl->screen, sizeof old_screen); + screen_init(&sl->screen, c->tty.sx, lines, 0); + screen_write_start(&ctx, NULL, &sl->screen); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &stdgc, ' '); screen_write_stop(&ctx); @@ -472,7 +499,7 @@ status_redraw(struct client *c) draw: /* Begin drawing. */ - screen_write_start(&ctx, NULL, &c->status.status); + screen_write_start(&ctx, NULL, &sl->screen); /* Draw the left string and arrow. */ screen_write_cursormove(&ctx, 0, 0, 0); @@ -516,14 +543,14 @@ status_redraw(struct client *c) wloffset++; /* Copy the window list. */ - c->status.window_list_offset = -wloffset + wlstart; + sl->window_list_offset = -wloffset + wlstart; screen_write_cursormove(&ctx, wloffset, 0, 0); screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); screen_free(&window_list); /* Save left and right size. */ - c->status.left_size = llen; - c->status.right_size = rlen; + sl->left_size = llen; + sl->right_size = rlen; screen_write_stop(&ctx); @@ -531,11 +558,11 @@ status_redraw(struct client *c) free(left); free(right); - if (grid_compare(c->status.status.grid, old_status.grid) == 0) { - screen_free(&old_status); + if (grid_compare(sl->screen.grid, old_screen.grid) == 0) { + screen_free(&old_screen); return (0); } - screen_free(&old_status); + screen_free(&old_screen); return (1); } @@ -603,12 +630,8 @@ status_message_set(struct client *c, const char *fmt, ...) status_message_clear(c); - if (c->status.old_status == NULL) { - c->status.old_status = xmalloc(sizeof *c->status.old_status); - memcpy(c->status.old_status, &c->status.status, - sizeof *c->status.old_status); - screen_init(&c->status.status, c->tty.sx, 1, 0); - } + status_save_old(&c->status); + screen_init(&c->status.screen, c->tty.sx, 1, 0); va_start(ap, fmt); xvasprintf(&c->message_string, fmt, ap); @@ -645,7 +668,7 @@ status_message_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ - screen_reinit(&c->status.status); + screen_reinit(&c->status.screen); } /* Clear status line message after timer expires. */ @@ -670,14 +693,14 @@ status_message_redraw(struct client *c) if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status.status, sizeof old_status); + memcpy(&old_status, &c->status.screen, sizeof old_status); lines = status_line_size(c); if (lines <= 1) { lines = 1; - screen_init(&c->status.status, c->tty.sx, 1, 0); + screen_init(&c->status.screen, c->tty.sx, 1, 0); } else - screen_init(&c->status.status, c->tty.sx, lines, 0); + screen_init(&c->status.screen, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->message_string); if (len > c->tty.sx) @@ -685,7 +708,7 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); - screen_write_start(&ctx, NULL, &c->status.status); + screen_write_start(&ctx, NULL, &c->status.screen); screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -693,7 +716,7 @@ status_message_redraw(struct client *c) screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); screen_write_stop(&ctx); - if (grid_compare(c->status.status.grid, old_status.grid) == 0) { + if (grid_compare(c->status.screen.grid, old_status.grid) == 0) { screen_free(&old_status); return (0); } @@ -722,12 +745,8 @@ status_prompt_set(struct client *c, const char *msg, const char *input, status_message_clear(c); status_prompt_clear(c); - if (c->status.old_status == NULL) { - c->status.old_status = xmalloc(sizeof *c->status.old_status); - memcpy(c->status.old_status, &c->status.status, - sizeof *c->status.old_status); - screen_init(&c->status.status, c->tty.sx, 1, 0); - } + status_save_old(&c->status); + screen_init(&c->status.screen, c->tty.sx, 1, 0); c->prompt_string = format_expand_time(ft, msg); @@ -779,7 +798,7 @@ status_prompt_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ - screen_reinit(&c->status.status); + screen_reinit(&c->status.screen); } /* Update status line prompt with a new prompt string. */ @@ -822,14 +841,14 @@ status_prompt_redraw(struct client *c) if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status.status, sizeof old_status); + memcpy(&old_status, &c->status.screen, sizeof old_status); lines = status_line_size(c); if (lines <= 1) { lines = 1; - screen_init(&c->status.status, c->tty.sx, 1, 0); + screen_init(&c->status.screen, c->tty.sx, 1, 0); } else - screen_init(&c->status.status, c->tty.sx, lines, 0); + screen_init(&c->status.screen, c->tty.sx, lines, 0); if (c->prompt_mode == PROMPT_COMMAND) style_apply(&gc, s->options, "message-command-style"); @@ -843,7 +862,7 @@ status_prompt_redraw(struct client *c) if (start > c->tty.sx) start = c->tty.sx; - screen_write_start(&ctx, NULL, &c->status.status); + screen_write_start(&ctx, NULL, &c->status.screen); screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -889,14 +908,14 @@ status_prompt_redraw(struct client *c) screen_write_cell(&ctx, &cursorgc); } } - if (c->status.status.cx < screen_size_x(&c->status.status) && + if (c->status.screen.cx < screen_size_x(&c->status.screen) && c->prompt_index >= i) screen_write_putc(&ctx, &cursorgc, ' '); finished: screen_write_stop(&ctx); - if (grid_compare(c->status.status.grid, old_status.grid) == 0) { + if (grid_compare(c->status.screen.grid, old_status.grid) == 0) { screen_free(&old_status); return (0); } diff --git a/tmux.h b/tmux.h index 4b16eb832d..3b0f7d5bd3 100644 --- a/tmux.h +++ b/tmux.h @@ -1314,8 +1314,8 @@ struct cmd_entry { struct status_line { struct event timer; - struct screen status; - struct screen *old_status; + struct screen screen; + struct screen *old_screen; int window_list_offset; @@ -1967,10 +1967,11 @@ 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 *); +void status_update_cache(struct session *); int status_at_line(struct client *); u_int status_line_size(struct client *); struct window *status_get_window_at(struct client *, u_int); +void status_init(struct client *); void status_free(struct client *); int status_redraw(struct client *); void printflike(2, 3) status_message_set(struct client *, const char *, ...); diff --git a/window-client.c b/window-client.c index f86d8676dc..2e9771849a 100644 --- a/window-client.c +++ b/window-client.c @@ -229,10 +229,10 @@ window_client_draw(__unused void *modedata, void *itemdata, screen_write_hline(ctx, sx, 0, 0); screen_write_cursormove(ctx, cx, cy + sy - 1, 0); - if (c->status.old_status != NULL) - screen_write_fast_copy(ctx, c->status.old_status, 0, 0, sx, 1); + if (c->status.old_screen != NULL) + screen_write_fast_copy(ctx, c->status.old_screen, 0, 0, sx, 1); else - screen_write_fast_copy(ctx, &c->status.status, 0, 0, sx, 1); + screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, 1); } static struct screen * From 818fda03638e5001209886ddcd12b401c23dffae Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 16 Mar 2019 17:53:55 +0000 Subject: [PATCH 348/836] Give status_save_old the client so it can do the reinit too. --- status.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/status.c b/status.c index 3065415daa..fc9fbe3fc1 100644 --- a/status.c +++ b/status.c @@ -323,18 +323,23 @@ status_free(struct client *c) /* Save as old status line. */ static void -status_save_old(struct status_line *sl) +status_save_old(struct client *c) { + struct status_line *sl = &c->status; + if (sl->old_screen == NULL) { sl->old_screen = xmalloc(sizeof *sl->old_screen); memcpy(sl->old_screen, &sl->screen, sizeof *sl->old_screen); + screen_init(&c->status.screen, c->tty.sx, 1, 0); } } /* Free old status line. */ static void -status_free_old(struct status_line *sl) +status_free_old(struct client *c) { + struct status_line *sl = &c->status; + if (sl->old_screen != NULL) { screen_free(sl->old_screen); free(sl->old_screen); @@ -361,7 +366,7 @@ status_redraw(struct client *c) int larrow, rarrow; /* Delete the saved status line, if any. */ - status_free_old(sl); + status_free_old(c); /* No status line? */ lines = status_line_size(c); @@ -629,9 +634,7 @@ status_message_set(struct client *c, const char *fmt, ...) int delay; status_message_clear(c); - - status_save_old(&c->status); - screen_init(&c->status.screen, c->tty.sx, 1, 0); + status_save_old(c); va_start(ap, fmt); xvasprintf(&c->message_string, fmt, ap); @@ -744,9 +747,7 @@ status_prompt_set(struct client *c, const char *msg, const char *input, status_message_clear(c); status_prompt_clear(c); - - status_save_old(&c->status); - screen_init(&c->status.screen, c->tty.sx, 1, 0); + status_save_old(c); c->prompt_string = format_expand_time(ft, msg); From b588b1729ad9668a60d402d549506e56d72f1919 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 16 Mar 2019 19:12:13 +0000 Subject: [PATCH 349/836] Use a pointer for the active screen in the status line instead of copying them around all the time. --- screen-redraw.c | 2 +- status.c | 139 ++++++++++++++++++++++++------------------------ tmux.h | 3 +- window-client.c | 5 +- 4 files changed, 73 insertions(+), 76 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index e8a62ea5e1..9880433dce 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -569,7 +569,7 @@ screen_redraw_draw_status(struct screen_redraw_ctx *ctx) struct client *c = ctx->c; struct window *w = c->session->curw->window; struct tty *tty = &c->tty; - struct screen *s = &c->status.screen; + struct screen *s = c->status.active; u_int i, y; log_debug("%s: %s @%u", __func__, c->name, w->id); diff --git a/status.c b/status.c index fc9fbe3fc1..5a6a446634 100644 --- a/status.c +++ b/status.c @@ -296,6 +296,32 @@ status_get_window_at(struct client *c, u_int x) return (NULL); } +/* Save old status line. */ +static void +status_push_screen(struct client *c) +{ + struct status_line *sl = &c->status; + + if (sl->active == &sl->screen) { + sl->active = xmalloc(sizeof *sl->active); + screen_init(sl->active, c->tty.sx, status_line_size(c), 0); + } + sl->references++; +} + +/* Restore old status line. */ +static void +status_pop_screen(struct client *c) +{ + struct status_line *sl = &c->status; + + if (--sl->references == 0) { + screen_free(sl->active); + free(sl->active); + sl->active = &sl->screen; + } +} + /* Initialize status line. */ void status_init(struct client *c) @@ -303,6 +329,7 @@ status_init(struct client *c) struct status_line *sl = &c->status; screen_init(&sl->screen, c->tty.sx, 1, 0); + sl->active = &sl->screen; } /* Free status line. */ @@ -314,37 +341,11 @@ status_free(struct client *c) if (event_initialized(&sl->timer)) evtimer_del(&sl->timer); - screen_free(&sl->screen); - if (sl->old_screen != NULL) { - screen_free(sl->old_screen); - free(sl->old_screen); - } -} - -/* Save as old status line. */ -static void -status_save_old(struct client *c) -{ - struct status_line *sl = &c->status; - - if (sl->old_screen == NULL) { - sl->old_screen = xmalloc(sizeof *sl->old_screen); - memcpy(sl->old_screen, &sl->screen, sizeof *sl->old_screen); - screen_init(&c->status.screen, c->tty.sx, 1, 0); - } -} - -/* Free old status line. */ -static void -status_free_old(struct client *c) -{ - struct status_line *sl = &c->status; - - if (sl->old_screen != NULL) { - screen_free(sl->old_screen); - free(sl->old_screen); - sl->old_screen = NULL; + if (sl->active != &sl->screen) { + screen_free(sl->active); + free(sl->active); } + screen_free(&sl->screen); } /* Draw status line for client. */ @@ -365,8 +366,9 @@ status_redraw(struct client *c) size_t llen, rlen, seplen; int larrow, rarrow; - /* Delete the saved status line, if any. */ - status_free_old(c); + /* Shouldn't get here if not the active screen. */ + if (sl->active != &sl->screen) + fatalx("not the active screen"); /* No status line? */ lines = status_line_size(c); @@ -379,9 +381,9 @@ status_redraw(struct client *c) style_apply(&stdgc, s->options, "status-style"); /* Create the target screen. */ - memcpy(&old_screen, &sl->screen, sizeof old_screen); - screen_init(&sl->screen, c->tty.sx, lines, 0); - screen_write_start(&ctx, NULL, &sl->screen); + memcpy(&old_screen, sl->active, sizeof old_screen); + screen_init(sl->active, c->tty.sx, lines, 0); + screen_write_start(&ctx, NULL, sl->active); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &stdgc, ' '); screen_write_stop(&ctx); @@ -504,7 +506,7 @@ status_redraw(struct client *c) draw: /* Begin drawing. */ - screen_write_start(&ctx, NULL, &sl->screen); + screen_write_start(&ctx, NULL, sl->active); /* Draw the left string and arrow. */ screen_write_cursormove(&ctx, 0, 0, 0); @@ -563,7 +565,7 @@ status_redraw(struct client *c) free(left); free(right); - if (grid_compare(sl->screen.grid, old_screen.grid) == 0) { + if (grid_compare(sl->active->grid, old_screen.grid) == 0) { screen_free(&old_screen); return (0); } @@ -634,7 +636,7 @@ status_message_set(struct client *c, const char *fmt, ...) int delay; status_message_clear(c); - status_save_old(c); + status_push_screen(c); va_start(ap, fmt); xvasprintf(&c->message_string, fmt, ap); @@ -671,7 +673,7 @@ status_message_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ - screen_reinit(&c->status.screen); + status_pop_screen(c); } /* Clear status line message after timer expires. */ @@ -687,23 +689,22 @@ status_message_callback(__unused int fd, __unused short event, void *data) int status_message_redraw(struct client *c) { - struct screen_write_ctx ctx; - struct session *s = c->session; - struct screen old_status; - size_t len; - struct grid_cell gc; - u_int lines, offset; + struct status_line *sl = &c->status; + struct screen_write_ctx ctx; + struct session *s = c->session; + struct screen old_screen; + size_t len; + u_int lines, offset; + struct grid_cell gc; if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status.screen, sizeof old_status); + memcpy(&old_screen, sl->active, sizeof old_screen); lines = status_line_size(c); - if (lines <= 1) { + if (lines <= 1) lines = 1; - screen_init(&c->status.screen, c->tty.sx, 1, 0); - } else - screen_init(&c->status.screen, c->tty.sx, lines, 0); + screen_init(sl->active, c->tty.sx, 1, 0); len = screen_write_strlen("%s", c->message_string); if (len > c->tty.sx) @@ -711,7 +712,7 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); - screen_write_start(&ctx, NULL, &c->status.screen); + screen_write_start(&ctx, NULL, sl->active); screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -719,11 +720,11 @@ status_message_redraw(struct client *c) screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); screen_write_stop(&ctx); - if (grid_compare(c->status.screen.grid, old_status.grid) == 0) { - screen_free(&old_status); + if (grid_compare(sl->active->grid, old_screen.grid) == 0) { + screen_free(&old_screen); return (0); } - screen_free(&old_status); + screen_free(&old_screen); return (1); } @@ -747,7 +748,7 @@ status_prompt_set(struct client *c, const char *msg, const char *input, status_message_clear(c); status_prompt_clear(c); - status_save_old(c); + status_push_screen(c); c->prompt_string = format_expand_time(ft, msg); @@ -799,7 +800,7 @@ status_prompt_clear(struct client *c) c->tty.flags &= ~(TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_ALLREDRAWFLAGS; /* was frozen and may have changed */ - screen_reinit(&c->status.screen); + status_pop_screen(c); } /* Update status line prompt with a new prompt string. */ @@ -833,23 +834,22 @@ status_prompt_update(struct client *c, const char *msg, const char *input) int status_prompt_redraw(struct client *c) { + struct status_line *sl = &c->status; struct screen_write_ctx ctx; struct session *s = c->session; - struct screen old_status; - u_int i, offset, left, start, pcursor, pwidth, width; - u_int lines; + struct screen old_screen; + u_int i, lines, offset, left, start, width; + u_int pcursor, pwidth; struct grid_cell gc, cursorgc; if (c->tty.sx == 0 || c->tty.sy == 0) return (0); - memcpy(&old_status, &c->status.screen, sizeof old_status); + memcpy(&old_screen, sl->active, sizeof old_screen); lines = status_line_size(c); - if (lines <= 1) { + if (lines <= 1) lines = 1; - screen_init(&c->status.screen, c->tty.sx, 1, 0); - } else - screen_init(&c->status.screen, c->tty.sx, lines, 0); + screen_init(sl->active, c->tty.sx, lines, 0); if (c->prompt_mode == PROMPT_COMMAND) style_apply(&gc, s->options, "message-command-style"); @@ -863,7 +863,7 @@ status_prompt_redraw(struct client *c) if (start > c->tty.sx) start = c->tty.sx; - screen_write_start(&ctx, NULL, &c->status.screen); + screen_write_start(&ctx, NULL, sl->active); screen_write_cursormove(&ctx, 0, 0, 0); for (offset = 0; offset < lines * c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); @@ -909,18 +909,17 @@ status_prompt_redraw(struct client *c) screen_write_cell(&ctx, &cursorgc); } } - if (c->status.screen.cx < screen_size_x(&c->status.screen) && - c->prompt_index >= i) + if (sl->active->cx < screen_size_x(sl->active) && c->prompt_index >= i) screen_write_putc(&ctx, &cursorgc, ' '); finished: screen_write_stop(&ctx); - if (grid_compare(c->status.screen.grid, old_status.grid) == 0) { - screen_free(&old_status); + if (grid_compare(sl->active->grid, old_screen.grid) == 0) { + screen_free(&old_screen); return (0); } - screen_free(&old_status); + screen_free(&old_screen); return (1); } diff --git a/tmux.h b/tmux.h index 3b0f7d5bd3..2b083e4481 100644 --- a/tmux.h +++ b/tmux.h @@ -1315,7 +1315,8 @@ struct status_line { struct event timer; struct screen screen; - struct screen *old_screen; + struct screen *active; + int references; int window_list_offset; diff --git a/window-client.c b/window-client.c index 2e9771849a..db1edbb35f 100644 --- a/window-client.c +++ b/window-client.c @@ -229,10 +229,7 @@ window_client_draw(__unused void *modedata, void *itemdata, screen_write_hline(ctx, sx, 0, 0); screen_write_cursormove(ctx, cx, cy + sy - 1, 0); - if (c->status.old_screen != NULL) - screen_write_fast_copy(ctx, c->status.old_screen, 0, 0, sx, 1); - else - screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, 1); + screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, 1); } static struct screen * From 3a298454ced9ea282a027c3ee4eb389e96716ac5 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 17 Mar 2019 08:05:58 +0000 Subject: [PATCH 350/836] Add to TODO. --- TODO | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/TODO b/TODO index dad421dacc..bcb4305fc0 100644 --- a/TODO +++ b/TODO @@ -242,4 +242,8 @@ TODO soonish maybe: silly really though), reflow performance (can reflow blocks on demand). It would possibly be good if history-limit could be global and collected LRU. - +- Array options should be a tree rather than being sparse. +- Formats to get the default formats for various things, notably + choose-tree. GitHub issue 1634. +- Command aliases should be able to override builtin commands in order to add + default flags (some mechanism needed to avoid recursion). GitHub issue 1630. From bd3332b21137ca7c1bd57b26df9482e72b0e909c Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 17 Mar 2019 19:33:12 +0000 Subject: [PATCH 351/836] Break description of styles into its own section. --- tmux.1 | 227 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 115 insertions(+), 112 deletions(-) diff --git a/tmux.1 b/tmux.1 index 4a4b18fa45..ce036018e8 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2750,82 +2750,19 @@ The default is to run with .Fl np . .It Ic message-command-style Ar style -Set status line message command style, where -.Ar style -is a comma-separated list of characteristics to be specified. -.Pp -The style format is shared by many options and may be: -.Ql bg=colour -to set the background colour, -.Ql fg=colour -to set the foreground colour, and a list of attributes as specified below. -.Pp -The colour is one of: -.Ic black , -.Ic red , -.Ic green , -.Ic yellow , -.Ic blue , -.Ic magenta , -.Ic cyan , -.Ic white , -aixterm bright variants (if supported: -.Ic brightred , -.Ic brightgreen , -and so on), -.Ic colour0 -to -.Ic colour255 -from the 256-colour set, -.Ic default -for the default colour (inherited from another option in the case of some options, for example -.Ic window-status-style -inherits from -.Ic status-style ) , -.Ic terminal -for the terminal default colour, or a hexadecimal RGB string such as -.Ql #ffffff . -.Pp -The attributes is either -.Ic none -or a comma-delimited list of one or more of: -.Ic bright -(or -.Ic bold ) , -.Ic dim , -.Ic underscore , -.Ic blink , -.Ic reverse , -.Ic hidden , -.Ic italics , -.Ic strikethrough , -.Ic double-underscore -.Ic curly-underscore -.Ic dotted-underscore -or -.Ic dashed-underscore -to turn an attribute on, or an attribute prefixed with -.Ql no -to turn one off. -.Pp -Examples are: -.Bd -literal -offset indent -fg=yellow,bold,underscore,blink -bg=black,fg=default,noreverse -.Ed -.Pp -With the -.Fl a -flag to the -.Ic set-option -command the new style is added otherwise the existing style is replaced. +Set status line message command style. +For how to specify +.Ar style , +see the +.Sx STYLES +section. .It Ic message-style Ar style Set status line message style. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .It Xo Ic mouse .Op Ic on | off .Xc @@ -2932,17 +2869,12 @@ Display (by default the session name) to the left of the status line. .Ar string will be passed through -.Xr strftime 3 -and formats (see -.Sx FORMATS ) -will be expanded. -It may also contain the special character sequence #[] to change the colour -or attributes, for example -.Ql #[fg=red,bright] -to set a bright red foreground. -See the -.Ic message-command-style -option for a description of colours and attributes. +.Xr strftime 3 . +Also see the +.Sx FORMATS +and +.Sx STYLES +sections. .Pp For details on how the names and titles can be set see the .Sx "NAMES AND TITLES" @@ -2966,8 +2898,8 @@ Set the style of the left part of the status line. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .It Xo Ic status-position .Op Ic top | bottom .Xc @@ -2994,15 +2926,15 @@ Set the style of the right part of the status line. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .It Ic status-style Ar style Set status line style. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .It Ic update-environment[] Ar variable Set list of environment variables to be copied into the session environment when a new session is created or an existing session is attached. @@ -3186,8 +3118,8 @@ Set window modes style. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Xo Ic monitor-activity .Op Ic on | off @@ -3235,8 +3167,8 @@ Set the pane border style for the currently active pane. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. Attributes are ignored. .Pp .It Ic pane-base-index Ar index @@ -3257,8 +3189,8 @@ Set the pane border style for panes aside from the active pane. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. Attributes are ignored. .Pp .It Xo Ic remain-on-exit @@ -3281,24 +3213,24 @@ Set the style for the window's active pane. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-status-activity-style Ar style Set status line style for windows with an activity alert. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-status-bell-style Ar style Set status line style for windows with a bell alert. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-status-current-format Ar string Like @@ -3310,24 +3242,24 @@ Set status line style for the currently active window. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-status-format Ar string Set the format in which the window is displayed in the status line window list. See the -.Ar status-left -option for details of special character sequences available. -The default is -.Ql #I:#W#F . +.Sx FORMATS +and +.Sx STYLES +sections. .Pp .It Ic window-status-last-style Ar style Set status line style for the last active window. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-status-separator Ar string Sets the separator drawn between windows in the status line. @@ -3338,16 +3270,16 @@ Set status line style for a single window. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Ic window-style Ar style Set the default window style. For how to specify .Ar style , see the -.Ic message-command-style -option. +.Sx STYLES +section. .Pp .It Xo Ic wrap-search .Op Ic on | off @@ -3894,6 +3826,77 @@ The following variables are available, where appropriate: .It Li "window_zoomed_flag" Ta "" Ta "1 if window is zoomed" .It Li "wrap_flag" Ta "" Ta "Pane wrap flag" .El +.Sh STYLES +.Nm +offers various options to specify the colour and attributes of aspects of the +interface, for example +.Ic status-style +for the status line. +In addition, embedded styles may be specified in format options, such as +.Ic status-left-format , +by enclosing them in +.Ql #[ +and +.Ql ] . +.Pp +A style may be the single term +.Ql default +to specify the default style (which may inherit from another option) or a space +separated list of the following: +.Bl -tag -width Ds +.It Ic fg=colour +Set the foreground colour. +The colour is one of: +.Ic black , +.Ic red , +.Ic green , +.Ic yellow , +.Ic blue , +.Ic magenta , +.Ic cyan , +.Ic white ; +if supported the bright variants +.Ic brightred , +.Ic brightgreen , +.Ic brightyellow ; +.Ic colour0 +to +.Ic colour255 +from the 256-colour set; +.Ic default +for the default colour; +.Ic terminal +for the terminal default colour; or a hexadecimal RGB string such as +.Ql #ffffff . +.It Ic bg=colour +Set the background colour. +.It Ic none +Set no attributes (turn off any active attributes). +.It Xo Ic bright (or +.Ic bold ) +.Ic dim , +.Ic underscore , +.Ic blink , +.Ic reverse , +.Ic hidden , +.Ic italics , +.Ic strikethrough , +.Ic double-underscore , +.Ic curly-underscore , +.Ic dotted-underscore , +.Ic dashed-underscore +.Xc +Set an attribute. +Any of the attributes may be prefixed with +.Ql no +to unset. +.El +.Pp +Examples are: +.Bd -literal -offset indent +fg=yellow,bold,underscore,blink +bg=black,fg=default,noreverse +.Ed .Sh NAMES AND TITLES .Nm distinguishes between names and titles. From d2d43987d0f35af2bc012f1260fdb81c851fe390 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 09:46:42 +0000 Subject: [PATCH 352/836] With force, kill previous job before starting new. Fixes problem reported by Scott Mcdermott in GitHub issue 1627. --- format.c | 4 +++- status.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index bcc31d3c64..aa0a8aa244 100644 --- a/format.c +++ b/format.c @@ -346,7 +346,9 @@ format_job_get(struct format_tree *ft, const char *cmd) force = (ft->flags & FORMAT_FORCE); t = time(NULL); - if (fj->job == NULL && (force || fj->last != t)) { + if (force && fj->job != NULL) + job_free(fj->job); + if (force || (fj->job == NULL && fj->last != t)) { fj->job = job_run(expanded, NULL, server_client_get_cwd(ft->client, NULL), format_job_update, format_job_complete, NULL, fj, JOB_NOWAIT); diff --git a/status.c b/status.c index 5a6a446634..4a2eb19d53 100644 --- a/status.c +++ b/status.c @@ -704,7 +704,7 @@ status_message_redraw(struct client *c) lines = status_line_size(c); if (lines <= 1) lines = 1; - screen_init(sl->active, c->tty.sx, 1, 0); + screen_init(sl->active, c->tty.sx, lines, 0); len = screen_write_strlen("%s", c->message_string); if (len > c->tty.sx) From ce6be7afd4d10b542f9cce8634d6bdd81754f775 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 11:58:40 +0000 Subject: [PATCH 353/836] Make array options a sparse tree instead of an array of char * and remove the size limit. --- cmd-set-option.c | 10 ++- cmd-show-options.c | 32 ++++----- cmd.c | 38 +++++------ environ.c | 20 +++--- options.c | 162 +++++++++++++++++++++++++++++++-------------- status.c | 19 ++++-- tmux.h | 7 +- tty-keys.c | 11 +-- tty-term.c | 15 +++-- 9 files changed, 197 insertions(+), 117 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index a55472cae9..ddbfc33441 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -163,11 +163,9 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) parent = options_get(oo, name); /* Check that array options and indexes match up. */ - if (idx != -1) { - if (*name == '@' || options_array_size(parent, NULL) == -1) { - cmdq_error(item, "not an array: %s", argument); - goto fail; - } + if (idx != -1 && (*name == '@' || !options_isarray(parent))) { + cmdq_error(item, "not an array: %s", argument); + goto fail; } /* With -o, check this option is not already set. */ @@ -209,7 +207,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) goto fail; } options_set_string(oo, name, append, "%s", value); - } else if (idx == -1 && options_array_size(parent, NULL) == -1) { + } else if (idx == -1 && !options_isarray(parent)) { error = cmd_set_option_set(self, item, oo, parent, value); if (error != 0) goto fail; diff --git a/cmd-show-options.c b/cmd-show-options.c index f043beca03..872f0c454e 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -89,20 +89,20 @@ static void cmd_show_options_print(struct cmd *self, struct cmdq_item *item, struct options_entry *o, int idx) { - const char *name; - const char *value; - char *tmp, *escaped; - u_int size, i; + struct options_array_item *a; + const char *name, *value; + char *tmp, *escaped; if (idx != -1) { xasprintf(&tmp, "%s[%d]", options_name(o), idx); name = tmp; } else { - if (options_array_size(o, &size) != -1) { - for (i = 0; i < size; i++) { - if (options_array_get(o, i) == NULL) - continue; - cmd_show_options_print(self, item, o, i); + if (options_isarray(o)) { + a = options_array_first(o); + while (a != NULL) { + idx = options_array_item_index(a); + cmd_show_options_print(self, item, o, idx); + a = options_array_next(a); } return; } @@ -165,9 +165,10 @@ static enum cmd_retval cmd_show_options_all(struct cmd *self, struct cmdq_item *item, struct options *oo) { - struct options_entry *o; + struct options_entry *o; const struct options_table_entry *oe; - u_int size, idx; + struct options_array_item *a; + u_int idx; o = options_first(oo); while (o != NULL) { @@ -176,13 +177,14 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item, o = options_next(o); continue; } - if (options_array_size(o, &size) == -1) + if (!options_isarray(o)) cmd_show_options_print(self, item, o, -1); else { - for (idx = 0; idx < size; idx++) { - if (options_array_get(o, idx) == NULL) - continue; + a = options_array_first(o); + while (a != NULL) { + idx = options_array_item_index(a); cmd_show_options_print(self, item, o, idx); + a = options_array_next(a); } } o = options_next(o); diff --git a/cmd.c b/cmd.c index 9226e6c258..eace4bbd34 100644 --- a/cmd.c +++ b/cmd.c @@ -319,31 +319,31 @@ cmd_stringify_argv(int argc, char **argv) static int cmd_try_alias(int *argc, char ***argv) { - struct options_entry *o; - int old_argc = *argc, new_argc; - char **old_argv = *argv, **new_argv; - u_int size, idx; - int i; - size_t wanted; - const char *s, *cp = NULL; + struct options_entry *o; + struct options_array_item *a; + int old_argc = *argc, new_argc, i; + char **old_argv = *argv, **new_argv; + size_t wanted; + const char *s, *cp = NULL; o = options_get_only(global_options, "command-alias"); - if (o == NULL || options_array_size(o, &size) == -1 || size == 0) + if (o == NULL) return (-1); - wanted = strlen(old_argv[0]); - for (idx = 0; idx < size; idx++) { - s = options_array_get(o, idx); - if (s == NULL) - continue; - cp = strchr(s, '='); - if (cp == NULL || (size_t)(cp - s) != wanted) - continue; - if (strncmp(old_argv[0], s, wanted) == 0) - break; + a = options_array_first(o); + while (a != NULL) { + s = options_array_item_value(a); + if (s != NULL) { + cp = strchr(s, '='); + if (cp != NULL && + (size_t)(cp - s) == wanted && + strncmp(old_argv[0], s, wanted) == 0) + break; + } + a = options_array_next(a); } - if (idx == size) + if (a == NULL) return (-1); if (cmd_string_split(cp + 1, &new_argc, &new_argv) != 0) diff --git a/environ.c b/environ.c index 29191ee572..2764e0274d 100644 --- a/environ.c +++ b/environ.c @@ -174,22 +174,26 @@ environ_unset(struct environ *env, const char *name) void environ_update(struct options *oo, struct environ *src, struct environ *dst) { - struct environ_entry *envent; - struct options_entry *o; - u_int size, idx; - const char *value; + struct environ_entry *envent; + struct options_entry *o; + struct options_array_item *a; + const char *value; o = options_get(oo, "update-environment"); - if (o == NULL || options_array_size(o, &size) == -1) + if (o == NULL) return; - for (idx = 0; idx < size; idx++) { - value = options_array_get(o, idx); - if (value == NULL) + a = options_array_first(o); + while (a != NULL) { + value = options_array_item_value(a); + if (value == NULL) { + a = options_array_next(a); continue; + } if ((envent = environ_find(src, value)) == NULL) environ_clear(dst, value); else environ_set(dst, envent->name, "%s", envent->value); + a = options_array_next(a); } } diff --git a/options.c b/options.c index 9ea5c118d4..6a7c37d642 100644 --- a/options.c +++ b/options.c @@ -30,6 +30,23 @@ * a red-black tree. */ +struct options_array_item { + u_int index; + char *value; + RB_ENTRY(options_array_item) entry; +}; +RB_HEAD(options_array, options_array_item); +static int +options_array_cmp(struct options_array_item *a1, struct options_array_item *a2) +{ + if (a1->index < a2->index) + return (-1); + if (a1->index > a2->index) + return (1); + return (0); +} +RB_GENERATE_STATIC(options_array, options_array_item, entry, options_array_cmp); + struct options_entry { struct options *owner; @@ -40,10 +57,7 @@ struct options_entry { char *string; long long number; struct style style; - struct { - const char **array; - u_int arraysize; - }; + struct options_array array; }; RB_ENTRY(options_entry) entry; @@ -56,8 +70,6 @@ struct options { static struct options_entry *options_add(struct options *, const char *); -#define OPTIONS_ARRAY_LIMIT 1000 - #define OPTIONS_IS_STRING(o) \ ((o)->tableentry == NULL || \ (o)->tableentry->type == OPTIONS_TABLE_STRING) @@ -163,6 +175,9 @@ options_empty(struct options *oo, const struct options_table_entry *oe) o = options_add(oo, oe->name); o->tableentry = oe; + if (oe->type == OPTIONS_TABLE_ARRAY) + RB_INIT(&o->array); + return (o); } @@ -210,15 +225,11 @@ void options_remove(struct options_entry *o) { struct options *oo = o->owner; - u_int i; if (OPTIONS_IS_STRING(o)) - free((void *)o->string); - else if (OPTIONS_IS_ARRAY(o)) { - for (i = 0; i < o->arraysize; i++) - free((void *)o->array[i]); - free(o->array); - } + free(o->string); + else if (OPTIONS_IS_ARRAY(o)) + options_array_clear(o); RB_REMOVE(options_tree, &oo->tree, o); free(o); @@ -236,62 +247,79 @@ options_table_entry(struct options_entry *o) return (o->tableentry); } +static struct options_array_item * +options_array_item(struct options_entry *o, u_int idx) +{ + struct options_array_item a; + + a.index = idx; + return (RB_FIND(options_array, &o->array, &a)); +} + +static void +options_array_free(struct options_entry *o, struct options_array_item *a) +{ + free(a->value); + RB_REMOVE(options_array, &o->array, a); + free(a); +} + void options_array_clear(struct options_entry *o) { - if (OPTIONS_IS_ARRAY(o)) - o->arraysize = 0; + struct options_array_item *a, *a1; + + if (!OPTIONS_IS_ARRAY(o)) + return; + + RB_FOREACH_SAFE(a, options_array, &o->array, a1) + options_array_free(o, a); } const char * options_array_get(struct options_entry *o, u_int idx) { + struct options_array_item *a; + if (!OPTIONS_IS_ARRAY(o)) return (NULL); - if (idx >= o->arraysize) + a = options_array_item(o, idx); + if (a == NULL) return (NULL); - return (o->array[idx]); + return (a->value); } int options_array_set(struct options_entry *o, u_int idx, const char *value, int append) { - char *new; - u_int i; + struct options_array_item *a; + char *new; if (!OPTIONS_IS_ARRAY(o)) return (-1); - if (idx >= OPTIONS_ARRAY_LIMIT) - return (-1); - if (idx >= o->arraysize) { - o->array = xreallocarray(o->array, idx + 1, sizeof *o->array); - for (i = o->arraysize; i < idx + 1; i++) - o->array[i] = NULL; - o->arraysize = idx + 1; + a = options_array_item(o, idx); + if (value == NULL) { + if (a != NULL) + options_array_free(o, a); + return (0); } - new = NULL; - if (value != NULL) { - if (o->array[idx] != NULL && append) - xasprintf(&new, "%s%s", o->array[idx], value); + if (a == NULL) { + a = xcalloc(1, sizeof *a); + a->index = idx; + a->value = xstrdup(value); + RB_INSERT(options_array, &o->array, a); + } else { + free(a->value); + if (a != NULL && append) + xasprintf(&new, "%s%s", a->value, value); else new = xstrdup(value); + a->value = new; } - free((void *)o->array[idx]); - o->array[idx] = new; - return (0); -} - -int -options_array_size(struct options_entry *o, u_int *size) -{ - if (!OPTIONS_IS_ARRAY(o)) - return (-1); - if (size != NULL) - *size = o->arraysize; return (0); } @@ -310,37 +338,69 @@ options_array_assign(struct options_entry *o, const char *s) while ((next = strsep(&string, separator)) != NULL) { if (*next == '\0') continue; - for (i = 0; i < OPTIONS_ARRAY_LIMIT; i++) { - if (i >= o->arraysize || o->array[i] == NULL) + for (i = 0; i < UINT_MAX; i++) { + if (options_array_item(o, i) == NULL) break; } - if (i == OPTIONS_ARRAY_LIMIT) + if (i == UINT_MAX) break; options_array_set(o, i, next, 0); } free(copy); } +struct options_array_item * +options_array_first(struct options_entry *o) +{ + if (!OPTIONS_IS_ARRAY(o)) + return (NULL); + return (RB_MIN(options_array, &o->array)); +} + +struct options_array_item * +options_array_next(struct options_array_item *a) +{ + return (RB_NEXT(options_array, &o->array, a)); +} + +u_int +options_array_item_index(struct options_array_item *a) +{ + return (a->index); +} + +const char * +options_array_item_value(struct options_array_item *a) +{ + return (a->value); +} + +int +options_isarray(struct options_entry *o) +{ + return (OPTIONS_IS_ARRAY(o)); +} + int options_isstring(struct options_entry *o) { - if (o->tableentry == NULL) - return (1); return (OPTIONS_IS_STRING(o) || OPTIONS_IS_ARRAY(o)); } const char * options_tostring(struct options_entry *o, int idx, int numeric) { - static char s[1024]; - const char *tmp; + static char s[1024]; + const char *tmp; + struct options_array_item *a; if (OPTIONS_IS_ARRAY(o)) { if (idx == -1) return (NULL); - if ((u_int)idx >= o->arraysize || o->array[idx] == NULL) + a = options_array_item(o, idx); + if (a == NULL) return (""); - return (o->array[idx]); + return (a->value); } if (OPTIONS_IS_STYLE(o)) return (style_tostring(&o->style)); diff --git a/status.c b/status.c index 4a2eb19d53..de6d271667 100644 --- a/status.c +++ b/status.c @@ -1510,9 +1510,10 @@ status_prompt_complete_list(u_int *size, const char *s) const char **layout, *value, *cp; const struct cmd_entry **cmdent; const struct options_table_entry *oe; - u_int items, idx; + u_int idx; size_t slen = strlen(s), valuelen; struct options_entry *o; + struct options_array_item *a; const char *layouts[] = { "even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled", NULL @@ -1538,16 +1539,22 @@ status_prompt_complete_list(u_int *size, const char *s) } } o = options_get_only(global_options, "command-alias"); - if (o != NULL && options_array_size(o, &items) != -1) { - for (idx = 0; idx < items; idx++) { - value = options_array_get(o, idx); + if (o != NULL) { + a = options_array_first(o); + while (a != NULL) { + value = options_array_item_value(a);; if (value == NULL || (cp = strchr(value, '=')) == NULL) - continue; + goto next; + valuelen = cp - value; if (slen > valuelen || strncmp(value, s, slen) != 0) - continue; + goto next; + list = xreallocarray(list, (*size) + 1, sizeof *list); list[(*size)++] = xstrndup(value, valuelen); + + next: + a = options_array_next(a); } } for (idx = 0; idx < (*size); idx++) diff --git a/tmux.h b/tmux.h index 2b083e4481..a1ed1b46da 100644 --- a/tmux.h +++ b/tmux.h @@ -50,6 +50,7 @@ struct mode_tree_data; struct mouse_event; struct options; struct options_entry; +struct options_array_item; struct session; struct tmuxpeer; struct tmuxproc; @@ -1642,8 +1643,12 @@ void options_array_clear(struct options_entry *); const char *options_array_get(struct options_entry *, u_int); int options_array_set(struct options_entry *, u_int, const char *, int); -int options_array_size(struct options_entry *, u_int *); void options_array_assign(struct options_entry *, const char *); +struct options_array_item *options_array_first(struct options_entry *); +struct options_array_item *options_array_next(struct options_array_item *); +u_int options_array_item_index(struct options_array_item *); +const char *options_array_item_value(struct options_array_item *); +int options_isarray(struct options_entry *); int options_isstring(struct options_entry *); const char *options_tostring(struct options_entry *, int, int); char *options_parse(const char *, int *); diff --git a/tty-keys.c b/tty-keys.c index 3eb8d428a5..da84077b6a 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -398,9 +398,10 @@ tty_keys_build(struct tty *tty) { const struct tty_default_key_raw *tdkr; const struct tty_default_key_code *tdkc; - u_int i, size; + u_int i; const char *s, *value; struct options_entry *o; + struct options_array_item *a; if (tty->key_tree != NULL) tty_keys_free(tty); @@ -423,11 +424,13 @@ tty_keys_build(struct tty *tty) } o = options_get(global_options, "user-keys"); - if (o != NULL && options_array_size(o, &size) != -1) { - for (i = 0; i < size; i++) { - value = options_array_get(o, i); + if (o != NULL) { + a = options_array_first(o); + while (a != NULL) { + value = options_array_item_value(a); if (value != NULL) tty_keys_add(tty, value, KEYC_USER + i); + a = options_array_next(a); } } } diff --git a/tty-term.c b/tty-term.c index 7df9a7d16a..9e0bb63dfd 100644 --- a/tty-term.c +++ b/tty-term.c @@ -416,7 +416,8 @@ tty_term_find(char *name, int fd, char **cause) const struct tty_term_code_entry *ent; struct tty_code *code; struct options_entry *o; - u_int size, i; + struct options_array_item *a; + u_int i; int n, error; const char *s, *acs; @@ -491,12 +492,12 @@ tty_term_find(char *name, int fd, char **cause) /* Apply terminal overrides. */ o = options_get_only(global_options, "terminal-overrides"); - if (options_array_size(o, &size) != -1) { - for (i = 0; i < size; i++) { - s = options_array_get(o, i); - if (s != NULL) - tty_term_override(term, s); - } + a = options_array_first(o); + while (a != NULL) { + s = options_array_item_value(a); + if (s != NULL) + tty_term_override(term, s); + a = options_array_next(a); } /* Delete curses data. */ From aa2b3472c515dd1e5f57618e17c0c612cfa3c117 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 18 Mar 2019 12:00:10 +0000 Subject: [PATCH 354/836] Update TODO. --- TODO | 86 +----------------------------------------------------------- 1 file changed, 1 insertion(+), 85 deletions(-) diff --git a/TODO b/TODO index bcb4305fc0..0da4e49ab5 100644 --- a/TODO +++ b/TODO @@ -148,90 +148,7 @@ TODO soonish maybe: - Horizontal cursor position is incorrect after resize (bug), issue 1323. -- Multiple status lines: - - 1) Extend formats to include some way to loop over every window - (or pane or session), perhaps something like - #{W:#{window_name} }. It would need to be able to reach - into a window's options in order to allow different windows - to have different format. (DONE) An operator to evaluate an - option value as a format, maybe make it so E: on evaluates - the result as a format again something like, so end up with - something like #{W:#{E:window-status-format} } - - 2) Some way to include alignment information for part of a format. - - 3) Then the entire status line can be drawn with one option, - instead of status-left/status-right. But how to stay - backwards compatible, even slightly? Can probably keep - status-left and right and the default status-format becomes - something like (plus some bits for current window): - - #{L:#{E:status-left} #{M:#{W:{E:window-status-format}}} #{R:#{E:status-right}} - - Where L = left, M = middle, R = right; W = for each window; - E = get option value and evaluate as format. - - 4) Also need a way to return mouse positioning, so a format - like the alignment that stores the offset/size for - Mouse*Status{Left,Right}. - - 5) Likewise, styles. Alignment, mouse, styles can all be done - similarly - format_expand can be given the available width - and then build a list of format_range with type (ALIGN_LEFT, - STYLE, MOUSE_LEFT and so on) which a format_draw function - can use to draw the format, and can be stored to be used by - the mouse positioning check code. - -(DONE) 6) status-left-length and similar will need to be taken into - account. - - 7) Supporting trimming the window list and adding <> might be - tricky, probably a second pass over the format_range list to - trim as appropriate. But it will need to know which element - to trim first, so some way to mark that is needed (maybe a - priority or something in the alignment/length limit). - -(DONE) 8) Formats are going to get very long so perhaps standardize - them a bit so they are all something like #{F/argument:text} - then then could be #{A/foo;B/bar:text} rather than - #{A:foo,#{B:bar,text}} and so on. Need to keep the old style - for compatibility, at least for the most popular formats. So - the status-left part would be something like: - - #{A/left;S/#{status-left-style};M/left;=/#{status-left-length};E:status-left} - - Where A = alignment, S = style, M = mouse, = = length limit, - E = expand again. - - Existing formats are: - - #{l:foo} <-- literal - #{m:foo} <-- match - #{C:foo} <-- search - #{b:foo} <-- basename - #{d:foo} <-- dirname - #{t:foo} <-- time - #{q:foo} <-- quote - #{s/a/b/:foo} <-- sub - #{=123:foo} <-- length - - #{||:foo,bar} <-- or - #{&&:foo,bar} <-- and - #{!=:foo,bar} <-- neq - #{==:foo,bar} <-- eq - #{?foo,bar,baz} <-- if - - So comparisons and ? can stay as they are. - - All other formats can be parsed as #{X/arg1/arg2/arg3:...} - with an optional leading and trailing /. Each argument can - be expanded. - - 9) Then status-format can be an array option specifying - multiple status lines. Perhaps one option for top and one - for bottom. - +- Multiple status lines (DONE but not committed yet). - Store hooks as options, issue 1619. - Support buffer prefixes, issue 1501. - copy-pipe should be synchronous, issue 1517. @@ -242,7 +159,6 @@ TODO soonish maybe: silly really though), reflow performance (can reflow blocks on demand). It would possibly be good if history-limit could be global and collected LRU. -- Array options should be a tree rather than being sparse. - Formats to get the default formats for various things, notably choose-tree. GitHub issue 1634. - Command aliases should be able to override builtin commands in order to add From 2628af573d98f7bdd4db02c7a80c860b867a45fb Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 14:10:25 +0000 Subject: [PATCH 355/836] Add format variables for the default formats for the various modes (tree_mode_format and so on) and add a -a flag to display-message to list variables with values. --- cmd-display-message.c | 18 ++++++++++++++++-- format.c | 36 +++++++++++++++++++++++++++++++++++- tmux.1 | 9 +++++---- tmux.h | 4 ++++ window-buffer.c | 1 + window-client.c | 1 + window-tree.c | 1 + window.c | 11 +++++++++++ 8 files changed, 74 insertions(+), 7 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 07cd12a889..2e93590872 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_display_message_entry = { .name = "display-message", .alias = "display", - .args = { "c:pt:F:v", 0, 1 }, - .usage = "[-pv] [-c target-client] [-F format] " + .args = { "ac:pt:F:v", 0, 1 }, + .usage = "[-apv] [-c target-client] [-F format] " CMD_TARGET_PANE_USAGE " [message]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -49,6 +49,14 @@ const struct cmd_entry cmd_display_message_entry = { .exec = cmd_display_message_exec }; +static void +cmd_display_message_each(const char *key, const char *value, void *arg) +{ + struct cmdq_item *item = arg; + + cmdq_print(item, "%s=%s", key, value); +} + static enum cmd_retval cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) { @@ -91,6 +99,12 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) ft = format_create(item->client, item, FORMAT_NONE, flags); format_defaults(ft, target_c, s, wl, wp); + if (args_has(args, 'a')) { + if (item != NULL) + format_each(ft, cmd_display_message_each, item); + return (CMD_RETURN_NORMAL); + } + msg = format_expand_time(ft, template); if (args_has(self->args, 'p')) cmdq_print(item, "%s", msg); diff --git a/format.c b/format.c index aa0a8aa244..501b0a34df 100644 --- a/format.c +++ b/format.c @@ -701,7 +701,9 @@ format_merge(struct format_tree *ft, struct format_tree *from) struct format_tree * format_create(struct client *c, struct cmdq_item *item, int tag, int flags) { - struct format_tree *ft; + struct format_tree *ft; + const struct window_mode **wm; + char tmp[64]; if (!event_initialized(&format_job_event)) { evtimer_set(&format_job_event, format_job_timer, NULL); @@ -727,6 +729,14 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) format_add(ft, "socket_path", "%s", socket_path); format_add_tv(ft, "start_time", &start_time); + for (wm = all_window_modes; *wm != NULL; wm++) { + if ((*wm)->default_format != NULL) { + xsnprintf(tmp, sizeof tmp, "%s_format", (*wm)->name); + tmp[strcspn(tmp, "-")] = '_'; + format_add(ft, tmp, "%s", (*wm)->default_format); + } + } + if (item != NULL) { if (item->cmd != NULL) format_add(ft, "command", "%s", item->cmd->entry->name); @@ -755,6 +765,30 @@ format_free(struct format_tree *ft) free(ft); } +/* Walk each format. */ +void +format_each(struct format_tree *ft, void (*cb)(const char *, const char *, + void *), void *arg) +{ + struct format_entry *fe; + static char s[64]; + + RB_FOREACH(fe, format_entry_tree, &ft->tree) { + if (fe->t != 0) { + xsnprintf(s, sizeof s, "%lld", (long long)fe->t); + cb(fe->key, fe->value, s); + } else { + if (fe->value == NULL && fe->cb != NULL) { + fe->cb(ft, fe); + if (fe->value == NULL) + fe->value = xstrdup(""); + } + cb(fe->key, fe->value, arg); + } + } +} + + /* Add a key-value pair. */ void format_add(struct format_tree *ft, const char *key, const char *fmt, ...) diff --git a/tmux.1 b/tmux.1 index ce036018e8..c7b7d81252 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4177,7 +4177,7 @@ option. This command works only from inside .Nm . .It Xo Ic display-message -.Op Fl pv +.Op Fl apv .Op Fl c Ar target-client .Op Fl t Ar target-pane .Op Ar message @@ -4200,9 +4200,10 @@ if is given, otherwise the active pane for the session attached to .Ar target-client . .Pp -With -.Fl v , -verbose logging is printed as the format is parsed. +.Fl v +prints verbose logging as the format is parsed and +.Fl a +lists the format variables and their values. .El .Sh BUFFERS .Nm diff --git a/tmux.h b/tmux.h index a1ed1b46da..9adef27f79 100644 --- a/tmux.h +++ b/tmux.h @@ -704,6 +704,7 @@ struct screen_write_ctx { struct window_mode_entry; struct window_mode { const char *name; + const char *default_format; struct screen *(*init)(struct window_mode_entry *, struct cmd_find_state *, struct args *); @@ -1587,6 +1588,8 @@ struct format_tree *format_create(struct client *, struct cmdq_item *, int, void format_free(struct format_tree *); void printflike(3, 4) format_add(struct format_tree *, const char *, const char *, ...); +void format_each(struct format_tree *, void (*)(const char *, + const char *, void *), void *); char *format_expand_time(struct format_tree *, const char *); char *format_expand(struct format_tree *, const char *); char *format_single(struct cmdq_item *, const char *, @@ -2156,6 +2159,7 @@ void screen_select_cell(struct screen *, struct grid_cell *, /* window.c */ extern struct windows windows; extern struct window_pane_tree all_window_panes; +extern const struct window_mode *all_window_modes[]; int window_cmp(struct window *, struct window *); RB_PROTOTYPE(windows, window, entry, window_cmp); int winlink_cmp(struct winlink *, struct winlink *); diff --git a/window-buffer.c b/window-buffer.c index 7c918c70c7..06d346e338 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -41,6 +41,7 @@ static void window_buffer_key(struct window_mode_entry *, const struct window_mode window_buffer_mode = { .name = "buffer-mode", + .default_format = WINDOW_BUFFER_DEFAULT_FORMAT, .init = window_buffer_init, .free = window_buffer_free, diff --git a/window-client.c b/window-client.c index db1edbb35f..ec98984d1f 100644 --- a/window-client.c +++ b/window-client.c @@ -42,6 +42,7 @@ static void window_client_key(struct window_mode_entry *, const struct window_mode window_client_mode = { .name = "client-mode", + .default_format = WINDOW_CLIENT_DEFAULT_FORMAT, .init = window_client_init, .free = window_client_free, diff --git a/window-tree.c b/window-tree.c index 46b28eaea9..120d22c824 100644 --- a/window-tree.c +++ b/window-tree.c @@ -55,6 +55,7 @@ static void window_tree_key(struct window_mode_entry *, const struct window_mode window_tree_mode = { .name = "tree-mode", + .default_format = WINDOW_TREE_DEFAULT_FORMAT, .init = window_tree_init, .free = window_tree_free, diff --git a/window.c b/window.c index a253e8bf39..a5c68ece55 100644 --- a/window.c +++ b/window.c @@ -62,6 +62,17 @@ static u_int next_window_pane_id; static u_int next_window_id; static u_int next_active_point; +/* List of window modes. */ +const struct window_mode *all_window_modes[] = { + &window_buffer_mode, + &window_client_mode, + &window_clock_mode, + &window_copy_mode, + &window_tree_mode, + &window_view_mode, + NULL +}; + static void window_destroy(struct window *); static struct window_pane *window_pane_create(struct window *, u_int, u_int, From d738d5168804405240a3f36b6f410baee39cd9e0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 15:25:36 +0000 Subject: [PATCH 356/836] Mode init needs to be fired with the mode on the list or it will not be resized correctly. --- grid.c | 7 +++---- window.c | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/grid.c b/grid.c index 2ca4e6c5c4..c63287bdfd 100644 --- a/grid.c +++ b/grid.c @@ -481,11 +481,10 @@ void grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) { if (grid_check_y(gd, __func__, py) != 0 || - px >= gd->linedata[py].cellsize) { + px >= gd->linedata[py].cellsize) memcpy(gc, &grid_default_cell, sizeof *gc); - return; - } - return (grid_get_cell1(&gd->linedata[py], px, gc)); + else + grid_get_cell1(&gd->linedata[py], px, gc); } /* Set cell at relative position. */ diff --git a/window.c b/window.c index a5c68ece55..a74d01d7ea 100644 --- a/window.c +++ b/window.c @@ -1247,16 +1247,17 @@ window_pane_set_mode(struct window_pane *wp, const struct window_mode *mode, if (wme->mode == mode) break; } - if (wme != NULL) + if (wme != NULL) { TAILQ_REMOVE(&wp->modes, wme, entry); - else { + TAILQ_INSERT_HEAD(&wp->modes, wme, entry); + } else { wme = xcalloc(1, sizeof *wme); wme->wp = wp; wme->mode = mode; wme->prefix = 1; + TAILQ_INSERT_HEAD(&wp->modes, wme, entry); wme->screen = wme->mode->init(wme, fs, args); } - TAILQ_INSERT_HEAD(&wp->modes, wme, entry); wp->screen = wme->screen; wp->flags |= (PANE_REDRAW|PANE_CHANGED); From 979313832ce1d5f6cdc2c512e8524d6c517422e0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 20:53:33 +0000 Subject: [PATCH 357/836] Extend the #[] style syntax and use that together with previous format changes to allow the status line to be entirely configured with a single option. Now that it is possible to configure their content, enable the existing code that lets the status line be multiple lines in height. The status option can now take a value of 2, 3, 4 or 5 (as well as the previous on or off) to configure more than one line. The new status-format array option configures the format of each line, the default just references the existing status-* options, although some of the more obscure status options may be eliminated in time. Additions to the #[] syntax are: "align" to specify alignment (left, centre, right), "list" for the window list and "range" to configure ranges of text for the mouse bindings. The "align" keyword can also be used to specify alignment of entries in tree mode and the pane status lines. --- Makefile | 1 + format-draw.c | 871 ++++++++++++++++++++++++++++++++++++++++++++++++ format.c | 6 +- mode-tree.c | 13 +- options-table.c | 52 ++- screen-redraw.c | 28 +- screen-write.c | 107 ------ server-client.c | 33 +- status.c | 425 ++++++----------------- style.c | 111 +++++- tmux.1 | 72 +++- tmux.h | 85 +++-- utf8.c | 60 ---- window-client.c | 26 +- window.c | 1 - 15 files changed, 1334 insertions(+), 557 deletions(-) create mode 100644 format-draw.c diff --git a/Makefile b/Makefile index 8947cd5301..99417ba203 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,7 @@ SRCS= alerts.c \ control.c \ environ.c \ format.c \ + format-draw.c \ grid-view.c \ grid.c \ hooks.c \ diff --git a/format-draw.c b/format-draw.c new file mode 100644 index 0000000000..52292c98f5 --- /dev/null +++ b/format-draw.c @@ -0,0 +1,871 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include + +#include "tmux.h" + +/* Format range. */ +struct format_range { + u_int index; + struct screen *s; + + u_int start; + u_int end; + + enum style_range_type type; + u_int argument; + + TAILQ_ENTRY(format_range) entry; +}; +TAILQ_HEAD(format_ranges, format_range); + +/* Does this range match this style? */ +static int +format_is_type(struct format_range *fr, struct style *sy) +{ + if (fr->type != sy->range_type) + return (0); + if (fr->type == STYLE_RANGE_WINDOW && + fr->argument != sy->range_argument) + return (0); + return (1); +} + +/* Free a range. */ +static void +format_free_range(struct format_ranges *frs, struct format_range *fr) +{ + TAILQ_REMOVE(frs, fr, entry); + free(fr); +} + +/* Fix range positions. */ +static void +format_update_ranges(struct format_ranges *frs, struct screen *s, u_int offset, + u_int start, u_int width) +{ + struct format_range *fr, *fr1; + + if (frs == NULL) + return; + + TAILQ_FOREACH_SAFE(fr, frs, entry, fr1) { + if (fr->s != s) + continue; + + if (fr->end <= start || fr->start >= start + width) { + format_free_range(frs, fr); + continue; + } + + if (fr->start < start) + fr->start = start; + if (fr->end > start + width) + fr->end = start + width; + if (fr->start == fr->end) { + format_free_range(frs, fr); + continue; + } + + fr->start += offset; + fr->end += offset; + } +} + +/* Draw a part of the format. */ +static void +format_draw_put(struct screen_write_ctx *octx, u_int ocx, u_int ocy, + struct screen *s, struct format_ranges *frs, u_int offset, u_int start, + u_int width) +{ + /* + * The offset is how far from the cursor on the target screen; start + * and width how much to copy from the source screen. + */ + screen_write_cursormove(octx, ocx + offset, ocy, 0); + screen_write_fast_copy(octx, s, start, 0, width, 1); + format_update_ranges(frs, s, offset, start, width); +} + +/* Draw list part of format. */ +static void +format_draw_put_list(struct screen_write_ctx *octx, + u_int ocx, u_int ocy, u_int offset, u_int width, struct screen *list, + struct screen *list_left, struct screen *list_right, int focus_start, + int focus_end, struct format_ranges *frs) +{ + u_int start, focus_centre; + + /* If there is enough space for the list, draw it entirely. */ + if (width >= list->cx) { + format_draw_put(octx, ocx, ocy, list, frs, offset, 0, width); + return; + } + + /* The list needs to be trimmed. Try to keep the focus visible. */ + focus_centre = focus_start + (focus_end - focus_start) / 2; + if (focus_centre < width / 2) + start = 0; + else + start = focus_centre - width / 2; + if (start + width > list->cx) + start = list->cx - width; + + /* Draw <> markers at either side if needed. */ + if (start != 0 && width > list_left->cx) { + screen_write_cursormove(octx, ocx + offset, ocy, 0); + screen_write_fast_copy(octx, list_left, 0, 0, list_left->cx, 1); + offset += list_left->cx; + start += list_left->cx; + width -= list_left->cx; + } + if (start + width < list->cx && width > list_right->cx) { + screen_write_cursormove(octx, ocx + offset + width - 1, ocy, 0); + screen_write_fast_copy(octx, list_right, 0, 0, list_right->cx, + 1); + width -= list_right->cx; + } + + /* Draw the list screen itself. */ + format_draw_put(octx, ocx, ocy, list, frs, offset, start, width); +} + +/* Draw format with no list. */ +static void +format_draw_none(struct screen_write_ctx *octx, u_int available, u_int ocx, + u_int ocy, struct screen *left, struct screen *centre, struct screen *right, + struct format_ranges *frs) +{ + u_int width_left, width_centre, width_right; + + width_left = left->cx; + width_centre = centre->cx; + width_right = right->cx; + + /* + * Try to keep as much of the left and right as possible at the expense + * of the centre. + */ + while (width_left + width_centre + width_right > available) { + if (width_centre > 0) + width_centre--; + else if (width_right > 0) + width_right--; + else + width_left--; + } + + /* Write left. */ + format_draw_put(octx, ocx, ocy, left, frs, 0, 0, width_left); + + /* Write right at available - width_right. */ + format_draw_put(octx, ocx, ocy, right, frs, + available - width_right, + right->cx - width_right, + width_right); + + /* + * Write centre halfway between + * width_left + * and + * available - width_right. + */ + format_draw_put(octx, ocx, ocy, centre, frs, + width_left + + ((available - width_right) - width_left) / 2 + - width_centre / 2, + centre->cx / 2 - width_centre / 2, + width_centre); +} + +/* Draw format with list on the left. */ +static void +format_draw_left(struct screen_write_ctx *octx, u_int available, u_int ocx, + u_int ocy, struct screen *left, struct screen *centre, struct screen *right, + struct screen *list, struct screen *list_left, struct screen *list_right, + struct screen *after, int focus_start, int focus_end, + struct format_ranges *frs) +{ + u_int width_left, width_centre, width_right; + u_int width_list, width_after; + struct screen_write_ctx ctx; + + width_left = left->cx; + width_centre = centre->cx; + width_right = right->cx; + width_list = list->cx; + width_after = after->cx; + + /* + * Trim first the centre, then the list, then the right, then after the + * list, then the left. + */ + while (width_left + + width_centre + + width_right + + width_list + + width_after > available) { + if (width_centre > 0) + width_centre--; + else if (width_list > 0) + width_list--; + else if (width_right > 0) + width_right--; + else if (width_after > 0) + width_after--; + else + width_left--; + } + + /* If there is no list left, pass off to the no list function. */ + if (width_list == 0) { + screen_write_start(&ctx, NULL, left); + screen_write_fast_copy(&ctx, after, 0, 0, width_after, 1); + screen_write_stop(&ctx); + + format_draw_none(octx, available, ocx, ocy, left, centre, + right, frs); + return; + } + + /* Write left at 0. */ + format_draw_put(octx, ocx, ocy, left, frs, 0, 0, width_left); + + /* Write right at available - width_right. */ + format_draw_put(octx, ocx, ocy, right, frs, + available - width_right, + right->cx - width_right, + width_right); + + /* Write after at width_left + width_list. */ + format_draw_put(octx, ocx, ocy, after, frs, + width_left + width_list, + 0, + width_after); + + /* + * Write centre halfway between + * width_left + width_list + width_after + * and + * available - width_right. + */ + format_draw_put(octx, ocx, ocy, centre, frs, + (width_left + width_list + width_after) + + ((available - width_right) + - (width_left + width_list + width_after)) / 2 + - width_centre / 2, + centre->cx / 2 - width_centre / 2, + width_centre); + + /* + * The list now goes from + * width_left + * to + * width_left + width_list. + * If there is no focus given, keep the left in focus. + */ + if (focus_start == -1 || focus_end == -1) + focus_start = focus_end = 0; + format_draw_put_list(octx, ocx, ocy, width_left, width_list, list, + list_left, list_right, focus_start, focus_end, frs); +} + +/* Draw format with list in the centre. */ +static void +format_draw_centre(struct screen_write_ctx *octx, u_int available, u_int ocx, + u_int ocy, struct screen *left, struct screen *centre, struct screen *right, + struct screen *list, struct screen *list_left, struct screen *list_right, + struct screen *after, int focus_start, int focus_end, + struct format_ranges *frs) +{ + u_int width_left, width_centre, width_right; + u_int width_list, width_after, middle; + struct screen_write_ctx ctx; + + width_left = left->cx; + width_centre = centre->cx; + width_right = right->cx; + width_list = list->cx; + width_after = after->cx; + + /* + * Trim first the list, then after the list, then the centre, then the + * right, then the left. + */ + while (width_left + + width_centre + + width_right + + width_list + + width_after > available) { + if (width_list > 0) + width_list--; + else if (width_after > 0) + width_after--; + else if (width_centre > 0) + width_centre--; + else if (width_right > 0) + width_right--; + else + width_left--; + } + + /* If there is no list left, pass off to the no list function. */ + if (width_list == 0) { + screen_write_start(&ctx, NULL, centre); + screen_write_fast_copy(&ctx, after, 0, 0, width_after, 1); + screen_write_stop(&ctx); + + format_draw_none(octx, available, ocx, ocy, left, centre, + right, frs); + return; + } + + /* Write left at 0. */ + format_draw_put(octx, ocx, ocy, left, frs, 0, 0, width_left); + + /* Write after at available - width_after. */ + format_draw_put(octx, ocx, ocy, after, frs, + available - width_after, + after->cx - width_after, + width_after); + + /* Write right at available - width_right. */ + format_draw_put(octx, ocx, ocy, right, frs, + available - width_right, + right->cx - width_right, + width_right); + + /* + * All three centre sections are offset from the middle of the + * available space. + */ + middle = (width_left + ((available - width_right) - width_left) / 2); + + /* + * Write centre at + * middle - width_list / 2 - width_centre. + */ + format_draw_put(octx, ocx, ocy, centre, frs, + middle - width_list / 2 - width_centre, + 0, + width_centre); + + /* + * Write after at + * middle + width_list / 2 - width_centre. + */ + format_draw_put(octx, ocx, ocy, after, frs, + middle + width_list / 2, + 0, + width_after); + + /* + * The list now goes from + * middle - width_list / 2 + * to + * middle + width_list / 2 + * If there is no focus given, keep the centre in focus. + */ + if (focus_start == -1 || focus_end == -1) + focus_start = focus_end = list->cx / 2; + format_draw_put_list(octx, ocx, ocy, middle - width_list / 2, + width_list, list, list_left, list_right, focus_start, focus_end, + frs); +} + +/* Draw format with list on the right. */ +static void +format_draw_right(struct screen_write_ctx *octx, u_int available, u_int ocx, + u_int ocy, struct screen *left, struct screen *centre, struct screen *right, + struct screen *list, struct screen *list_left, struct screen *list_right, + struct screen *after, int focus_start, int focus_end, + struct format_ranges *frs) +{ + u_int width_left, width_centre, width_right; + u_int width_list, width_after; + struct screen_write_ctx ctx; + + width_left = left->cx; + width_centre = centre->cx; + width_right = right->cx; + width_list = list->cx; + width_after = after->cx; + + /* + * Trim first the centre, then the list, then the right, then + * after the list, then the left. + */ + while (width_left + + width_centre + + width_right + + width_list + + width_after > available) { + if (width_centre > 0) + width_centre--; + else if (width_list > 0) + width_list--; + else if (width_right > 0) + width_right--; + else if (width_after > 0) + width_after--; + else + width_left--; + } + + /* If there is no list left, pass off to the no list function. */ + if (width_list == 0) { + screen_write_start(&ctx, NULL, right); + screen_write_fast_copy(&ctx, after, 0, 0, width_after, 1); + screen_write_stop(&ctx); + + format_draw_none(octx, available, ocx, ocy, left, centre, + right, frs); + return; + } + + /* Write left at 0. */ + format_draw_put(octx, ocx, ocy, left, frs, 0, 0, width_left); + + /* Write after at available - width_after. */ + format_draw_put(octx, ocx, ocy, after, frs, + available - width_after, + after->cx - width_after, + width_after); + + /* + * Write right at + * available - width_right - width_list - width_after. + */ + format_draw_put(octx, ocx, ocy, right, frs, + available - width_right - width_list - width_after, + 0, + width_right); + + /* + * Write centre halfway between + * width_left + * and + * available - width_right - width_list - width_after. + */ + format_draw_put(octx, ocx, ocy, centre, frs, + width_left + + ((available - width_right - width_list - width_after) + - width_left) / 2 + - width_centre / 2, + centre->cx / 2 - width_centre / 2, + width_centre); + + /* + * The list now goes from + * available - width_list - width_after + * to + * available - width_after + * If there is no focus given, keep the right in focus. + */ + if (focus_start == -1 || focus_end == -1) + focus_start = focus_end = 0; + format_draw_put_list(octx, ocx, ocy, available - width_list - + width_after, width_list, list, list_left, list_right, focus_start, + focus_end, frs); +} + +/* Draw a format to a screen. */ +void +format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, + u_int available, const char *expanded, struct style_ranges *srs) +{ + enum { LEFT, + CENTRE, + RIGHT, + LIST, + LIST_LEFT, + LIST_RIGHT, + AFTER, + TOTAL } current = LEFT, last = LEFT; + const char *names[] = { "LEFT", + "CENTRE", + "RIGHT", + "LIST", + "LIST_LEFT", + "LIST_RIGHT", + "AFTER" }; + size_t size = strlen(expanded); + struct screen *os = octx->s, s[TOTAL]; + struct screen_write_ctx ctx[TOTAL]; + u_int ocx = os->cx, ocy = os->cy, i, width[TOTAL]; + u_int map[] = { LEFT, LEFT, CENTRE, RIGHT }; + int focus_start = -1, focus_end = -1; + int list_state = -1; + enum style_align list_align = STYLE_ALIGN_DEFAULT; + struct style sy; + struct utf8_data *ud = &sy.gc.data; + const char *cp, *end; + enum utf8_state more; + char *tmp; + struct format_range *fr = NULL, *fr1; + struct format_ranges frs; + struct style_range *sr; + + style_set(&sy, base); + TAILQ_INIT(&frs); + + /* + * We build three screens for left, right, centre alignment, one for + * the list, one for anything after the list and two for the list left + * and right markers. + */ + for (i = 0; i < TOTAL; i++) { + screen_init(&s[i], size, 1, 0); + screen_write_start(&ctx[i], NULL, &s[i]); + screen_write_clearendofline(&ctx[i], base->bg); + width[i] = 0; + } + + /* + * Walk the string and add to the corresponding screens, + * parsing styles as we go. + */ + cp = expanded; + while (*cp != '\0') { + if (cp[0] != '#' || cp[1] != '[') { + /* See if this is a UTF-8 character. */ + if ((more = utf8_open(ud, *cp)) == UTF8_MORE) { + while (*++cp != '\0' && more == UTF8_MORE) + more = utf8_append(ud, *cp); + if (more != UTF8_DONE) + cp -= ud->have; + } + + /* Not a UTF-8 character - ASCII or not valid. */ + if (more != UTF8_DONE) { + if (*cp < 0x20 || *cp > 0x7e) { + /* Ignore nonprintable characters. */ + cp++; + continue; + } + utf8_set(ud, *cp); + cp++; + } + + /* Draw the cell to th current screen. */ + screen_write_cell(&ctx[current], &sy.gc); + width[current] += ud->width; + continue; + } + + /* This is a style. Work out where the end is and parse it. */ + end = format_skip(cp + 2, "]"); + if (end == NULL) + return; + tmp = xstrndup(cp + 2, end - (cp + 2)); + if (style_parse(&sy, base, tmp) != 0) { + free(tmp); + return; + } + log_debug("style '%s' -> '%s'", tmp, style_tostring(&sy)); + free(tmp); + + /* Check the list state. */ + switch (sy.list) { + case STYLE_LIST_ON: + /* + * Entering the list, exiting a marker, or exiting the + * focus. + */ + if (list_state != 0) { + if (fr != NULL) { /* abort any region */ + free(fr); + fr = NULL; + } + list_state = 0; + list_align = sy.align; + } + + /* End the focus if started. */ + if (focus_start != -1 && focus_end == -1) + focus_end = s[LIST].cx; + + current = LIST; + break; + case STYLE_LIST_FOCUS: + /* Entering the focus. */ + if (list_state != 0) /* not inside the list */ + break; + if (focus_start == -1) /* focus already started */ + focus_start = s[LIST].cx; + break; + case STYLE_LIST_OFF: + /* Exiting or outside the list. */ + if (list_state == 0) { + if (fr != NULL) { /* abort any region */ + free(fr); + fr = NULL; + } + if (focus_start != -1 && focus_end == -1) + focus_end = s[LIST].cx; + + map[list_align] = AFTER; + if (list_align == STYLE_ALIGN_LEFT) + map[STYLE_ALIGN_DEFAULT] = AFTER; + list_state = 1; + } + current = map[sy.align]; + break; + case STYLE_LIST_LEFT_MARKER: + /* Entering left marker. */ + if (list_state != 0) /* not inside the list */ + break; + if (s[LIST_LEFT].cx != 0) /* already have marker */ + break; + if (fr != NULL) { /* abort any region */ + free(fr); + fr = NULL; + } + if (focus_start != -1 && focus_end == -1) + focus_start = focus_end = -1; + current = LIST_LEFT; + break; + case STYLE_LIST_RIGHT_MARKER: + /* Entering right marker. */ + if (list_state != 0) /* not inside the list */ + break; + if (s[LIST_RIGHT].cx != 0) /* already have marker */ + break; + if (fr != NULL) { /* abort any region */ + free(fr); + fr = NULL; + } + if (focus_start != -1 && focus_end == -1) + focus_start = focus_end = -1; + current = LIST_RIGHT; + break; + } + if (current != last) { + log_debug("%s: change %s -> %s", __func__, + names[last], names[current]); + last = current; + } + + /* + * Check if the range style has changed and if so end the + * current range and start a new one if needed. + */ + if (srs != NULL) { + if (fr != NULL && !format_is_type(fr, &sy)) { + if (s[current].cx != fr->start) { + fr->end = s[current].cx + 1; + TAILQ_INSERT_TAIL(&frs, fr, entry); + } else + free(fr); + fr = NULL; + } + if (fr == NULL && sy.range_type != STYLE_RANGE_NONE) { + fr = xcalloc(1, sizeof *fr); + fr->index = current; + + fr->s = &s[current]; + fr->start = s[current].cx; + + fr->type = sy.range_type; + fr->argument = sy.range_argument; + } + } + + cp = end + 1; + } + free(fr); + + for (i = 0; i < TOTAL; i++) + log_debug("%s: width %s is %u", __func__, names[i], width[i]); + if (focus_start != -1 && focus_end != -1) + log_debug("focus is %d-%d", focus_start, focus_end); + TAILQ_FOREACH(fr, &frs, entry) { + log_debug("%s: range %d|%u is %s %u-%u", __func__, fr->type, + fr->argument, names[fr->index], fr->start, fr->end); + } + + /* + * Draw the screens. How they are arranged depends on where the list + * appearsq. + */ + switch (list_align) { + case STYLE_ALIGN_DEFAULT: + /* No list. */ + format_draw_none(octx, available, ocx, ocy, &s[LEFT], + &s[CENTRE], &s[RIGHT], &frs); + break; + case STYLE_ALIGN_LEFT: + /* List is part of the left. */ + format_draw_left(octx, available, ocx, ocy, &s[LEFT], + &s[CENTRE], &s[RIGHT], &s[LIST], &s[LIST_LEFT], + &s[LIST_RIGHT], &s[AFTER], focus_start, focus_end, &frs); + break; + case STYLE_ALIGN_CENTRE: + /* List is part of the centre. */ + format_draw_centre(octx, available, ocx, ocy, &s[LEFT], + &s[CENTRE], &s[RIGHT], &s[LIST], &s[LIST_LEFT], + &s[LIST_RIGHT], &s[AFTER], focus_start, focus_end, &frs); + break; + case STYLE_ALIGN_RIGHT: + /* List is part of the right. */ + format_draw_right(octx, available, ocx, ocy, &s[LEFT], + &s[CENTRE], &s[RIGHT], &s[LIST], &s[LIST_LEFT], + &s[LIST_RIGHT], &s[AFTER], focus_start, focus_end, &frs); + break; + } + + /* Create ranges to return. */ + TAILQ_FOREACH_SAFE(fr, &frs, entry, fr1) { + sr = xcalloc(1, sizeof *sr); + sr->type = fr->type; + sr->argument = fr->argument; + sr->start = fr->start; + sr->end = fr->end; + TAILQ_INSERT_TAIL(srs, sr, entry); + + log_debug("%s: range %d|%u at %u-%u", __func__, sr->type, + sr->argument, sr->start, sr->end); + + format_free_range(&frs, fr); + } + + /* Restore the original cursor position. */ + screen_write_cursormove(octx, ocx, ocy, 0); +} + +/* Get width, taking #[] into account. */ +u_int +format_width(const char *expanded) +{ + const char *cp, *end; + u_int width = 0; + struct utf8_data ud; + enum utf8_state more; + + cp = expanded; + while (*cp != '\0') { + if (cp[0] == '#' && cp[1] == '[') { + end = format_skip(cp + 2, "]"); + if (end == NULL) + return 0; + cp = end + 1; + } else if ((more = utf8_open(&ud, *cp)) == UTF8_MORE) { + while (*++cp != '\0' && more == UTF8_MORE) + more = utf8_append(&ud, *cp); + if (more == UTF8_DONE) + width += ud.width; + else + cp -= ud.have; + } else if (*cp > 0x1f && *cp < 0x7f) { + width++; + cp++; + } + } + return (width); +} + +/* Trim on the left, taking #[] into account. */ +char * +format_trim_left(const char *expanded, u_int limit) +{ + char *copy, *out; + const char *cp = expanded, *end; + u_int width = 0; + struct utf8_data ud; + enum utf8_state more; + + out = copy = xmalloc(strlen(expanded) + 1); + while (*cp != '\0') { + if (cp[0] == '#' && cp[1] == '[') { + end = format_skip(cp + 2, "]"); + if (end == NULL) + break; + memcpy(out, cp, end + 1 - cp); + out += (end + 1 - cp); + cp = end + 1; + } else if ((more = utf8_open(&ud, *cp)) == UTF8_MORE) { + while (*++cp != '\0' && more == UTF8_MORE) + more = utf8_append(&ud, *cp); + if (more == UTF8_DONE) { + if (width + ud.width <= limit) { + memcpy(out, ud.data, ud.size); + out += ud.size; + } + width += ud.width; + } else + cp -= ud.have; + } else if (*cp > 0x1f && *cp < 0x7f) { + if (width + 1 <= limit) + *out++ = *cp; + width++; + cp++; + } + } + *out = '\0'; + return (copy); +} + +/* Trim on the right, taking #[] into account. */ +char * +format_trim_right(const char *expanded, u_int limit) +{ + char *copy, *out; + const char *cp = expanded, *end; + u_int width = 0, total_width, skip; + struct utf8_data ud; + enum utf8_state more; + + total_width = format_width(expanded); + if (total_width <= limit) + return (xstrdup(expanded)); + skip = total_width - limit; + + out = copy = xmalloc(strlen(expanded) + 1); + while (*cp != '\0') { + if (cp[0] == '#' && cp[1] == '[') { + end = format_skip(cp + 2, "]"); + if (end == NULL) + break; + memcpy(out, cp, end + 1 - cp); + out += (end + 1 - cp); + cp = end + 1; + } else if ((more = utf8_open(&ud, *cp)) == UTF8_MORE) { + while (*++cp != '\0' && more == UTF8_MORE) + more = utf8_append(&ud, *cp); + if (more == UTF8_DONE) { + if (width >= skip) { + memcpy(out, ud.data, ud.size); + out += ud.size; + } + width += ud.width; + } else + cp -= ud.have; + } else if (*cp > 0x1f && *cp < 0x7f) { + if (width >= skip) + *out++ = *cp; + width++; + cp++; + } + } + *out = '\0'; + return (copy); +} diff --git a/format.c b/format.c index 501b0a34df..30391da1b6 100644 --- a/format.c +++ b/format.c @@ -972,7 +972,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) } /* Skip until end. */ -static const char * +const char * format_skip(const char *s, const char *end) { int brackets = 0; @@ -1580,12 +1580,12 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Truncate the value if needed. */ if (limit > 0) { - new = utf8_trimcstr(value, limit); + new = format_trim_left(value, limit); format_log(ft, "applied length limit %d: %s", limit, new); free(value); value = new; } else if (limit < 0) { - new = utf8_rtrimcstr(value, -limit); + new = format_trim_right(value, -limit); format_log(ft, "applied length limit %d: %s", limit, new); free(value); value = new; diff --git a/mode-tree.c b/mode-tree.c index 112969eae4..60e2353461 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -497,7 +497,7 @@ mode_tree_draw(struct mode_tree_data *mtd) struct options *oo = wp->window->options; struct screen_write_ctx ctx; struct grid_cell gc0, gc; - u_int w, h, i, j, sy, box_x, box_y; + u_int w, h, i, j, sy, box_x, box_y, width; char *text, *start, key[7]; const char *tag, *symbol; size_t size, n; @@ -572,8 +572,9 @@ mode_tree_draw(struct mode_tree_data *mtd) tag = "*"; else tag = ""; - xasprintf(&text, "%-*s%s%s%s: %s", keylen, key, start, - mti->name, tag, mti->text); + xasprintf(&text, "%-*s%s%s%s: ", keylen, key, start, mti->name, + tag); + width = utf8_cstrwidth(text); free(start); if (mti->tagged) { @@ -582,11 +583,13 @@ mode_tree_draw(struct mode_tree_data *mtd) } if (i != mtd->current) { - screen_write_cnputs(&ctx, w, &gc0, "%s", text); screen_write_clearendofline(&ctx, 8); + screen_write_puts(&ctx, &gc0, "%s", text); + format_draw(&ctx, &gc0, w - width, mti->text, NULL); } else { - screen_write_cnputs(&ctx, w, &gc, "%s", text); screen_write_clearendofline(&ctx, gc.bg); + screen_write_puts(&ctx, &gc, "%s", text); + format_draw(&ctx, &gc, w - width, mti->text, NULL); } free(text); diff --git a/options-table.c b/options-table.c index 73d22b0ad1..a2a3ffe69c 100644 --- a/options-table.c +++ b/options-table.c @@ -39,6 +39,9 @@ static const char *options_table_mode_keys_list[] = { static const char *options_table_clock_mode_style_list[] = { "12", "24", NULL }; +static const char *options_table_status_list[] = { + "off", "on", "2", "3", "4", "5", NULL +}; static const char *options_table_status_keys_list[] = { "emacs", "vi", NULL }; @@ -64,6 +67,46 @@ static const char *options_table_window_size_list[] = { "largest", "smallest", "manual", NULL }; +/* Status line format. */ +#define OPTIONS_TABLE_STATUS_FORMAT1 \ + "#[align=left range=left #{status-left-style}]" \ + "#{T;=/#{status-left-length}:status-left}#[norange default]" \ + "#[list=on align=#{status-justify}]" \ + "#[list=left-marker]<#[list=right-marker]>#[list=on]" \ + "#{W:" \ + "#[range=window|#{window_index}" \ + "#{?window_last_flag, #{window-status-last-style},}" \ + "#{?window_bell_flag," \ + " #{window-status-bell-style}," \ + "#{?window_activity_flag," \ + " #{window-status-activity-style},}" \ + "}" \ + "]" \ + "#{T:window-status-format}" \ + "#[norange default]" \ + "#{?window_end_flag,,#{window-status-separator}}" \ + "," \ + "#[range=window|#{window_index} list=focus" \ + "#{?window_last_flag, #{window-status-last-style},}" \ + "#{?window_bell_flag," \ + " #{window-status-bell-style}," \ + "#{?window_activity_flag," \ + " #{window-status-activity-style},}" \ + "}" \ + "]" \ + "#{T:window-status-current-format}" \ + "#[norange list=on default]" \ + "#{?window_end_flag,,#{window-status-separator}}" \ + "}" \ + "#[nolist align=right range=right #{status-right-style}]" \ + "#{T;=/#{status-right-length}:status-right}#[norange default]" +#define OPTIONS_TABLE_STATUS_FORMAT2 \ + "#[align=centre]#{P:#{?pane_active,#[reverse],}" \ + "#{pane_index}[#{pane_width}x#{pane_height}]#[default] }" +static const char *options_table_status_format_default[] = { + OPTIONS_TABLE_STATUS_FORMAT1, OPTIONS_TABLE_STATUS_FORMAT2, NULL +}; + /* Top-level options. */ const struct options_table_entry options_table[] = { { .name = "buffer-limit", @@ -378,8 +421,9 @@ const struct options_table_entry options_table[] = { }, { .name = "status", - .type = OPTIONS_TABLE_FLAG, + .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_SESSION, + .choices = options_table_status_list, .default_num = 1 }, @@ -404,6 +448,12 @@ const struct options_table_entry options_table[] = { .style = "status-style" }, + { .name = "status-format", + .type = OPTIONS_TABLE_ARRAY, + .scope = OPTIONS_TABLE_SESSION, + .default_arr = options_table_status_format_default, + }, + { .name = "status-interval", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SESSION, diff --git a/screen-redraw.c b/screen-redraw.c index 9880433dce..691b219439 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -274,8 +274,8 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, struct grid_cell gc; const char *fmt; struct format_tree *ft; - char *out; - size_t outlen; + char *expanded; + u_int width, i; struct screen_write_ctx ctx; struct screen old; @@ -289,27 +289,27 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, ft = format_create(c, NULL, FORMAT_PANE|wp->id, 0); format_defaults(ft, c, NULL, NULL, wp); + expanded = format_expand_time(ft, fmt); + wp->status_size = width = wp->sx - 4; + memcpy(&old, &wp->status_screen, sizeof old); - screen_init(&wp->status_screen, wp->sx, 1, 0); + screen_init(&wp->status_screen, width, 1, 0); wp->status_screen.mode = 0; - out = format_expand(ft, fmt); - outlen = screen_write_cstrlen("%s", out); - if (outlen > wp->sx - 4) - outlen = wp->sx - 4; - screen_resize(&wp->status_screen, outlen, 1, 0); - screen_write_start(&ctx, NULL, &wp->status_screen); + + gc.attr |= GRID_ATTR_CHARSET; + for (i = 0; i < width; i++) + screen_write_putc(&ctx, &gc, 'q'); + gc.attr &= ~GRID_ATTR_CHARSET; + screen_write_cursormove(&ctx, 0, 0, 0); - screen_write_clearline(&ctx, 8); - screen_write_cnputs(&ctx, outlen, &gc, "%s", out); + format_draw(&ctx, &gc, width, expanded, NULL); screen_write_stop(&ctx); - free(out); + free(expanded); format_free(ft); - wp->status_size = outlen; - if (grid_compare(wp->status_screen.grid, old.grid) == 0) { screen_free(&old); return (0); diff --git a/screen-write.c b/screen-write.c index eb12474d8a..0d57b8185a 100644 --- a/screen-write.c +++ b/screen-write.c @@ -169,41 +169,6 @@ screen_write_putc(struct screen_write_ctx *ctx, const struct grid_cell *gcp, screen_write_cell(ctx, &gc); } -/* Calculate string length, with embedded formatting. */ -size_t -screen_write_cstrlen(const char *fmt, ...) -{ - va_list ap; - char *msg, *msg2, *ptr, *ptr2; - size_t size; - - va_start(ap, fmt); - xvasprintf(&msg, fmt, ap); - va_end(ap); - msg2 = xmalloc(strlen(msg) + 1); - - ptr = msg; - ptr2 = msg2; - while (*ptr != '\0') { - if (ptr[0] == '#' && ptr[1] == '[') { - while (*ptr != ']' && *ptr != '\0') - ptr++; - if (*ptr == ']') - ptr++; - continue; - } - *ptr2++ = *ptr++; - } - *ptr2 = '\0'; - - size = screen_write_strlen("%s", msg2); - - free(msg); - free(msg2); - - return (size); -} - /* Calculate string length. */ size_t screen_write_strlen(const char *fmt, ...) @@ -322,78 +287,6 @@ screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen, free(msg); } -/* Write string, similar to nputs, but with embedded formatting (#[]). */ -void -screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, - const struct grid_cell *gcp, const char *fmt, ...) -{ - struct style sy; - struct utf8_data *ud = &sy.gc.data; - va_list ap; - char *msg; - u_char *ptr, *last; - size_t left, size = 0; - enum utf8_state more; - - style_set(&sy, gcp); - - va_start(ap, fmt); - xvasprintf(&msg, fmt, ap); - va_end(ap); - - ptr = msg; - while (*ptr != '\0') { - if (ptr[0] == '#' && ptr[1] == '[') { - ptr += 2; - last = ptr + strcspn(ptr, "]"); - if (*last == '\0') { - /* No ]. Not much point in doing anything. */ - break; - } - *last = '\0'; - - style_parse(&sy, gcp, ptr); - ptr = last + 1; - continue; - } - if (*ptr > 0x7f && utf8_open(ud, *ptr) == UTF8_MORE) { - ptr++; - - left = strlen(ptr); - if (left < (size_t)ud->size - 1) - break; - while ((more = utf8_append(ud, *ptr)) == UTF8_MORE) - ptr++; - ptr++; - - if (more != UTF8_DONE) - continue; - if (maxlen > 0 && size + ud->width > (size_t)maxlen) { - while (size < (size_t)maxlen) { - screen_write_putc(ctx, &sy.gc, ' '); - size++; - } - break; - } - size += ud->width; - screen_write_cell(ctx, &sy.gc); - } else { - if (maxlen > 0 && size + 1 > (size_t)maxlen) - break; - - if (*ptr == '\001') - sy.gc.attr ^= GRID_ATTR_CHARSET; - else if (*ptr > 0x1f && *ptr < 0x7f) { - size++; - screen_write_putc(ctx, &sy.gc, *ptr); - } - ptr++; - } - } - - free(msg); -} - /* Copy from another screen. Assumes target region is big enough. */ void screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, diff --git a/server-client.c b/server-client.c index fe79163f65..eee5dff573 100644 --- a/server-client.c +++ b/server-client.c @@ -411,12 +411,13 @@ server_client_check_mouse(struct client *c) { struct session *s = c->session; struct mouse_event *m = &c->tty.mouse; - struct window *w; + struct winlink *wl; struct window_pane *wp; u_int x, y, b, sx, sy, px, py; int flag; key_code key; struct timeval tv; + struct style_range *sr; enum { NOTYPE, MOVE, DOWN, UP, DRAG, WHEEL, DOUBLE, TRIPLE } type; enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, BORDER } where; @@ -503,17 +504,29 @@ server_client_check_mouse(struct client *c) /* Is this on the status line? */ m->statusat = status_at_line(c); - if (m->statusat != -1 && y == (u_int)m->statusat) { - if (x < c->status.left_size) + if (m->statusat != -1 && + y >= (u_int)m->statusat && + y < m->statusat + status_line_size(c)) + sr = status_get_range(c, x, y - m->statusat); + else + sr = NULL; + if (sr != NULL) { + switch (sr->type) { + case STYLE_RANGE_NONE: + break; + case STYLE_RANGE_LEFT: where = STATUS_LEFT; - else if (x > c->tty.sx - c->status.right_size) + break; + case STYLE_RANGE_RIGHT: where = STATUS_RIGHT; - else { - w = status_get_window_at(c, x); - if (w == NULL) - return (KEYC_UNKNOWN); - m->w = w->id; - where = STATUS; + break; + case STYLE_RANGE_WINDOW: + wl = winlink_find_by_index(&s->windows, sr->argument); + if (wl != NULL) { + m->w = wl->window->id; + where = STATUS; + } + break; } } diff --git a/status.c b/status.c index de6d271667..467db6ad2d 100644 --- a/status.c +++ b/status.c @@ -29,14 +29,6 @@ #include "tmux.h" -static char *status_redraw_get_left(struct client *, struct grid_cell *, - size_t *); -static char *status_redraw_get_right(struct client *, struct grid_cell *, - size_t *); -static char *status_print(struct client *, struct winlink *, - struct grid_cell *); -static char *status_replace(struct client *, struct winlink *, - const char *); static void status_message_callback(int, short, void *); static void status_timer_callback(int, short, void *); @@ -196,7 +188,8 @@ status_timer_start_all(void) void status_update_cache(struct session *s) { - if (!options_get_number(s->options, "status")) + s->statuslines = options_get_number(s->options, "status"); + if (s->statuslines == 0) s->statusat = -1; else if (options_get_number(s->options, "status-position") == 0) s->statusat = 0; @@ -225,75 +218,35 @@ status_line_size(struct client *c) if (c->flags & CLIENT_STATUSOFF) return (0); - if (s->statusat == -1) - return (0); - return (1); -} - -/* Retrieve options for left string. */ -static char * -status_redraw_get_left(struct client *c, struct grid_cell *gc, size_t *size) -{ - struct session *s = c->session; - const char *template; - char *left; - size_t leftlen; - - style_apply_update(gc, s->options, "status-left-style"); - - template = options_get_string(s->options, "status-left"); - left = status_replace(c, NULL, template); - - *size = options_get_number(s->options, "status-left-length"); - leftlen = screen_write_cstrlen("%s", left); - if (leftlen < *size) - *size = leftlen; - return (left); + return (s->statuslines); } -/* Retrieve options for right string. */ -static char * -status_redraw_get_right(struct client *c, struct grid_cell *gc, size_t *size) +/* Get window at window list position. */ +struct style_range * +status_get_range(struct client *c, u_int x, u_int y) { - struct session *s = c->session; - const char *template; - char *right; - size_t rightlen; - - style_apply_update(gc, s->options, "status-right-style"); - - template = options_get_string(s->options, "status-right"); - right = status_replace(c, NULL, template); + struct status_line *sl = &c->status; + struct style_range *sr; - *size = options_get_number(s->options, "status-right-length"); - rightlen = screen_write_cstrlen("%s", right); - if (rightlen < *size) - *size = rightlen; - return (right); + if (y >= nitems(sl->entries)) + return (NULL); + TAILQ_FOREACH(sr, &sl->entries[y].ranges, entry) { + if (x >= sr->start && x < sr->end) + return (sr); + } + return (NULL); } -/* Get window at window list position. */ -struct window * -status_get_window_at(struct client *c, u_int x) +/* Free all ranges. */ +static void +status_free_ranges(struct style_ranges *srs) { - struct session *s = c->session; - struct winlink *wl; - struct options *oo; - const char *sep; - size_t seplen; - - x += c->status.window_list_offset; - RB_FOREACH(wl, winlinks, &s->windows) { - oo = wl->window->options; - - sep = options_get_string(oo, "window-status-separator"); - seplen = screen_write_cstrlen("%s", sep); + struct style_range *sr, *sr1; - if (x < wl->status_width) - return (wl->window); - x -= wl->status_width + seplen; + TAILQ_FOREACH_SAFE(sr, srs, entry, sr1) { + TAILQ_REMOVE(srs, sr, entry); + free(sr); } - return (NULL); } /* Save old status line. */ @@ -327,6 +280,10 @@ void status_init(struct client *c) { struct status_line *sl = &c->status; + u_int i; + + for (i = 0; i < nitems(sl->entries); i++) + TAILQ_INIT(&sl->entries[i].ranges); screen_init(&sl->screen, c->tty.sx, 1, 0); sl->active = &sl->screen; @@ -337,6 +294,12 @@ void status_free(struct client *c) { struct status_line *sl = &c->status; + u_int i; + + for (i = 0; i < nitems(sl->entries); i++) { + status_free_ranges(&sl->entries[i].ranges); + free((void *)sl->entries[i].expanded); + } if (event_initialized(&sl->timer)) evtimer_del(&sl->timer); @@ -352,19 +315,19 @@ status_free(struct client *c) int status_redraw(struct client *c) { - struct status_line *sl = &c->status; - struct screen_write_ctx ctx; - struct session *s = c->session; - struct winlink *wl; - struct screen old_screen, window_list; - struct grid_cell stdgc, lgc, rgc, gc; - struct options *oo; - char *left, *right; - const char *sep; - u_int offset, needed, lines; - u_int wlstart, wlwidth, wlavailable, wloffset, wlsize; - size_t llen, rlen, seplen; - int larrow, rarrow; + struct status_line *sl = &c->status; + struct status_line_entry *sle; + struct session *s = c->session; + struct screen_write_ctx ctx; + struct grid_cell gc; + u_int lines, i, width = c->tty.sx; + int flags, force = 0, changed = 0; + struct options_entry *o; + struct format_tree *ft; + const char *fmt; + char *expanded; + + log_debug("%s enter", __func__); /* Shouldn't get here if not the active screen. */ if (sl->active != &sl->screen) @@ -374,257 +337,71 @@ status_redraw(struct client *c) lines = status_line_size(c); if (c->tty.sy == 0 || lines == 0) return (1); - left = right = NULL; - larrow = rarrow = 0; /* Set up default colour. */ - style_apply(&stdgc, s->options, "status-style"); - - /* Create the target screen. */ - memcpy(&old_screen, sl->active, sizeof old_screen); - screen_init(sl->active, c->tty.sx, lines, 0); - screen_write_start(&ctx, NULL, sl->active); - for (offset = 0; offset < lines * c->tty.sx; offset++) - screen_write_putc(&ctx, &stdgc, ' '); - screen_write_stop(&ctx); - - /* If the height is too small, blank status line. */ - if (c->tty.sy < lines) - goto out; - - /* Work out left and right strings. */ - memcpy(&lgc, &stdgc, sizeof lgc); - left = status_redraw_get_left(c, &lgc, &llen); - memcpy(&rgc, &stdgc, sizeof rgc); - right = status_redraw_get_right(c, &rgc, &rlen); - - /* - * Figure out how much space we have for the window list. If there - * isn't enough space, just show a blank status line. - */ - needed = 0; - if (llen != 0) - needed += llen; - if (rlen != 0) - needed += rlen; - if (c->tty.sx == 0 || c->tty.sx <= needed) - goto out; - wlavailable = c->tty.sx - needed; - - /* Calculate the total size needed for the window list. */ - wlstart = wloffset = wlwidth = 0; - RB_FOREACH(wl, winlinks, &s->windows) { - free(wl->status_text); - memcpy(&wl->status_cell, &stdgc, sizeof wl->status_cell); - wl->status_text = status_print(c, wl, &wl->status_cell); - wl->status_width = screen_write_cstrlen("%s", wl->status_text); - - if (wl == s->curw) - wloffset = wlwidth; - - oo = wl->window->options; - sep = options_get_string(oo, "window-status-separator"); - seplen = screen_write_cstrlen("%s", sep); - wlwidth += wl->status_width + seplen; - } - - /* Create a new screen for the window list. */ - screen_init(&window_list, wlwidth, 1, 0); - - /* And draw the window list into it. */ - screen_write_start(&ctx, NULL, &window_list); - RB_FOREACH(wl, winlinks, &s->windows) { - screen_write_cnputs(&ctx, -1, &wl->status_cell, "%s", - wl->status_text); - - oo = wl->window->options; - sep = options_get_string(oo, "window-status-separator"); - screen_write_cnputs(&ctx, -1, &stdgc, "%s", sep); - } - screen_write_stop(&ctx); - - /* If there is enough space for the total width, skip to draw now. */ - if (wlwidth <= wlavailable) - goto draw; - - /* Find size of current window text. */ - wlsize = s->curw->status_width; - - /* - * If the current window is already on screen, good to draw from the - * start and just leave off the end. - */ - if (wloffset + wlsize < wlavailable) { - if (wlavailable > 0) { - rarrow = 1; - wlavailable--; - } - wlwidth = wlavailable; - } else { - /* - * Work out how many characters we need to omit from the - * start. There are wlavailable characters to fill, and - * wloffset + wlsize must be the last. So, the start character - * is wloffset + wlsize - wlavailable. - */ - if (wlavailable > 0) { - larrow = 1; - wlavailable--; - } - - wlstart = wloffset + wlsize - wlavailable; - if (wlavailable > 0 && wlwidth > wlstart + wlavailable + 1) { - rarrow = 1; - wlstart++; - wlavailable--; - } - wlwidth = wlavailable; + style_apply(&gc, s->options, "status-style"); + if (!grid_cells_equal(&gc, &sl->style)) { + force = 1; + memcpy(&sl->style, &gc, sizeof sl->style); } - /* Bail if anything is now too small too. */ - if (wlwidth == 0 || wlavailable == 0) { - screen_free(&window_list); - goto out; + /* Resize the target screen. */ + if (screen_size_x(&sl->screen) != width || + screen_size_y(&sl->screen) != lines) { + if (screen_size_x(&sl->screen) != width) + force = 1; + screen_resize(&sl->screen, width, lines, 0); + changed = 1; } + screen_write_start(&ctx, NULL, &sl->screen); - /* - * Now the start position is known, work out the state of the left and - * right arrows. - */ - offset = 0; - RB_FOREACH(wl, winlinks, &s->windows) { - if (wl->flags & WINLINK_ALERTFLAGS && - larrow == 1 && offset < wlstart) - larrow = -1; - - offset += wl->status_width; - - if (wl->flags & WINLINK_ALERTFLAGS && - rarrow == 1 && offset > wlstart + wlwidth) - rarrow = -1; - } + /* Create format tree. */ + flags = FORMAT_STATUS; + if (c->flags & CLIENT_STATUSFORCE) + flags |= FORMAT_FORCE; + ft = format_create(c, NULL, FORMAT_NONE, flags); + format_defaults(ft, c, NULL, NULL, NULL); -draw: - /* Begin drawing. */ - screen_write_start(&ctx, NULL, sl->active); + /* Write the status lines. */ + o = options_get(s->options, "status-format"); + if (o == NULL) + screen_write_clearscreen(&ctx, gc.bg); + else { + for (i = 0; i < lines; i++) { + screen_write_cursormove(&ctx, 0, i, 0); + + fmt = options_array_get(o, i); + if (fmt == NULL) { + screen_write_clearline(&ctx, gc.bg); + continue; + } + sle = &sl->entries[i]; - /* Draw the left string and arrow. */ - screen_write_cursormove(&ctx, 0, 0, 0); - if (llen != 0) - screen_write_cnputs(&ctx, llen, &lgc, "%s", left); - if (larrow != 0) { - memcpy(&gc, &stdgc, sizeof gc); - if (larrow == -1) - gc.attr ^= GRID_ATTR_REVERSE; - screen_write_putc(&ctx, &gc, '<'); - } + expanded = format_expand_time(ft, fmt); + if (!force && + sle->expanded != NULL && + strcmp(expanded, sle->expanded) == 0) { + free(expanded); + continue; + } + changed = 1; - /* Draw the right string and arrow. */ - if (rarrow != 0) { - screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, 0, 0); - memcpy(&gc, &stdgc, sizeof gc); - if (rarrow == -1) - gc.attr ^= GRID_ATTR_REVERSE; - screen_write_putc(&ctx, &gc, '>'); - } else - screen_write_cursormove(&ctx, c->tty.sx - rlen, 0, 0); - if (rlen != 0) - screen_write_cnputs(&ctx, rlen, &rgc, "%s", right); + screen_write_clearline(&ctx, gc.bg); + status_free_ranges(&sle->ranges); + format_draw(&ctx, &gc, width, expanded, &sle->ranges); - /* Figure out the offset for the window list. */ - if (llen != 0) - wloffset = llen; - else - wloffset = 0; - if (wlwidth < wlavailable) { - switch (options_get_number(s->options, "status-justify")) { - case 1: /* centred */ - wloffset += (wlavailable - wlwidth) / 2; - break; - case 2: /* right */ - wloffset += (wlavailable - wlwidth); - break; + free(sle->expanded); + sle->expanded = expanded; } } - if (larrow != 0) - wloffset++; - - /* Copy the window list. */ - sl->window_list_offset = -wloffset + wlstart; - screen_write_cursormove(&ctx, wloffset, 0, 0); - screen_write_fast_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1); - screen_free(&window_list); - - /* Save left and right size. */ - sl->left_size = llen; - sl->right_size = rlen; - screen_write_stop(&ctx); -out: - free(left); - free(right); - - if (grid_compare(sl->active->grid, old_screen.grid) == 0) { - screen_free(&old_screen); - return (0); - } - screen_free(&old_screen); - return (1); -} - -/* Replace special sequences in fmt. */ -static char * -status_replace(struct client *c, struct winlink *wl, const char *fmt) -{ - struct format_tree *ft; - char *expanded; - u_int tag; - - if (fmt == NULL) - return (xstrdup("")); - - if (wl != NULL) - tag = FORMAT_WINDOW|wl->window->id; - else - tag = FORMAT_NONE; - if (c->flags & CLIENT_STATUSFORCE) - ft = format_create(c, NULL, tag, FORMAT_STATUS|FORMAT_FORCE); - else - ft = format_create(c, NULL, tag, FORMAT_STATUS); - format_defaults(ft, c, NULL, wl, NULL); - - expanded = format_expand_time(ft, fmt); - + /* Free the format tree. */ format_free(ft); - return (expanded); -} -/* Return winlink status line entry and adjust gc as necessary. */ -static char * -status_print(struct client *c, struct winlink *wl, struct grid_cell *gc) -{ - struct options *oo = wl->window->options; - struct session *s = c->session; - const char *fmt; - char *text; - - style_apply_update(gc, oo, "window-status-style"); - fmt = options_get_string(oo, "window-status-format"); - if (wl == s->curw) { - style_apply_update(gc, oo, "window-status-current-style"); - fmt = options_get_string(oo, "window-status-current-format"); - } - if (wl == TAILQ_FIRST(&s->lastw)) - style_apply_update(gc, oo, "window-status-last-style"); - - if (wl->flags & WINLINK_BELL) - style_apply_update(gc, oo, "window-status-bell-style"); - else if (wl->flags & (WINLINK_ACTIVITY|WINLINK_SILENCE)) - style_apply_update(gc, oo, "window-status-activity-style"); - - text = status_replace(c, wl, fmt); - return (text); + /* Return if the status line has changed. */ + log_debug("%s exit: force=%d, changed=%d", __func__, force, changed); + return (force || changed); } /* Set a status line message. */ @@ -713,8 +490,9 @@ status_message_redraw(struct client *c) style_apply(&gc, s->options, "message-style"); screen_write_start(&ctx, NULL, sl->active); - screen_write_cursormove(&ctx, 0, 0, 0); - for (offset = 0; offset < lines * c->tty.sx; offset++) + screen_write_fast_copy(&ctx, &sl->screen, 0, 0, c->tty.sx, lines - 1); + screen_write_cursormove(&ctx, 0, lines - 1, 0); + for (offset = 0; offset < c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); screen_write_cursormove(&ctx, 0, lines - 1, 0); screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); @@ -864,12 +642,13 @@ status_prompt_redraw(struct client *c) start = c->tty.sx; screen_write_start(&ctx, NULL, sl->active); - screen_write_cursormove(&ctx, 0, 0, 0); - for (offset = 0; offset < lines * c->tty.sx; offset++) + screen_write_fast_copy(&ctx, &sl->screen, 0, 0, c->tty.sx, lines - 1); + screen_write_cursormove(&ctx, 0, lines - 1, 0); + for (offset = 0; offset < c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); - screen_write_cursormove(&ctx, 0, 0, 0); + screen_write_cursormove(&ctx, 0, lines - 1, 0); screen_write_nputs(&ctx, start, &gc, "%s", c->prompt_string); - screen_write_cursormove(&ctx, start, 0, 0); + screen_write_cursormove(&ctx, start, lines - 1, 0); left = c->tty.sx - start; if (left == 0) diff --git a/style.c b/style.c index 293c70f161..c3d2960d70 100644 --- a/style.c +++ b/style.c @@ -19,6 +19,8 @@ #include +#include +#include #include #include "tmux.h" @@ -28,7 +30,12 @@ /* Default style. */ static struct style style_default = { - { 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } } + { 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } }, + + STYLE_ALIGN_DEFAULT, + STYLE_LIST_OFF, + + STYLE_RANGE_NONE, 0 }; /* @@ -40,8 +47,8 @@ int style_parse(struct style *sy, const struct grid_cell *base, const char *in) { struct style saved; - const char delimiters[] = " ,"; - char tmp[32]; + const char delimiters[] = " ,", *cp; + char tmp[256], *found; int value; size_t end; @@ -68,6 +75,60 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) sy->gc.bg = base->bg; sy->gc.attr = base->attr; sy->gc.flags = base->flags; + } else if (strcasecmp(tmp, "nolist") == 0) + sy->list = STYLE_LIST_OFF; + else if (strncasecmp(tmp, "list=", 5) == 0) { + if (strcasecmp(tmp + 5, "on") == 0) + sy->list = STYLE_LIST_ON; + else if (strcasecmp(tmp + 5, "focus") == 0) + sy->list = STYLE_LIST_FOCUS; + else if (strcasecmp(tmp + 5, "left-marker") == 0) + sy->list = STYLE_LIST_LEFT_MARKER; + else if (strcasecmp(tmp + 5, "right-marker") == 0) + sy->list = STYLE_LIST_RIGHT_MARKER; + else + goto error; + } else if (strcasecmp(tmp, "norange") == 0) { + sy->range_type = style_default.range_type; + sy->range_argument = style_default.range_type; + } else if (end > 6 && strncasecmp(tmp, "range=", 6) == 0) { + found = strchr(tmp + 6, '|'); + if (found != NULL) { + *found++ = '\0'; + if (*found == '\0') + goto error; + for (cp = found; *cp != '\0'; cp++) { + if (!isdigit((u_char)*cp)) + goto error; + } + } + if (strcasecmp(tmp + 6, "left") == 0) { + if (found != NULL) + goto error; + sy->range_type = STYLE_RANGE_LEFT; + sy->range_argument = 0; + } else if (strcasecmp(tmp + 6, "right") == 0) { + if (found != NULL) + goto error; + sy->range_type = STYLE_RANGE_RIGHT; + sy->range_argument = 0; + } else if (strcasecmp(tmp + 6, "window") == 0) { + if (found == NULL) + goto error; + sy->range_type = STYLE_RANGE_WINDOW; + sy->range_argument = atoi(found); + } + } else if (strcasecmp(tmp, "noalign") == 0) + sy->align = style_default.align; + else if (end > 6 && strncasecmp(tmp, "align=", 6) == 0) { + if (strcasecmp(tmp + 6, "left") == 0) + sy->align = STYLE_ALIGN_LEFT; + else if (strcasecmp(tmp + 6, "centre") == 0) + sy->align = STYLE_ALIGN_CENTRE; + else if (strcasecmp(tmp + 6, "right") == 0) + sy->align = STYLE_ALIGN_RIGHT; + else + goto error; } else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) { if ((value = colour_fromstring(tmp + 3)) == -1) goto error; @@ -111,11 +172,49 @@ style_tostring(struct style *sy) { struct grid_cell *gc = &sy->gc; int off = 0; - const char *comma = ""; + const char *comma = "", *tmp; static char s[256]; + char b[16]; *s = '\0'; + if (sy->list != STYLE_LIST_OFF) { + if (sy->list == STYLE_LIST_ON) + tmp = "on"; + else if (sy->list == STYLE_LIST_FOCUS) + tmp = "focus"; + else if (sy->list == STYLE_LIST_LEFT_MARKER) + tmp = "left-marker"; + else if (sy->list == STYLE_LIST_RIGHT_MARKER) + tmp = "right-marker"; + off += xsnprintf(s + off, sizeof s - off, "%slist=%s", comma, + tmp); + comma = ","; + } + if (sy->range_type != STYLE_RANGE_NONE) { + if (sy->range_type == STYLE_RANGE_LEFT) + tmp = "left"; + else if (sy->range_type == STYLE_RANGE_RIGHT) + tmp = "right"; + else if (sy->range_type == STYLE_RANGE_WINDOW) { + snprintf(b, sizeof b, "window|%u", sy->range_argument); + tmp = b; + } + off += xsnprintf(s + off, sizeof s - off, "%srange=%s", comma, + tmp); + comma = ","; + } + if (sy->align != STYLE_ALIGN_DEFAULT) { + if (sy->align == STYLE_ALIGN_LEFT) + tmp = "left"; + else if (sy->align == STYLE_ALIGN_CENTRE) + tmp = "centre"; + else if (sy->align == STYLE_ALIGN_RIGHT) + tmp = "right"; + off += xsnprintf(s + off, sizeof s - off, "%salign=%s", comma, + tmp); + comma = ","; + } if (gc->fg != 8) { off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma, colour_tostring(gc->fg)); @@ -180,7 +279,7 @@ style_copy(struct style *dst, struct style *src) memcpy(dst, src, sizeof *dst); } -/* Check if two styles are the same. */ +/* Check if two styles are (visibly) the same. */ int style_equal(struct style *sy1, struct style *sy2) { @@ -193,6 +292,8 @@ style_equal(struct style *sy1, struct style *sy2) return (0); if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK)) return (0); + if (sy1->align != sy2->align) + return (0); return (1); } diff --git a/tmux.1 b/tmux.1 index c7b7d81252..2399f289cf 100644 --- a/tmux.1 +++ b/tmux.1 @@ -251,6 +251,7 @@ client. .It ! Break the current pane out of the window. .It \&" +.\" " Split the current pane into two, top and bottom. .It # List all paste buffers. @@ -2838,9 +2839,22 @@ is on. The values are the same as those for .Ic activity-action . .It Xo Ic status -.Op Ic on | off +.Op Ic off | on | 2 | 3 | 4 | 5 .Xc -Show or hide the status line. +Show or hide the status line or specify its size. +Using +.Ic on +gives a status line one row in height; +.Ic 2 , +.Ic 3 , +.Ic 4 +or +.Ic 5 +more rows. +.It Ic status-format[] Ar format +Specify the format to be used for each line of the status line. +The default builds the top status line from the various individual status +options below. .It Ic status-interval Ar interval Update the status line every .Ar interval @@ -3669,6 +3683,7 @@ For example, to get a list of windows formatted like the status line: .Bd -literal -offset indent #{W:#{E:window-status-format} ,#{E:window-status-current-format} } .Ed +.Pp A prefix of the form .Ql s/foo/bar/: will substitute @@ -3872,8 +3887,9 @@ for the terminal default colour; or a hexadecimal RGB string such as Set the background colour. .It Ic none Set no attributes (turn off any active attributes). -.It Xo Ic bright (or -.Ic bold ) +.It Xo Ic bright +(or +.Ic bold ) , .Ic dim , .Ic underscore , .Ic blink , @@ -3890,6 +3906,54 @@ Set an attribute. Any of the attributes may be prefixed with .Ql no to unset. +.It Xo Ic align=left +(or +.Ic noalign ) , +.Ic align=centre , +.Ic align=right +.Xc +Align text to the left, centre or right of the available space if appropriate. +.It Xo Ic list=on , +.Ic list=focus , +.Ic list=left-marker , +.Ic list=right=marker , +.Ic nolist +.Xc +Mark the position of the various window list components in the +.Ic status-format +option: +.Ic list=on +marks the start of the list; +.Ic list=focus +is the part of the list that should be kept in focus if the entire list won't fit +in the available space (typically the current window); +.Ic list=left-marker +and +.Ic list=right-marker +mark the text to be used to mark that text has been trimmed from the left or +right of the list if there is not enough space. +.It Xo Ic range=left , +.Ic range=right , +.Ic range=window|X , +.Ic norange +.Xc +Mark a range in the +. Ic status-format +option. +.Ic range=left +and +.Ic range=right +are the text used for the +.Ql StatusLeft +and +.Ql StatusRight +mouse keys. +.Ic range=window|X +is the range for a window passed to the +.Ql Status +mouse key, where +.Ql X +is a window index. .El .Pp Examples are: diff --git a/tmux.h b/tmux.h index 9adef27f79..e6ed430bc0 100644 --- a/tmux.h +++ b/tmux.h @@ -635,9 +635,50 @@ struct grid { struct grid_line *linedata; }; +/* Style alignment. */ +enum style_align { + STYLE_ALIGN_DEFAULT, + STYLE_ALIGN_LEFT, + STYLE_ALIGN_CENTRE, + STYLE_ALIGN_RIGHT +}; + +/* Style list. */ +enum style_list { + STYLE_LIST_OFF, + STYLE_LIST_ON, + STYLE_LIST_FOCUS, + STYLE_LIST_LEFT_MARKER, + STYLE_LIST_RIGHT_MARKER, +}; + +/* Style range. */ +enum style_range_type { + STYLE_RANGE_NONE, + STYLE_RANGE_LEFT, + STYLE_RANGE_RIGHT, + STYLE_RANGE_WINDOW +}; +struct style_range { + enum style_range_type type; + u_int argument; + + u_int start; + u_int end; /* not included */ + + TAILQ_ENTRY(style_range) entry; +}; +TAILQ_HEAD(style_ranges, style_range); + /* Style option. */ struct style { - struct grid_cell gc; + struct grid_cell gc; + + enum style_align align; + enum style_list list; + + enum style_range_type range_type; + u_int range_argument; }; /* Hook data structures. */ @@ -869,10 +910,6 @@ struct winlink { struct session *session; struct window *window; - size_t status_width; - struct grid_cell status_cell; - char *status_text; - int flags; #define WINLINK_BELL 0x1 #define WINLINK_ACTIVITY 0x2 @@ -954,6 +991,7 @@ struct session { struct winlinks windows; int statusat; + u_int statuslines; struct hooks *hooks; struct options *options; @@ -998,7 +1036,9 @@ struct mouse_event { int valid; key_code key; + int statusat; + u_int statuslines; u_int x; u_int y; @@ -1313,17 +1353,20 @@ struct cmd_entry { }; /* Status line. */ +#define STATUS_LINES_LIMIT 5 +struct status_line_entry { + char *expanded; + struct style_ranges ranges; +}; struct status_line { - struct event timer; + struct event timer; - struct screen screen; - struct screen *active; - int references; - - int window_list_offset; + struct screen screen; + struct screen *active; + int references; - u_int left_size; - u_int right_size; + struct grid_cell style; + struct status_line_entry entries[STATUS_LINES_LIMIT]; }; /* Client connection. */ @@ -1582,6 +1625,7 @@ char *paste_make_sample(struct paste_buffer *); #define FORMAT_PANE 0x80000000U #define FORMAT_WINDOW 0x40000000U struct format_tree; +const char *format_skip(const char *s, const char *end); int format_true(const char *); struct format_tree *format_create(struct client *, struct cmdq_item *, int, int); @@ -1604,6 +1648,14 @@ void format_defaults_paste_buffer(struct format_tree *, struct paste_buffer *); void format_lost_client(struct client *); +/* format-draw.c */ +void format_draw(struct screen_write_ctx *, + const struct grid_cell *, u_int, const char *, + struct style_ranges *); +u_int format_width(const char *); +char *format_trim_left(const char *, u_int); +char *format_trim_right(const char *, u_int); + /* hooks.c */ struct hook; struct hooks *hooks_get(struct session *); @@ -1979,7 +2031,7 @@ void status_timer_start_all(void); void status_update_cache(struct session *); int status_at_line(struct client *); u_int status_line_size(struct client *); -struct window *status_get_window_at(struct client *, u_int); +struct style_range *status_get_range(struct client *, u_int, u_int); void status_init(struct client *); void status_free(struct client *); int status_redraw(struct client *); @@ -2079,9 +2131,6 @@ void screen_write_start(struct screen_write_ctx *, struct window_pane *, struct screen *); void screen_write_stop(struct screen_write_ctx *); void screen_write_reset(struct screen_write_ctx *); -size_t printflike(1, 2) screen_write_cstrlen(const char *, ...); -void printflike(4, 5) screen_write_cnputs(struct screen_write_ctx *, - ssize_t, const struct grid_cell *, const char *, ...); size_t printflike(1, 2) screen_write_strlen(const char *, ...); void printflike(3, 4) screen_write_puts(struct screen_write_ctx *, const struct grid_cell *, const char *, ...); @@ -2418,8 +2467,6 @@ u_int utf8_strwidth(const struct utf8_data *, ssize_t); struct utf8_data *utf8_fromcstr(const char *); char *utf8_tocstr(struct utf8_data *); u_int utf8_cstrwidth(const char *); -char *utf8_rtrimcstr(const char *, u_int); -char *utf8_trimcstr(const char *, u_int); char *utf8_padcstr(const char *, u_int); /* procname.c */ diff --git a/utf8.c b/utf8.c index b25ac06b8f..08990634b2 100644 --- a/utf8.c +++ b/utf8.c @@ -383,66 +383,6 @@ utf8_cstrwidth(const char *s) return (width); } -/* Trim UTF-8 string to width. Caller frees. */ -char * -utf8_trimcstr(const char *s, u_int width) -{ - struct utf8_data *tmp, *next; - char *out; - u_int at; - - tmp = utf8_fromcstr(s); - - at = 0; - for (next = tmp; next->size != 0; next++) { - if (at + next->width > width) { - next->size = 0; - break; - } - at += next->width; - } - - out = utf8_tocstr(tmp); - free(tmp); - return (out); -} - -/* Trim UTF-8 string to width. Caller frees. */ -char * -utf8_rtrimcstr(const char *s, u_int width) -{ - struct utf8_data *tmp, *next, *end; - char *out; - u_int at; - - tmp = utf8_fromcstr(s); - - for (end = tmp; end->size != 0; end++) - /* nothing */; - if (end == tmp) { - free(tmp); - return (xstrdup("")); - } - next = end - 1; - - at = 0; - for (;;) { - if (at + next->width > width) { - next++; - break; - } - at += next->width; - - if (next == tmp) - break; - next--; - } - - out = utf8_tocstr(next); - free(tmp); - return (out); -} - /* Pad UTF-8 string to width. Caller frees. */ char * utf8_padcstr(const char *s, u_int width) diff --git a/window-client.c b/window-client.c index ec98984d1f..e0637a066e 100644 --- a/window-client.c +++ b/window-client.c @@ -217,20 +217,36 @@ window_client_draw(__unused void *modedata, void *itemdata, { struct window_client_itemdata *item = itemdata; struct client *c = item->c; + struct screen *s = ctx->s; struct window_pane *wp; - u_int cx = ctx->s->cx, cy = ctx->s->cy; + u_int cx = s->cx, cy = s->cy, lines, at; if (c->session == NULL || (c->flags & (CLIENT_DEAD|CLIENT_DETACHING))) return; wp = c->session->curw->window->active; - screen_write_preview(ctx, &wp->base, sx, sy - 3); + lines = status_line_size(c); + if (lines >= sy) + lines = 0; + if (status_at_line(c) == 0) + at = lines; + else + at = 0; + + screen_write_cursormove(ctx, cx, cy + at, 0); + screen_write_preview(ctx, &wp->base, sx, sy - 2 - lines); - screen_write_cursormove(ctx, cx, cy + sy - 2, 0); + if (at != 0) + screen_write_cursormove(ctx, cx, cy + 2, 0); + else + screen_write_cursormove(ctx, cx, cy + sy - 1 - lines, 0); screen_write_hline(ctx, sx, 0, 0); - screen_write_cursormove(ctx, cx, cy + sy - 1, 0); - screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, 1); + if (at != 0) + screen_write_cursormove(ctx, cx, cy, 0); + else + screen_write_cursormove(ctx, cx, cy + sy - lines, 0); + screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, lines); } static struct screen * diff --git a/window.c b/window.c index a74d01d7ea..8539c9cad0 100644 --- a/window.c +++ b/window.c @@ -217,7 +217,6 @@ winlink_remove(struct winlinks *wwl, struct winlink *wl) } RB_REMOVE(winlinks, wwl, wl); - free(wl->status_text); free(wl); } From c62404673e873c7fae7151a6e910f1b9354b7ecf Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 21:01:04 +0000 Subject: [PATCH 358/836] Add some bits to the STATUS LINE section about the new option. --- tmux.1 | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tmux.1 b/tmux.1 index 2399f289cf..5075621d54 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4088,15 +4088,20 @@ is used, the output is formatted as a set of Bourne shell commands. .Nm includes an optional status line which is displayed in the bottom line of each terminal. -By default, the status line is enabled (it may be disabled with the +.Pp +By default, the status line is enabled and one line in height (it may be +disabled or made multiple lines with the .Ic status session option) and contains, from left-to-right: the name of the current session in square brackets; the window list; the title of the active pane in double quotes; and the time and date. .Pp -The status line is made of three parts: configurable left and right sections -(which may contain dynamic content such as the time or output from a shell -command, see the +Each line of the status line is configured with the +.Ic status-format +option. +The default is made of three parts: configurable left and right sections (which +may contain dynamic content such as the time or output from a shell command, +see the .Ic status-left , .Ic status-left-length , .Ic status-right , From f34ebfed7698ce41fe7bae756c0bb0c485e8bfdb Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 21:46:01 +0000 Subject: [PATCH 359/836] The individual -fg, -bg and -attr options have been deprecated (in favour of -style), undocumented and hidden from show-options since 2014. Remove them, except for status-fg and status-bg. --- cmd-set-option.c | 23 +++-- cmd-show-options.c | 4 - options-table.c | 247 --------------------------------------------- options.c | 45 --------- tmux.h | 6 -- 5 files changed, 12 insertions(+), 313 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index ddbfc33441..96428d7345 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -81,6 +81,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) char *name, *argument, *value = NULL, *cause; const char *target; int window, idx, already, error, ambiguous; + struct style *sy; /* Expand argument. */ c = cmd_find_client(item, NULL, 1); @@ -247,6 +248,16 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) tty_keys_build(&loop->tty); } } + if (strcmp(name, "status-fg") == 0 || strcmp(name, "status-bg") == 0) { + sy = options_get_style(oo, "status-style"); + sy->gc.fg = options_get_number(oo, "status-fg"); + sy->gc.bg = options_get_number(oo, "status-bg"); + } + if (strcmp(name, "status-style") == 0) { + sy = options_get_style(oo, "status-style"); + options_set_number(oo, "status-fg", sy->gc.fg); + options_set_number(oo, "status-bg", sy->gc.bg); + } if (strcmp(name, "status") == 0 || strcmp(name, "status-interval") == 0) status_timer_start_all(); @@ -342,16 +353,7 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, cmdq_error(item, "bad colour: %s", value); return (-1); } - o = options_set_number(oo, oe->name, number); - options_style_update_new(oo, o); - return (0); - case OPTIONS_TABLE_ATTRIBUTES: - if ((number = attributes_fromstring(value)) == -1) { - cmdq_error(item, "bad attributes: %s", value); - return (-1); - } - o = options_set_number(oo, oe->name, number); - options_style_update_new(oo, o); + options_set_number(oo, oe->name, number); return (0); case OPTIONS_TABLE_FLAG: return (cmd_set_option_flag(item, oe, oo, value)); @@ -363,7 +365,6 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, cmdq_error(item, "bad style: %s", value); return (-1); } - options_style_update_old(oo, o); return (0); case OPTIONS_TABLE_ARRAY: break; diff --git a/cmd-show-options.c b/cmd-show-options.c index 872f0c454e..79827e32a7 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -173,10 +173,6 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item, o = options_first(oo); while (o != NULL) { oe = options_table_entry(o); - if (oe != NULL && oe->style != NULL) { - o = options_next(o); - continue; - } if (!options_isarray(o)) cmd_show_options_print(self, item, o, -1); else { diff --git a/options-table.c b/options-table.c index a2a3ffe69c..d4a64b38ea 100644 --- a/options-table.c +++ b/options-table.c @@ -315,54 +315,12 @@ const struct options_table_entry options_table[] = { .default_str = "lock -np" }, - { .name = "message-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "message-style" - }, - - { .name = "message-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 3, - .style = "message-style" - }, - - { .name = "message-command-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "message-command-style" - }, - - { .name = "message-command-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "message-command-style" - }, - - { .name = "message-command-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 3, - .style = "message-command-style" - }, - { .name = "message-command-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_SESSION, .default_str = "bg=black,fg=yellow" }, - { .name = "message-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "message-style" - }, - { .name = "message-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_SESSION, @@ -427,25 +385,16 @@ const struct options_table_entry options_table[] = { .default_num = 1 }, - { .name = "status-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "status-style" - }, - { .name = "status-bg", .type = OPTIONS_TABLE_COLOUR, .scope = OPTIONS_TABLE_SESSION, .default_num = 2, - .style = "status-style" }, { .name = "status-fg", .type = OPTIONS_TABLE_COLOUR, .scope = OPTIONS_TABLE_SESSION, .default_num = 0, - .style = "status-style" }, { .name = "status-format", @@ -482,27 +431,6 @@ const struct options_table_entry options_table[] = { .default_str = "[#S] " }, - { .name = "status-left-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "status-left-style" - }, - - { .name = "status-left-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 8, - .style = "status-left-style" - }, - - { .name = "status-left-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 8, - .style = "status-left-style" - }, - { .name = "status-left-length", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SESSION, @@ -532,27 +460,6 @@ const struct options_table_entry options_table[] = { "\"#{=21:pane_title}\" %H:%M %d-%b-%y" }, - { .name = "status-right-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 0, - .style = "status-right-style" - }, - - { .name = "status-right-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 8, - .style = "status-right-style" - }, - - { .name = "status-right-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_SESSION, - .default_num = 8, - .style = "status-right-style" - }, - { .name = "status-right-length", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SESSION, @@ -667,27 +574,6 @@ const struct options_table_entry options_table[] = { .default_num = 80 }, - { .name = "mode-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 0, - .style = "mode-style" - }, - - { .name = "mode-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 3, - .style = "mode-style" - }, - - { .name = "mode-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 0, - .style = "mode-style" - }, - { .name = "mode-keys", .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_WINDOW, @@ -737,20 +623,6 @@ const struct options_table_entry options_table[] = { .default_num = 0 }, - { .name = "pane-active-border-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "pane-active-border-style" - }, - - { .name = "pane-active-border-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 2, - .style = "pane-active-border-style" - }, - { .name = "pane-active-border-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, @@ -765,20 +637,6 @@ const struct options_table_entry options_table[] = { .default_num = 0 }, - { .name = "pane-border-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "pane-border-style" - }, - - { .name = "pane-border-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "pane-border-style" - }, - { .name = "pane-border-format", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_WINDOW, @@ -830,95 +688,18 @@ const struct options_table_entry options_table[] = { .default_str = "default" }, - { .name = "window-status-activity-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = GRID_ATTR_REVERSE, - .style = "window-status-activity-style" - }, - - { .name = "window-status-activity-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-activity-style" - }, - - { .name = "window-status-activity-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-activity-style" - }, - { .name = "window-status-activity-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, .default_str = "reverse" }, - { .name = "window-status-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 0, - .style = "window-status-style" - }, - - { .name = "window-status-bell-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = GRID_ATTR_REVERSE, - .style = "window-status-bell-style" - }, - - { .name = "window-status-bell-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-bell-style" - }, - - { .name = "window-status-bell-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-bell-style" - }, - { .name = "window-status-bell-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, .default_str = "reverse" }, - { .name = "window-status-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-style" - }, - - { .name = "window-status-current-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 0, - .style = "window-status-current-style" - }, - - { .name = "window-status-current-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-current-style" - }, - - { .name = "window-status-current-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-current-style" - }, - { .name = "window-status-current-format", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_WINDOW, @@ -931,40 +712,12 @@ const struct options_table_entry options_table[] = { .default_str = "default" }, - { .name = "window-status-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-style" - }, - { .name = "window-status-format", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_WINDOW, .default_str = "#I:#W#{?window_flags,#{window_flags}, }" }, - { .name = "window-status-last-attr", - .type = OPTIONS_TABLE_ATTRIBUTES, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 0, - .style = "window-status-last-style" - }, - - { .name = "window-status-last-bg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-last-style" - }, - - { .name = "window-status-last-fg", - .type = OPTIONS_TABLE_COLOUR, - .scope = OPTIONS_TABLE_WINDOW, - .default_num = 8, - .style = "window-status-last-style" - }, - { .name = "window-status-last-style", .type = OPTIONS_TABLE_STYLE, .scope = OPTIONS_TABLE_WINDOW, diff --git a/options.c b/options.c index 6a7c37d642..369776e30d 100644 --- a/options.c +++ b/options.c @@ -78,7 +78,6 @@ static struct options_entry *options_add(struct options *, const char *); ((o)->tableentry->type == OPTIONS_TABLE_NUMBER || \ (o)->tableentry->type == OPTIONS_TABLE_KEY || \ (o)->tableentry->type == OPTIONS_TABLE_COLOUR || \ - (o)->tableentry->type == OPTIONS_TABLE_ATTRIBUTES || \ (o)->tableentry->type == OPTIONS_TABLE_FLAG || \ (o)->tableentry->type == OPTIONS_TABLE_CHOICE)) #define OPTIONS_IS_STYLE(o) \ @@ -416,9 +415,6 @@ options_tostring(struct options_entry *o, int idx, int numeric) case OPTIONS_TABLE_COLOUR: tmp = colour_tostring(o->number); break; - case OPTIONS_TABLE_ATTRIBUTES: - tmp = attributes_tostring(o->number); - break; case OPTIONS_TABLE_FLAG: if (numeric) xsnprintf(s, sizeof s, "%lld", o->number); @@ -708,44 +704,3 @@ options_scope_from_flags(struct args *args, int window, return (OPTIONS_TABLE_SESSION); } } - -void -options_style_update_new(struct options *oo, struct options_entry *o) -{ - const char *newname = o->tableentry->style; - struct options_entry *new; - - if (newname == NULL) - return; - new = options_get_only(oo, newname); - if (new == NULL) - new = options_set_style(oo, newname, 0, "default"); - - if (strstr(o->name, "-bg") != NULL) - new->style.gc.bg = o->number; - else if (strstr(o->name, "-fg") != NULL) - new->style.gc.fg = o->number; - else if (strstr(o->name, "-attr") != NULL) - new->style.gc.attr = o->number; -} - -void -options_style_update_old(struct options *oo, struct options_entry *o) -{ - char newname[128]; - int size; - - size = strrchr(o->name, '-') - o->name; - - xsnprintf(newname, sizeof newname, "%.*s-bg", size, o->name); - if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.gc.bg); - - xsnprintf(newname, sizeof newname, "%.*s-fg", size, o->name); - if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.gc.fg); - - xsnprintf(newname, sizeof newname, "%.*s-attr", size, o->name); - if (options_get(oo, newname) != NULL) - options_set_number(oo, newname, o->style.gc.attr); -} diff --git a/tmux.h b/tmux.h index e6ed430bc0..2194765747 100644 --- a/tmux.h +++ b/tmux.h @@ -1518,7 +1518,6 @@ enum options_table_type { OPTIONS_TABLE_NUMBER, OPTIONS_TABLE_KEY, OPTIONS_TABLE_COLOUR, - OPTIONS_TABLE_ATTRIBUTES, OPTIONS_TABLE_FLAG, OPTIONS_TABLE_CHOICE, OPTIONS_TABLE_STYLE, @@ -1546,7 +1545,6 @@ struct options_table_entry { const char **default_arr; const char *separator; - const char *style; const char *pattern; }; @@ -1723,10 +1721,6 @@ struct options_entry *options_set_style(struct options *, const char *, int, const char *); enum options_table_scope options_scope_from_flags(struct args *, int, struct cmd_find_state *, struct options **, char **); -void options_style_update_new(struct options *, - struct options_entry *); -void options_style_update_old(struct options *, - struct options_entry *); /* options-table.c */ extern const struct options_table_entry options_table[]; From 0406ec0ec29f6dd7b8ea663f50d766bce5904c78 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Mar 2019 21:55:04 +0000 Subject: [PATCH 360/836] Free temporary screens when writing format. --- format-draw.c | 8 +++++++- window.c | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index 52292c98f5..a3bd43510b 100644 --- a/format-draw.c +++ b/format-draw.c @@ -694,8 +694,10 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, } free(fr); - for (i = 0; i < TOTAL; i++) + for (i = 0; i < TOTAL; i++) { + screen_write_stop(&ctx[i]); log_debug("%s: width %s is %u", __func__, names[i], width[i]); + } if (focus_start != -1 && focus_end != -1) log_debug("focus is %d-%d", focus_start, focus_end); TAILQ_FOREACH(fr, &frs, entry) { @@ -748,6 +750,10 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, format_free_range(&frs, fr); } + /* Free the screens. */ + for (i = 0; i < TOTAL; i++) + screen_free(&s[i]); + /* Restore the original cursor position. */ screen_write_cursormove(octx, ocx, ocy, 0); } diff --git a/window.c b/window.c index 8539c9cad0..3ec5d50444 100644 --- a/window.c +++ b/window.c @@ -864,6 +864,8 @@ window_pane_destroy(struct window_pane *wp) input_free(wp); + screen_free(&wp->status_screen); + screen_free(&wp->base); if (wp->saved_grid != NULL) grid_destroy(wp->saved_grid); From b24c9e34a9581773de7bc67da81ac25da97dcd1a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 19 Mar 2019 13:35:42 +0000 Subject: [PATCH 361/836] Rename the first KEY BINDINGS section to DEFAULT KEY BINDINGS. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 5075621d54..1ff00bbae7 100644 --- a/tmux.1 +++ b/tmux.1 @@ -230,7 +230,7 @@ If no commands are specified, the .Ic new-session command is assumed. .El -.Sh KEY BINDINGS +.Sh DEFAULT KEY BINDINGS .Nm may be controlled from an attached client by using a key combination of a prefix key, From 92732a25405d1bf3d6fc69d9b4d6afe8c6985492 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 19 Mar 2019 14:39:46 +0000 Subject: [PATCH 362/836] Add to TODO. --- TODO | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/TODO b/TODO index 0da4e49ab5..81ae7012da 100644 --- a/TODO +++ b/TODO @@ -119,6 +119,7 @@ new-session (issue 1498) * multiple column panes (issue 1503) * support for ZERO WIDTH JOINER U+200D + * individual pane synchronize-panes (with pane options?); issue 1638 - hooks * more hooks for various things @@ -159,7 +160,5 @@ TODO soonish maybe: silly really though), reflow performance (can reflow blocks on demand). It would possibly be good if history-limit could be global and collected LRU. -- Formats to get the default formats for various things, notably - choose-tree. GitHub issue 1634. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. From 161b57869e12a0fd8a95965e98b4866f6055f860 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 19 Mar 2019 19:01:50 +0000 Subject: [PATCH 363/836] Add a cursor_character format. --- format.c | 17 +++++++++++++++++ tmux.1 | 1 + 2 files changed, 18 insertions(+) diff --git a/format.c b/format.c index 30391da1b6..8fe0b55bf3 100644 --- a/format.c +++ b/format.c @@ -685,6 +685,21 @@ format_cb_pane_in_mode(struct format_tree *ft, struct format_entry *fe) xasprintf(&fe->value, "%u", n); } +/* Callback for cursor_character. */ +static void +format_cb_cursor_character(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp = ft->wp; + struct grid_cell gc; + + if (wp == NULL) + return; + + grid_view_get_cell(wp->base.grid, wp->base.cx, wp->base.cy, &gc); + if (~gc.flags & GRID_FLAG_PADDING) + xasprintf(&fe->value, "%.*s", (int)gc.data.size, gc.data.data); +} + /* Merge a format tree. */ static void format_merge(struct format_tree *ft, struct format_tree *from) @@ -2031,6 +2046,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "cursor_x", "%u", wp->base.cx); format_add(ft, "cursor_y", "%u", wp->base.cy); + format_add_cb(ft, "cursor_character", format_cb_cursor_character); + format_add(ft, "scroll_region_upper", "%u", wp->base.rupper); format_add(ft, "scroll_region_lower", "%u", wp->base.rlower); diff --git a/tmux.1 b/tmux.1 index 1ff00bbae7..8d8c3c00a2 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3744,6 +3744,7 @@ The following variables are available, where appropriate: .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands" .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands" .It Li "cursor_flag" Ta "" Ta "Pane cursor flag" +.It Li "cursor_character" Ta "Character at cursor in pane" .It Li "cursor_x" Ta "" Ta "Cursor X position in pane" .It Li "cursor_y" Ta "" Ta "Cursor Y position in pane" .It Li "history_bytes" Ta "" Ta "Number of bytes in window history" From 8b74e959efd3b60aa1283b9c1cb1ce943ee90181 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 19 Mar 2019 21:09:51 +0000 Subject: [PATCH 364/836] Include window-status-style and window-status-current style in the format. --- options-table.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/options-table.c b/options-table.c index d4a64b38ea..b3bc84da49 100644 --- a/options-table.c +++ b/options-table.c @@ -74,25 +74,43 @@ static const char *options_table_window_size_list[] = { "#[list=on align=#{status-justify}]" \ "#[list=left-marker]<#[list=right-marker]>#[list=on]" \ "#{W:" \ - "#[range=window|#{window_index}" \ - "#{?window_last_flag, #{window-status-last-style},}" \ - "#{?window_bell_flag," \ - " #{window-status-bell-style}," \ - "#{?window_activity_flag," \ - " #{window-status-activity-style},}" \ + "#[range=window|#{window_index} " \ + "#{window-status-style}" \ + "#{?#{&&:#{window_last_flag}," \ + "#{!=:#{window-status-last-style},default}}, " \ + "#{window-status-last-style}," \ + "}" \ + "#{?#{&&:#{window_bell_flag}," \ + "#{!=:#{window-status-bell-style},default}}, " \ + "#{window-status-bell-style}," \ + "#{?#{&&:#{window_activity_flag}," \ + "#{!=:" \ + "#{window-status-activity-style}," \ + "default}}, " \ + "#{window-status-activity-style}," \ "}" \ + "}" \ "]" \ "#{T:window-status-format}" \ "#[norange default]" \ "#{?window_end_flag,,#{window-status-separator}}" \ "," \ - "#[range=window|#{window_index} list=focus" \ - "#{?window_last_flag, #{window-status-last-style},}" \ - "#{?window_bell_flag," \ - " #{window-status-bell-style}," \ - "#{?window_activity_flag," \ - " #{window-status-activity-style},}" \ + "#[range=window|#{window_index} list=focus " \ + "#{window-status-current-style}" \ + "#{?#{&&:#{window_last_flag}," \ + "#{!=:#{window-status-last-style},default}}, " \ + "#{window-status-last-style}," \ + "}" \ + "#{?#{&&:#{window_bell_flag}," \ + "#{!=:#{window-status-bell-style},default}}, " \ + "#{window-status-bell-style}," \ + "#{?#{&&:#{window_activity_flag}," \ + "#{!=:" \ + "#{window-status-activity-style}," \ + "default}}, " \ + "#{window-status-activity-style}," \ "}" \ + "}" \ "]" \ "#{T:window-status-current-format}" \ "#[norange list=on default]" \ From 3b959c05ffe2173bf0fb22ca0d3dd6461d12f173 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Mar 2019 07:13:02 +0000 Subject: [PATCH 365/836] Bit more logging to show drawing errors. --- format-draw.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index a3bd43510b..84af1145ff 100644 --- a/format-draw.c +++ b/format-draw.c @@ -527,6 +527,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, style_set(&sy, base); TAILQ_INIT(&frs); + log_debug("%s: %s", __func__, expanded); /* * We build three screens for left, right, centre alignment, one for @@ -574,10 +575,13 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, /* This is a style. Work out where the end is and parse it. */ end = format_skip(cp + 2, "]"); - if (end == NULL) + if (end == NULL) { + log_debug("no terminating ] at '%s'", cp + 2); return; + } tmp = xstrndup(cp + 2, end - (cp + 2)); if (style_parse(&sy, base, tmp) != 0) { + log_debug("invalid style '%s'", tmp); free(tmp); return; } From ae46a19b8e2bafd7c3fc5cba99b9f430c8cf9b1c Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Mar 2019 07:24:03 +0000 Subject: [PATCH 366/836] Ignore invalid styles rather than throwing away the whole format, this matches what we used to do. --- format-draw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index 84af1145ff..40ba27bf5e 100644 --- a/format-draw.c +++ b/format-draw.c @@ -583,7 +583,8 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, if (style_parse(&sy, base, tmp) != 0) { log_debug("invalid style '%s'", tmp); free(tmp); - return; + cp = end + 1; + continue; } log_debug("style '%s' -> '%s'", tmp, style_tostring(&sy)); free(tmp); From 458b87150b3fe989bb3d5d611f1d010a71839117 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Mar 2019 07:28:31 +0000 Subject: [PATCH 367/836] Do not leak ranges on error. --- format-draw.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index 40ba27bf5e..ed50236f9f 100644 --- a/format-draw.c +++ b/format-draw.c @@ -577,7 +577,9 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, end = format_skip(cp + 2, "]"); if (end == NULL) { log_debug("no terminating ] at '%s'", cp + 2); - return; + TAILQ_FOREACH_SAFE(fr, &frs, entry, fr1) + format_free_range(&frs, fr); + goto out; } tmp = xstrndup(cp + 2, end - (cp + 2)); if (style_parse(&sy, base, tmp) != 0) { @@ -755,6 +757,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, format_free_range(&frs, fr); } +out: /* Free the screens. */ for (i = 0; i < TOTAL; i++) screen_free(&s[i]); From ed962e76129d499012bee92617620d3703245482 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Mar 2019 07:30:05 +0000 Subject: [PATCH 368/836] Include function name in logging. --- format-draw.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/format-draw.c b/format-draw.c index ed50236f9f..dd03435c8e 100644 --- a/format-draw.c +++ b/format-draw.c @@ -576,19 +576,21 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, /* This is a style. Work out where the end is and parse it. */ end = format_skip(cp + 2, "]"); if (end == NULL) { - log_debug("no terminating ] at '%s'", cp + 2); + log_debug("%s: no terminating ] at '%s'", __func__, + cp + 2); TAILQ_FOREACH_SAFE(fr, &frs, entry, fr1) format_free_range(&frs, fr); goto out; } tmp = xstrndup(cp + 2, end - (cp + 2)); if (style_parse(&sy, base, tmp) != 0) { - log_debug("invalid style '%s'", tmp); + log_debug("%s: invalid style '%s'", __func__, tmp); free(tmp); cp = end + 1; continue; } - log_debug("style '%s' -> '%s'", tmp, style_tostring(&sy)); + log_debug("%s: style '%s' -> '%s'", __func__, tmp, + style_tostring(&sy)); free(tmp); /* Check the list state. */ @@ -706,7 +708,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, log_debug("%s: width %s is %u", __func__, names[i], width[i]); } if (focus_start != -1 && focus_end != -1) - log_debug("focus is %d-%d", focus_start, focus_end); + log_debug("%s: focus %d-%d", __func__, focus_start, focus_end); TAILQ_FOREACH(fr, &frs, entry) { log_debug("%s: range %d|%u is %s %u-%u", __func__, fr->type, fr->argument, names[fr->index], fr->start, fr->end); From 0e0f2f765b762e5be7353c20fb408941116d3247 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 20 Mar 2019 14:01:37 +0000 Subject: [PATCH 369/836] Update CHANGES. --- CHANGES | 145 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 89 insertions(+), 56 deletions(-) diff --git a/CHANGES b/CHANGES index b8d96b7704..55fc012b07 100644 --- a/CHANGES +++ b/CHANGES @@ -1,89 +1,122 @@ CHANGES FROM 2.8 to X.X -* Allow more than one mode to be opened in a pane. Modes are kept on a - stack and retrieved if the same mode is entered again. Exiting the - active mode goes back to the previous one. +* Add format variables for the default formats in the various modes + (tree_mode_format and so on) and add a -a flag to display-message to list + variables with values. + +* Add a -v flag to display-message to show verbose messages as the format is + parsed, this allows formats to be debugged + +* Add support for HPA (\033[`). + +* Add support for origin mode (\033[?6h). + +* No longer clear history on RIS. + +* Extend the #[] style syntax and use that together with previous for mat + changes to allow the status line to be entirely configured with a single + option. + + Now that it is possible to configure their content, enable the existing code + that lets the status line be multiple lines in height. The status option can + now take a value of 2, 3, 4 or 5 (as well as the previou s on or off) to + configure more than one line. The new status-format array option configures + the format of each line, the default just references the existing status-* + options, although some of the more obscure status options may be eliminated + in time. + + Additions to the #[] syntax are: "align" to specify alignment (left, centre, + right), "list" for the window list and "range" to configure ranges of text + for the mouse bindings. + + The "align" keyword can also be used to specify alignment of entries in tree + mode and the pane status lines. + +* Add E: and T: format modifiers to expand a format twice (useful to expand the + value of an option). + +* The individual -fg, -bg and -attr options have been removed; they + were superseded by -style options in tmux 1.9. + +* Allow more than one mode to be opened in a pane. Modes are kept on a stack + and retrieved if the same mode is entered again. Exiting the active mode goes + back to the previous one. * Add support for origin mode. -* When showing command output in copy mode, call it view mode instead - (affects pane_mode format). +* When showing command output in copy mode, call it view mode instead (affects + pane_mode format). * Add -b to display-panes like run-shell. * Handle UTF-8 in word-separators option. -* New "terminal" colour allowing options to use the terminal default - colour rather than inheriting the default from a parent option. +* New "terminal" colour allowing options to use the terminal default colour + rather than inheriting the default from a parent option. * Do not move the cursor in copy mode when the mouse wheel is used. -* Use the same working directory rules for jobs as new windows rather - than always starting in the user's home. +* Use the same working directory rules for jobs as new windows rather than + always starting in the user's home. * Allow panes to be one line or column in size. * Go to last line when goto-line number is out of range in copy mode. -* Yank previously cut text if any with C-y in the command prompt, only - use the buffer if no text has been cut. +* Yank previously cut text if any with C-y in the command prompt, only use the + buffer if no text has been cut. * Add q: format modifier to quote shell special characters. * Add StatusLeft and StatusRight mouse locations (keys such as - MouseDown1StatusLeft) for the status-left and status-right areas of - the status line. + MouseDown1StatusLeft) for the status-left and status-right areas of the + status line. * Add -Z to find-window. -* Support for windows larger than the client. This adds two new - options, window-size and default-size, and a new command, - resize-window. The force-width and force-height options and the - session_width and session_height formats have been removed. - - The new window-size option tells tmux how to work out the size of - windows: largest means it picks the size of the largest session, - smallest the smallest session (similar to the old behaviour) and - manual means that it does not automatically resize - windows. aggressive-resize modifies the choice of session for - largest and smallest as it did before. - - If a window is in a session attached to a client that is too small, - only part of the window is shown. tmux attempts to keep the cursor - visible, so the part of the window displayed is changed as the - cursor moves (with a small delay, to try and avoid excess redrawing - when applications redraw status lines or similar that are not - currently visible). - - Drawing windows which are larger than the client is not as efficient - as those which fit, particularly when the cursor moves, so it is - recommended to avoid using this on slow machines or networks (set - window-size to smallest or manual). - - The resize-window command can be used to resize a window - manually. If it is used, the window-size option is automatically set - to manual for the window (undo this with "setw -u - window-size"). resize-window works in a similar way to resize-pane - (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the - window to the size of the smallest client (what it would be if +* Support for windows larger than the client. This adds two new options, + window-size and default-size, and a new command, resize-window. The + force-width and force-height options and the session_width and session_height + formats have been removed. + + The new window-size option tells tmux how to work out the size of windows: + largest means it picks the size of the largest session, smallest the smallest + session (similar to the old behaviour) and manual means that it does not + automatically resize windows. aggressive-resize modifies the choice of + session for largest and smallest as it did before. + + If a window is in a session attached to a client that is too small, only part + of the window is shown. tmux attempts to keep the cursor visible, so the part + of the window displayed is changed as the cursor moves (with a small delay, + to try and avoid excess redrawing when applications redraw status lines or + similar that are not currently visible). + + Drawing windows which are larger than the client is not as efficient as those + which fit, particularly when the cursor moves, so it is recommended to avoid + using this on slow machines or networks (set window-size to smallest or + manual). + + The resize-window command can be used to resize a window manually. If it is + used, the window-size option is automatically set to manual for the window + (undo this with "setw -u window-size"). resize-window works in a similar way + to resize-pane (-U -D -L -R -x -y flags) but also has -a and -A flags. -a + sets the window to the size of the smallest client (what it would be if window-size was smallest) and -A the largest. - For the same behaviour as force-width or force-height, use - resize-window -x or -y. + For the same behaviour as force-width or force-height, use resize-window -x + or -y. - If the global window-size option is set to manual, the default-size - option is used for new windows. If -x or -y is used with - new-session, that sets the default-size option for the new session. + If the global window-size option is set to manual, the default-size option is + used for new windows. If -x or -y is used with new-session, that sets the + default-size option for the new session. - The maximum size of a window is 10000x10000. But expect applications - to complain and higher memory use if making a window that big. The - minimum size is the size required for the current layout including - borders. + The maximum size of a window is 10000x10000. But expect applications to + complain and higher memory use if making a window that big. The minimum size + is the size required for the current layout including borders. - The refresh-client command can be used to pan around a window, -U -D - -L -R moves up, down, left or right and -c returns to automatic - cursor tracking. The position is reset when the current window is - changed. + The refresh-client command can be used to pan around a window, -U -D -L -R + moves up, down, left or right and -c returns to automatic cursor + tracking. The position is reset when the current window is changed. CHANGES FROM 2.7 to 2.8 From 9ee1a8f7014dedaa701594ea847a4da98a07073d Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Mar 2019 19:19:11 +0000 Subject: [PATCH 370/836] Improve cursor positioning after reflow by storing the position as an offset into the entire history before reflow and restoring it aftewards. --- grid.c | 81 +++++++++++++++++++++++++++++++------------------------- screen.c | 58 +++++++++++++++++++--------------------- tmux.h | 8 +++--- 3 files changed, 77 insertions(+), 70 deletions(-) diff --git a/grid.c b/grid.c index c63287bdfd..f80163561d 100644 --- a/grid.c +++ b/grid.c @@ -1030,7 +1030,7 @@ grid_reflow_move(struct grid *gd, struct grid_line *from) /* Join line below onto this one. */ static void grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, - u_int width, u_int *cy, int already) + u_int width, int already) { struct grid_line *gl, *from = NULL; struct grid_cell gc; @@ -1128,11 +1128,7 @@ grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, grid_reflow_dead(&gd->linedata[i]); } - /* Adjust cursor and scroll positions. */ - if (*cy > to + lines) - *cy -= lines; - else if (*cy > to) - *cy = to; + /* Adjust scroll position. */ if (gd->hscrolled > to + lines) gd->hscrolled -= lines; else if (gd->hscrolled > to) @@ -1142,7 +1138,7 @@ grid_reflow_join(struct grid *target, struct grid *gd, u_int sx, u_int yy, /* Split this line into several new ones */ static void grid_reflow_split(struct grid *target, struct grid *gd, u_int sx, u_int yy, - u_int at, u_int *cy) + u_int at) { struct grid_line *gl = &gd->linedata[yy], *first; struct grid_cell gc; @@ -1195,9 +1191,7 @@ grid_reflow_split(struct grid *target, struct grid *gd, u_int sx, u_int yy, memcpy(first, gl, sizeof *first); grid_reflow_dead(gl); - /* Adjust the cursor and scroll positions. */ - if (yy <= *cy) - (*cy) += lines - 1; + /* Adjust the scroll position. */ if (yy <= gd->hscrolled) gd->hscrolled += lines - 1; @@ -1206,24 +1200,17 @@ grid_reflow_split(struct grid *target, struct grid *gd, u_int sx, u_int yy, * in the last new line, try to join with the next lines. */ if (width < sx && (flags & GRID_LINE_WRAPPED)) - grid_reflow_join(target, gd, sx, yy, width, cy, 1); + grid_reflow_join(target, gd, sx, yy, width, 1); } /* Reflow lines on grid to new width. */ void -grid_reflow(struct grid *gd, u_int sx, u_int *cursor) +grid_reflow(struct grid *gd, u_int sx) { struct grid *target; struct grid_line *gl; struct grid_cell gc; - u_int yy, cy, width, i, at, first; - struct timeval start, tv; - - gettimeofday(&start, NULL); - - log_debug("%s: %u lines, new width %u", __func__, gd->hsize + gd->sy, - sx); - cy = gd->hsize + (*cursor); + u_int yy, width, i, at, first; /* * Create a destination grid. This is just used as a container for the @@ -1277,7 +1264,7 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) * it was previously wrapped. */ if (width > sx) { - grid_reflow_split(target, gd, sx, yy, at, &cy); + grid_reflow_split(target, gd, sx, yy, at); continue; } @@ -1286,7 +1273,7 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) * of the next line. */ if (gl->flags & GRID_LINE_WRAPPED) - grid_reflow_join(target, gd, sx, yy, width, &cy, 0); + grid_reflow_join(target, gd, sx, yy, width, 0); else grid_reflow_move(target, gl); } @@ -1300,20 +1287,42 @@ grid_reflow(struct grid *gd, u_int sx, u_int *cursor) free(gd->linedata); gd->linedata = target->linedata; free(target); +} - /* - * Update scrolled and cursor positions. - */ - if (gd->hscrolled > gd->hsize) - gd->hscrolled = gd->hsize; - if (cy < gd->hsize) - *cursor = 0; - else - *cursor = cy - gd->hsize; +/* Convert point position to offset from the start of the grid. */ +u_int +grid_to_offset(struct grid *gd, u_int px, u_int py) +{ + u_int yy, offset = 0; + + if (py > gd->hsize + gd->sy - 1) { + px = UINT_MAX; + py = gd->hsize + gd->sy - 1; + } - gettimeofday(&tv, NULL); - timersub(&tv, &start, &tv); - log_debug("%s: now %u lines (in %llu.%06u seconds)", __func__, - gd->hsize + gd->sy, (unsigned long long)tv.tv_sec, - (u_int)tv.tv_usec); + for (yy = 0; yy < py; yy++) + offset += gd->linedata[yy].cellused; + if (px > gd->linedata[yy].cellused) + px = gd->linedata[yy].cellused; + return (offset + px); +} + +/* Convert offset from the start of the grid to point position. */ +void +grid_from_offset(struct grid *gd, u_int offset, u_int *px, u_int *py) +{ + u_int yy; + + *px = *py = 0; + + for (yy = 0; yy < gd->hsize + gd->sy - 1; yy++) { + if (offset <= gd->linedata[yy].cellused) + break; + offset -= gd->linedata[yy].cellused; + } + if (offset < gd->linedata[yy].cellused) + *px = offset; + else + *px = gd->linedata[yy].cellused; + *py = yy; } diff --git a/screen.c b/screen.c index 75d9d09df6..92eb31de96 100644 --- a/screen.c +++ b/screen.c @@ -48,7 +48,6 @@ struct screen_title_entry { }; TAILQ_HEAD(screen_titles, screen_title_entry); -static void screen_resize_x(struct screen *, u_int); static void screen_resize_y(struct screen *, u_int); static void screen_reflow(struct screen *, u_int); @@ -207,13 +206,7 @@ screen_resize(struct screen *s, u_int sx, u_int sy, int reflow) sy = 1; if (sx != screen_size_x(s)) { - screen_resize_x(s, sx); - - /* - * It is unclear what should happen to tabs on resize. xterm - * seems to try and maintain them, rxvt resets them. Resetting - * is simpler and more reliable so let's do that. - */ + s->grid->sx = sx; screen_reset_tabs(s); } else reflow = 0; @@ -225,28 +218,6 @@ screen_resize(struct screen *s, u_int sx, u_int sy, int reflow) screen_reflow(s, sx); } -static void -screen_resize_x(struct screen *s, u_int sx) -{ - struct grid *gd = s->grid; - - if (sx == 0) - fatalx("zero size"); - - /* - * Treat resizing horizontally simply: just ensure the cursor is - * on-screen and change the size. Don't bother to truncate any lines - - * then the data should be accessible if the size is then increased. - * - * The only potential wrinkle is if UTF-8 double-width characters are - * left in the last column, but UTF-8 terminals should deal with this - * sanely. - */ - if (s->cx >= sx) - s->cx = sx - 1; - gd->sx = sx; -} - static void screen_resize_y(struct screen *s, u_int sy) { @@ -493,5 +464,30 @@ screen_select_cell(struct screen *s, struct grid_cell *dst, static void screen_reflow(struct screen *s, u_int new_x) { - grid_reflow(s->grid, new_x, &s->cy); + u_int offset, cx = s->cx, cy = s->grid->hsize + s->cy; + struct timeval start, tv; + + gettimeofday(&start, NULL); + + offset = grid_to_offset(s->grid, cx, cy); + log_debug("%s: cursor %u,%u offset is %u", __func__, cx, cy, offset); + + grid_reflow(s->grid, new_x); + + grid_from_offset(s->grid, offset, &cx, &cy); + log_debug("%s: new cursor is %u,%u", __func__, cx, cy); + + if (cy >= s->grid->hsize) { + s->cx = cx; + s->cy = cy - s->grid->hsize; + } else { + s->cx = 0; + s->cy = 0; + } + + gettimeofday(&tv, NULL); + timersub(&tv, &start, &tv); + + log_debug("%s: reflow took %llu.%06u seconds", __func__, + (unsigned long long)tv.tv_sec, (u_int)tv.tv_usec); } diff --git a/tmux.h b/tmux.h index 2194765747..4e50f117bb 100644 --- a/tmux.h +++ b/tmux.h @@ -2088,6 +2088,8 @@ void grid_get_cell(struct grid *, u_int, u_int, struct grid_cell *); void grid_set_cell(struct grid *, u_int, u_int, const struct grid_cell *); void grid_set_cells(struct grid *, u_int, u_int, const struct grid_cell *, const char *, size_t); +struct grid_line *grid_get_line(struct grid *, u_int); +void grid_adjust_lines(struct grid *, u_int); void grid_clear(struct grid *, u_int, u_int, u_int, u_int, u_int); void grid_clear_lines(struct grid *, u_int, u_int, u_int); void grid_move_lines(struct grid *, u_int, u_int, u_int, u_int); @@ -2096,9 +2098,9 @@ char *grid_string_cells(struct grid *, u_int, u_int, u_int, struct grid_cell **, int, int, int); void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, u_int); -void grid_reflow(struct grid *, u_int, u_int *); -struct grid_line *grid_get_line(struct grid *, u_int); -void grid_adjust_lines(struct grid *, u_int); +void grid_reflow(struct grid *, u_int); +u_int grid_to_offset(struct grid *, u_int, u_int); +void grid_from_offset(struct grid *, u_int, u_int *, u_int *); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); From 7536d57b163952a3c5b8ca492ab269790d8c42ae Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 20 Mar 2019 19:26:20 +0000 Subject: [PATCH 371/836] Update TODO. --- TODO | 2 -- 1 file changed, 2 deletions(-) diff --git a/TODO b/TODO index 81ae7012da..e64a05ea67 100644 --- a/TODO +++ b/TODO @@ -148,8 +148,6 @@ TODO soonish maybe: -- Horizontal cursor position is incorrect after resize (bug), issue 1323. -- Multiple status lines (DONE but not committed yet). - Store hooks as options, issue 1619. - Support buffer prefixes, issue 1501. - copy-pipe should be synchronous, issue 1517. From ef38a420b219b22b230d656c2a49961c9f422152 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 20 Mar 2019 20:02:13 +0000 Subject: [PATCH 372/836] Update TODO. --- TODO | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index e64a05ea67..4e252b5f0c 100644 --- a/TODO +++ b/TODO @@ -153,10 +153,9 @@ TODO soonish maybe: - copy-pipe should be synchronous, issue 1517. - -E flag to pass environment to new-*, issue 1498. - Copy mode searching is slow when there is a big history, issue 1545. -- Grid "block" stuff - some work done, there is an issue - somewhere. Can be used potentially for compression of history (bit - silly really though), reflow performance (can reflow blocks on - demand). It would possibly be good if history-limit could be global - and collected LRU. +- Grid "block" stuff, issue 1269. Can be used potentially for compression of + history (bit silly really though), reflow performance (can reflow blocks on + demand). It would possibly be good if history-limit could be global and + collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. From 04a1fc9d36d78fed7a67a180cc7feb3551a5b851 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Mar 2019 09:33:04 +0000 Subject: [PATCH 373/836] I forgot to document resize-window, window-size and default-size; reminded by okan@. --- tmux.1 | 65 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/tmux.1 b/tmux.1 index 8d8c3c00a2..7b4b65abc9 100644 --- a/tmux.1 +++ b/tmux.1 @@ -625,13 +625,13 @@ refers to a .Nm command, passed with the command and arguments separately, for example: .Bd -literal -offset indent -bind-key F1 set-window-option force-width 81 +bind-key F1 set-option status off .Ed .Pp Or if using .Xr sh 1 : .Bd -literal -offset indent -$ tmux bind-key F1 set-window-option force-width 81 +$ tmux bind-key F1 set-option status off .Ed .Pp Multiple commands may be specified together as part of a @@ -1939,6 +1939,38 @@ and unzoomed (its normal position in the layout). .Fl M begins mouse resizing (only valid if bound to a mouse key binding, see .Sx MOUSE SUPPORT ) . +.It Xo Ic resize-window +.Op Fl aADLRU +.Op Fl t Ar target-window +.Op Fl x Ar width +.Op Fl y Ar height +.Op Ar adjustment +.Xc +.D1 (alias: Ic resizew ) +Resize a window, up, down, left or right by +.Ar adjustment +with +.Fl U , +.Fl D , +.Fl L +or +.Fl R , +or +to an absolute size +with +.Fl x +or +.Fl y . +The +.Ar adjustment +is given in lines or cells (the default is 1). +.Fl A +sets the size of the largest session containing the window; +.Fl a +the size of the smallest. +This command will automatically set +.Ic window-size +to manual in the window options. .It Xo Ic respawn-pane .Op Fl c Ar start-directory .Op Fl k @@ -2698,6 +2730,10 @@ or This option should be configured when .Nm is used as a login shell. +.It Ic default-size Ar XxY +Set the default size of windows when the size is not set or the +.Ic window-size +option is manual. .It Xo Ic destroy-unattached .Op Ic on | off .Xc @@ -3098,16 +3134,6 @@ Set clock colour. .Xc Set clock hour format. .Pp -.It Ic force-height Ar height -.It Ic force-width Ar width -Prevent -.Nm -from resizing a window to greater than -.Ar width -or -.Ar height . -A value of zero restores the default unlimited setting. -.Pp .It Ic main-pane-height Ar height .It Ic main-pane-width Ar width Set the width or height of the main (left or top) pane in the @@ -3295,6 +3321,21 @@ see the .Sx STYLES section. .Pp +.It Xo Ic window-size +.Op Ic smallest | largest | manual +.Xc +Tell +.Nm +how to automatically size windows either the size of the smallest session +containing the window, the size of the largest, or manual size. +See also the +.Ic resize-window +command and the +.Ic default-size +and +.Ic aggressive-resize +options. +.Pp .It Xo Ic wrap-search .Op Ic on | off .Xc From b4a301f8feef6f2fef99988688b27e2aec898bae Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 22 Mar 2019 10:45:17 +0000 Subject: [PATCH 374/836] Clarify that styles can be space or comma separated, from Stephen Zapatka. --- tmux.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index 7b4b65abc9..fc136de62b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3899,7 +3899,7 @@ and A style may be the single term .Ql default to specify the default style (which may inherit from another option) or a space -separated list of the following: +or comma separated list of the following: .Bl -tag -width Ds .It Ic fg=colour Set the foreground colour. @@ -4000,7 +4000,7 @@ is a window index. .Pp Examples are: .Bd -literal -offset indent -fg=yellow,bold,underscore,blink +fg=yellow bold underscore blink bg=black,fg=default,noreverse .Ed .Sh NAMES AND TITLES From 517d673dbe4b7b5ab290203868d871a712624446 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Mar 2019 09:22:09 +0000 Subject: [PATCH 375/836] Ignore mouse on status line which are not part of a range, GitHub issue 1649. --- server-client.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/server-client.c b/server-client.c index eee5dff573..6ef34f832a 100644 --- a/server-client.c +++ b/server-client.c @@ -506,14 +506,13 @@ server_client_check_mouse(struct client *c) m->statusat = status_at_line(c); if (m->statusat != -1 && y >= (u_int)m->statusat && - y < m->statusat + status_line_size(c)) + y < m->statusat + status_line_size(c)) { sr = status_get_range(c, x, y - m->statusat); - else - sr = NULL; - if (sr != NULL) { + if (sr == NULL) + return (KEYC_UNKNOWN); switch (sr->type) { case STYLE_RANGE_NONE: - break; + return (KEYC_UNKNOWN); case STYLE_RANGE_LEFT: where = STATUS_LEFT; break; @@ -522,10 +521,11 @@ server_client_check_mouse(struct client *c) break; case STYLE_RANGE_WINDOW: wl = winlink_find_by_index(&s->windows, sr->argument); - if (wl != NULL) { - m->w = wl->window->id; - where = STATUS; - } + if (wl == NULL) + return (KEYC_UNKNOWN); + m->w = wl->window->id; + + where = STATUS; break; } } From a084f2dcb74c93348b1fd55ddf2f85d29c714fce Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 25 Mar 2019 10:06:03 +0000 Subject: [PATCH 376/836] Add to TODO. --- TODO | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO b/TODO index 4e252b5f0c..d4c2edfd15 100644 --- a/TODO +++ b/TODO @@ -159,3 +159,5 @@ TODO soonish maybe: collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. +- Way to bind mouse keys on empty gap between status left and right and window + list, GitHub issue 1649. From e8f4ca6a52bdfb7d8e2b8c39b867f2e2528a7631 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 25 Mar 2019 12:05:58 +0000 Subject: [PATCH 377/836] Tweaks to example config. --- example_tmux.conf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/example_tmux.conf b/example_tmux.conf index 54de4d6be0..0058ceee33 100644 --- a/example_tmux.conf +++ b/example_tmux.conf @@ -49,11 +49,15 @@ bind F10 selectw -t:19 bind F11 selectw -t:20 bind F12 selectw -t:21 -# Keys to toggle monitoring activity in a window, and synchronize-panes +# A key to toggle between smallest and largest sizes if a window is visible in +# multiple places +bind F set -w window-size + +# Keys to toggle monitoring activity in a window and the synchronize-panes option bind m set monitor-activity bind y set synchronize-panes\; display 'synchronize-panes #{?synchronize-panes,on,off}' -# Create a single default session, because a session is created here, tmux +# Create a single default session - because a session is created here, tmux # should be started with "tmux attach" rather than "tmux new" new -d -s0 -nirssi 'exec irssi' set -t0:0 monitor-activity on From ff4d7d541f50b30203de2f4fa288882e298a930f Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Mar 2019 14:29:36 +0000 Subject: [PATCH 378/836] Fix columns of cursor_character format in list. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index fc136de62b..0fd604a4b9 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3785,7 +3785,7 @@ The following variables are available, where appropriate: .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands" .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands" .It Li "cursor_flag" Ta "" Ta "Pane cursor flag" -.It Li "cursor_character" Ta "Character at cursor in pane" +.It Li "cursor_character" Ta "" Ta "Character at cursor in pane" .It Li "cursor_x" Ta "" Ta "Cursor X position in pane" .It Li "cursor_y" Ta "" Ta "Cursor Y position in pane" .It Li "history_bytes" Ta "" Ta "Number of bytes in window history" From d21f8ecc1356916fab43cfd9668c66f1e8b4bc26 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Mar 2019 18:59:55 +0000 Subject: [PATCH 379/836] Add StatusDefault binding for the mouse on any otherwise unassigned parts of the status line, from Avi Halachmi. --- server-client.c | 88 +++++++++++++++++++++++++++++++++++++++---------- tmux.1 | 20 +++++------ tmux.h | 2 ++ 3 files changed, 82 insertions(+), 28 deletions(-) diff --git a/server-client.c b/server-client.c index 6ef34f832a..3aa159c337 100644 --- a/server-client.c +++ b/server-client.c @@ -419,7 +419,7 @@ server_client_check_mouse(struct client *c) struct timeval tv; struct style_range *sr; enum { NOTYPE, MOVE, DOWN, UP, DRAG, WHEEL, DOUBLE, TRIPLE } type; - enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, BORDER } where; + enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, STATUS_DEFAULT, BORDER } where; type = NOTYPE; where = NOWHERE; @@ -508,25 +508,27 @@ server_client_check_mouse(struct client *c) y >= (u_int)m->statusat && y < m->statusat + status_line_size(c)) { sr = status_get_range(c, x, y - m->statusat); - if (sr == NULL) - return (KEYC_UNKNOWN); - switch (sr->type) { - case STYLE_RANGE_NONE: - return (KEYC_UNKNOWN); - case STYLE_RANGE_LEFT: - where = STATUS_LEFT; - break; - case STYLE_RANGE_RIGHT: - where = STATUS_RIGHT; - break; - case STYLE_RANGE_WINDOW: - wl = winlink_find_by_index(&s->windows, sr->argument); - if (wl == NULL) + if (sr == NULL) { + where = STATUS_DEFAULT; + } else { + switch (sr->type) { + case STYLE_RANGE_NONE: return (KEYC_UNKNOWN); - m->w = wl->window->id; + case STYLE_RANGE_LEFT: + where = STATUS_LEFT; + break; + case STYLE_RANGE_RIGHT: + where = STATUS_RIGHT; + break; + case STYLE_RANGE_WINDOW: + wl = winlink_find_by_index(&s->windows, sr->argument); + if (wl == NULL) + return (KEYC_UNKNOWN); + m->w = wl->window->id; - where = STATUS; - break; + where = STATUS; + break; + } } } @@ -605,6 +607,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAGEND1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAGEND1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAGEND1_BORDER; break; @@ -617,6 +621,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAGEND2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAGEND2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAGEND2_BORDER; break; @@ -629,6 +635,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAGEND3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAGEND3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAGEND3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAGEND3_BORDER; break; @@ -651,6 +659,12 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEMOVE_PANE; if (where == STATUS) key = KEYC_MOUSEMOVE_STATUS; + if (where == STATUS_LEFT) + key = KEYC_MOUSEMOVE_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_MOUSEMOVE_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEMOVE_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEMOVE_BORDER; break; @@ -668,6 +682,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAG1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAG1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAG1_BORDER; break; @@ -680,6 +696,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAG2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAG2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAG2_BORDER; break; @@ -692,6 +710,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDRAG3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDRAG3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDRAG3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDRAG3_BORDER; break; @@ -714,6 +734,8 @@ server_client_check_mouse(struct client *c) key = KEYC_WHEELUP_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_WHEELUP_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_WHEELUP_STATUS_DEFAULT; if (where == BORDER) key = KEYC_WHEELUP_BORDER; } else { @@ -721,6 +743,12 @@ server_client_check_mouse(struct client *c) key = KEYC_WHEELDOWN_PANE; if (where == STATUS) key = KEYC_WHEELDOWN_STATUS; + if (where == STATUS_LEFT) + key = KEYC_WHEELDOWN_STATUS_LEFT; + if (where == STATUS_RIGHT) + key = KEYC_WHEELDOWN_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_WHEELDOWN_STATUS_DEFAULT; if (where == BORDER) key = KEYC_WHEELDOWN_BORDER; } @@ -736,6 +764,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEUP1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEUP1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEUP1_BORDER; break; @@ -748,6 +778,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEUP2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEUP2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEUP2_BORDER; break; @@ -760,6 +792,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEUP3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEUP3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEUP3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEUP3_BORDER; break; @@ -776,6 +810,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDOWN1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDOWN1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDOWN1_BORDER; break; @@ -788,6 +824,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDOWN2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDOWN2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDOWN2_BORDER; break; @@ -800,6 +838,8 @@ server_client_check_mouse(struct client *c) key = KEYC_MOUSEDOWN3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_MOUSEDOWN3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_MOUSEDOWN3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_MOUSEDOWN3_BORDER; break; @@ -816,6 +856,8 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_DOUBLECLICK1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_DOUBLECLICK1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_DOUBLECLICK1_BORDER; break; @@ -828,6 +870,8 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_DOUBLECLICK2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_DOUBLECLICK2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_DOUBLECLICK2_BORDER; break; @@ -840,6 +884,8 @@ server_client_check_mouse(struct client *c) key = KEYC_DOUBLECLICK3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_DOUBLECLICK3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_DOUBLECLICK3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_DOUBLECLICK3_BORDER; break; @@ -856,6 +902,8 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK1_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_TRIPLECLICK1_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_TRIPLECLICK1_STATUS_DEFAULT; if (where == BORDER) key = KEYC_TRIPLECLICK1_BORDER; break; @@ -868,6 +916,8 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK2_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_TRIPLECLICK2_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_TRIPLECLICK2_STATUS_DEFAULT; if (where == BORDER) key = KEYC_TRIPLECLICK2_BORDER; break; @@ -880,6 +930,8 @@ server_client_check_mouse(struct client *c) key = KEYC_TRIPLECLICK3_STATUS_LEFT; if (where == STATUS_RIGHT) key = KEYC_TRIPLECLICK3_STATUS_RIGHT; + if (where == STATUS_DEFAULT) + key = KEYC_TRIPLECLICK3_STATUS_DEFAULT; if (where == BORDER) key = KEYC_TRIPLECLICK3_BORDER; break; diff --git a/tmux.1 b/tmux.1 index 0fd604a4b9..e1c28fbb8a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3519,16 +3519,16 @@ option is on (the default is off), allows mouse events to be bound as keys. The name of each key is made up of a mouse event (such as .Ql MouseUp1 ) -and a location suffix (one of -.Ql Pane -for the contents of a pane, -.Ql Border -for a pane border or -.Ql Status , -.Ql StatusLeft , -or -.Ql StatusRight -for the status line). +and a location suffix, one of the following: +.Bl -column "XXXXXXXXXXXXX" -offset indent +.It Li "Pane" Ta "the contents of a pane" +.It Li "Border" Ta "a pane border" +.It Li "Status" Ta "the status line window list" +.It Li "StatusLeft" Ta "the left part of the status line" +.It Li "StatusRight" Ta "the right part of the status line" +.It Li "StatusDefault" Ta "any other part of the status line" +.El +.Pp The following mouse events are available: .Bl -column "MouseDown1" "MouseDrag1" "WheelDown" -offset indent .It Li "WheelUp" Ta "WheelDown" Ta "" diff --git a/tmux.h b/tmux.h index 4e50f117bb..91002ad05e 100644 --- a/tmux.h +++ b/tmux.h @@ -128,12 +128,14 @@ struct winlink; KEYC_ ## name ## _STATUS, \ KEYC_ ## name ## _STATUS_LEFT, \ KEYC_ ## name ## _STATUS_RIGHT, \ + KEYC_ ## name ## _STATUS_DEFAULT, \ KEYC_ ## name ## _BORDER #define KEYC_MOUSE_STRING(name, s) \ { #s "Pane", KEYC_ ## name ## _PANE }, \ { #s "Status", KEYC_ ## name ## _STATUS }, \ { #s "StatusLeft", KEYC_ ## name ## _STATUS_LEFT }, \ { #s "StatusRight", KEYC_ ## name ## _STATUS_RIGHT }, \ + { #s "StatusDefault", KEYC_ ## name ## _STATUS_DEFAULT }, \ { #s "Border", KEYC_ ## name ## _BORDER } /* From 4f7a5d1e4000970c1baeda8460ef64195962747d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Mar 2019 14:37:27 +0000 Subject: [PATCH 380/836] 2.9 bits. --- CHANGES | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 55fc012b07..d32a94d8c8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.8 to X.X +CHANGES FROM 2.8 to 2.9 * Add format variables for the default formats in the various modes (tree_mode_format and so on) and add a -a flag to display-message to list diff --git a/configure.ac b/configure.ac index 1a3ba43c56..453e734beb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], next-2.9) +AC_INIT([tmux], 2.9-rc) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 0a913b09cfa9ab35c872ebea3e05ab8eb5de6ae0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Mar 2019 14:38:20 +0000 Subject: [PATCH 381/836] For 3.0. --- CHANGES | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index d32a94d8c8..b028e7d818 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +CHANGES FROM 2.9 to X.X + +XXX + CHANGES FROM 2.8 to 2.9 * Add format variables for the default formats in the various modes diff --git a/configure.ac b/configure.ac index 453e734beb..1e7578ee21 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 2.9-rc) +AC_INIT([tmux], next-3.0) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From e0e08fcd2d52b1d47aefe6b839b39ef2e4f374c7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Mar 2019 15:05:28 +0000 Subject: [PATCH 382/836] Update CHANGES & TODO. --- CHANGES | 2 +- TODO | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index d32a94d8c8..6489c91370 100644 --- a/CHANGES +++ b/CHANGES @@ -13,7 +13,7 @@ CHANGES FROM 2.8 to 2.9 * No longer clear history on RIS. -* Extend the #[] style syntax and use that together with previous for mat +* Extend the #[] style syntax and use that together with previous format changes to allow the status line to be entirely configured with a single option. diff --git a/TODO b/TODO index d4c2edfd15..4e252b5f0c 100644 --- a/TODO +++ b/TODO @@ -159,5 +159,3 @@ TODO soonish maybe: collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. -- Way to bind mouse keys on empty gap between status left and right and window - list, GitHub issue 1649. From e722ba38e3133cb01b4cd17bf5fe7c56e42a4962 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Mar 2019 15:10:05 +0000 Subject: [PATCH 383/836] There is no examples directory anymore. --- CHANGES | 2 +- COPYING | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index a3b674c4d2..f5488a2804 100644 --- a/CHANGES +++ b/CHANGES @@ -23,7 +23,7 @@ CHANGES FROM 2.8 to 2.9 Now that it is possible to configure their content, enable the existing code that lets the status line be multiple lines in height. The status option can - now take a value of 2, 3, 4 or 5 (as well as the previou s on or off) to + now take a value of 2, 3, 4 or 5 (as well as the previous on or off) to configure more than one line. The new status-format array option configures the format of each line, the default just references the existing status-* options, although some of the more obscure status options may be eliminated diff --git a/COPYING b/COPYING index 9d96b3e650..fd02a999c7 100644 --- a/COPYING +++ b/COPYING @@ -1,10 +1,7 @@ THIS IS FOR INFORMATION ONLY, CODE IS UNDER THE LICENCE AT THE TOP OF ITS FILE. -The README, CHANGES, FAQ and TODO files are licensed under the ISC -license. Files under examples/ remain copyright their authors unless otherwise -stated in the file but permission has been received to distribute them with -tmux. All other files have a license and copyright notice at their start, -typically: +The README, CHANGES, FAQ and TODO files are licensed under the ISC license. All +other files have a license and copyright notice at their start, typically: Copyright (c) From a13e57f70134994b59a77e7ab377d95ebf78f0ac Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Mar 2019 17:04:47 +0000 Subject: [PATCH 384/836] Update TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index 4e252b5f0c..048fd88518 100644 --- a/TODO +++ b/TODO @@ -159,3 +159,4 @@ TODO soonish maybe: collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. +- window-size latest, GitHub issue 1637. From 9f8d193b111549ccfd5239d0263e5a52053e682f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 26 Mar 2019 21:01:19 +0000 Subject: [PATCH 385/836] Break copy mode commands into individual functions instead of a big load of if statements. --- window-copy.c | 1451 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 1030 insertions(+), 421 deletions(-) diff --git a/window-copy.c b/window-copy.c index 062d687f1c..d946dcbfc1 100644 --- a/window-copy.c +++ b/window-copy.c @@ -154,6 +154,20 @@ enum { WINDOW_COPY_REL_POS_BELOW, }; +enum window_copy_cmd_action { + WINDOW_COPY_CMD_NOTHING, + WINDOW_COPY_CMD_REDRAW, + WINDOW_COPY_CMD_CANCEL, +}; + +struct window_copy_cmd_state { + struct window_mode_entry *wme; + struct args *args; + struct mouse_event *m; + struct client *c; + struct session *s; +}; + /* * Copy mode's visible screen (the "screen" field) is filled from one of two * sources: the original contents of the pane (used when we actually enter via @@ -565,18 +579,1010 @@ window_copy_key_table(struct window_mode_entry *wme) return ("copy-mode"); } +static enum window_copy_cmd_action +window_copy_cmd_append_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + + if (s != NULL) + window_copy_append_selection(wme); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_append_selection_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + + if (s != NULL) + window_copy_append_selection(wme); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); +} + +static enum window_copy_cmd_action +window_copy_cmd_back_to_indentation(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_cursor_back_to_indentation(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_begin_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; + struct mouse_event *m = cs->m; + struct window_copy_mode_data *data = wme->data; + + if (m != NULL) { + window_copy_start_drag(c, m); + return (WINDOW_COPY_CMD_NOTHING); + } + + data->lineflag = LINE_SEL_NONE; + window_copy_start_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_stop_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cursordrag = CURSORDRAG_NONE; + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_bottom_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cx = 0; + data->cy = screen_size_y(&data->screen) - 1; + + window_copy_update_selection(wme, 1); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_cancel(__unused struct window_copy_cmd_state *cs) +{ + return (WINDOW_COPY_CMD_CANCEL); +} + +static enum window_copy_cmd_action +window_copy_cmd_clear_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_end_of_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + u_int np = wme->prefix; + + window_copy_start_selection(wme); + for (; np > 1; np--) + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); + + if (s != NULL) { + window_copy_copy_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + u_int np = wme->prefix; + + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); + for (; np > 1; np--) + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); + + if (s != NULL) { + window_copy_copy_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + + if (s != NULL) + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_selection_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + + if (s != NULL) + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); +} + +static enum window_copy_cmd_action +window_copy_cmd_cursor_down(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_down(wme, 0); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_cursor_left(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_left(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_cursor_right(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_right(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_cursor_up(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_up(wme, 0); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_end_of_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_cursor_end_of_line(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_halfpage_down(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + for (; np != 0; np--) { + if (window_copy_pagedown(wme, 1, data->scroll_exit)) + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_halfpage_down_and_cancel(struct window_copy_cmd_state *cs) +{ + + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) { + if (window_copy_pagedown(wme, 1, 1)) + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_halfpage_up(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_pageup1(wme, 1); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_history_bottom(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cx = 0; + data->cy = screen_size_y(&data->screen) - 1; + data->oy = 0; + + window_copy_update_selection(wme, 1); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_history_top(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cx = 0; + data->cy = 0; + data->oy = screen_hsize(data->backing); + + window_copy_update_selection(wme, 1); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_again(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + switch (data->jumptype) { + case WINDOW_COPY_JUMPFORWARD: + for (; np != 0; np--) + window_copy_cursor_jump(wme); + break; + case WINDOW_COPY_JUMPBACKWARD: + for (; np != 0; np--) + window_copy_cursor_jump_back(wme); + break; + case WINDOW_COPY_JUMPTOFORWARD: + for (; np != 0; np--) + window_copy_cursor_jump_to(wme); + break; + case WINDOW_COPY_JUMPTOBACKWARD: + for (; np != 0; np--) + window_copy_cursor_jump_to_back(wme); + break; + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_reverse(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + switch (data->jumptype) { + case WINDOW_COPY_JUMPFORWARD: + for (; np != 0; np--) + window_copy_cursor_jump_back(wme); + break; + case WINDOW_COPY_JUMPBACKWARD: + for (; np != 0; np--) + window_copy_cursor_jump(wme); + break; + case WINDOW_COPY_JUMPTOFORWARD: + for (; np != 0; np--) + window_copy_cursor_jump_to_back(wme); + break; + case WINDOW_COPY_JUMPTOBACKWARD: + for (; np != 0; np--) + window_copy_cursor_jump_to(wme); + break; + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_middle_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cx = 0; + data->cy = (screen_size_y(&data->screen) - 1) / 2; + + window_copy_update_selection(wme, 1); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_next_paragraph(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_next_paragraph(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_next_space(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_next_word(wme, " "); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_next_space_end(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_next_word_end(wme, " "); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_next_word(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + u_int np = wme->prefix; + const char *ws; + + ws = options_get_string(s->options, "word-separators"); + for (; np != 0; np--) + window_copy_cursor_next_word(wme, ws); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_next_word_end(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + u_int np = wme->prefix; + const char *ws; + + ws = options_get_string(s->options, "word-separators"); + for (; np != 0; np--) + window_copy_cursor_next_word_end(wme, ws); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_other_end(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + if ((np % 2) != 0) + window_copy_other_end(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_page_down(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + for (; np != 0; np--) { + if (window_copy_pagedown(wme, 0, data->scroll_exit)) + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_page_down_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) { + if (window_copy_pagedown(wme, 0, 1)) + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_page_up(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_pageup1(wme, 0); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_previous_paragraph(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_previous_paragraph(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_previous_space(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_previous_word(wme, " "); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_previous_word(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + u_int np = wme->prefix; + const char *ws; + + ws = options_get_string(s->options, "word-separators"); + for (; np != 0; np--) + window_copy_cursor_previous_word(wme, ws); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_rectangle_toggle(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->lineflag = LINE_SEL_NONE; + window_copy_rectangle_toggle(wme); + + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_scroll_down(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_down(wme, 1); + if (data->scroll_exit && data->oy == 0) + return (WINDOW_COPY_CMD_CANCEL); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_scroll_down_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_down(wme, 1); + if (data->oy == 0) + return (WINDOW_COPY_CMD_CANCEL); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_scroll_up(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + + for (; np != 0; np--) + window_copy_cursor_up(wme, 1); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_again(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + if (data->searchtype == WINDOW_COPY_SEARCHUP) { + for (; np != 0; np--) + window_copy_search_up(wme); + } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { + for (; np != 0; np--) + window_copy_search_down(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_reverse(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + if (data->searchtype == WINDOW_COPY_SEARCHUP) { + for (; np != 0; np--) + window_copy_search_down(wme); + } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { + for (; np != 0; np--) + window_copy_search_up(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_select_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + + data->lineflag = LINE_SEL_LEFT_RIGHT; + data->rectflag = 0; + + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); + for (; np > 1; np--) + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); + + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_select_word(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + struct window_copy_mode_data *data = wme->data; + const char *ws; + + data->lineflag = LINE_SEL_LEFT_RIGHT; + data->rectflag = 0; + + ws = options_get_string(s->options, "word-separators"); + window_copy_cursor_previous_word(wme, ws); + window_copy_start_selection(wme); + window_copy_cursor_next_word_end(wme, ws); + + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_start_of_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_cursor_start_of_line(wme); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_top_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + + data->cx = 0; + data->cy = 0; + + window_copy_update_selection(wme, 1); + return (WINDOW_COPY_CMD_REDRAW); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + const char *argument = cs->args->argv[1]; + + if (s != NULL && *argument != '\0') + window_copy_copy_pipe(wme, s, argument); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct session *s = cs->s; + const char *argument = cs->args->argv[1]; + + if (s != NULL && *argument != '\0') { + window_copy_copy_pipe(wme, s, argument); + return (WINDOW_COPY_CMD_CANCEL); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_goto_line(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') + window_copy_goto_line(wme, argument); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_backward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->jumptype = WINDOW_COPY_JUMPBACKWARD; + data->jumpchar = *argument; + for (; np != 0; np--) + window_copy_cursor_jump_back(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_forward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->jumptype = WINDOW_COPY_JUMPFORWARD; + data->jumpchar = *argument; + for (; np != 0; np--) + window_copy_cursor_jump(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_to_backward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->jumptype = WINDOW_COPY_JUMPTOBACKWARD; + data->jumpchar = *argument; + for (; np != 0; np--) + window_copy_cursor_jump_to_back(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_jump_to_forward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->jumptype = WINDOW_COPY_JUMPTOFORWARD; + data->jumpchar = *argument; + for (; np != 0; np--) + window_copy_cursor_jump_to(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_backward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->searchtype = WINDOW_COPY_SEARCHUP; + free(data->searchstr); + data->searchstr = xstrdup(argument); + for (; np != 0; np--) + window_copy_search_up(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_forward(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix; + const char *argument = cs->args->argv[1]; + + if (*argument != '\0') { + data->searchtype = WINDOW_COPY_SEARCHDOWN; + free(data->searchstr); + data->searchstr = xstrdup(argument); + for (; np != 0; np--) + window_copy_search_down(wme); + } + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_backward_incremental(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + const char *argument = cs->args->argv[1]; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + const char *ss = data->searchstr; + + if (data->searchx == -1 || data->searchy == -1) { + data->searchx = data->cx; + data->searchy = data->cy; + data->searcho = data->oy; + } else if (ss != NULL && strcmp(argument, ss) != 0) { + data->cx = data->searchx; + data->cy = data->searchy; + data->oy = data->searcho; + action = WINDOW_COPY_CMD_REDRAW; + } + + if (*argument == '\0') { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + + switch (*argument++) { + case '=': + case '-': + data->searchtype = WINDOW_COPY_SEARCHUP; + free(data->searchstr); + data->searchstr = xstrdup(argument); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + break; + case '+': + data->searchtype = WINDOW_COPY_SEARCHDOWN; + free(data->searchstr); + data->searchstr = xstrdup(argument); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + break; + } + return (action); +} + +static enum window_copy_cmd_action +window_copy_cmd_search_forward_incremental(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + const char *argument = cs->args->argv[1]; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + const char *ss = data->searchstr; + + if (data->searchx == -1 || data->searchy == -1) { + data->searchx = data->cx; + data->searchy = data->cy; + data->searcho = data->oy; + } else if (ss != NULL && strcmp(argument, ss) != 0) { + data->cx = data->searchx; + data->cy = data->searchy; + data->oy = data->searcho; + action = WINDOW_COPY_CMD_REDRAW; + } + + if (*argument == '\0') { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + + switch (*argument++) { + case '=': + case '+': + data->searchtype = WINDOW_COPY_SEARCHDOWN; + free(data->searchstr); + data->searchstr = xstrdup(argument); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + break; + case '-': + data->searchtype = WINDOW_COPY_SEARCHUP; + free(data->searchstr); + data->searchstr = xstrdup(argument); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); + return (WINDOW_COPY_CMD_REDRAW); + } + } + return (action); +} + +static const struct { + const char *command; + int minargs; + int maxargs; + enum window_copy_cmd_action (*f)(struct window_copy_cmd_state *); +} window_copy_cmd_table[] = { + { "append-selection", 0, 0, + window_copy_cmd_append_selection }, + { "append-selection-and-cancel", 0, 0, + window_copy_cmd_append_selection_and_cancel }, + { "back-to-indentation", 0, 0, + window_copy_cmd_back_to_indentation }, + { "begin-selection", 0, 0, + window_copy_cmd_begin_selection }, + { "bottom-line", 0, 0, + window_copy_cmd_bottom_line }, + { "cancel", 0, 0, + window_copy_cmd_cancel }, + { "clear-selection", 0, 0, + window_copy_cmd_clear_selection }, + { "copy-end-of-line", 0, 0, + window_copy_cmd_copy_end_of_line }, + { "copy-line", 0, 0, + window_copy_cmd_copy_line }, + { "copy-pipe", 1, 1, + window_copy_cmd_copy_pipe }, + { "copy-pipe-and-cancel", 1, 1, + window_copy_cmd_copy_pipe_and_cancel }, + { "copy-selection", 0, 0, + window_copy_cmd_copy_selection }, + { "copy-selection-and-cancel", 0, 0, + window_copy_cmd_copy_selection_and_cancel }, + { "cursor-down", 0, 0, + window_copy_cmd_cursor_down }, + { "cursor-left", 0, 0, + window_copy_cmd_cursor_left }, + { "cursor-right", 0, 0, + window_copy_cmd_cursor_right }, + { "cursor-up", 0, 0, + window_copy_cmd_cursor_up }, + { "end-of-line", 0, 0, + window_copy_cmd_end_of_line }, + { "goto-line", 1, 1, + window_copy_cmd_goto_line }, + { "halfpage-down", 0, 0, + window_copy_cmd_halfpage_down }, + { "halfpage-down-and-cancel", 0, 0, + window_copy_cmd_halfpage_down_and_cancel }, + { "halfpage-up", 0, 0, + window_copy_cmd_halfpage_up }, + { "history-bottom", 0, 0, + window_copy_cmd_history_bottom }, + { "history-top", 0, 0, + window_copy_cmd_history_top }, + { "jump-again", 0, 0, + window_copy_cmd_jump_again }, + { "jump-backward", 1, 1, + window_copy_cmd_jump_backward }, + { "jump-forward", 1, 1, + window_copy_cmd_jump_forward }, + { "jump-reverse", 0, 0, + window_copy_cmd_jump_reverse }, + { "jump-to-backward", 1, 1, + window_copy_cmd_jump_to_backward }, + { "jump-to-forward", 1, 1, + window_copy_cmd_jump_to_forward }, + { "middle-line", 0, 0, + window_copy_cmd_middle_line }, + { "next-paragraph", 0, 0, + window_copy_cmd_next_paragraph }, + { "next-space", 0, 0, + window_copy_cmd_next_space }, + { "next-space-end", 0, 0, + window_copy_cmd_next_space_end }, + { "next-word", 0, 0, + window_copy_cmd_next_word }, + { "next-word-end", 0, 0, + window_copy_cmd_next_word_end }, + { "other-end", 0, 0, + window_copy_cmd_other_end }, + { "page-down", 0, 0, + window_copy_cmd_page_down }, + { "page-down-and-cancel", 0, 0, + window_copy_cmd_page_down_and_cancel }, + { "page-up", 0, 0, + window_copy_cmd_page_up }, + { "previous-paragraph", 0, 0, + window_copy_cmd_previous_paragraph }, + { "previous-space", 0, 0, + window_copy_cmd_previous_space }, + { "previous-word", 0, 0, + window_copy_cmd_previous_word }, + { "rectangle-toggle", 0, 0, + window_copy_cmd_rectangle_toggle }, + { "scroll-down", 0, 0, + window_copy_cmd_scroll_down }, + { "scroll-down-and-cancel", 0, 0, + window_copy_cmd_scroll_down_and_cancel }, + { "scroll-up", 0, 0, + window_copy_cmd_scroll_up }, + { "search-again", 0, 0, + window_copy_cmd_search_again }, + { "search-backward", 1, 1, + window_copy_cmd_search_backward }, + { "search-backward-incremental", 1, 1, + window_copy_cmd_search_backward_incremental }, + { "search-forward", 1, 1, + window_copy_cmd_search_forward }, + { "search-forward-incremental", 1, 1, + window_copy_cmd_search_forward_incremental }, + { "search-reverse", 0, 0, + window_copy_cmd_search_reverse }, + { "select-line", 0, 0, + window_copy_cmd_select_line }, + { "select-word", 0, 0, + window_copy_cmd_select_word }, + { "start-of-line", 0, 0, + window_copy_cmd_start_of_line }, + { "stop-selection", 0, 0, + window_copy_cmd_stop_selection }, + { "top-line", 0, 0, + window_copy_cmd_top_line }, +}; + static void window_copy_command(struct window_mode_entry *wme, struct client *c, struct session *s, __unused struct winlink *wl, struct args *args, struct mouse_event *m) { - struct window_pane *wp = wme->wp; struct window_copy_mode_data *data = wme->data; - struct screen *sn = &data->screen; - const char *command, *argument, *ws; - u_int np = wme->prefix; - int cancel = 0, redraw = 0, scroll_exit; - char prefix; + struct window_copy_cmd_state cs; + enum window_copy_cmd_action action; + const char *command; + u_int i; if (args->argc == 0) return; @@ -585,431 +1591,34 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, if (m != NULL && m->valid && !MOUSE_WHEEL(m->b)) window_copy_move_mouse(m); - if (args->argc == 1) { - if (strcmp(command, "append-selection") == 0) { - if (s != NULL) - window_copy_append_selection(wme); - window_copy_clear_selection(wme); - redraw = 1; - } - if (strcmp(command, "append-selection-and-cancel") == 0) { - if (s != NULL) - window_copy_append_selection(wme); - window_copy_clear_selection(wme); - redraw = 1; - cancel = 1; - } - if (strcmp(command, "back-to-indentation") == 0) - window_copy_cursor_back_to_indentation(wme); - if (strcmp(command, "begin-selection") == 0) { - if (m != NULL) - window_copy_start_drag(c, m); - else { - data->lineflag = LINE_SEL_NONE; - window_copy_start_selection(wme); - redraw = 1; - } - } - if (strcmp(command, "stop-selection") == 0) - data->cursordrag = CURSORDRAG_NONE; - if (strcmp(command, "bottom-line") == 0) { - data->cx = 0; - data->cy = screen_size_y(sn) - 1; - window_copy_update_selection(wme, 1); - redraw = 1; - } - if (strcmp(command, "cancel") == 0) - cancel = 1; - if (strcmp(command, "clear-selection") == 0) { - window_copy_clear_selection(wme); - redraw = 1; - } - if (strcmp(command, "copy-end-of-line") == 0) { - window_copy_start_selection(wme); - for (; np > 1; np--) - window_copy_cursor_down(wme, 0); - window_copy_cursor_end_of_line(wme); - redraw = 1; - - if (s != NULL) { - window_copy_copy_selection(wme); - cancel = 1; - } - } - if (strcmp(command, "copy-line") == 0) { - window_copy_cursor_start_of_line(wme); - window_copy_start_selection(wme); - for (; np > 1; np--) - window_copy_cursor_down(wme, 0); - window_copy_cursor_end_of_line(wme); - redraw = 1; - - if (s != NULL) { - window_copy_copy_selection(wme); - cancel = 1; - } - } - if (strcmp(command, "copy-selection") == 0) { - if (s != NULL) - window_copy_copy_selection(wme); - window_copy_clear_selection(wme); - redraw = 1; - } - if (strcmp(command, "copy-selection-and-cancel") == 0) { - if (s != NULL) - window_copy_copy_selection(wme); - window_copy_clear_selection(wme); - redraw = 1; - cancel = 1; - } - if (strcmp(command, "cursor-down") == 0) { - for (; np != 0; np--) - window_copy_cursor_down(wme, 0); - } - if (strcmp(command, "cursor-left") == 0) { - for (; np != 0; np--) - window_copy_cursor_left(wme); - } - if (strcmp(command, "cursor-right") == 0) { - for (; np != 0; np--) - window_copy_cursor_right(wme); - } - if (strcmp(command, "cursor-up") == 0) { - for (; np != 0; np--) - window_copy_cursor_up(wme, 0); - } - if (strcmp(command, "end-of-line") == 0) - window_copy_cursor_end_of_line(wme); - if (strcmp(command, "halfpage-down") == 0 || - strcmp(command, "halfpage-down-and-cancel") == 0) { - if (strcmp(command, "halfpage-down-and-cancel") == 0) - scroll_exit = 1; - else - scroll_exit = data->scroll_exit; - for (; np != 0; np--) { - if (window_copy_pagedown(wme, 1, scroll_exit)) { - cancel = 1; - break; - } - } - } - if (strcmp(command, "halfpage-up") == 0) { - for (; np != 0; np--) - window_copy_pageup1(wme, 1); - } - if (strcmp(command, "history-bottom") == 0) { - data->cx = 0; - data->cy = screen_size_y(sn) - 1; - data->oy = 0; - window_copy_update_selection(wme, 1); - redraw = 1; - } - if (strcmp(command, "history-top") == 0) { - data->cx = 0; - data->cy = 0; - data->oy = screen_hsize(data->backing); - window_copy_update_selection(wme, 1); - redraw = 1; - } - if (strcmp(command, "jump-again") == 0) { - switch (data->jumptype) { - case WINDOW_COPY_JUMPFORWARD: - for (; np != 0; np--) - window_copy_cursor_jump(wme); - break; - case WINDOW_COPY_JUMPBACKWARD: - for (; np != 0; np--) - window_copy_cursor_jump_back(wme); - break; - case WINDOW_COPY_JUMPTOFORWARD: - for (; np != 0; np--) - window_copy_cursor_jump_to(wme); + cs.wme = wme; + cs.args = args; + cs.m = m; + cs.c = c; + cs.s = s; + + action = WINDOW_COPY_CMD_NOTHING; + for (i = 0; i < nitems(window_copy_cmd_table); i++) { + if (strcmp(window_copy_cmd_table[i].command, command) == 0) { + if (args->argc - 1 < window_copy_cmd_table[i].minargs || + args->argc - 1 > window_copy_cmd_table[i].maxargs) break; - case WINDOW_COPY_JUMPTOBACKWARD: - for (; np != 0; np--) - window_copy_cursor_jump_to_back(wme); - break; - } - } - if (strcmp(command, "jump-reverse") == 0) { - switch (data->jumptype) { - case WINDOW_COPY_JUMPFORWARD: - for (; np != 0; np--) - window_copy_cursor_jump_back(wme); - break; - case WINDOW_COPY_JUMPBACKWARD: - for (; np != 0; np--) - window_copy_cursor_jump(wme); - break; - case WINDOW_COPY_JUMPTOFORWARD: - for (; np != 0; np--) - window_copy_cursor_jump_to_back(wme); - break; - case WINDOW_COPY_JUMPTOBACKWARD: - for (; np != 0; np--) - window_copy_cursor_jump_to(wme); - break; - } - } - if (strcmp(command, "middle-line") == 0) { - data->cx = 0; - data->cy = (screen_size_y(sn) - 1) / 2; - window_copy_update_selection(wme, 1); - redraw = 1; - } - if (strcmp(command, "next-paragraph") == 0) { - for (; np != 0; np--) - window_copy_next_paragraph(wme); - } - if (strcmp(command, "next-space") == 0) { - for (; np != 0; np--) - window_copy_cursor_next_word(wme, " "); - } - if (strcmp(command, "next-space-end") == 0) { - for (; np != 0; np--) - window_copy_cursor_next_word_end(wme, " "); - } - if (strcmp(command, "next-word") == 0) { - ws = options_get_string(s->options, "word-separators"); - for (; np != 0; np--) - window_copy_cursor_next_word(wme, ws); - } - if (strcmp(command, "next-word-end") == 0) { - ws = options_get_string(s->options, "word-separators"); - for (; np != 0; np--) - window_copy_cursor_next_word_end(wme, ws); - } - if (strcmp(command, "other-end") == 0) { - if ((np % 2) != 0) - window_copy_other_end(wme); - } - if (strcmp(command, "page-down") == 0 || - strcmp(command, "page-down-and-cancel") == 0) { - if (strcmp(command, "page-down-and-cancel") == 0) - scroll_exit = 1; - else - scroll_exit = data->scroll_exit; - for (; np != 0; np--) { - if (window_copy_pagedown(wme, 0, scroll_exit)) { - cancel = 1; - break; - } - } - } - if (strcmp(command, "page-up") == 0) { - for (; np != 0; np--) - window_copy_pageup1(wme, 0); - } - if (strcmp(command, "previous-paragraph") == 0) { - for (; np != 0; np--) - window_copy_previous_paragraph(wme); - } - if (strcmp(command, "previous-space") == 0) { - for (; np != 0; np--) - window_copy_cursor_previous_word(wme, " "); - } - if (strcmp(command, "previous-word") == 0) { - ws = options_get_string(s->options, "word-separators"); - for (; np != 0; np--) - window_copy_cursor_previous_word(wme, ws); - } - if (strcmp(command, "rectangle-toggle") == 0) { - data->lineflag = LINE_SEL_NONE; - window_copy_rectangle_toggle(wme); - } - if (strcmp(command, "scroll-down") == 0 || - strcmp(command, "scroll-down-and-cancel") == 0) { - if (strcmp(command, "scroll-down-and-cancel") == 0) - scroll_exit = 1; - else - scroll_exit = data->scroll_exit; - for (; np != 0; np--) - window_copy_cursor_down(wme, 1); - if (scroll_exit && data->oy == 0) - cancel = 1; - } - if (strcmp(command, "scroll-up") == 0) { - for (; np != 0; np--) - window_copy_cursor_up(wme, 1); - } - if (strcmp(command, "search-again") == 0) { - if (data->searchtype == WINDOW_COPY_SEARCHUP) { - for (; np != 0; np--) - window_copy_search_up(wme); - } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { - for (; np != 0; np--) - window_copy_search_down(wme); - } - } - if (strcmp(command, "search-reverse") == 0) { - if (data->searchtype == WINDOW_COPY_SEARCHUP) { - for (; np != 0; np--) - window_copy_search_down(wme); - } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { - for (; np != 0; np--) - window_copy_search_up(wme); - } - } - if (strcmp(command, "select-line") == 0) { - data->lineflag = LINE_SEL_LEFT_RIGHT; - data->rectflag = 0; - window_copy_cursor_start_of_line(wme); - window_copy_start_selection(wme); - for (; np > 1; np--) - window_copy_cursor_down(wme, 0); - window_copy_cursor_end_of_line(wme); - redraw = 1; - } - if (strcmp(command, "select-word") == 0) { - data->lineflag = LINE_SEL_LEFT_RIGHT; - data->rectflag = 0; - ws = options_get_string(s->options, "word-separators"); - window_copy_cursor_previous_word(wme, ws); - window_copy_start_selection(wme); - window_copy_cursor_next_word_end(wme, ws); - redraw = 1; - } - if (strcmp(command, "start-of-line") == 0) - window_copy_cursor_start_of_line(wme); - if (strcmp(command, "top-line") == 0) { - data->cx = 0; - data->cy = 0; - window_copy_update_selection(wme, 1); - redraw = 1; - } - } else if (args->argc == 2 && *args->argv[1] != '\0') { - argument = args->argv[1]; - if (strcmp(command, "copy-pipe") == 0) { - if (s != NULL) - window_copy_copy_pipe(wme, s, argument); - } - if (strcmp(command, "copy-pipe-and-cancel") == 0) { - if (s != NULL) { - window_copy_copy_pipe(wme, s, argument); - cancel = 1; - } - } - if (strcmp(command, "goto-line") == 0) - window_copy_goto_line(wme, argument); - if (strcmp(command, "jump-backward") == 0) { - data->jumptype = WINDOW_COPY_JUMPBACKWARD; - data->jumpchar = *argument; - for (; np != 0; np--) - window_copy_cursor_jump_back(wme); - } - if (strcmp(command, "jump-forward") == 0) { - data->jumptype = WINDOW_COPY_JUMPFORWARD; - data->jumpchar = *argument; - for (; np != 0; np--) - window_copy_cursor_jump(wme); - } - if (strcmp(command, "jump-to-backward") == 0) { - data->jumptype = WINDOW_COPY_JUMPTOBACKWARD; - data->jumpchar = *argument; - for (; np != 0; np--) - window_copy_cursor_jump_to_back(wme); - } - if (strcmp(command, "jump-to-forward") == 0) { - data->jumptype = WINDOW_COPY_JUMPTOFORWARD; - data->jumpchar = *argument; - for (; np != 0; np--) - window_copy_cursor_jump_to(wme); - } - if (strcmp(command, "search-backward") == 0) { - data->searchtype = WINDOW_COPY_SEARCHUP; - free(data->searchstr); - data->searchstr = xstrdup(argument); - for (; np != 0; np--) - window_copy_search_up(wme); - } - if (strcmp(command, "search-forward") == 0) { - data->searchtype = WINDOW_COPY_SEARCHDOWN; - free(data->searchstr); - data->searchstr = xstrdup(argument); - for (; np != 0; np--) - window_copy_search_down(wme); - } - if (strcmp(command, "search-backward-incremental") == 0) { - prefix = *argument++; - if (data->searchx == -1 || data->searchy == -1) { - data->searchx = data->cx; - data->searchy = data->cy; - data->searcho = data->oy; - } else if (data->searchstr != NULL && - strcmp(argument, data->searchstr) != 0) { - data->cx = data->searchx; - data->cy = data->searchy; - data->oy = data->searcho; - redraw = 1; - } - if (*argument == '\0') { - window_copy_clear_marks(wme); - redraw = 1; - } else if (prefix == '=' || prefix == '-') { - data->searchtype = WINDOW_COPY_SEARCHUP; - free(data->searchstr); - data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wme)) { - window_copy_clear_marks(wme); - redraw = 1; - } - } else if (prefix == '+') { - data->searchtype = WINDOW_COPY_SEARCHDOWN; - free(data->searchstr); - data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wme)) { - window_copy_clear_marks(wme); - redraw = 1; - } - } - } - if (strcmp(command, "search-forward-incremental") == 0) { - prefix = *argument++; - if (data->searchx == -1 || data->searchy == -1) { - data->searchx = data->cx; - data->searchy = data->cy; - data->searcho = data->oy; - } else if (data->searchstr != NULL && - strcmp(argument, data->searchstr) != 0) { - data->cx = data->searchx; - data->cy = data->searchy; - data->oy = data->searcho; - redraw = 1; - } - if (*argument == '\0') { - window_copy_clear_marks(wme); - redraw = 1; - } else if (prefix == '=' || prefix == '+') { - data->searchtype = WINDOW_COPY_SEARCHDOWN; - free(data->searchstr); - data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wme)) { - window_copy_clear_marks(wme); - redraw = 1; - } - } else if (prefix == '-') { - data->searchtype = WINDOW_COPY_SEARCHUP; - free(data->searchstr); - data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wme)) { - window_copy_clear_marks(wme); - redraw = 1; - } - } + action = window_copy_cmd_table[i].f (&cs); + break; } } if (strncmp(command, "search-", 7) != 0 && data->searchmark != NULL) { window_copy_clear_marks(wme); - redraw = 1; + if (action == WINDOW_COPY_CMD_NOTHING) + action = WINDOW_COPY_CMD_REDRAW; data->searchx = data->searchy = -1; } - wme->prefix = 1; - if (cancel) - window_pane_reset_mode(wp); - else if (redraw) + if (action == WINDOW_COPY_CMD_CANCEL) + window_pane_reset_mode(wme->wp); + else if (action == WINDOW_COPY_CMD_REDRAW) window_copy_redraw_screen(wme); } From c1f0918f8a3e4699e155ec6a1380d6f92d1010ef Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 27 Mar 2019 13:25:11 +0000 Subject: [PATCH 386/836] Fix stop-selection, from Avi Halachmi. --- window-copy.c | 1 + 1 file changed, 1 insertion(+) diff --git a/window-copy.c b/window-copy.c index d946dcbfc1..b4fc7a2c61 100644 --- a/window-copy.c +++ b/window-copy.c @@ -637,6 +637,7 @@ window_copy_cmd_stop_selection(struct window_copy_cmd_state *cs) struct window_copy_mode_data *data = wme->data; data->cursordrag = CURSORDRAG_NONE; + data->lineflag = LINE_SEL_NONE; return (WINDOW_COPY_CMD_NOTHING); } From 08bc226527c7adf31d8137c82df9faee56fe4270 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Mar 2019 21:05:15 +0000 Subject: [PATCH 387/836] Expand session and window formats for buffer filters. --- format.c | 17 +++++++++++++++++ window-buffer.c | 16 ++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 8fe0b55bf3..cb74fd4dba 100644 --- a/format.c +++ b/format.c @@ -1804,6 +1804,23 @@ void format_defaults(struct format_tree *ft, struct client *c, struct session *s, struct winlink *wl, struct window_pane *wp) { + if (c != NULL) + log_debug("%s: c=%s", __func__, c->name); + else + log_debug("%s: s=none", __func__); + if (s != NULL) + log_debug("%s: s=$%u", __func__, s->id); + else + log_debug("%s: s=none", __func__); + if (wl != NULL) + log_debug("%s: wl=%u w=@%u", __func__, wl->idx, wl->window->id); + else + log_debug("%s: wl=none", __func__); + if (wp != NULL) + log_debug("%s: wp=%%%u", __func__, wp->id); + else + log_debug("%s: wp=none", __func__); + if (c != NULL && s != NULL && c->session != s) log_debug("%s: session does not match", __func__); diff --git a/window-buffer.c b/window-buffer.c index 06d346e338..c7e345c08e 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -67,6 +67,7 @@ struct window_buffer_itemdata { }; struct window_buffer_modedata { + struct cmd_find_state fs; struct mode_tree_data *data; char *command; char *format; @@ -138,6 +139,9 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, struct paste_buffer *pb; char *text, *cp; struct format_tree *ft; + struct session *s = NULL; + struct winlink *wl = NULL; + struct window_pane *wp = NULL; for (i = 0; i < data->item_size; i++) window_buffer_free_item(data->item_list[i]); @@ -168,6 +172,12 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, break; } + if (cmd_find_valid_state(&data->fs)) { + s = data->fs.s; + wl = data->fs.wl; + wp = data->fs.wp; + } + for (i = 0; i < data->item_size; i++) { item = data->item_list[i]; @@ -175,6 +185,7 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, if (pb == NULL) continue; ft = format_create(NULL, NULL, FORMAT_NONE, 0); + format_defaults(ft, NULL, s, wl, wp); format_defaults_paste_buffer(ft, pb); if (filter != NULL) { @@ -254,14 +265,15 @@ window_buffer_search(__unused void *modedata, void *itemdata, const char *ss) } static struct screen * -window_buffer_init(struct window_mode_entry *wme, - __unused struct cmd_find_state *fs, struct args *args) +window_buffer_init(struct window_mode_entry *wme, struct cmd_find_state *fs, + struct args *args) { struct window_pane *wp = wme->wp; struct window_buffer_modedata *data; struct screen *s; wme->data = data = xcalloc(1, sizeof *data); + cmd_find_copy_state(&data->fs, fs); if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_BUFFER_DEFAULT_FORMAT); From c6c4960b35bdff59554cfb7483e9a00e08bbe766 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Mar 2019 22:18:46 +0000 Subject: [PATCH 388/836] Fix offset of list ranges. --- format-draw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/format-draw.c b/format-draw.c index dd03435c8e..b0b050f61e 100644 --- a/format-draw.c +++ b/format-draw.c @@ -86,6 +86,9 @@ format_update_ranges(struct format_ranges *frs, struct screen *s, u_int offset, continue; } + fr->start -= start; + fr->end -= start; + fr->start += offset; fr->end += offset; } From 00fda57ddf47c72f8d66d5933fef9a0af4a9c1cb Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Mar 2019 22:18:46 +0000 Subject: [PATCH 389/836] Fix offset of list ranges. --- format-draw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/format-draw.c b/format-draw.c index dd03435c8e..b0b050f61e 100644 --- a/format-draw.c +++ b/format-draw.c @@ -86,6 +86,9 @@ format_update_ranges(struct format_ranges *frs, struct screen *s, u_int offset, continue; } + fr->start -= start; + fr->end -= start; + fr->start += offset; fr->end += offset; } From d68a17a1dfeb17756a26fa9873b37f9436bae937 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 29 Mar 2019 09:33:24 +0000 Subject: [PATCH 390/836] Free old strings after they have been expanded in format_choose. --- format.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/format.c b/format.c index cb74fd4dba..e544e6b398 100644 --- a/format.c +++ b/format.c @@ -1025,7 +1025,9 @@ format_choose(struct format_tree *ft, const char *s, char **left, char **right, if (expand) { *left = format_expand(ft, left0); + free(left0); *right = format_expand(ft, right0); + free(right0); } else { *left = left0; *right = right0; From 92da105b58d2b828974585f21b70d5f1b42049fe Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 29 Mar 2019 09:33:24 +0000 Subject: [PATCH 391/836] Free old strings after they have been expanded in format_choose. --- format.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/format.c b/format.c index 1a3ba762bb..485a3bc79b 100644 --- a/format.c +++ b/format.c @@ -1041,7 +1041,9 @@ format_choose(struct format_tree *ft, const char *s, char **left, char **right, if (expand) { *left = format_expand(ft, left0); + free(left0); *right = format_expand(ft, right0); + free(right0); } else { *left = left0; *right = right0; From 792fcb1dbfbc23b65422753cf8d2e1bb1ddd3738 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 Apr 2019 19:33:38 +0000 Subject: [PATCH 392/836] Restore a check to stop scrolled lines becoming larger than total lines, fixes a crash reported by Thomas Sattler. --- grid.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grid.c b/grid.c index f80163561d..531afa9d6d 100644 --- a/grid.c +++ b/grid.c @@ -1284,6 +1284,8 @@ grid_reflow(struct grid *gd, u_int sx) if (target->sy < gd->sy) grid_reflow_add(target, gd->sy - target->sy); gd->hsize = target->sy - gd->sy; + if (gd->hscrolled > gd->hsize) + gd->hscrolled = gd->hsize; free(gd->linedata); gd->linedata = target->linedata; free(target); From 6d071c468cbed78426eebdaab0639dac873cd39f Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 Apr 2019 19:33:38 +0000 Subject: [PATCH 393/836] Restore a check to stop scrolled lines becoming larger than total lines, fixes a crash reported by Thomas Sattler. --- grid.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grid.c b/grid.c index f80163561d..531afa9d6d 100644 --- a/grid.c +++ b/grid.c @@ -1284,6 +1284,8 @@ grid_reflow(struct grid *gd, u_int sx) if (target->sy < gd->sy) grid_reflow_add(target, gd->sy - target->sy); gd->hsize = target->sy - gd->sy; + if (gd->hscrolled > gd->hsize) + gd->hscrolled = gd->hsize; free(gd->linedata); gd->linedata = target->linedata; free(target); From 79c3fd4f39ef3c6a8816ff966942753a4dd6434d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 2 Apr 2019 09:36:20 +0100 Subject: [PATCH 394/836] Add cursor regression tests. --- regress/cursor-test.txt | 6 ++++++ regress/cursor-test1.result | 33 +++++++++++++++++++++++++++++++++ regress/cursor-test1.sh | 28 ++++++++++++++++++++++++++++ regress/cursor-test2.result | 33 +++++++++++++++++++++++++++++++++ regress/cursor-test2.sh | 28 ++++++++++++++++++++++++++++ regress/cursor-test3.result | 9 +++++++++ regress/cursor-test3.sh | 28 ++++++++++++++++++++++++++++ regress/cursor-test4.result | 16 ++++++++++++++++ regress/cursor-test4.sh | 31 +++++++++++++++++++++++++++++++ 9 files changed, 212 insertions(+) create mode 100644 regress/cursor-test.txt create mode 100644 regress/cursor-test1.result create mode 100644 regress/cursor-test1.sh create mode 100644 regress/cursor-test2.result create mode 100644 regress/cursor-test2.sh create mode 100644 regress/cursor-test3.result create mode 100644 regress/cursor-test3.sh create mode 100644 regress/cursor-test4.result create mode 100644 regress/cursor-test4.sh diff --git a/regress/cursor-test.txt b/regress/cursor-test.txt new file mode 100644 index 0000000000..67ed52c8fe --- /dev/null +++ b/regress/cursor-test.txt @@ -0,0 +1,6 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor +incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. Duis aute +irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat +nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia +deserunt mollit anim id est laborum. diff --git a/regress/cursor-test1.result b/regress/cursor-test1.result new file mode 100644 index 0000000000..71b9a4b63e --- /dev/null +++ b/regress/cursor-test1.result @@ -0,0 +1,33 @@ +14 8 t +0 ud exercitation ullamco laboris nisi ut +1 aliquip ex ea +2 commodo consequat. Duis aute +3 irure dolor in reprehenderit in voluptat +4 e velit esse cillum dolore eu fugiat +5 nulla pariatur. Excepteur sint occaecat +6 cupidatat non proident, sunt in culpa qu +7 i officia +8 deserunt mollit anim id est laborum. +9 +4 6 t +0 cupidatat +1 non proide +2 nt, sunt i +3 n culpa qu +4 i officia +5 deserunt m +6 ollit anim +7 id est la +8 borum. +9 +14 8 t +0 incididunt ut labore et dolore magna aliqua. Ut en +1 im ad minim veniam, quis nostrud exercitation ulla +2 mco laboris nisi ut aliquip ex ea +3 commodo consequat. Duis aute +4 irure dolor in reprehenderit in voluptate velit es +5 se cillum dolore eu fugiat +6 nulla pariatur. Excepteur sint occaecat cupidatat +7 non proident, sunt in culpa qui officia +8 deserunt mollit anim id est laborum. +9 diff --git a/regress/cursor-test1.sh b/regress/cursor-test1.sh new file mode 100644 index 0000000000..d34f992300 --- /dev/null +++ b/regress/cursor-test1.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX new -d -x40 -y10 "cat cursor-test.txt; printf '\e[9;15H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x10 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x50 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test1.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test2.result b/regress/cursor-test2.result new file mode 100644 index 0000000000..dc005d2b41 --- /dev/null +++ b/regress/cursor-test2.result @@ -0,0 +1,33 @@ +9 7 a +0 cupidatat +1 non proide +2 nt, sunt i +3 n culpa qu +4 i officia +5 deserunt m +6 ollit anim +7 id est la +8 borum. +9 +4 6 a +0 icia +1 deser +2 unt m +3 ollit +4 anim +5 id e +6 st la +7 borum +8 . +9 +29 8 a +0 incididunt ut labore et dolore magna aliqua. Ut en +1 im ad minim veniam, quis nostrud exercitation ulla +2 mco laboris nisi ut aliquip ex ea +3 commodo consequat. Duis aute +4 irure dolor in reprehenderit in voluptate velit es +5 se cillum dolore eu fugiat +6 nulla pariatur. Excepteur sint occaecat cupidatat +7 non proident, sunt in culpa qui officia +8 deserunt mollit anim id est laborum. +9 diff --git a/regress/cursor-test2.sh b/regress/cursor-test2.sh new file mode 100644 index 0000000000..c864063245 --- /dev/null +++ b/regress/cursor-test2.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX new -d -x10 -y10 "cat cursor-test.txt; printf '\e[8;10H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x5 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x50 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test2.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test3.result b/regress/cursor-test3.result new file mode 100644 index 0000000000..e72b1a9bbb --- /dev/null +++ b/regress/cursor-test3.result @@ -0,0 +1,9 @@ +6 1 b +0 abcdefa +1 bcdefab +3 1 b +0 fabcd +1 efab +6 1 b +0 abcdefa +1 bcdefab diff --git a/regress/cursor-test3.sh b/regress/cursor-test3.sh new file mode 100644 index 0000000000..bcf2898fa4 --- /dev/null +++ b/regress/cursor-test3.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX new -d -x7 -y2 "printf 'abcdefabcdefab'; printf '\e[2;7H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x5 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x7 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test3.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test4.result b/regress/cursor-test4.result new file mode 100644 index 0000000000..db26e4faa5 --- /dev/null +++ b/regress/cursor-test4.result @@ -0,0 +1,16 @@ +0 1 +0 abcdef +1 +2 +0 1 +0 abcdef +1 +2 +0 1 +0 def +1 +2 +0 1 +0 abcdef +1 +2 diff --git a/regress/cursor-test4.sh b/regress/cursor-test4.sh new file mode 100644 index 0000000000..86c149794b --- /dev/null +++ b/regress/cursor-test4.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX new -d -x10 -y3 "printf 'abcdef\n'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x20 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x3 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x10 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test4.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 From ffa4d489676f40582b63c1791d3bf5d3b75d8421 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Apr 2019 08:45:32 +0000 Subject: [PATCH 395/836] Store and restore cursor across reflow by working out a position based on unwrapped lines, rather than a grid offset. Fixes problems reported by Thomas Sattler and Paul de Weerd. --- grid.c | 71 ++++++++++++++++++++++++++++++++++++-------------------- screen.c | 8 +++---- tmux.h | 4 ++-- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/grid.c b/grid.c index 531afa9d6d..53751c0363 100644 --- a/grid.c +++ b/grid.c @@ -1291,40 +1291,61 @@ grid_reflow(struct grid *gd, u_int sx) free(target); } -/* Convert point position to offset from the start of the grid. */ -u_int -grid_to_offset(struct grid *gd, u_int px, u_int py) +/* Convert to position based on wrapped lines. */ +void +grid_wrap_position(struct grid *gd, u_int px, u_int py, u_int *wx, u_int *wy) { - u_int yy, offset = 0; - - if (py > gd->hsize + gd->sy - 1) { - px = UINT_MAX; - py = gd->hsize + gd->sy - 1; + u_int ax = 0, ay = 0, yy; + + for (yy = 0; yy < py; yy++) { + if (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + ax += gd->linedata[yy].cellused; + else { + ax = 0; + ay++; + } } - - for (yy = 0; yy < py; yy++) - offset += gd->linedata[yy].cellused; - if (px > gd->linedata[yy].cellused) - px = gd->linedata[yy].cellused; - return (offset + px); + if (px >= gd->linedata[yy].cellused) + ax = UINT_MAX; + else + ax += px; + *wx = ax; + *wy = ay; } -/* Convert offset from the start of the grid to point position. */ +/* Convert position based on wrapped lines back. */ void -grid_from_offset(struct grid *gd, u_int offset, u_int *px, u_int *py) +grid_unwrap_position(struct grid *gd, u_int *px, u_int *py, u_int wx, u_int wy) { - u_int yy; - - *px = *py = 0; + u_int yy, ax = 0, ay = 0; for (yy = 0; yy < gd->hsize + gd->sy - 1; yy++) { - if (offset <= gd->linedata[yy].cellused) + if (ay == wy) break; - offset -= gd->linedata[yy].cellused; + if (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + ax += gd->linedata[yy].cellused; + else { + ax = 0; + ay++; + } } - if (offset < gd->linedata[yy].cellused) - *px = offset; - else - *px = gd->linedata[yy].cellused; + + /* + * yy is now 0 on the unwrapped line which contains wx. Walk forwards + * until we find the end or the line now containing wx. + */ + if (wx == UINT_MAX) { + while (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + yy++; + wx = gd->linedata[yy].cellused; + } else { + while (gd->linedata[yy].flags & GRID_LINE_WRAPPED) { + if (wx < gd->linedata[yy].cellused) + break; + wx -= gd->linedata[yy].cellused; + yy++; + } + } + *px = wx; *py = yy; } diff --git a/screen.c b/screen.c index 92eb31de96..d24f4ba41e 100644 --- a/screen.c +++ b/screen.c @@ -464,17 +464,17 @@ screen_select_cell(struct screen *s, struct grid_cell *dst, static void screen_reflow(struct screen *s, u_int new_x) { - u_int offset, cx = s->cx, cy = s->grid->hsize + s->cy; + u_int cx = s->cx, cy = s->grid->hsize + s->cy, wx, wy; struct timeval start, tv; gettimeofday(&start, NULL); - offset = grid_to_offset(s->grid, cx, cy); - log_debug("%s: cursor %u,%u offset is %u", __func__, cx, cy, offset); + grid_wrap_position(s->grid, cx, cy, &wx, &wy); + log_debug("%s: cursor %u,%u is %u,%u", __func__, cx, cy, wx, wy); grid_reflow(s->grid, new_x); - grid_from_offset(s->grid, offset, &cx, &cy); + grid_unwrap_position(s->grid, &cx, &cy, wx, wy); log_debug("%s: new cursor is %u,%u", __func__, cx, cy); if (cy >= s->grid->hsize) { diff --git a/tmux.h b/tmux.h index 91002ad05e..0821d790bc 100644 --- a/tmux.h +++ b/tmux.h @@ -2101,8 +2101,8 @@ char *grid_string_cells(struct grid *, u_int, u_int, u_int, void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, u_int); void grid_reflow(struct grid *, u_int); -u_int grid_to_offset(struct grid *, u_int, u_int); -void grid_from_offset(struct grid *, u_int, u_int *, u_int *); +void grid_wrap_position(struct grid *, u_int, u_int, u_int *, u_int *); +void grid_unwrap_position(struct grid *, u_int *, u_int *, u_int, u_int); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); From f03776c262ff68f4f5c3fefefd559256d534179d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 2 Apr 2019 09:48:26 +0100 Subject: [PATCH 396/836] Don't use a config file in tests. --- regress/Makefile | 1 + regress/control-client-size.sh | 4 ++-- regress/cursor-test1.sh | 5 +++-- regress/cursor-test2.sh | 3 ++- regress/cursor-test3.sh | 3 ++- regress/cursor-test4.sh | 2 +- regress/kill-session-process-exit.sh | 4 ++-- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/regress/Makefile b/regress/Makefile index 3775a711c2..e6c3619fc4 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -7,3 +7,4 @@ all: $(TESTS) $(TESTS): sh $*.sh + sleep 1 diff --git a/regress/control-client-size.sh b/regress/control-client-size.sh index b8d9aef0f9..dd1850c541 100644 --- a/regress/control-client-size.sh +++ b/regress/control-client-size.sh @@ -28,7 +28,7 @@ $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d || exit 1 sleep 1 -cat <$TMP +cat <$TMP ls -F':#{window_width} #{window_height}' refresh -C 80,24 ls -F':#{window_width} #{window_height}' @@ -37,7 +37,7 @@ grep ^: $TMP >$OUT printf ":80 24\n:80 23\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null -cat <$TMP +cat <$TMP ls -F':#{window_width} #{window_height}' refresh -C 80,24 ls -F':#{window_width} #{window_height}' diff --git a/regress/cursor-test1.sh b/regress/cursor-test1.sh index d34f992300..2dc205392b 100644 --- a/regress/cursor-test1.sh +++ b/regress/cursor-test1.sh @@ -4,13 +4,14 @@ PATH=/bin:/usr/bin TERM=screen [ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) -TMUX="$TEST_TMUX -Ltest" +TMUX="$TEST_TMUX -f/dev/null -Ltest" $TMUX kill-server 2>/dev/null TMP=$(mktemp) trap "rm -f $TMP" 0 1 15 -$TMUX new -d -x40 -y10 "cat cursor-test.txt; printf '\e[9;15H'; cat" || exit 1 +$TMUX -f/dev/null new -d -x40 -y10 \ + "cat cursor-test.txt; printf '\e[9;15H'; cat" || exit 1 $TMUX set -g window-size manual || exit 1 $TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP diff --git a/regress/cursor-test2.sh b/regress/cursor-test2.sh index c864063245..9791f56708 100644 --- a/regress/cursor-test2.sh +++ b/regress/cursor-test2.sh @@ -10,7 +10,8 @@ $TMUX kill-server 2>/dev/null TMP=$(mktemp) trap "rm -f $TMP" 0 1 15 -$TMUX new -d -x10 -y10 "cat cursor-test.txt; printf '\e[8;10H'; cat" || exit 1 +$TMUX -f/dev/null new -d -x10 -y10 \ + "cat cursor-test.txt; printf '\e[8;10H'; cat" || exit 1 $TMUX set -g window-size manual || exit 1 $TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP diff --git a/regress/cursor-test3.sh b/regress/cursor-test3.sh index bcf2898fa4..8bb4bd6fb5 100644 --- a/regress/cursor-test3.sh +++ b/regress/cursor-test3.sh @@ -10,7 +10,8 @@ $TMUX kill-server 2>/dev/null TMP=$(mktemp) trap "rm -f $TMP" 0 1 15 -$TMUX new -d -x7 -y2 "printf 'abcdefabcdefab'; printf '\e[2;7H'; cat" || exit 1 +$TMUX -f/dev/null new -d -x7 -y2 \ + "printf 'abcdefabcdefab'; printf '\e[2;7H'; cat" || exit 1 $TMUX set -g window-size manual || exit 1 $TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP diff --git a/regress/cursor-test4.sh b/regress/cursor-test4.sh index 86c149794b..2bf1bb0efa 100644 --- a/regress/cursor-test4.sh +++ b/regress/cursor-test4.sh @@ -10,7 +10,7 @@ $TMUX kill-server 2>/dev/null TMP=$(mktemp) trap "rm -f $TMP" 0 1 15 -$TMUX new -d -x10 -y3 "printf 'abcdef\n'; cat" || exit 1 +$TMUX -f/dev/null new -d -x10 -y3 "printf 'abcdef\n'; cat" || exit 1 $TMUX set -g window-size manual || exit 1 $TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP diff --git a/regress/kill-session-process-exit.sh b/regress/kill-session-process-exit.sh index 27d883e2dc..69ee27a231 100644 --- a/regress/kill-session-process-exit.sh +++ b/regress/kill-session-process-exit.sh @@ -9,9 +9,9 @@ TERM=screen TMUX="$TEST_TMUX -Ltest" $TMUX kill-server 2>/dev/null -$TMUX new -d 'sleep 1000' || exit 1 +$TMUX -f/dev/null new -d 'sleep 1000' || exit 1 P=$($TMUX display -pt0:0.0 '#{pane_pid}') -$TMUX new -d || exit 1 +$TMUX -f/dev/null new -d || exit 1 sleep 1 $TMUX kill-session -t0: sleep 1 From 7bcc0d16f24506bed6568ba36bcd278cfc06d069 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Apr 2019 09:03:39 +0000 Subject: [PATCH 397/836] Add an argument to copy commands to set the prefix for the buffer name, allows buffers for different sessions to be named separately. --- input.c | 2 +- paste.c | 9 ++-- tmux.1 | 21 +++++--- tmux.h | 2 +- tty-keys.c | 2 +- window-copy.c | 141 ++++++++++++++++++++++++++++++++++++-------------- 6 files changed, 127 insertions(+), 50 deletions(-) diff --git a/input.c b/input.c index 9679367412..0734140348 100644 --- a/input.c +++ b/input.c @@ -2432,7 +2432,7 @@ input_osc_52(struct input_ctx *ictx, const char *p) screen_write_stop(&ctx); notify_pane("pane-set-clipboard", wp); - paste_add(out, outlen); + paste_add(NULL, out, outlen); } /* Handle the OSC 104 sequence for unsetting (multiple) palette entries. */ diff --git a/paste.c b/paste.c index c76c52e544..0c9bc7b5c2 100644 --- a/paste.c +++ b/paste.c @@ -158,11 +158,14 @@ paste_free(struct paste_buffer *pb) * that the caller is responsible for allocating data. */ void -paste_add(char *data, size_t size) +paste_add(const char *prefix, char *data, size_t size) { struct paste_buffer *pb, *pb1; u_int limit; + if (prefix == NULL) + prefix = "buffer"; + if (size == 0) { free(data); return; @@ -181,7 +184,7 @@ paste_add(char *data, size_t size) pb->name = NULL; do { free(pb->name); - xasprintf(&pb->name, "buffer%04u", paste_next_index); + xasprintf(&pb->name, "%s%u", prefix, paste_next_index); paste_next_index++; } while (paste_get_name(pb->name) != NULL); @@ -263,7 +266,7 @@ paste_set(char *data, size_t size, const char *name, char **cause) return (0); } if (name == NULL) { - paste_add(data, size); + paste_add(NULL, data, size); return (0); } diff --git a/tmux.1 b/tmux.1 index e1c28fbb8a..d2960fb56c 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1132,12 +1132,12 @@ The following commands are supported in copy mode: .It Li "bottom-line" Ta "L" Ta "" .It Li "cancel" Ta "q" Ta "Escape" .It Li "clear-selection" Ta "Escape" Ta "C-g" -.It Li "copy-end-of-line" Ta "D" Ta "C-k" -.It Li "copy-line" Ta "" Ta "" -.It Li "copy-pipe " Ta "" Ta "" -.It Li "copy-pipe-and-cancel " Ta "" Ta "" -.It Li "copy-selection" Ta "" Ta "" -.It Li "copy-selection-and-cancel" Ta "Enter" Ta "M-w" +.It Li "copy-end-of-line []" Ta "D" Ta "C-k" +.It Li "copy-line []" Ta "" Ta "" +.It Li "copy-pipe []" Ta "" Ta "" +.It Li "copy-pipe-and-cancel []" Ta "" Ta "" +.It Li "copy-selection []" Ta "" Ta "" +.It Li "copy-selection-and-cancel []" Ta "Enter" Ta "M-w" .It Li "cursor-down" Ta "j" Ta "Down" .It Li "cursor-left" Ta "h" Ta "Left" .It Li "cursor-right" Ta "l" Ta "Right" @@ -1184,6 +1184,15 @@ The following commands are supported in copy mode: .It Li "top-line" Ta "H" Ta "M-R" .El .Pp +Copy commands may take an optional buffer prefix argument which is used +to generate the buffer name (the default is +.Ql buffer +so buffers are named +.Ql buffer0 , +.Ql buffer1 +and so on). +Pipe commands take a command argument which is the command to which the +copied text is piped. The .Ql -and-cancel variants of some commands exit copy mode after they have completed (for copy diff --git a/tmux.h b/tmux.h index 0821d790bc..31fbae3247 100644 --- a/tmux.h +++ b/tmux.h @@ -1611,7 +1611,7 @@ struct paste_buffer *paste_walk(struct paste_buffer *); struct paste_buffer *paste_get_top(const char **); struct paste_buffer *paste_get_name(const char *); void paste_free(struct paste_buffer *); -void paste_add(char *, size_t); +void paste_add(const char *, char *, size_t); int paste_rename(const char *, const char *, char **); int paste_set(char *, size_t, const char *, char **); char *paste_make_sample(struct paste_buffer *); diff --git a/tty-keys.c b/tty-keys.c index da84077b6a..7557eca0df 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -976,7 +976,7 @@ tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len, /* Create a new paste buffer. */ log_debug("%s: %.*s", __func__, outlen, out); - paste_add(out, outlen); + paste_add(NULL, out, outlen); return (0); } diff --git a/window-copy.c b/window-copy.c index b4fc7a2c61..aacea5c5e4 100644 --- a/window-copy.c +++ b/window-copy.c @@ -79,11 +79,12 @@ static int window_copy_set_selection(struct window_mode_entry *, int); static int window_copy_update_selection(struct window_mode_entry *, int); static void window_copy_synchronize_cursor(struct window_mode_entry *); static void *window_copy_get_selection(struct window_mode_entry *, size_t *); -static void window_copy_copy_buffer(struct window_mode_entry *, void *, - size_t); +static void window_copy_copy_buffer(struct window_mode_entry *, + const char *, void *, size_t); static void window_copy_copy_pipe(struct window_mode_entry *, - struct session *, const char *); -static void window_copy_copy_selection(struct window_mode_entry *); + struct session *, const char *, const char *); +static void window_copy_copy_selection(struct window_mode_entry *, + const char *); static void window_copy_append_selection(struct window_mode_entry *); static void window_copy_clear_selection(struct window_mode_entry *); static void window_copy_copy_line(struct window_mode_entry *, char **, @@ -164,8 +165,10 @@ struct window_copy_cmd_state { struct window_mode_entry *wme; struct args *args; struct mouse_event *m; + struct client *c; struct session *s; + struct winlink *wl; }; /* @@ -673,8 +676,15 @@ static enum window_copy_cmd_action window_copy_cmd_copy_end_of_line(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; u_int np = wme->prefix; + char *prefix = NULL; + + if (cs->args->argc == 2) + prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); window_copy_start_selection(wme); for (; np > 1; np--) @@ -682,9 +692,13 @@ window_copy_cmd_copy_end_of_line(struct window_copy_cmd_state *cs) window_copy_cursor_end_of_line(wme); if (s != NULL) { - window_copy_copy_selection(wme); + window_copy_copy_selection(wme, prefix); + + free(prefix); return (WINDOW_COPY_CMD_CANCEL); } + + free(prefix); return (WINDOW_COPY_CMD_REDRAW); } @@ -692,8 +706,15 @@ static enum window_copy_cmd_action window_copy_cmd_copy_line(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; u_int np = wme->prefix; + char *prefix = NULL; + + if (cs->args->argc == 2) + prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); window_copy_cursor_start_of_line(wme); window_copy_start_selection(wme); @@ -702,9 +723,13 @@ window_copy_cmd_copy_line(struct window_copy_cmd_state *cs) window_copy_cursor_end_of_line(wme); if (s != NULL) { - window_copy_copy_selection(wme); + window_copy_copy_selection(wme, prefix); + + free(prefix); return (WINDOW_COPY_CMD_CANCEL); } + + free(prefix); return (WINDOW_COPY_CMD_REDRAW); } @@ -712,11 +737,20 @@ static enum window_copy_cmd_action window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; + char *prefix = NULL; + + if (cs->args->argc == 2) + prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); if (s != NULL) - window_copy_copy_selection(wme); + window_copy_copy_selection(wme, prefix); window_copy_clear_selection(wme); + + free(prefix); return (WINDOW_COPY_CMD_REDRAW); } @@ -724,11 +758,20 @@ static enum window_copy_cmd_action window_copy_cmd_copy_selection_and_cancel(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; + char *prefix = NULL; + + if (cs->args->argc == 2) + prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); if (s != NULL) - window_copy_copy_selection(wme); + window_copy_copy_selection(wme, prefix); window_copy_clear_selection(wme); + + free(prefix); return (WINDOW_COPY_CMD_CANCEL); } @@ -1216,11 +1259,23 @@ static enum window_copy_cmd_action window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; - const char *argument = cs->args->argv[1]; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; + char *command = NULL; + char *prefix = NULL; + + if (cs->args->argc == 3) + prefix = format_single(NULL, cs->args->argv[2], c, s, wl, wp); - if (s != NULL && *argument != '\0') - window_copy_copy_pipe(wme, s, argument); + if (s != NULL && *cs->args->argv[1] != '\0') { + command = format_single(NULL, cs->args->argv[1], c, s, wl, wp); + window_copy_copy_pipe(wme, s, prefix, command); + free(command); + } + + free(prefix); return (WINDOW_COPY_CMD_NOTHING); } @@ -1228,13 +1283,26 @@ static enum window_copy_cmd_action window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct client *c = cs->c; struct session *s = cs->s; - const char *argument = cs->args->argv[1]; + struct winlink *wl = cs->wl; + struct window_pane *wp = wme->wp; + char *command = NULL; + char *prefix = NULL; + + if (cs->args->argc == 3) + prefix = format_single(NULL, cs->args->argv[2], c, s, wl, wp); + + if (s != NULL && *cs->args->argv[1] != '\0') { + command = format_single(NULL, cs->args->argv[1], c, s, wl, wp); + window_copy_copy_pipe(wme, s, prefix, command); + free(command); - if (s != NULL && *argument != '\0') { - window_copy_copy_pipe(wme, s, argument); + free(prefix); return (WINDOW_COPY_CMD_CANCEL); } + + free(prefix); return (WINDOW_COPY_CMD_NOTHING); } @@ -1278,7 +1346,7 @@ window_copy_cmd_jump_forward(struct window_copy_cmd_state *cs) data->jumptype = WINDOW_COPY_JUMPFORWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump(wme); + window_copy_cursor_jump(wme); } return (WINDOW_COPY_CMD_NOTHING); } @@ -1470,17 +1538,17 @@ static const struct { window_copy_cmd_cancel }, { "clear-selection", 0, 0, window_copy_cmd_clear_selection }, - { "copy-end-of-line", 0, 0, + { "copy-end-of-line", 0, 1, window_copy_cmd_copy_end_of_line }, - { "copy-line", 0, 0, + { "copy-line", 0, 1, window_copy_cmd_copy_line }, - { "copy-pipe", 1, 1, + { "copy-pipe", 1, 2, window_copy_cmd_copy_pipe }, - { "copy-pipe-and-cancel", 1, 1, + { "copy-pipe-and-cancel", 1, 2, window_copy_cmd_copy_pipe_and_cancel }, - { "copy-selection", 0, 0, + { "copy-selection", 0, 1, window_copy_cmd_copy_selection }, - { "copy-selection-and-cancel", 0, 0, + { "copy-selection-and-cancel", 0, 1, window_copy_cmd_copy_selection_and_cancel }, { "cursor-down", 0, 0, window_copy_cmd_cursor_down }, @@ -1576,7 +1644,7 @@ static const struct { static void window_copy_command(struct window_mode_entry *wme, struct client *c, - struct session *s, __unused struct winlink *wl, struct args *args, + struct session *s, struct winlink *wl, struct args *args, struct mouse_event *m) { struct window_copy_mode_data *data = wme->data; @@ -1595,8 +1663,10 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, cs.wme = wme; cs.args = args; cs.m = m; + cs.c = c; cs.s = s; + cs.wl = wl; action = WINDOW_COPY_CMD_NOTHING; for (i = 0; i < nitems(window_copy_cmd_table); i++) { @@ -2331,7 +2401,8 @@ window_copy_get_selection(struct window_mode_entry *wme, size_t *len) } static void -window_copy_copy_buffer(struct window_mode_entry *wme, void *buf, size_t len) +window_copy_copy_buffer(struct window_mode_entry *wme, const char *prefix, + void *buf, size_t len) { struct window_pane *wp = wme->wp; struct screen_write_ctx ctx; @@ -2343,41 +2414,35 @@ window_copy_copy_buffer(struct window_mode_entry *wme, void *buf, size_t len) notify_pane("pane-set-clipboard", wp); } - if (paste_set(buf, len, NULL, NULL) != 0) - free(buf); + paste_add(prefix, buf, len); } static void window_copy_copy_pipe(struct window_mode_entry *wme, struct session *s, - const char *fmt) + const char *prefix, const char *command) { - struct window_pane *wp = wme->wp; - void *buf; - size_t len; - struct job *job; - char *expanded; + void *buf; + size_t len; + struct job *job; buf = window_copy_get_selection(wme, &len); if (buf == NULL) return; - expanded = format_single(NULL, fmt, NULL, s, NULL, wp); - job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT); + job = job_run(command, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT); bufferevent_write(job_get_event(job), buf, len); - - free(expanded); - window_copy_copy_buffer(wme, buf, len); + window_copy_copy_buffer(wme, prefix, buf, len); } static void -window_copy_copy_selection(struct window_mode_entry *wme) +window_copy_copy_selection(struct window_mode_entry *wme, const char *prefix) { char *buf; size_t len; buf = window_copy_get_selection(wme, &len); if (buf != NULL) - window_copy_copy_buffer(wme, buf, len); + window_copy_copy_buffer(wme, prefix, buf, len); } static void From bbcfee362fdf8d39501131d3a3f8739dacd5c66e Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Apr 2019 08:45:32 +0000 Subject: [PATCH 398/836] Store and restore cursor across reflow by working out a position based on unwrapped lines, rather than a grid offset. Fixes problems reported by Thomas Sattler and Paul de Weerd. --- grid.c | 71 ++++++++++++++++++++++++++++++++++++-------------------- screen.c | 8 +++---- tmux.h | 4 ++-- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/grid.c b/grid.c index 531afa9d6d..53751c0363 100644 --- a/grid.c +++ b/grid.c @@ -1291,40 +1291,61 @@ grid_reflow(struct grid *gd, u_int sx) free(target); } -/* Convert point position to offset from the start of the grid. */ -u_int -grid_to_offset(struct grid *gd, u_int px, u_int py) +/* Convert to position based on wrapped lines. */ +void +grid_wrap_position(struct grid *gd, u_int px, u_int py, u_int *wx, u_int *wy) { - u_int yy, offset = 0; - - if (py > gd->hsize + gd->sy - 1) { - px = UINT_MAX; - py = gd->hsize + gd->sy - 1; + u_int ax = 0, ay = 0, yy; + + for (yy = 0; yy < py; yy++) { + if (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + ax += gd->linedata[yy].cellused; + else { + ax = 0; + ay++; + } } - - for (yy = 0; yy < py; yy++) - offset += gd->linedata[yy].cellused; - if (px > gd->linedata[yy].cellused) - px = gd->linedata[yy].cellused; - return (offset + px); + if (px >= gd->linedata[yy].cellused) + ax = UINT_MAX; + else + ax += px; + *wx = ax; + *wy = ay; } -/* Convert offset from the start of the grid to point position. */ +/* Convert position based on wrapped lines back. */ void -grid_from_offset(struct grid *gd, u_int offset, u_int *px, u_int *py) +grid_unwrap_position(struct grid *gd, u_int *px, u_int *py, u_int wx, u_int wy) { - u_int yy; - - *px = *py = 0; + u_int yy, ax = 0, ay = 0; for (yy = 0; yy < gd->hsize + gd->sy - 1; yy++) { - if (offset <= gd->linedata[yy].cellused) + if (ay == wy) break; - offset -= gd->linedata[yy].cellused; + if (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + ax += gd->linedata[yy].cellused; + else { + ax = 0; + ay++; + } } - if (offset < gd->linedata[yy].cellused) - *px = offset; - else - *px = gd->linedata[yy].cellused; + + /* + * yy is now 0 on the unwrapped line which contains wx. Walk forwards + * until we find the end or the line now containing wx. + */ + if (wx == UINT_MAX) { + while (gd->linedata[yy].flags & GRID_LINE_WRAPPED) + yy++; + wx = gd->linedata[yy].cellused; + } else { + while (gd->linedata[yy].flags & GRID_LINE_WRAPPED) { + if (wx < gd->linedata[yy].cellused) + break; + wx -= gd->linedata[yy].cellused; + yy++; + } + } + *px = wx; *py = yy; } diff --git a/screen.c b/screen.c index eae5fb128d..9b67e7e889 100644 --- a/screen.c +++ b/screen.c @@ -463,17 +463,17 @@ screen_select_cell(struct screen *s, struct grid_cell *dst, static void screen_reflow(struct screen *s, u_int new_x) { - u_int offset, cx = s->cx, cy = s->grid->hsize + s->cy; + u_int cx = s->cx, cy = s->grid->hsize + s->cy, wx, wy; struct timeval start, tv; gettimeofday(&start, NULL); - offset = grid_to_offset(s->grid, cx, cy); - log_debug("%s: cursor %u,%u offset is %u", __func__, cx, cy, offset); + grid_wrap_position(s->grid, cx, cy, &wx, &wy); + log_debug("%s: cursor %u,%u is %u,%u", __func__, cx, cy, wx, wy); grid_reflow(s->grid, new_x); - grid_from_offset(s->grid, offset, &cx, &cy); + grid_unwrap_position(s->grid, &cx, &cy, wx, wy); log_debug("%s: new cursor is %u,%u", __func__, cx, cy); if (cy >= s->grid->hsize) { diff --git a/tmux.h b/tmux.h index c1f188577c..d7f381993d 100644 --- a/tmux.h +++ b/tmux.h @@ -2103,8 +2103,8 @@ char *grid_string_cells(struct grid *, u_int, u_int, u_int, void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, u_int); void grid_reflow(struct grid *, u_int); -u_int grid_to_offset(struct grid *, u_int, u_int); -void grid_from_offset(struct grid *, u_int, u_int *, u_int *); +void grid_wrap_position(struct grid *, u_int, u_int, u_int *, u_int *); +void grid_unwrap_position(struct grid *, u_int *, u_int *, u_int, u_int); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); From fac792dc2714aa5a5d0d44aeacd7c53578486aae Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 2 Apr 2019 11:11:19 +0100 Subject: [PATCH 399/836] Update regress from master. --- regress/Makefile | 1 + regress/control-client-size.sh | 4 ++-- regress/cursor-test.txt | 6 +++++ regress/cursor-test1.result | 33 ++++++++++++++++++++++++++++ regress/cursor-test1.sh | 29 ++++++++++++++++++++++++ regress/cursor-test2.result | 33 ++++++++++++++++++++++++++++ regress/cursor-test2.sh | 29 ++++++++++++++++++++++++ regress/cursor-test3.result | 9 ++++++++ regress/cursor-test3.sh | 29 ++++++++++++++++++++++++ regress/cursor-test4.result | 16 ++++++++++++++ regress/cursor-test4.sh | 31 ++++++++++++++++++++++++++ regress/kill-session-process-exit.sh | 4 ++-- 12 files changed, 220 insertions(+), 4 deletions(-) create mode 100644 regress/cursor-test.txt create mode 100644 regress/cursor-test1.result create mode 100644 regress/cursor-test1.sh create mode 100644 regress/cursor-test2.result create mode 100644 regress/cursor-test2.sh create mode 100644 regress/cursor-test3.result create mode 100644 regress/cursor-test3.sh create mode 100644 regress/cursor-test4.result create mode 100644 regress/cursor-test4.sh diff --git a/regress/Makefile b/regress/Makefile index 3775a711c2..e6c3619fc4 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -7,3 +7,4 @@ all: $(TESTS) $(TESTS): sh $*.sh + sleep 1 diff --git a/regress/control-client-size.sh b/regress/control-client-size.sh index b8d9aef0f9..dd1850c541 100644 --- a/regress/control-client-size.sh +++ b/regress/control-client-size.sh @@ -28,7 +28,7 @@ $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d || exit 1 sleep 1 -cat <$TMP +cat <$TMP ls -F':#{window_width} #{window_height}' refresh -C 80,24 ls -F':#{window_width} #{window_height}' @@ -37,7 +37,7 @@ grep ^: $TMP >$OUT printf ":80 24\n:80 23\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null -cat <$TMP +cat <$TMP ls -F':#{window_width} #{window_height}' refresh -C 80,24 ls -F':#{window_width} #{window_height}' diff --git a/regress/cursor-test.txt b/regress/cursor-test.txt new file mode 100644 index 0000000000..67ed52c8fe --- /dev/null +++ b/regress/cursor-test.txt @@ -0,0 +1,6 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor +incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. Duis aute +irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat +nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia +deserunt mollit anim id est laborum. diff --git a/regress/cursor-test1.result b/regress/cursor-test1.result new file mode 100644 index 0000000000..71b9a4b63e --- /dev/null +++ b/regress/cursor-test1.result @@ -0,0 +1,33 @@ +14 8 t +0 ud exercitation ullamco laboris nisi ut +1 aliquip ex ea +2 commodo consequat. Duis aute +3 irure dolor in reprehenderit in voluptat +4 e velit esse cillum dolore eu fugiat +5 nulla pariatur. Excepteur sint occaecat +6 cupidatat non proident, sunt in culpa qu +7 i officia +8 deserunt mollit anim id est laborum. +9 +4 6 t +0 cupidatat +1 non proide +2 nt, sunt i +3 n culpa qu +4 i officia +5 deserunt m +6 ollit anim +7 id est la +8 borum. +9 +14 8 t +0 incididunt ut labore et dolore magna aliqua. Ut en +1 im ad minim veniam, quis nostrud exercitation ulla +2 mco laboris nisi ut aliquip ex ea +3 commodo consequat. Duis aute +4 irure dolor in reprehenderit in voluptate velit es +5 se cillum dolore eu fugiat +6 nulla pariatur. Excepteur sint occaecat cupidatat +7 non proident, sunt in culpa qui officia +8 deserunt mollit anim id est laborum. +9 diff --git a/regress/cursor-test1.sh b/regress/cursor-test1.sh new file mode 100644 index 0000000000..2dc205392b --- /dev/null +++ b/regress/cursor-test1.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -f/dev/null -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX -f/dev/null new -d -x40 -y10 \ + "cat cursor-test.txt; printf '\e[9;15H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x10 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x50 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test1.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test2.result b/regress/cursor-test2.result new file mode 100644 index 0000000000..dc005d2b41 --- /dev/null +++ b/regress/cursor-test2.result @@ -0,0 +1,33 @@ +9 7 a +0 cupidatat +1 non proide +2 nt, sunt i +3 n culpa qu +4 i officia +5 deserunt m +6 ollit anim +7 id est la +8 borum. +9 +4 6 a +0 icia +1 deser +2 unt m +3 ollit +4 anim +5 id e +6 st la +7 borum +8 . +9 +29 8 a +0 incididunt ut labore et dolore magna aliqua. Ut en +1 im ad minim veniam, quis nostrud exercitation ulla +2 mco laboris nisi ut aliquip ex ea +3 commodo consequat. Duis aute +4 irure dolor in reprehenderit in voluptate velit es +5 se cillum dolore eu fugiat +6 nulla pariatur. Excepteur sint occaecat cupidatat +7 non proident, sunt in culpa qui officia +8 deserunt mollit anim id est laborum. +9 diff --git a/regress/cursor-test2.sh b/regress/cursor-test2.sh new file mode 100644 index 0000000000..9791f56708 --- /dev/null +++ b/regress/cursor-test2.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX -f/dev/null new -d -x10 -y10 \ + "cat cursor-test.txt; printf '\e[8;10H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x5 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x50 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test2.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test3.result b/regress/cursor-test3.result new file mode 100644 index 0000000000..e72b1a9bbb --- /dev/null +++ b/regress/cursor-test3.result @@ -0,0 +1,9 @@ +6 1 b +0 abcdefa +1 bcdefab +3 1 b +0 fabcd +1 efab +6 1 b +0 abcdefa +1 bcdefab diff --git a/regress/cursor-test3.sh b/regress/cursor-test3.sh new file mode 100644 index 0000000000..8bb4bd6fb5 --- /dev/null +++ b/regress/cursor-test3.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX -f/dev/null new -d -x7 -y2 \ + "printf 'abcdefabcdefab'; printf '\e[2;7H'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x5 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x7 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test3.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/cursor-test4.result b/regress/cursor-test4.result new file mode 100644 index 0000000000..db26e4faa5 --- /dev/null +++ b/regress/cursor-test4.result @@ -0,0 +1,16 @@ +0 1 +0 abcdef +1 +2 +0 1 +0 abcdef +1 +2 +0 1 +0 def +1 +2 +0 1 +0 abcdef +1 +2 diff --git a/regress/cursor-test4.sh b/regress/cursor-test4.sh new file mode 100644 index 0000000000..2bf1bb0efa --- /dev/null +++ b/regress/cursor-test4.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX -f/dev/null new -d -x10 -y3 "printf 'abcdef\n'; cat" || exit 1 +$TMUX set -g window-size manual || exit 1 + +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x20 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x3 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP +$TMUX resizew -x10 || exit 1 +$TMUX display -pF '#{cursor_x} #{cursor_y} #{cursor_character}' >>$TMP +$TMUX capturep -p|awk '{print NR-1,$0}' >>$TMP + +cmp -s $TMP cursor-test4.result || exit 1 + +$TMUX kill-server 2>/dev/null +exit 0 diff --git a/regress/kill-session-process-exit.sh b/regress/kill-session-process-exit.sh index 27d883e2dc..69ee27a231 100644 --- a/regress/kill-session-process-exit.sh +++ b/regress/kill-session-process-exit.sh @@ -9,9 +9,9 @@ TERM=screen TMUX="$TEST_TMUX -Ltest" $TMUX kill-server 2>/dev/null -$TMUX new -d 'sleep 1000' || exit 1 +$TMUX -f/dev/null new -d 'sleep 1000' || exit 1 P=$($TMUX display -pt0:0.0 '#{pane_pid}') -$TMUX new -d || exit 1 +$TMUX -f/dev/null new -d || exit 1 sleep 1 $TMUX kill-session -t0: sleep 1 From 916c4c499de80025eb732e1b26ffda7f06abaa45 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 2 Apr 2019 11:12:24 +0100 Subject: [PATCH 400/836] Version RC2. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 453e734beb..79e3ba8c75 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 2.9-rc) +AC_INIT([tmux], 2.9-rc2) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From f0ddc301b76fb7c048751892b1e5e63ec75f8deb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 2 Apr 2019 17:02:09 +0100 Subject: [PATCH 401/836] Add CHANGES. --- CHANGES | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index f5488a2804..6b5f1aa639 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ CHANGES FROM 2.9 to X.X -XXX +* Allow the prefix used for new buffer names to be given as an argument to the + copy commands in copy mode. CHANGES FROM 2.8 to 2.9 From 09f71ed1b24a875e2747583dee0008765df9e74f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Apr 2019 18:41:24 +0000 Subject: [PATCH 402/836] Silence flag should use the same option as activity, reported by Thomas Sattler. --- options-table.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/options-table.c b/options-table.c index b3bc84da49..fc72c3a978 100644 --- a/options-table.c +++ b/options-table.c @@ -83,7 +83,8 @@ static const char *options_table_window_size_list[] = { "#{?#{&&:#{window_bell_flag}," \ "#{!=:#{window-status-bell-style},default}}, " \ "#{window-status-bell-style}," \ - "#{?#{&&:#{window_activity_flag}," \ + "#{?#{&&:#{||:#{window_activity_flag}," \ + "#{window_silence_flag}}," \ "#{!=:" \ "#{window-status-activity-style}," \ "default}}, " \ @@ -104,7 +105,8 @@ static const char *options_table_window_size_list[] = { "#{?#{&&:#{window_bell_flag}," \ "#{!=:#{window-status-bell-style},default}}, " \ "#{window-status-bell-style}," \ - "#{?#{&&:#{window_activity_flag}," \ + "#{?#{&&:#{||:#{window_activity_flag}," \ + "#{window_silence_flag}}," \ "#{!=:" \ "#{window-status-activity-style}," \ "default}}, " \ From 8968acd678d14cf1ff820ad829d06ca93c2047f1 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Apr 2019 18:41:24 +0000 Subject: [PATCH 403/836] Silence flag should use the same option as activity, reported by Thomas Sattler. --- options-table.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/options-table.c b/options-table.c index 541e66f240..1301f92d30 100644 --- a/options-table.c +++ b/options-table.c @@ -82,7 +82,8 @@ static const char *options_table_window_size_list[] = { "#{?#{&&:#{window_bell_flag}," \ "#{!=:#{window-status-bell-style},default}}, " \ "#{window-status-bell-style}," \ - "#{?#{&&:#{window_activity_flag}," \ + "#{?#{&&:#{||:#{window_activity_flag}," \ + "#{window_silence_flag}}," \ "#{!=:" \ "#{window-status-activity-style}," \ "default}}, " \ @@ -103,7 +104,8 @@ static const char *options_table_window_size_list[] = { "#{?#{&&:#{window_bell_flag}," \ "#{!=:#{window-status-bell-style},default}}, " \ "#{window-status-bell-style}," \ - "#{?#{&&:#{window_activity_flag}," \ + "#{?#{&&:#{||:#{window_activity_flag}," \ + "#{window_silence_flag}}," \ "#{!=:" \ "#{window-status-activity-style}," \ "default}}, " \ From 06d58b3b7b4c20828681e24007d8b9bc1d35fdad Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 3 Apr 2019 06:43:04 +0000 Subject: [PATCH 404/836] screen_write_fast_copy can no longer assume the target screen is default (it isn't for the pane status lines). --- screen-write.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/screen-write.c b/screen-write.c index 0d57b8185a..566d4d1455 100644 --- a/screen-write.c +++ b/screen-write.c @@ -324,7 +324,7 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, /* * Copy from another screen but without the selection stuff. Also assumes the - * target region is already big enough and already cleared. + * target region is already big enough. */ void screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, @@ -349,8 +349,7 @@ screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, grid_get_cell(gd, xx, yy, &gc); if (xx + gc.data.width > px + nx) break; - if (!grid_cells_equal(&gc, &grid_default_cell)) - grid_view_set_cell(ctx->s->grid, cx, cy, &gc); + grid_view_set_cell(ctx->s->grid, cx, cy, &gc); cx++; } cy++; From f6c54f3f03353c415cfc59a65118f570972d51ff Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 3 Apr 2019 06:43:19 +0000 Subject: [PATCH 405/836] Do not load /etc/tmux.conf if given -f. --- cfg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cfg.c b/cfg.c index d8ce40d36e..1a7e4375cf 100644 --- a/cfg.c +++ b/cfg.c @@ -102,7 +102,8 @@ start_cfg(void) cmdq_append(c, cfg_item); } - load_cfg(TMUX_CONF, NULL, NULL, 1); + if (cfg_file == NULL) + load_cfg(TMUX_CONF, NULL, NULL, 1); if (cfg_file == NULL && (home = find_home()) != NULL) { xasprintf(&cfg_file, "%s/.tmux.conf", home); From 481c3f3f2ea5de650da836cd9684a2d1a2cb2c33 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 3 Apr 2019 06:43:04 +0000 Subject: [PATCH 406/836] screen_write_fast_copy can no longer assume the target screen is default (it isn't for the pane status lines). --- screen-write.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/screen-write.c b/screen-write.c index 0d57b8185a..566d4d1455 100644 --- a/screen-write.c +++ b/screen-write.c @@ -324,7 +324,7 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px, /* * Copy from another screen but without the selection stuff. Also assumes the - * target region is already big enough and already cleared. + * target region is already big enough. */ void screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, @@ -349,8 +349,7 @@ screen_write_fast_copy(struct screen_write_ctx *ctx, struct screen *src, grid_get_cell(gd, xx, yy, &gc); if (xx + gc.data.width > px + nx) break; - if (!grid_cells_equal(&gc, &grid_default_cell)) - grid_view_set_cell(ctx->s->grid, cx, cy, &gc); + grid_view_set_cell(ctx->s->grid, cx, cy, &gc); cx++; } cy++; From f4aefb738ec1444842b476f98c45068bfef6f460 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 4 Apr 2019 10:25:35 +0000 Subject: [PATCH 407/836] Fix size check for splitw -f and top level pane size for tiled layout, problems reported by Thomas Sattler. --- layout-set.c | 3 +-- layout.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/layout-set.c b/layout-set.c index b9769ed53a..d99453c255 100644 --- a/layout-set.c +++ b/layout-set.c @@ -450,8 +450,7 @@ layout_set_tiled(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, (width + 1) * columns - 1, - (height + 1) * rows - 1, 0, 0); + layout_set_size(lc, w->sx, w->sy, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create a grid of the cells. */ diff --git a/layout.c b/layout.c index 89026b918c..7093c607a4 100644 --- a/layout.c +++ b/layout.c @@ -722,7 +722,7 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, enum layout_type type, int size) { struct layout_cell *lcchild; - u_int new_size, available, previous, count, idx; + u_int new_size, available, previous, count, idx; /* Cells with no children must just be bigger than minimum. */ if (lc->type == LAYOUT_WINDOWPANE) @@ -736,6 +736,9 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, /* Check new size will work for each child. */ if (lc->type == type) { + if (available < (count * 2) - 1) + return (0); + if (type == LAYOUT_LEFTRIGHT) previous = lc->sx; else @@ -745,13 +748,17 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, TAILQ_FOREACH(lcchild, &lc->cells, entry) { new_size = layout_new_pane_size(w, previous, lcchild, type, size, count - idx, available); - if (new_size > available) - return (0); - - available -= (new_size + 1); + if (idx == count - 1) { + if (new_size > available) + return (0); + available -= new_size; + } else { + if (new_size + 1 > available) + return (0); + available -= new_size + 1; + } if (!layout_set_size_check(w, lcchild, type, new_size)) return (0); - idx++; } } else { From 73b54a0e5fa14736d1b7fbac997dd5b12c6940fb Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 4 Apr 2019 10:25:35 +0000 Subject: [PATCH 408/836] Fix size check for splitw -f and top level pane size for tiled layout, problems reported by Thomas Sattler. --- layout-set.c | 3 +-- layout.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/layout-set.c b/layout-set.c index b9769ed53a..d99453c255 100644 --- a/layout-set.c +++ b/layout-set.c @@ -450,8 +450,7 @@ layout_set_tiled(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, (width + 1) * columns - 1, - (height + 1) * rows - 1, 0, 0); + layout_set_size(lc, w->sx, w->sy, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create a grid of the cells. */ diff --git a/layout.c b/layout.c index 89026b918c..7093c607a4 100644 --- a/layout.c +++ b/layout.c @@ -722,7 +722,7 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, enum layout_type type, int size) { struct layout_cell *lcchild; - u_int new_size, available, previous, count, idx; + u_int new_size, available, previous, count, idx; /* Cells with no children must just be bigger than minimum. */ if (lc->type == LAYOUT_WINDOWPANE) @@ -736,6 +736,9 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, /* Check new size will work for each child. */ if (lc->type == type) { + if (available < (count * 2) - 1) + return (0); + if (type == LAYOUT_LEFTRIGHT) previous = lc->sx; else @@ -745,13 +748,17 @@ layout_set_size_check(struct window *w, struct layout_cell *lc, TAILQ_FOREACH(lcchild, &lc->cells, entry) { new_size = layout_new_pane_size(w, previous, lcchild, type, size, count - idx, available); - if (new_size > available) - return (0); - - available -= (new_size + 1); + if (idx == count - 1) { + if (new_size > available) + return (0); + available -= new_size; + } else { + if (new_size + 1 > available) + return (0); + available -= new_size + 1; + } if (!layout_set_size_check(w, lcchild, type, new_size)) return (0); - idx++; } } else { From 1b5a8a0f09cede0d5b6a4744ead873fa5b53abc0 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 5 Apr 2019 20:32:31 +0000 Subject: [PATCH 409/836] Fix some warnings, from Thomas Adam. --- cmd-show-options.c | 2 -- style.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 79827e32a7..79bb6c54b9 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -166,13 +166,11 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item, struct options *oo) { struct options_entry *o; - const struct options_table_entry *oe; struct options_array_item *a; u_int idx; o = options_first(oo); while (o != NULL) { - oe = options_table_entry(o); if (!options_isarray(o)) cmd_show_options_print(self, item, o, -1); else { diff --git a/style.c b/style.c index c3d2960d70..92941dbd73 100644 --- a/style.c +++ b/style.c @@ -172,7 +172,7 @@ style_tostring(struct style *sy) { struct grid_cell *gc = &sy->gc; int off = 0; - const char *comma = "", *tmp; + const char *comma = "", *tmp = ""; static char s[256]; char b[16]; From fc111d2b1245f22ef2ac6c8edc402e9fbf32f756 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Apr 2019 12:07:03 +0100 Subject: [PATCH 410/836] Fix a duplicate entry in CHANGES and remove an item from TODO. --- CHANGES | 2 -- TODO | 1 - 2 files changed, 3 deletions(-) diff --git a/CHANGES b/CHANGES index 6b5f1aa639..3fefa19296 100644 --- a/CHANGES +++ b/CHANGES @@ -47,8 +47,6 @@ CHANGES FROM 2.8 to 2.9 and retrieved if the same mode is entered again. Exiting the active mode goes back to the previous one. -* Add support for origin mode. - * When showing command output in copy mode, call it view mode instead (affects pane_mode format). diff --git a/TODO b/TODO index 048fd88518..4e252b5f0c 100644 --- a/TODO +++ b/TODO @@ -159,4 +159,3 @@ TODO soonish maybe: collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. -- window-size latest, GitHub issue 1637. From 7653328ce7e2876dff3219a02cdd87ade3caf90a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Apr 2019 12:18:26 +0100 Subject: [PATCH 411/836] Remove from TODO one thing that I don't think is necessary and one that is done. --- TODO | 3 --- 1 file changed, 3 deletions(-) diff --git a/TODO b/TODO index 4e252b5f0c..ed081bf4e5 100644 --- a/TODO +++ b/TODO @@ -52,7 +52,6 @@ need to be suspended * allow the prefix for automatic buffers to be specified as part of the key binding to allow session buffers or similar (GitHub issue 1501) - * copy-pipe should be synchronous (GitHub issue 1517) - layout stuff * way to tag a layout as a number/name @@ -149,8 +148,6 @@ TODO soonish maybe: - Store hooks as options, issue 1619. -- Support buffer prefixes, issue 1501. -- copy-pipe should be synchronous, issue 1517. - -E flag to pass environment to new-*, issue 1498. - Copy mode searching is slow when there is a big history, issue 1545. - Grid "block" stuff, issue 1269. Can be used potentially for compression of From 5ece386cdf84b692c1f28b5bf018ac619d067fde Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Apr 2019 13:01:03 +0100 Subject: [PATCH 412/836] Break new window and pane creation common code from various commands and window.c into a separate file spawn.c. --- Makefile.am | 1 + cmd-attach-session.c | 2 +- cmd-join-pane.c | 10 +- cmd-kill-session.c | 4 +- cmd-new-session.c | 105 ++++++++------------ cmd-new-window.c | 107 ++++++-------------- cmd-queue.c | 2 +- cmd-respawn-pane.c | 61 +++++------- cmd-respawn-window.c | 72 ++++---------- cmd-rotate-window.c | 4 +- cmd-select-pane.c | 4 +- cmd-split-window.c | 139 ++++++++++---------------- cmd-swap-pane.c | 10 +- cmd-switch-client.c | 2 +- layout.c | 15 +-- server-fn.c | 4 +- server.c | 2 +- session.c | 68 ++----------- tmux.h | 58 ++++++++--- window-tree.c | 2 +- window.c | 227 ++++++------------------------------------- 21 files changed, 275 insertions(+), 624 deletions(-) diff --git a/Makefile.am b/Makefile.am index 16c842c86e..0d5a789eae 100644 --- a/Makefile.am +++ b/Makefile.am @@ -162,6 +162,7 @@ dist_tmux_SOURCES = \ session.c \ status.c \ style.c \ + spawn.c \ tmux.c \ tmux.h \ tty-acs.c \ diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 73ff530da6..bcd6d89529 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -87,7 +87,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, if (wl != NULL) { if (wp != NULL) - window_set_active_pane(wp->window, wp); + window_set_active_pane(wp->window, wp, 1); session_set_current(s, wl); if (wp != NULL) cmd_find_from_winlink_pane(current, wl, wp, 0); diff --git a/cmd-join-pane.c b/cmd-join-pane.c index 947b24998e..3d798e0988 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -71,7 +71,7 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) int size, percentage, dst_idx; enum layout_type type; struct layout_cell *lc; - int not_same_window; + int not_same_window, flags; if (self->entry == &cmd_join_pane_entry) not_same_window = 1; @@ -123,7 +123,11 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) else size = (dst_wp->sx * percentage) / 100; } - lc = layout_split_pane(dst_wp, type, size, args_has(args, 'b'), 0); + if (args_has(args, 'b')) + flags = SPAWN_BEFORE; + else + flags = 0; + lc = layout_split_pane(dst_wp, type, size, flags); if (lc == NULL) { cmdq_error(item, "create pane failed: pane too small"); return (CMD_RETURN_ERROR); @@ -144,7 +148,7 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) server_redraw_window(dst_w); if (!args_has(args, 'd')) { - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(dst_w, src_wp, 1); session_select(dst_s, dst_idx); cmd_find_from_session(current, dst_s, 0); server_redraw_session(dst_s); diff --git a/cmd-kill-session.c b/cmd-kill-session.c index 00ea7789c1..dcef809789 100644 --- a/cmd-kill-session.c +++ b/cmd-kill-session.c @@ -61,12 +61,12 @@ cmd_kill_session_exec(struct cmd *self, struct cmdq_item *item) RB_FOREACH_SAFE(sloop, sessions, &sessions, stmp) { if (sloop != s) { server_destroy_session(sloop); - session_destroy(sloop, __func__); + session_destroy(sloop, 1, __func__); } } } else { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } return (CMD_RETURN_NORMAL); } diff --git a/cmd-new-session.c b/cmd-new-session.c index e1be350b9e..f0a353d8a4 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -69,20 +69,17 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct args *args = self->args; struct client *c = item->client; struct session *s, *as, *groupwith; - struct window *w; struct environ *env; struct options *oo; struct termios tio, *tiop; struct session_group *sg; - const char *errstr, *template, *group, *prefix; - const char *path, *cmd, *tmp, *value; - char **argv, *cause, *cp, *newname, *cwd = NULL; - int detached, already_attached, idx, argc; - int is_control = 0; - u_int sx, sy, dsx = 80, dsy = 24; - struct environ_entry *envent; - struct cmd_find_state fs; + const char *errstr, *template, *group, *prefix, *tmp; + char *cause, *cwd = NULL, *cp, *newname = NULL; + int detached, already_attached, is_control = 0; + u_int sx, sy, dsx, dsy; + struct spawn_context sc; enum cmd_retval retval; + struct cmd_find_state fs; if (self->entry == &cmd_has_session_entry) { /* @@ -97,13 +94,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - newname = NULL; if (args_has(args, 's')) { newname = format_single(item, args_get(args, 's'), c, NULL, NULL, NULL); if (!session_check_name(newname)) { cmdq_error(item, "bad session name: %s", newname); - goto error; + goto fail; } if ((as = session_find(newname)) != NULL) { if (args_has(args, 'A')) { @@ -114,7 +110,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (retval); } cmdq_error(item, "duplicate session: %s", newname); - goto error; + goto fail; } } @@ -125,7 +121,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (groupwith == NULL) { if (!session_check_name(group)) { cmdq_error(item, "bad group name: %s", group); - goto error; + goto fail; } sg = session_group_find(group); } else @@ -173,7 +169,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (server_client_check_nested(item->client)) { cmdq_error(item, "sessions should be nested with care, " "unset $TMUX to force"); - return (CMD_RETURN_ERROR); + goto fail; } if (tcgetattr(c->tty.fd, &tio) != 0) fatal("tcgetattr failed"); @@ -186,7 +182,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (server_client_open(c, &cause) != 0) { cmdq_error(item, "open terminal failed: %s", cause); free(cause); - goto error; + goto fail; } } @@ -200,7 +196,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) dsx = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "width %s", errstr); - goto error; + goto fail; } } } @@ -213,7 +209,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) dsy = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "height %s", errstr); - goto error; + goto fail; } } } @@ -225,8 +221,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (sy > 0 && options_get_number(global_s_options, "status")) sy--; } else { - value = options_get_string(global_s_options, "default-size"); - if (sscanf(value, "%ux%u", &sx, &sy) != 2) { + tmp = options_get_string(global_s_options, "default-size"); + if (sscanf(tmp, "%ux%u", &sx, &sy) != 2) { sx = 80; sy = 24; } @@ -240,59 +236,34 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (sy == 0) sy = 1; - /* Figure out the command for the new window. */ - argc = -1; - argv = NULL; - if (!args_has(args, 't') && args->argc != 0) { - argc = args->argc; - argv = args->argv; - } else if (sg == NULL && groupwith == NULL) { - cmd = options_get_string(global_s_options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } - - path = NULL; - if (c != NULL && c->session == NULL) - envent = environ_find(c->environ, "PATH"); - else - envent = environ_find(global_environ, "PATH"); - if (envent != NULL) - path = envent->value; - - /* Construct the environment. */ + /* Create the new session. */ + oo = options_create(global_s_options); + if (args_has(args, 'x') || args_has(args, 'y')) + options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); env = environ_create(); if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); + s = session_create(prefix, newname, cwd, env, oo, tiop); - /* Set up the options. */ - oo = options_create(global_s_options); - if (args_has(args, 'x') || args_has(args, 'y')) - options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + /* Spawn the initial window. */ + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; - /* Create the new session. */ - idx = -1 - options_get_number(global_s_options, "base-index"); - s = session_create(prefix, newname, argc, argv, path, cwd, env, oo, - tiop, idx, &cause); - environ_free(env); - if (s == NULL) { - cmdq_error(item, "create session failed: %s", cause); - free(cause); - goto error; - } + sc.name = args_get(args, 'n'); + sc.argc = args->argc; + sc.argv = args->argv; - /* Set the initial window name if one given. */ - if (argc >= 0 && (tmp = args_get(args, 'n')) != NULL) { - cp = format_single(item, tmp, c, s, NULL, NULL); - w = s->curw->window; - window_set_name(w, cp); - options_set_number(w->options, "automatic-rename", 0); - free(cp); + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = 0; + + if (spawn_window(&sc, &cause) == NULL) { + session_destroy(s, 0, __func__); + cmdq_error(item, "create window failed: %s", cause); + free(cause); + goto fail; } /* @@ -364,7 +335,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) free(newname); return (CMD_RETURN_NORMAL); -error: +fail: free(cwd); free(newname); return (CMD_RETURN_ERROR); diff --git a/cmd-new-window.c b/cmd-new-window.c index 5baeff6506..db320f3d90 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -53,87 +53,45 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct cmd_find_state *current = &item->shared->current; + struct spawn_context sc; + struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct client *c = cmd_find_client(item, NULL, 1); int idx = item->target.idx; - const char *cmd, *path, *template, *tmp; - char **argv, *cause, *cp, *cwd, *name; - int argc, detached; - struct environ_entry *envent; + struct winlink *new_wl; + char *cause = NULL, *cp; + const char *template; struct cmd_find_state fs; - if (args_has(args, 'a') && wl != NULL) { - if ((idx = winlink_shuffle_up(s, wl)) == -1) { - cmdq_error(item, "no free window indexes"); - return (CMD_RETURN_ERROR); - } - } - detached = args_has(args, 'd'); - - if (args->argc == 0) { - cmd = options_get_string(s->options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } else { - argc = args->argc; - argv = args->argv; + if (args_has(args, 'a') && (idx = winlink_shuffle_up(s, wl)) == -1) { + cmdq_error(item, "couldn't get a window index"); + return (CMD_RETURN_ERROR); } - path = NULL; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - if ((tmp = args_get(args, 'c')) != NULL) - cwd = format_single(item, tmp, c, s, NULL, NULL); - else - cwd = xstrdup(server_client_get_cwd(item->client, s)); - - if ((tmp = args_get(args, 'n')) != NULL) - name = format_single(item, tmp, c, s, NULL, NULL); - else - name = NULL; - - if (idx != -1) - wl = winlink_find_by_index(&s->windows, idx); - if (wl != NULL && args_has(args, 'k')) { - /* - * Can't use session_detach as it will destroy session if this - * makes it empty. - */ - notify_session_window("window-unlinked", s, wl->window); - wl->flags &= ~WINLINK_ALERTFLAGS; - winlink_stack_remove(&s->lastw, wl); - winlink_remove(&s->windows, wl); - - /* Force select/redraw if current. */ - if (wl == s->curw) { - detached = 0; - s->curw = NULL; - } - } + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; - if (idx == -1) - idx = -1 - options_get_number(s->options, "base-index"); - wl = session_new(s, name, argc, argv, path, cwd, idx, - &cause); - if (wl == NULL) { + sc.name = args_get(args, 'n'); + sc.argc = args->argc; + sc.argv = args->argv; + + sc.idx = idx; + sc.cwd = args_get(args, 'c'); + + sc.flags = 0; + if (args_has(args, 'd')) + sc.flags |= SPAWN_DETACHED; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; + + if ((new_wl = spawn_window(&sc, &cause)) == NULL) { cmdq_error(item, "create window failed: %s", cause); free(cause); - goto error; + return (CMD_RETURN_ERROR); } - if (!detached) { - session_select(s, wl->idx); - cmd_find_from_winlink(current, wl, 0); + if (!args_has(args, 'd') || new_wl == s->curw) { + cmd_find_from_winlink(current, new_wl, 0); server_redraw_session_group(s); } else server_status_session_group(s); @@ -141,7 +99,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'P')) { if ((template = args_get(args, 'F')) == NULL) template = NEW_WINDOW_TEMPLATE; - cp = format_single(item, template, c, s, wl, NULL); + cp = format_single(item, template, c, s, new_wl, NULL); cmdq_print(item, "%s", cp); free(cp); } @@ -149,12 +107,5 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_winlink(&fs, wl, 0); hooks_insert(s->hooks, item, &fs, "after-new-window"); - free(name); - free(cwd); return (CMD_RETURN_NORMAL); - -error: - free(name); - free(cwd); - return (CMD_RETURN_ERROR); } diff --git a/cmd-queue.c b/cmd-queue.c index 97b3c1c97e..03fd5f10c8 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -111,7 +111,7 @@ cmdq_remove(struct cmdq_item *item) if (item->client != NULL) server_client_unref(item->client); - if (item->type == CMDQ_COMMAND) + if (item->cmdlist != NULL) cmd_list_free(item->cmdlist); TAILQ_REMOVE(item->queue, item, entry); diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index eb4a7e09e1..df234cd302 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -20,7 +20,7 @@ #include #include -#include +#include #include "tmux.h" @@ -36,7 +36,7 @@ const struct cmd_entry cmd_respawn_pane_entry = { .args = { "c:kt:", 0, -1 }, .usage = "[-c start-directory] [-k] " CMD_TARGET_PANE_USAGE - " [command]", + " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -48,53 +48,40 @@ static enum cmd_retval cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; + struct spawn_context sc; + struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; struct window_pane *wp = item->target.wp; - struct client *c = cmd_find_client(item, NULL, 1); - struct session *s = item->target.s; - struct environ *env; - const char *path = NULL, *cp; - char *cause, *cwd = NULL; - u_int idx; - struct environ_entry *envent; - - if (!args_has(self->args, 'k') && wp->fd != -1) { - if (window_pane_index(wp, &idx) != 0) - fatalx("index not found"); - cmdq_error(item, "pane still active: %s:%d.%u", - s->name, wl->idx, idx); - return (CMD_RETURN_ERROR); - } + struct client *c = cmd_find_client(item, NULL, 1); + char *cause = NULL; + + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; + + sc.wp0 = wp; + sc.lc = NULL; - window_pane_reset_mode_all(wp); - screen_reinit(&wp->base); - input_init(wp); + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; + sc.idx = -1; + sc.cwd = args_get(args, 'c'); - if ((cp = args_get(args, 'c')) != NULL) - cwd = format_single(item, cp, c, s, NULL, NULL); + sc.flags = SPAWN_RESPAWN; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; - env = environ_for_session(s, 0); - if (window_pane_spawn(wp, args->argc, args->argv, path, NULL, cwd, env, - s->tio, &cause) != 0) { + if (spawn_pane(&sc, &cause) == NULL) { cmdq_error(item, "respawn pane failed: %s", cause); free(cause); - environ_free(env); - free(cwd); return (CMD_RETURN_ERROR); } - environ_free(env); - free(cwd); wp->flags |= PANE_REDRAW; - server_status_window(w); + server_status_window(wp->window); return (CMD_RETURN_NORMAL); } diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index 6879199063..2ccb2fded4 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include "tmux.h" @@ -48,64 +48,34 @@ static enum cmd_retval cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; + struct spawn_context sc; struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; - struct window_pane *wp; - struct client *c = cmd_find_client(item, NULL, 1); - struct environ *env; - const char *path = NULL, *cp; - char *cause, *cwd = NULL; - struct environ_entry *envent; - - if (!args_has(self->args, 'k')) { - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->fd == -1) - continue; - cmdq_error(item, "window still active: %s:%d", s->name, - wl->idx); - return (CMD_RETURN_ERROR); - } - } + char *cause = NULL; + + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; + + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; - wp = TAILQ_FIRST(&w->panes); - TAILQ_REMOVE(&w->panes, wp, entry); - layout_free(w); - window_destroy_panes(w); - TAILQ_INSERT_HEAD(&w->panes, wp, entry); - window_pane_resize(wp, w->sx, w->sy); - - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - if ((cp = args_get(args, 'c')) != NULL) - cwd = format_single(item, cp, c, s, NULL, NULL); - - env = environ_for_session(s, 0); - if (window_pane_spawn(wp, args->argc, args->argv, path, NULL, cwd, env, - s->tio, &cause) != 0) { + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = SPAWN_RESPAWN; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; + + if (spawn_window(&sc, &cause) == NULL) { cmdq_error(item, "respawn window failed: %s", cause); free(cause); - environ_free(env); - free(cwd); - server_destroy_pane(wp, 0); return (CMD_RETURN_ERROR); } - environ_free(env); - free(cwd); - - layout_init(w, wp); - window_pane_reset_mode_all(wp); - screen_reinit(&wp->base); - input_init(wp); - window_set_active_pane(w, wp); - recalculate_sizes(); - server_redraw_window(w); + server_redraw_window(wl->window); return (CMD_RETURN_NORMAL); } diff --git a/cmd-rotate-window.c b/cmd-rotate-window.c index 5a900a1341..6dc0f2a828 100644 --- a/cmd-rotate-window.c +++ b/cmd-rotate-window.c @@ -77,7 +77,7 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_PREV(w->active, window_panes, entry)) == NULL) wp = TAILQ_LAST(&w->panes, window_panes); - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); cmd_find_from_winlink_pane(current, wl, wp, 0); server_redraw_window(w); } else { @@ -105,7 +105,7 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_NEXT(w->active, entry)) == NULL) wp = TAILQ_FIRST(&w->panes); - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); cmd_find_from_winlink_pane(current, wl, wp, 0); server_redraw_window(w); } diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 2873737f7b..af0f033bb8 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -112,7 +112,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) else { server_unzoom_window(w); window_redraw_active_switch(w, lastwp); - if (window_set_active_pane(w, lastwp)) { + if (window_set_active_pane(w, lastwp, 1)) { cmd_find_from_winlink(current, wl, 0); cmd_select_pane_redraw(w); } @@ -194,7 +194,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); server_unzoom_window(wp->window); window_redraw_active_switch(w, wp); - if (window_set_active_pane(w, wp)) { + if (window_set_active_pane(w, wp, 1)) { cmd_find_from_winlink_pane(current, wl, wp, 0); hooks_insert(s->hooks, item, current, "after-select-pane"); cmd_select_pane_redraw(w); diff --git a/cmd-split-window.c b/cmd-split-window.c index f5dde7512c..e64e924786 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -52,111 +52,87 @@ const struct cmd_entry cmd_split_window_entry = { static enum cmd_retval cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) { - struct cmd_find_state *current = &item->shared->current; struct args *args = self->args; + struct cmd_find_state *current = &item->shared->current; + struct spawn_context sc; struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; - struct window_pane *wp = item->target.wp, *new_wp = NULL; - struct environ *env; - const char *cmd, *path, *shell, *template, *tmp; - char **argv, *cause, *new_cause, *cp, *cwd; - u_int hlimit; - int argc, size, percentage, before; + struct window_pane *wp = item->target.wp, *new_wp; enum layout_type type; struct layout_cell *lc; - struct environ_entry *envent; - struct cmd_find_state fs; - - server_unzoom_window(w); - - if (args->argc == 0) { - cmd = options_get_string(s->options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } else { - argc = args->argc; - argv = args->argv; - } - - if ((tmp = args_get(args, 'c')) != NULL) - cwd = format_single(item, tmp, c, s, NULL, NULL); - else - cwd = xstrdup(server_client_get_cwd(item->client, s)); + struct cmd_find_state fs; + int size, percentage, flags; + const char *template; + char *cause, *cp; - type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; - before = args_has(args, 'b'); - - size = -1; + else + type = LAYOUT_TOPBOTTOM; if (args_has(args, 'l')) { size = args_strtonum(args, 'l', 0, INT_MAX, &cause); if (cause != NULL) { - xasprintf(&new_cause, "size %s", cause); + cmdq_error(item, "create pane failed: -l %s", cause); free(cause); - cause = new_cause; - goto error; + return (CMD_RETURN_ERROR); } } else if (args_has(args, 'p')) { percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause); if (cause != NULL) { - xasprintf(&new_cause, "percentage %s", cause); + cmdq_error(item, "create pane failed: -p %s", cause); free(cause); - cause = new_cause; - goto error; + return (CMD_RETURN_ERROR); } if (type == LAYOUT_TOPBOTTOM) size = (wp->sy * percentage) / 100; else size = (wp->sx * percentage) / 100; - } - hlimit = options_get_number(s->options, "history-limit"); + } else + size = -1; + + server_unzoom_window(wp->window); - shell = options_get_string(s->options, "default-shell"); - if (*shell == '\0' || areshell(shell)) - shell = _PATH_BSHELL; + flags = 0; + if (args_has(args, 'b')) + flags |= SPAWN_BEFORE; + if (args_has(args, 'f')) + flags |= SPAWN_FULLSIZE; - lc = layout_split_pane(wp, type, size, before, args_has(args, 'f')); + lc = layout_split_pane(wp, type, size, flags); if (lc == NULL) { - cause = xstrdup("pane too small"); - goto error; + cmdq_error(item, "no space for new pane"); + return (CMD_RETURN_ERROR); } - new_wp = window_add_pane(w, wp, before, args_has(args, 'f'), hlimit); - layout_make_leaf(lc, new_wp); - path = NULL; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - env = environ_for_session(s, 0); - if (window_pane_spawn(new_wp, argc, argv, path, shell, cwd, env, - s->tio, &cause) != 0) { - environ_free(env); - goto error; - } - environ_free(env); + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; - layout_fix_panes(w); - server_redraw_window(w); + sc.wp0 = wp; + sc.lc = lc; - if (!args_has(args, 'd')) { - window_set_active_pane(w, new_wp); - session_select(s, wl->idx); - cmd_find_from_session(current, s, 0); - server_redraw_session(s); - } else - server_status_session(s); + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; + + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = flags; + if (args_has(args, 'd')) + sc.flags |= SPAWN_DETACHED; + + if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { + cmdq_error(item, "create pane failed: %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + if (!args_has(args, 'd')) + cmd_find_from_winlink_pane(current, wl, new_wp, 0); + server_redraw_window(wp->window); + server_status_session(s); if (args_has(args, 'P')) { if ((template = args_get(args, 'F')) == NULL) @@ -165,22 +141,9 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmdq_print(item, "%s", cp); free(cp); } - notify_window("window-layout-changed", w); cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); hooks_insert(s->hooks, item, &fs, "after-split-window"); - free(cwd); return (CMD_RETURN_NORMAL); - -error: - if (new_wp != NULL) { - layout_close_pane(new_wp); - window_remove_pane(w, new_wp); - } - cmdq_error(item, "create pane failed: %s", cause); - free(cause); - - free(cwd); - return (CMD_RETURN_ERROR); } diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 1de272c4ca..2ad05561be 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -101,17 +101,17 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) if (!args_has(self->args, 'd')) { if (src_w != dst_w) { - window_set_active_pane(src_w, dst_wp); - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(src_w, dst_wp, 1); + window_set_active_pane(dst_w, src_wp, 1); } else { tmp_wp = dst_wp; - window_set_active_pane(src_w, tmp_wp); + window_set_active_pane(src_w, tmp_wp, 1); } } else { if (src_w->active == src_wp) - window_set_active_pane(src_w, dst_wp); + window_set_active_pane(src_w, dst_wp, 1); if (dst_w->active == dst_wp) - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(dst_w, src_wp, 1); } if (src_w != dst_w) { if (src_w->last == src_wp) diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 3e19346ee5..a4f55102c4 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -116,7 +116,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) server_unzoom_window(wl->window); if (wp != NULL) { window_redraw_active_switch(wp->window, wp); - window_set_active_pane(wp->window, wp); + window_set_active_pane(wp->window, wp, 1); } session_set_current(s, wl); cmd_find_from_session(&item->shared->current, s, 0); diff --git a/layout.c b/layout.c index 7093c607a4..1a43014dfa 100644 --- a/layout.c +++ b/layout.c @@ -831,11 +831,12 @@ layout_resize_child_cells(struct window *w, struct layout_cell *lc) */ struct layout_cell * layout_split_pane(struct window_pane *wp, enum layout_type type, int size, - int insert_before, int full_size) + int flags) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; u_int sx, sy, xoff, yoff, size1, size2; u_int new_size, saved_size, resize_first = 0; + int full_size = (flags & SPAWN_FULLSIZE); /* * If full_size is specified, add a new cell at the top of the window @@ -876,7 +877,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, saved_size = sy; if (size < 0) size2 = ((saved_size + 1) / 2) - 1; - else if (insert_before) + else if (flags & SPAWN_BEFORE) size2 = saved_size - size - 1; else size2 = size; @@ -887,7 +888,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, size1 = saved_size - 1 - size2; /* Which size are we using? */ - if (insert_before) + if (flags & SPAWN_BEFORE) new_size = size2; else new_size = size1; @@ -903,7 +904,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, */ lcparent = lc->parent; lcnew = layout_create_cell(lcparent); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_BEFORE(lc, lcnew, entry); else TAILQ_INSERT_AFTER(&lcparent->cells, lc, lcnew, entry); @@ -932,7 +933,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, layout_set_size(lcnew, size, sy, 0, 0); else if (lc->type == LAYOUT_TOPBOTTOM) layout_set_size(lcnew, sx, size, 0, 0); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_HEAD(&lc->cells, lcnew, entry); else TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry); @@ -956,12 +957,12 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, /* Create the new child cell. */ lcnew = layout_create_cell(lcparent); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_HEAD(&lcparent->cells, lcnew, entry); else TAILQ_INSERT_TAIL(&lcparent->cells, lcnew, entry); } - if (insert_before) { + if (flags & SPAWN_BEFORE) { lc1 = lcnew; lc2 = lc; } else { diff --git a/server-fn.c b/server-fn.c index 90db7d5112..8051fe4fc1 100644 --- a/server-fn.c +++ b/server-fn.c @@ -369,7 +369,7 @@ server_destroy_session_group(struct session *s) else { TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } } } @@ -436,7 +436,7 @@ server_check_unattached(void) if (s->attached != 0) continue; if (options_get_number (s->options, "destroy-unattached")) - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } } diff --git a/server.c b/server.c index 04f907f381..41bc492ea0 100644 --- a/server.c +++ b/server.c @@ -296,7 +296,7 @@ server_send_exit(void) } RB_FOREACH_SAFE(s, sessions, &sessions, s1) - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } /* Update socket execute permissions based on whether sessions are attached. */ diff --git a/session.c b/session.c index fe4a88753d..9a32990ef0 100644 --- a/session.c +++ b/session.c @@ -111,12 +111,10 @@ session_find_by_id(u_int id) /* Create a new session. */ struct session * -session_create(const char *prefix, const char *name, int argc, char **argv, - const char *path, const char *cwd, struct environ *env, struct options *oo, - struct termios *tio, int idx, char **cause) +session_create(const char *prefix, const char *name, const char *cwd, + struct environ *env, struct options *oo, struct termios *tio) { struct session *s; - struct winlink *wl; s = xcalloc(1, sizeof *s); s->references = 1; @@ -128,10 +126,7 @@ session_create(const char *prefix, const char *name, int argc, char **argv, TAILQ_INIT(&s->lastw); RB_INIT(&s->windows); - s->environ = environ_create(); - if (env != NULL) - environ_copy(env, s->environ); - + s->environ = env; s->options = oo; s->hooks = hooks_create(global_hooks); @@ -165,17 +160,6 @@ session_create(const char *prefix, const char *name, int argc, char **argv, fatal("gettimeofday failed"); session_update_activity(s, &s->creation_time); - if (argc >= 0) { - wl = session_new(s, NULL, argc, argv, path, cwd, idx, cause); - if (wl == NULL) { - session_destroy(s, __func__); - return (NULL); - } - session_select(s, RB_ROOT(&s->windows)->idx); - } - - log_debug("session %s created", s->name); - return (s); } @@ -219,7 +203,7 @@ session_free(__unused int fd, __unused short events, void *arg) /* Destroy a session. */ void -session_destroy(struct session *s, const char *from) +session_destroy(struct session *s, int notify, const char *from) { struct winlink *wl; @@ -227,7 +211,8 @@ session_destroy(struct session *s, const char *from) s->curw = NULL; RB_REMOVE(sessions, &sessions, s); - notify_session("session-closed", s); + if (notify) + notify_session("session-closed", s); free(s->tio); @@ -337,45 +322,6 @@ session_previous_session(struct session *s) return (s2); } -/* Create a new window on a session. */ -struct winlink * -session_new(struct session *s, const char *name, int argc, char **argv, - const char *path, const char *cwd, int idx, char **cause) -{ - struct window *w; - struct winlink *wl; - struct environ *env; - const char *shell; - u_int hlimit, sx, sy; - - if ((wl = winlink_add(&s->windows, idx)) == NULL) { - xasprintf(cause, "index in use: %d", idx); - return (NULL); - } - wl->session = s; - - shell = options_get_string(s->options, "default-shell"); - if (*shell == '\0' || areshell(shell)) - shell = _PATH_BSHELL; - - default_window_size(s, NULL, &sx, &sy, -1); - hlimit = options_get_number(s->options, "history-limit"); - env = environ_for_session(s, 0); - w = window_create_spawn(name, argc, argv, path, shell, cwd, env, s->tio, - sx, sy, hlimit, cause); - if (w == NULL) { - winlink_remove(&s->windows, wl); - environ_free(env); - return (NULL); - } - winlink_set_window(wl, w); - environ_free(env); - notify_session_window("window-linked", s, w); - - session_group_synchronize_from(s); - return (wl); -} - /* Attach a window to a session. */ struct winlink * session_attach(struct session *s, struct window *w, int idx, char **cause) @@ -411,7 +357,7 @@ session_detach(struct session *s, struct winlink *wl) session_group_synchronize_from(s); if (RB_EMPTY(&s->windows)) { - session_destroy(s, __func__); + session_destroy(s, 1, __func__); return (1); } return (0); diff --git a/tmux.h b/tmux.h index 48d8efc0d7..00fbc04e47 100644 --- a/tmux.h +++ b/tmux.h @@ -235,8 +235,8 @@ enum { /* Termcap codes. */ enum tty_code_code { - TTYC_AX = 0, TTYC_ACSC, + TTYC_AX, TTYC_BCE, TTYC_BEL, TTYC_BLINK, @@ -816,7 +816,7 @@ struct window_pane { int argc; char **argv; char *shell; - const char *cwd; + char *cwd; pid_t pid; char tty[TTY_NAME_MAX]; @@ -1563,6 +1563,32 @@ struct options_table_entry { #define CMD_SRCDST_CLIENT_USAGE "[-s src-client] [-t dst-client]" #define CMD_BUFFER_USAGE "[-b buffer-name]" +/* Spawn common context. */ +struct spawn_context { + struct cmdq_item *item; + + struct session *s; + struct winlink *wl; + + struct window_pane *wp0; + struct layout_cell *lc; + + const char *name; + char **argv; + int argc; + + int idx; + const char *cwd; + + int flags; +#define SPAWN_KILL 0x1 +#define SPAWN_DETACHED 0x2 +#define SPAWN_RESPAWN 0x4 +#define SPAWN_BEFORE 0x8 +#define SPAWN_NONOTIFY 0x10 +#define SPAWN_FULLSIZE 0x20 +}; + /* tmux.c */ extern struct hooks *global_hooks; extern struct options *global_options; @@ -2234,17 +2260,17 @@ struct window *window_find_by_id_str(const char *); struct window *window_find_by_id(u_int); void window_update_activity(struct window *); struct window *window_create(u_int, u_int); -struct window *window_create_spawn(const char *, int, char **, const char *, - const char *, const char *, struct environ *, - struct termios *, u_int, u_int, u_int, char **); +void window_destroy(struct window *); +void window_pane_set_event(struct window_pane *); struct window_pane *window_get_active_at(struct window *, u_int, u_int); struct window_pane *window_find_string(struct window *, const char *); int window_has_pane(struct window *, struct window_pane *); -int window_set_active_pane(struct window *, struct window_pane *); +int window_set_active_pane(struct window *, struct window_pane *, + int); void window_redraw_active_switch(struct window *, struct window_pane *); -struct window_pane *window_add_pane(struct window *, struct window_pane *, int, - int, u_int); +struct window_pane *window_add_pane(struct window *, struct window_pane *, + u_int, int); void window_resize(struct window *, u_int, u_int); int window_zoom(struct window_pane *); int window_unzoom(struct window *); @@ -2261,9 +2287,6 @@ void window_destroy_panes(struct window *); struct window_pane *window_pane_find_by_id_str(const char *); struct window_pane *window_pane_find_by_id(u_int); int window_pane_destroy_ready(struct window_pane *); -int window_pane_spawn(struct window_pane *, int, char **, - const char *, const char *, const char *, struct environ *, - struct termios *, char **); void window_pane_resize(struct window_pane *, u_int, u_int); void window_pane_alternate_on(struct window_pane *, struct grid_cell *, int); @@ -2321,7 +2344,7 @@ void layout_resize_pane_to(struct window_pane *, enum layout_type, u_int); void layout_assign_pane(struct layout_cell *, struct window_pane *); struct layout_cell *layout_split_pane(struct window_pane *, enum layout_type, - int, int, int); + int, int); void layout_close_pane(struct window_pane *); int layout_spread_cell(struct window *, struct layout_cell *); void layout_spread_out(struct window_pane *); @@ -2420,10 +2443,9 @@ int session_alive(struct session *); struct session *session_find(const char *); struct session *session_find_by_id_str(const char *); struct session *session_find_by_id(u_int); -struct session *session_create(const char *, const char *, int, char **, - const char *, const char *, struct environ *, - struct options *, struct termios *, int, char **); -void session_destroy(struct session *, const char *); +struct session *session_create(const char *, const char *, const char *, + struct environ *, struct options *, struct termios *); +void session_destroy(struct session *, int, const char *); void session_add_ref(struct session *, const char *); void session_remove_ref(struct session *, const char *); int session_check_name(const char *); @@ -2497,4 +2519,8 @@ void style_set(struct style *, const struct grid_cell *); void style_copy(struct style *, struct style *); int style_is_default(struct style *); +/* spawn.c */ +struct winlink *spawn_window(struct spawn_context *, char **); +struct window_pane *spawn_pane(struct spawn_context *, char **); + #endif /* TMUX_H */ diff --git a/window-tree.c b/window-tree.c index 55dda694b0..4d73aeab81 100644 --- a/window-tree.c +++ b/window-tree.c @@ -1006,7 +1006,7 @@ window_tree_kill_each(__unused void* modedata, void* itemdata, case WINDOW_TREE_SESSION: if (s != NULL) { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } break; case WINDOW_TREE_WINDOW: diff --git a/window.c b/window.c index 4ed766ad0e..3c4a8c29ce 100644 --- a/window.c +++ b/window.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -71,20 +70,10 @@ const struct window_mode *all_window_modes[] = { NULL }; -static void window_destroy(struct window *); - static struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int); static void window_pane_destroy(struct window_pane *); -static void window_pane_read_callback(struct bufferevent *, void *); -static void window_pane_error_callback(struct bufferevent *, short, void *); - -static int winlink_next_index(struct winlinks *, int); - -static struct window_pane *window_pane_choose_best(struct window_pane **, - u_int); - RB_GENERATE(windows, window, entry, window_cmp); RB_GENERATE(winlinks, winlink, entry, winlink_cmp); RB_GENERATE(window_pane_tree, window_pane, tree_entry, window_pane_cmp); @@ -340,37 +329,7 @@ window_create(u_int sx, u_int sy) return (w); } -struct window * -window_create_spawn(const char *name, int argc, char **argv, const char *path, - const char *shell, const char *cwd, struct environ *env, - struct termios *tio, u_int sx, u_int sy, u_int hlimit, char **cause) -{ - struct window *w; - struct window_pane *wp; - - w = window_create(sx, sy); - wp = window_add_pane(w, NULL, 0, 0, hlimit); - layout_init(w, wp); - - if (window_pane_spawn(wp, argc, argv, path, shell, cwd, - env, tio, cause) != 0) { - window_destroy(w); - return (NULL); - } - - w->active = TAILQ_FIRST(&w->panes); - if (name != NULL) { - w->name = xstrdup(name); - options_set_number(w->options, "automatic-rename", 0); - } else - w->name = default_window_name(w); - - notify_window("window-pane-changed", w); - - return (w); -} - -static void +void window_destroy(struct window *w) { log_debug("window @%u destroyed (%d references)", w->id, w->references); @@ -461,17 +420,22 @@ window_has_pane(struct window *w, struct window_pane *wp) } int -window_set_active_pane(struct window *w, struct window_pane *wp) +window_set_active_pane(struct window *w, struct window_pane *wp, int notify) { - log_debug("%s: pane %%%u (was %%%u)", __func__, wp->id, w->active->id); + log_debug("%s: pane %%%u", __func__, wp->id); + if (wp == w->active) return (0); w->last = w->active; + w->active = wp; w->active->active_point = next_active_point++; w->active->flags |= PANE_CHANGED; + tty_update_window_offset(w); - notify_window("window-pane-changed", w); + + if (notify) + notify_window("window-pane-changed", w); return (1); } @@ -569,7 +533,7 @@ window_zoom(struct window_pane *wp) return (-1); if (w->active != wp) - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); TAILQ_FOREACH(wp1, &w->panes, entry) { wp1->saved_layout_cell = wp1->layout_cell; @@ -608,8 +572,8 @@ window_unzoom(struct window *w) } struct window_pane * -window_add_pane(struct window *w, struct window_pane *other, int before, - int full_size, u_int hlimit) +window_add_pane(struct window *w, struct window_pane *other, u_int hlimit, + int flags) { struct window_pane *wp; @@ -620,15 +584,15 @@ window_add_pane(struct window *w, struct window_pane *other, int before, if (TAILQ_EMPTY(&w->panes)) { log_debug("%s: @%u at start", __func__, w->id); TAILQ_INSERT_HEAD(&w->panes, wp, entry); - } else if (before) { + } else if (flags & SPAWN_BEFORE) { log_debug("%s: @%u before %%%u", __func__, w->id, wp->id); - if (full_size) + if (flags & SPAWN_FULLSIZE) TAILQ_INSERT_HEAD(&w->panes, wp, entry); else TAILQ_INSERT_BEFORE(other, wp, entry); } else { log_debug("%s: @%u after %%%u", __func__, w->id, wp->id); - if (full_size) + if (flags & SPAWN_FULLSIZE) TAILQ_INSERT_TAIL(&w->panes, wp, entry); else TAILQ_INSERT_AFTER(&w->panes, other, wp, entry); @@ -888,153 +852,6 @@ window_pane_destroy(struct window_pane *wp) free(wp); } -int -window_pane_spawn(struct window_pane *wp, int argc, char **argv, - const char *path, const char *shell, const char *cwd, struct environ *env, - struct termios *tio, char **cause) -{ - struct winsize ws; - char *argv0, *cmd, **argvp; - const char *ptr, *first, *home; - struct termios tio2; -#ifdef HAVE_UTEMPTER - char s[32]; -#endif - sigset_t set, oldset; - - if (wp->fd != -1) { - bufferevent_free(wp->event); - close(wp->fd); - } - if (argc > 0) { - cmd_free_argv(wp->argc, wp->argv); - wp->argc = argc; - wp->argv = cmd_copy_argv(argc, argv); - } - if (shell != NULL) { - free(wp->shell); - wp->shell = xstrdup(shell); - } - if (cwd != NULL) { - free((void *)wp->cwd); - wp->cwd = xstrdup(cwd); - } - wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); - - cmd = cmd_stringify_argv(wp->argc, wp->argv); - log_debug("%s: shell=%s", __func__, wp->shell); - log_debug("%s: cmd=%s", __func__, cmd); - log_debug("%s: cwd=%s", __func__, cwd); - cmd_log_argv(wp->argc, wp->argv, __func__); - environ_log(env, "%s: environment ", __func__); - - memset(&ws, 0, sizeof ws); - ws.ws_col = screen_size_x(&wp->base); - ws.ws_row = screen_size_y(&wp->base); - - sigfillset(&set); - sigprocmask(SIG_BLOCK, &set, &oldset); - switch (wp->pid = fdforkpty(ptm_fd, &wp->fd, wp->tty, NULL, &ws)) { - case -1: - wp->event = NULL; - wp->fd = -1; - - xasprintf(cause, "%s: %s", cmd, strerror(errno)); - free(cmd); - - sigprocmask(SIG_SETMASK, &oldset, NULL); - return (-1); - case 0: - proc_clear_signals(server_proc, 1); - sigprocmask(SIG_SETMASK, &oldset, NULL); - - cwd = NULL; - if (chdir(wp->cwd) == 0) - cwd = wp->cwd; - else if ((home = find_home()) != NULL && chdir(home) == 0) - cwd = home; - else - chdir("/"); - - if (tcgetattr(STDIN_FILENO, &tio2) != 0) - fatal("tcgetattr failed"); - if (tio != NULL) - memcpy(tio2.c_cc, tio->c_cc, sizeof tio2.c_cc); - tio2.c_cc[VERASE] = '\177'; -#ifdef IUTF8 - tio2.c_iflag |= IUTF8; -#endif - if (tcsetattr(STDIN_FILENO, TCSANOW, &tio2) != 0) - fatal("tcgetattr failed"); - - log_close(); - closefrom(STDERR_FILENO + 1); - - if (path != NULL) - environ_set(env, "PATH", "%s", path); - if (cwd != NULL) - environ_set(env, "PWD", "%s", cwd); - environ_set(env, "TMUX_PANE", "%%%u", wp->id); - environ_push(env); - - setenv("SHELL", wp->shell, 1); - ptr = strrchr(wp->shell, '/'); - - /* - * If given one argument, assume it should be passed to sh -c; - * with more than one argument, use execvp(). If there is no - * arguments, create a login shell. - */ - if (wp->argc > 0) { - if (wp->argc != 1) { - /* Copy to ensure argv ends in NULL. */ - argvp = cmd_copy_argv(wp->argc, wp->argv); - execvp(argvp[0], argvp); - fatal("execvp failed"); - } - first = wp->argv[0]; - - if (ptr != NULL && *(ptr + 1) != '\0') - xasprintf(&argv0, "%s", ptr + 1); - else - xasprintf(&argv0, "%s", wp->shell); - execl(wp->shell, argv0, "-c", first, (char *)NULL); - fatal("execl failed"); - } - if (ptr != NULL && *(ptr + 1) != '\0') - xasprintf(&argv0, "-%s", ptr + 1); - else - xasprintf(&argv0, "-%s", wp->shell); - execl(wp->shell, argv0, (char *)NULL); - fatal("execl failed"); - } - log_debug("%s: master=%s", __func__, ttyname(wp->fd)); - log_debug("%s: slave=%s", __func__, wp->tty); - -#ifdef HAVE_UTEMPTER - xsnprintf(s, sizeof s, "tmux(%lu).%%%u", (long) getpid(), wp->id); - utempter_add_record(wp->fd, s); - kill(getpid(), SIGCHLD); -#endif - - sigprocmask(SIG_SETMASK, &oldset, NULL); - setblocking(wp->fd, 0); - - wp->event = bufferevent_new(wp->fd, window_pane_read_callback, NULL, - window_pane_error_callback, wp); - if (wp->event == NULL) - fatalx("out of memory"); - - wp->pipe_off = 0; - wp->flags &= ~PANE_EXITED; - - bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); - bufferevent_enable(wp->event, EV_READ|EV_WRITE); - - free(cmd); - return (0); -} - static void window_pane_read_callback(__unused struct bufferevent *bufev, void *data) { @@ -1069,6 +886,18 @@ window_pane_error_callback(__unused struct bufferevent *bufev, server_destroy_pane(wp, 1); } +void +window_pane_set_event(struct window_pane *wp) +{ + setblocking(wp->fd, 0); + + wp->event = bufferevent_new(wp->fd, window_pane_read_callback, + NULL, window_pane_error_callback, wp); + + bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); + bufferevent_enable(wp->event, EV_READ|EV_WRITE); +} + void window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) { @@ -1617,6 +1446,8 @@ winlink_shuffle_up(struct session *s, struct winlink *wl) { int idx, last; + if (wl == NULL) + return (-1); idx = wl->idx + 1; /* Find the next free index. */ From ece737274e64b6ac2d11134b61b0ceec50cc91e7 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Apr 2019 13:11:55 +0100 Subject: [PATCH 413/836] Forgot to add the file. --- spawn.c | 437 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) create mode 100644 spawn.c diff --git a/spawn.c b/spawn.c new file mode 100644 index 0000000000..b22bf670d0 --- /dev/null +++ b/spawn.c @@ -0,0 +1,437 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "tmux.h" + +/* + * Set up the environment and create a new window and pane or a new pane. + * + * We need to set up the following items: + * + * - history limit, comes from the session; + * + * - base index, comes from the session; + * + * - current working directory, may be specified - if it isn't it comes from + * either the client or the session; + * + * - PATH variable, comes from the client if any, otherwise from the session + * environment; + * + * - shell, comes from default-shell; + * + * - termios, comes from the session; + * + * - remaining environment, comes from the session. + */ + +static void +spawn_log(const char *from, struct spawn_context *sc) +{ + struct session *s = sc->s; + struct winlink *wl = sc->wl; + struct window_pane *wp0 = sc->wp0; + char tmp[128]; + const char *name; + + log_debug("%s: %s, flags=%#x", from, sc->item->name, sc->flags); + + if (wl != NULL && wp0 != NULL) + xsnprintf(tmp, sizeof tmp, "wl=%d wp0=%%%u", wl->idx, wp0->id); + else if (wl != NULL) + xsnprintf(tmp, sizeof tmp, "wl=%d wp0=none", wl->idx); + else if (wp0 != NULL) + xsnprintf(tmp, sizeof tmp, "wl=none wp0=%%%u", wp0->id); + else + xsnprintf(tmp, sizeof tmp, "wl=none wp0=none"); + log_debug("%s: s=$%u %s idx=%d", from, s->id, tmp, sc->idx); + + name = sc->name; + if (name == NULL) + name = "none"; + log_debug("%s: name=%s", from, name); +} + +struct winlink * +spawn_window(struct spawn_context *sc, char **cause) +{ + struct session *s = sc->s; + struct window *w; + struct window_pane *wp; + struct winlink *wl; + int idx = sc->idx; + u_int sx, sy; + + spawn_log(__func__, sc); + + /* + * If the window already exists, we are respawning, so destroy all the + * panes except one. + */ + if (sc->flags & SPAWN_RESPAWN) { + w = sc->wl->window; + if (~sc->flags & SPAWN_KILL) { + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp->fd != -1) + break; + } + if (wp != NULL) { + xasprintf(cause, "window %s:%d still active", + s->name, sc->wl->idx); + return (NULL); + } + } + + sc->wp0 = TAILQ_FIRST(&w->panes); + TAILQ_REMOVE(&w->panes, sc->wp0, entry); + + layout_free(w); + window_destroy_panes(w); + + TAILQ_INSERT_HEAD(&w->panes, sc->wp0, entry); + window_pane_resize(sc->wp0, w->sx, w->sy); + + layout_init(w, sc->wp0); + window_set_active_pane(w, sc->wp0, 0); + } + + /* + * Otherwise we have no window so we will need to create one. First + * check if the given index already exists and destroy it if so. + */ + if ((~sc->flags & SPAWN_RESPAWN) && idx != -1) { + wl = winlink_find_by_index(&s->windows, idx); + if (wl != NULL && (~sc->flags & SPAWN_KILL)) { + xasprintf(cause, "index %d in use", idx); + return (NULL); + } + if (wl != NULL) { + /* + * Can't use session_detach as it will destroy session + * if this makes it empty. + */ + wl->flags &= ~WINLINK_ALERTFLAGS; + notify_session_window("window-unlinked", s, wl->window); + winlink_stack_remove(&s->lastw, wl); + winlink_remove(&s->windows, wl); + + if (s->curw == wl) { + s->curw = NULL; + sc->flags &= ~SPAWN_DETACHED; + } + } + } + + /* Then create a window if needed. */ + if (~sc->flags & SPAWN_RESPAWN) { + if (idx == -1) + idx = -1 - options_get_number(s->options, "base-index"); + if ((sc->wl = winlink_add(&s->windows, idx)) == NULL) { + xasprintf(cause, "couldn't add window %d", idx); + return (NULL); + } + default_window_size(s, NULL, &sx, &sy, -1); + if ((w = window_create(sx, sy)) == NULL) { + winlink_remove(&s->windows, sc->wl); + xasprintf(cause, "couldn't create window %d", idx); + return (NULL); + } + sc->wl->session = s; + winlink_set_window(sc->wl, w); + } else + w = NULL; + sc->flags |= SPAWN_NONOTIFY; + + /* Spawn the pane. */ + wp = spawn_pane(sc, cause); + if (wp == NULL) { + if (~sc->flags & SPAWN_RESPAWN) { + window_destroy(w); + winlink_remove(&s->windows, sc->wl); + } + return (NULL); + } + + /* Set the name of the new window. */ + if (~sc->flags & SPAWN_RESPAWN) { + if (sc->name != NULL) { + w->name = xstrdup(sc->name); + options_set_number(w->options, "automatic-rename", 0); + } else + w->name = xstrdup(default_window_name(w)); + } + + /* Switch to the new window if required. */ + if (~sc->flags & SPAWN_DETACHED) + session_select(s, sc->wl->idx); + + /* Fire notification if new window. */ + if (~sc->flags & SPAWN_RESPAWN) + notify_session_window("window-linked", s, w); + + session_group_synchronize_from(s); + return (sc->wl); +} + +struct window_pane * +spawn_pane(struct spawn_context *sc, char **cause) +{ + struct cmdq_item *item = sc->item; + struct client *c = item->client; + struct session *s = sc->s; + struct window *w = sc->wl->window; + struct window_pane *new_wp; + struct environ *child; + struct environ_entry *ee; + char **argv, *cp, **argvp, *argv0, *cwd; + const char *cmd, *tmp; + int argc, before, full_size; + u_int idx; + struct termios now; + u_int hlimit; + struct winsize ws; + sigset_t set, oldset; + + spawn_log(__func__, sc); + + /* Check full size flag. */ + if (sc->flags & SPAWN_FULLSIZE) + full_size = 1; + else + full_size = 0; + + /* + * If we are respawning then get rid of the old process. Otherwise + * either create a new cell or assign to the one we are given. + */ + hlimit = options_get_number(s->options, "history-limit"); + if (sc->flags & SPAWN_RESPAWN) { + if (sc->wp0->fd != -1 && (~sc->flags & SPAWN_KILL)) { + window_pane_index(sc->wp0, &idx); + xasprintf(cause, "pane %s:%d.%u still active", + s->name, sc->wl->idx, idx); + return (NULL); + } + if (sc->wp0->fd != -1) { + bufferevent_free(sc->wp0->event); + close(sc->wp0->fd); + } + window_pane_reset_mode_all(sc->wp0); + screen_reinit(&sc->wp0->base); + input_init(sc->wp0); + new_wp = sc->wp0; + new_wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); + } else if (sc->lc == NULL) { + new_wp = window_add_pane(w, NULL, hlimit, sc->flags); + layout_init(w, new_wp); + } else { + new_wp = window_add_pane(w, sc->wp0, hlimit, sc->flags); + layout_assign_pane(sc->lc, new_wp); + } + + /* + * Now we have a pane with nothing running in it ready for the new + * process. Work out the command and arguments. + */ + if (sc->argc == 0) { + cmd = options_get_string(s->options, "default-command"); + if (cmd != NULL && *cmd != '\0') { + argc = 1; + argv = (char **)&cmd; + } else { + argc = 0; + argv = NULL; + } + } else { + argc = sc->argc; + argv = sc->argv; + } + + /* + * Replace the stored arguments if there are new ones. If not, the + * existing ones will be used (they will only exist for respawn). + */ + if (argc > 0) { + cmd_free_argv(new_wp->argc, new_wp->argv); + new_wp->argc = argc; + new_wp->argv = cmd_copy_argv(argc, argv); + } + + /* + * Work out the current working directory. If respawning, use + * the pane's stored one unless specified. + */ + if (sc->cwd != NULL) + cwd = format_single(item, sc->cwd, c, s, NULL, NULL); + else if (~sc->flags & SPAWN_RESPAWN) + cwd = xstrdup(server_client_get_cwd(c, s)); + else + cwd = NULL; + if (cwd != NULL) { + free(new_wp->cwd); + new_wp->cwd = cwd; + } + + /* Create an environment for this pane. */ + child = environ_for_session(s, 0); + environ_set(child, "TMUX_PANE", "%%%u", new_wp->id); + + /* + * Then the PATH environment variable. The session one is replaced from + * the client if there is one because otherwise running "tmux new + * myprogram" wouldn't work if myprogram isn't in the session's path. + */ + if (c != NULL && c->session == NULL) { /* only unattached clients */ + ee = environ_find(c->environ, "PATH"); + if (ee != NULL) + environ_set(child, "PATH", "%s", ee->value); + } + if (environ_find(child, "PATH") == NULL) + environ_set(child, "%s", _PATH_DEFPATH); + + /* Then the shell. If respawning, use the old one. */ + if (~sc->flags & SPAWN_RESPAWN) { + tmp = options_get_string(s->options, "default-shell"); + if (*tmp == '\0' || areshell(tmp)) + tmp = _PATH_BSHELL; + free(new_wp->shell); + new_wp->shell = xstrdup(tmp); + } + environ_set(child, "SHELL", "%s", new_wp->shell); + + /* Log the arguments we are going to use. */ + cp = cmd_stringify_argv(new_wp->argc, new_wp->argv); + log_debug("%s: shell=%s", __func__, new_wp->shell); + log_debug("%s: cmd=%s", __func__, cp); + log_debug("%s: cwd=%s", __func__, cwd); + cmd_log_argv(new_wp->argc, new_wp->argv, __func__); + environ_log(child, "%s: environment ", __func__); + free(cp); + + /* Initialize the window size. */ + memset(&ws, 0, sizeof ws); + ws.ws_col = screen_size_x(&new_wp->base); + ws.ws_row = screen_size_y(&new_wp->base); + + /* Block signals until fork has completed. */ + sigfillset(&set); + sigprocmask(SIG_BLOCK, &set, &oldset); + + /* Fork the new process. */ + new_wp->pid = fdforkpty(ptm_fd, &new_wp->fd, new_wp->tty, NULL, &ws); + if (new_wp->pid == -1) { + xasprintf(cause, "fork failed: %s", strerror(errno)); + new_wp->fd = -1; + if (~sc->flags & SPAWN_RESPAWN) { + layout_close_pane(new_wp); + window_remove_pane(w, new_wp); + } + sigprocmask(SIG_SETMASK, &oldset, NULL); + return (NULL); + } + + /* In the parent process, everything is done now. */ + if (new_wp->pid != 0) { + new_wp->pipe_off = 0; + new_wp->flags &= ~PANE_EXITED; + + sigprocmask(SIG_SETMASK, &oldset, NULL); + window_pane_set_event(new_wp); + + if (sc->flags & SPAWN_RESPAWN) + return (new_wp); + if ((~sc->flags & SPAWN_DETACHED) || w->active == NULL) { + if (sc->flags & SPAWN_NONOTIFY) + window_set_active_pane(w, new_wp, 0); + else + window_set_active_pane(w, new_wp, 1); + } + if (~sc->flags & SPAWN_NONOTIFY) + notify_window("window-layout-changed", w); + return (new_wp); + } + + /* + * Child process. Change to the working directory or home if that + * fails. + */ + if (chdir(new_wp->cwd) != 0) { + if ((tmp = find_home()) == NULL || chdir(tmp) != 0) + chdir("/"); + } + + /* + * Update terminal escape characters from the session if available and + * force VERASE to tmux's \177. + */ + if (tcgetattr(STDIN_FILENO, &now) != 0) + _exit(1); + if (s->tio != NULL) + memcpy(now.c_cc, s->tio->c_cc, sizeof now.c_cc); + now.c_cc[VERASE] = '\177'; + if (tcsetattr(STDIN_FILENO, TCSANOW, &now) != 0) + _exit(1); + + /* Clean up file descriptors and signals and update the environment. */ + closefrom(STDERR_FILENO + 1); + proc_clear_signals(server_proc, 1); + sigprocmask(SIG_SETMASK, &oldset, NULL); + log_close(); + environ_push(child); + + /* + * If given multiple arguments, use execvp(). Copy the arguments to + * ensure they end in a NULL. + */ + if (new_wp->argc != 0 && new_wp->argc != 1) { + argvp = cmd_copy_argv(new_wp->argc, new_wp->argv); + execvp(argvp[0], argvp); + _exit(1); + } + + /* + * If one argument, pass it to $SHELL -c. Otherwise create a login + * shell. + */ + cp = strrchr(new_wp->shell, '/'); + if (new_wp->argc == 1) { + tmp = new_wp->argv[0]; + if (cp != NULL && cp[1] != '\0') + xasprintf(&argv0, "%s", cp + 1); + else + xasprintf(&argv0, "%s", new_wp->shell); + execl(new_wp->shell, argv0, "-c", tmp, (char *)NULL); + _exit(1); + } + if (cp != NULL && cp[1] != '\0') + xasprintf(&argv0, "-%s", cp + 1); + else + xasprintf(&argv0, "-%s", new_wp->shell); + execl(new_wp->shell, argv0, (char *)NULL); + _exit(1); +} From e44e2c48dd38e02bccdcdfcf6d64aa63043ddff3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 7 Apr 2019 13:16:55 +0100 Subject: [PATCH 414/836] Do not log NULL command. --- spawn.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/spawn.c b/spawn.c index b22bf670d0..37e2a7c477 100644 --- a/spawn.c +++ b/spawn.c @@ -210,7 +210,7 @@ spawn_pane(struct spawn_context *sc, char **cause) struct environ_entry *ee; char **argv, *cp, **argvp, *argv0, *cwd; const char *cmd, *tmp; - int argc, before, full_size; + int argc, full_size; u_int idx; struct termios now; u_int hlimit; @@ -325,13 +325,16 @@ spawn_pane(struct spawn_context *sc, char **cause) environ_set(child, "SHELL", "%s", new_wp->shell); /* Log the arguments we are going to use. */ - cp = cmd_stringify_argv(new_wp->argc, new_wp->argv); log_debug("%s: shell=%s", __func__, new_wp->shell); - log_debug("%s: cmd=%s", __func__, cp); - log_debug("%s: cwd=%s", __func__, cwd); + if (new_wp->argc != 0) { + cp = cmd_stringify_argv(new_wp->argc, new_wp->argv); + log_debug("%s: cmd=%s", __func__, cp); + free(cp); + } + if (cwd != NULL) + log_debug("%s: cwd=%s", __func__, cwd); cmd_log_argv(new_wp->argc, new_wp->argv, __func__); environ_log(child, "%s: environment ", __func__); - free(cp); /* Initialize the window size. */ memset(&ws, 0, sizeof ws); From 883a428e27936beee29c7ce638cb04ef4f8f44a5 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Sun, 7 Apr 2019 15:39:58 +0100 Subject: [PATCH 415/836] Linux: remove include for util.h Linux doesn't require this header. --- spawn.c | 1 - 1 file changed, 1 deletion(-) diff --git a/spawn.c b/spawn.c index 37e2a7c477..7812696bad 100644 --- a/spawn.c +++ b/spawn.c @@ -24,7 +24,6 @@ #include #include #include -#include #include "tmux.h" From bb629f3be7db0017f14ed519cdc36657b1e5ab1a Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 7 Apr 2019 20:18:20 +0000 Subject: [PATCH 416/836] Current window style also needs to be tested for default. --- options-table.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/options-table.c b/options-table.c index fc72c3a978..b30d749021 100644 --- a/options-table.c +++ b/options-table.c @@ -97,7 +97,10 @@ static const char *options_table_window_size_list[] = { "#{?window_end_flag,,#{window-status-separator}}" \ "," \ "#[range=window|#{window_index} list=focus " \ - "#{window-status-current-style}" \ + "#{?#{!=:#{window-status-current-style},default}," \ + "#{window-status-current-style}," \ + "#{window-status-style}" \ + "}" \ "#{?#{&&:#{window_last_flag}," \ "#{!=:#{window-status-last-style},default}}, " \ "#{window-status-last-style}," \ From b5b67c538605fef234aa8ea95c0e277449dac4fc Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 8 Apr 2019 09:36:34 +0100 Subject: [PATCH 417/836] Document that switch-client can change all of session,window,pane and check for % in the target as well as ":.". --- cmd-switch-client.c | 2 +- tmux.1 | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd-switch-client.c b/cmd-switch-client.c index a4f55102c4..8f51d0fe3c 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -61,7 +61,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL) return (CMD_RETURN_ERROR); - if (tflag != NULL && tflag[strcspn(tflag, ":.")] != '\0') { + if (tflag != NULL && tflag[strcspn(tflag, ":.%")] != '\0') { type = CMD_FIND_PANE; flags = 0; } else { diff --git a/tmux.1 b/tmux.1 index ebbdc5bd26..0596da0c1e 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1096,6 +1096,14 @@ Switch the current session for client .Ar target-client to .Ar target-session . +As a special case, +.Fl t +may refer to a pane (a target that contains +.Ql : , +.Ql . +or +.Ql % ) +in which case the session, window and pane are all changed. If .Fl l , .Fl n From 835ccbac46c2c6c3a1e3192a1f1f5a5708ccbd48 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 8 Apr 2019 17:55:51 +0000 Subject: [PATCH 418/836] select-word was missing from the command list, from pawel-slowik. --- tmux.1 | 1 + 1 file changed, 1 insertion(+) diff --git a/tmux.1 b/tmux.1 index d2960fb56c..54404b8096 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1179,6 +1179,7 @@ The following commands are supported in copy mode: .It Li "search-forward-incremental " Ta "" Ta "C-s" .It Li "search-reverse" Ta "N" Ta "N" .It Li "select-line" Ta "V" Ta "" +.It Li "select-word" Ta "" Ta "" .It Li "start-of-line" Ta "0" Ta "C-a" .It Li "stop-selection" Ta "" Ta "" .It Li "top-line" Ta "H" Ta "M-R" From 71d90c11dd0a90a4defd3d56843dfcb1170310f5 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 9 Apr 2019 07:52:54 +0100 Subject: [PATCH 419/836] Solaris has no paths.h. --- spawn.c | 1 - 1 file changed, 1 deletion(-) diff --git a/spawn.c b/spawn.c index 7812696bad..0b6f2ed6b3 100644 --- a/spawn.c +++ b/spawn.c @@ -19,7 +19,6 @@ #include #include -#include #include #include #include From 0cbccc90ab323158aecb961b93954878693c1c90 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 9 Apr 2019 20:38:43 +0100 Subject: [PATCH 420/836] Set the window size as well as the layout size when using the preset layouts and calculate the sizes correctly. --- cmd-select-layout.c | 1 + layout-set.c | 29 +++++++++++++++++++++++++---- layout.c | 4 ++-- resize.c | 2 ++ tty.c | 3 +-- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/cmd-select-layout.c b/cmd-select-layout.c index d8fc1aebfa..775d32c5f9 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -135,6 +135,7 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) changed: free(oldlayout); + recalculate_sizes(); server_redraw_window(w); notify_window("window-layout-changed", w); return (CMD_RETURN_NORMAL); diff --git a/layout-set.c b/layout-set.c index d99453c255..97315964d9 100644 --- a/layout-set.c +++ b/layout-set.c @@ -119,7 +119,7 @@ layout_set_even(struct window *w, enum layout_type type) { struct window_pane *wp; struct layout_cell *lc, *lcnew; - u_int n; + u_int n, sx, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -131,7 +131,18 @@ layout_set_even(struct window *w, enum layout_type type) /* Free the old root and construct a new. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + if (type == LAYOUT_LEFTRIGHT) { + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; + sy = w->sy; + } else { + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; + sx = w->sx; + } + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, type); /* Build new leaf cells. */ @@ -152,6 +163,7 @@ layout_set_even(struct window *w, enum layout_type type) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -288,6 +300,7 @@ layout_set_main_h(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -412,6 +425,7 @@ layout_set_main_v(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -421,7 +435,7 @@ layout_set_tiled(struct window *w) { struct window_pane *wp; struct layout_cell *lc, *lcrow, *lcchild; - u_int n, width, height, used; + u_int n, width, height, used, sx, sy; u_int i, j, columns, rows; layout_print_cell(w->layout_root, __func__, 1); @@ -450,7 +464,13 @@ layout_set_tiled(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + sx = ((width + 1) * columns) - 1; + if (sx < w->sx) + sx = w->sx; + sy = ((height + 1) * rows) - 1; + if (sy < w->sy) + sy = w->sy; + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create a grid of the cells. */ @@ -514,6 +534,7 @@ layout_set_tiled(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } diff --git a/layout.c b/layout.c index 1a43014dfa..b825ee528a 100644 --- a/layout.c +++ b/layout.c @@ -479,7 +479,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) * out proportionately - this should leave the layout fitting the new * window size. */ - xchange = sx - w->sx; + xchange = sx - lc->sx; xlimit = layout_resize_check(w, lc, LAYOUT_LEFTRIGHT); if (xchange < 0 && xchange < -xlimit) xchange = -xlimit; @@ -493,7 +493,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, xchange); /* Adjust vertically in a similar fashion. */ - ychange = sy - w->sy; + ychange = sy - lc->sy; ylimit = layout_resize_check(w, lc, LAYOUT_TOPBOTTOM); if (ychange < 0 && ychange < -ylimit) ychange = -ylimit; diff --git a/resize.c b/resize.c index 868ddac817..caac74baca 100644 --- a/resize.c +++ b/resize.c @@ -51,6 +51,8 @@ resize_window(struct window *w, u_int sx, u_int sy) if (sy < w->layout_root->sy) sy = w->layout_root->sy; window_resize(w, sx, sy); + log_debug("%s: @%u resized to %u,%u; layout %u,%u", __func__, w->id, + sx, sy, w->layout_root->sx, w->layout_root->sy); /* Restore the window zoom state. */ if (zoomed) diff --git a/tty.c b/tty.c index 855f8e6a5b..9ed2b3a9dc 100644 --- a/tty.c +++ b/tty.c @@ -907,9 +907,8 @@ tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, lines = 0; if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { + yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) return (0); - } return (1); } From 031e9bc8541c4b29f83d76e57bad5d9f5053698f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 9 Apr 2019 21:15:00 +0100 Subject: [PATCH 421/836] Rewrite main-vertical and horizontal to use the common spread out code and to handle the case where the panes won't fit into the existing window size. --- layout-set.c | 246 ++++++++++++++++----------------------------------- 1 file changed, 76 insertions(+), 170 deletions(-) diff --git a/layout-set.c b/layout-set.c index 97315964d9..504d9630dc 100644 --- a/layout-set.c +++ b/layout-set.c @@ -184,9 +184,8 @@ static void layout_set_main_h(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lcrow, *lcchild; - u_int n, mainheight, otherheight, width, height; - u_int used, i, j, columns, rows, totalrows; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainh, otherh, sx; layout_print_cell(w->layout_root, __func__, 1); @@ -196,103 +195,57 @@ layout_set_main_h(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - columns = (w->sx + 1) / (PANE_MINIMUM + 1); /* maximum columns */ - if (columns == 0) - columns = 1; - rows = 1 + (n - 1) / columns; - columns = 1 + (n - 1) / rows; - width = (w->sx - (n - 1)) / columns; - - /* Get the main pane height and add one for separator line. */ - mainheight = options_get_number(w->options, "main-pane-height") + 1; - - /* Get the optional other pane height and add one for separator line. */ - otherheight = options_get_number(w->options, "other-pane-height") + 1; - - /* - * If an other pane height was specified, honour it so long as it - * doesn't shrink the main height to less than the main-pane-height - */ - if (otherheight > 1 && w->sy - otherheight > mainheight) - mainheight = w->sy - otherheight; - if (mainheight < PANE_MINIMUM + 1) - mainheight = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalrows = rows * (PANE_MINIMUM + 1) - 1; - if (mainheight + totalrows > w->sy) { - if (totalrows + PANE_MINIMUM + 1 > w->sy) - mainheight = PANE_MINIMUM + 2; + /* Get the main pane height and work out the other pane height. */ + mainh = options_get_number(w->options, "main-pane-height"); + if (mainh + PANE_MINIMUM + 1 >= w->sy) { + if (w->sy <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainh = PANE_MINIMUM; else - mainheight = w->sy - totalrows; - height = PANE_MINIMUM; - } else - height = (w->sy - mainheight - (rows - 1)) / rows; + mainh = w->sy - (PANE_MINIMUM + 1); + otherh = PANE_MINIMUM; + } else { + otherh = options_get_number(w->options, "other-pane-height"); + if (otherh == 0) + otherh = w->sy - mainh; + else if (otherh > w->sy || w->sy - otherh < mainh) + otherh = w->sy - mainh; + else + mainh = w->sy - otherh; + } + + /* Work out what height is needed. */ + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, mainheight + rows * (height + 1) - 1, 0, 0); + layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, w->sx, mainheight - 1, 0, 0); + layout_set_size(lcmain, sx, mainh, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < rows; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, sx, otherh, 0, 0); + layout_make_node(lcother, LAYOUT_LEFTRIGHT); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* Create the new row. */ - lcrow = layout_create_cell(lc); - layout_set_size(lcrow, w->sx, height, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lcrow, entry); - - /* If only one column, just use the row directly. */ - if (columns == 1) { - layout_make_leaf(lcrow, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the columns. */ - layout_make_node(lcrow, LAYOUT_LEFTRIGHT); - for (i = 0; i < columns; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lcrow); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry); - - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } - - /* Adjust the row to fit the full width if necessary. */ - if (i == columns) - i--; - used = ((i + 1) * (width + 1)) - 1; - if (w->sx <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lcrow->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_LEFTRIGHT, - w->sx - used); - } - - /* Adjust the last row height to fit if necessary. */ - used = mainheight + (rows * height) + rows - 1; - if (w->sy > used) { - lcrow = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lcrow, LAYOUT_TOPBOTTOM, - w->sy - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -309,9 +262,8 @@ static void layout_set_main_v(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lccolumn, *lcchild; - u_int n, mainwidth, otherwidth, width, height; - u_int used, i, j, columns, rows, totalcolumns; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainw, otherw, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -321,103 +273,57 @@ layout_set_main_v(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - rows = (w->sy + 1) / (PANE_MINIMUM + 1); /* maximum rows */ - if (rows == 0) - rows = 1; - columns = 1 + (n - 1) / rows; - rows = 1 + (n - 1) / columns; - height = (w->sy - (n - 1)) / rows; - - /* Get the main pane width and add one for separator line. */ - mainwidth = options_get_number(w->options, "main-pane-width") + 1; - - /* Get the optional other pane width and add one for separator line. */ - otherwidth = options_get_number(w->options, "other-pane-width") + 1; - - /* - * If an other pane width was specified, honour it so long as it - * doesn't shrink the main width to less than the main-pane-width - */ - if (otherwidth > 1 && w->sx - otherwidth > mainwidth) - mainwidth = w->sx - otherwidth; - if (mainwidth < PANE_MINIMUM + 1) - mainwidth = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalcolumns = columns * (PANE_MINIMUM + 1) - 1; - if (mainwidth + totalcolumns > w->sx) { - if (totalcolumns + PANE_MINIMUM + 1 > w->sx) - mainwidth = PANE_MINIMUM + 2; + /* Get the main pane width and work out the other pane width. */ + mainw = options_get_number(w->options, "main-pane-width"); + if (mainw + PANE_MINIMUM + 1 >= w->sx) { + if (w->sx <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainw = PANE_MINIMUM; else - mainwidth = w->sx - totalcolumns; - width = PANE_MINIMUM; - } else - width = (w->sx - mainwidth - (columns - 1)) / columns; + mainw = w->sx - (PANE_MINIMUM + 1); + otherw = PANE_MINIMUM; + } else { + otherw = options_get_number(w->options, "other-pane-width"); + if (otherw == 0) + otherw = w->sx - mainw; + else if (otherw > w->sx || w->sx - otherw < mainw) + otherw = w->sx - mainw; + else + mainw = w->sx - otherw; + } + + /* Work out what height is needed. */ + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainwidth + columns * (width + 1) - 1, w->sy, 0, 0); + layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, mainwidth - 1, w->sy, 0, 0); + layout_set_size(lcmain, mainw, sy, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < columns; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; - - /* Create the new column. */ - lccolumn = layout_create_cell(lc); - layout_set_size(lccolumn, width, w->sy, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lccolumn, entry); - - /* If only one row, just use the row directly. */ - if (rows == 1) { - layout_make_leaf(lccolumn, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the rows. */ - layout_make_node(lccolumn, LAYOUT_TOPBOTTOM); - for (i = 0; i < rows; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lccolumn); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lccolumn->cells, lcchild, entry); - - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, otherw, sy, 0, 0); + layout_make_node(lcother, LAYOUT_TOPBOTTOM); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* Adjust the column to fit the full height if necessary. */ - if (i == rows) - i--; - used = ((i + 1) * (height + 1)) - 1; - if (w->sy <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lccolumn->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_TOPBOTTOM, - w->sy - used); - } - - /* Adjust the last column width to fit if necessary. */ - used = mainwidth + (columns * width) + columns - 1; - if (w->sx > used) { - lccolumn = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lccolumn, LAYOUT_LEFTRIGHT, - w->sx - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); From fe44f90e5b757dc2aa1e5fdafca6d04b4e0c85f3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 9 Apr 2019 21:30:03 +0100 Subject: [PATCH 422/836] Do not let the size of the pane status screen go negative. --- screen-redraw.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/screen-redraw.c b/screen-redraw.c index 691b219439..0ce3374d45 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -290,7 +290,10 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, format_defaults(ft, c, NULL, NULL, wp); expanded = format_expand_time(ft, fmt); - wp->status_size = width = wp->sx - 4; + if (wp->sx < 4) + wp->status_size = width = 0; + else + wp->status_size = width = wp->sx - 4; memcpy(&old, &wp->status_screen, sizeof old); screen_init(&wp->status_screen, width, 1, 0); From 3c5d3a37802eee528b9cc7738e3946993d7d5664 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 9 Apr 2019 21:31:50 +0100 Subject: [PATCH 423/836] =?UTF-8?q?Add=20PATH=5FDEFPATH=20to=20compat.h=20?= =?UTF-8?q?from=20Carlo=20Marcelo=20Arenas=20Bel=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compat.h | 1 + 1 file changed, 1 insertion(+) diff --git a/compat.h b/compat.h index b83e618923..402ffb9053 100644 --- a/compat.h +++ b/compat.h @@ -67,6 +67,7 @@ void warnx(const char *, ...); #define _PATH_DEVNULL "/dev/null" #define _PATH_TTY "/dev/tty" #define _PATH_DEV "/dev/" +#define _PATH_DEFPATH "/usr/bin:/bin" #endif #ifndef __OpenBSD__ From 4a3ac3bd26e4cc0390ca0f3d116c38146adb2d94 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 10 Apr 2019 07:27:21 +0100 Subject: [PATCH 424/836] Remove unused variable. --- spawn.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/spawn.c b/spawn.c index 0b6f2ed6b3..1da3c8575e 100644 --- a/spawn.c +++ b/spawn.c @@ -208,7 +208,7 @@ spawn_pane(struct spawn_context *sc, char **cause) struct environ_entry *ee; char **argv, *cp, **argvp, *argv0, *cwd; const char *cmd, *tmp; - int argc, full_size; + int argc; u_int idx; struct termios now; u_int hlimit; @@ -217,12 +217,6 @@ spawn_pane(struct spawn_context *sc, char **cause) spawn_log(__func__, sc); - /* Check full size flag. */ - if (sc->flags & SPAWN_FULLSIZE) - full_size = 1; - else - full_size = 0; - /* * If we are respawning then get rid of the old process. Otherwise * either create a new cell or assign to the one we are given. From f3fcf977e49f3a9aff978bf1ad96ea37947258f5 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 10 Apr 2019 11:40:59 +0100 Subject: [PATCH 425/836] Use the right winlink pointer in new-window. --- cmd-new-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-new-window.c b/cmd-new-window.c index db320f3d90..e3bacff863 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -104,7 +104,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) free(cp); } - cmd_find_from_winlink(&fs, wl, 0); + cmd_find_from_winlink(&fs, new_wl, 0); hooks_insert(s->hooks, item, &fs, "after-new-window"); return (CMD_RETURN_NORMAL); From 1c1ec84aa3362bd9d87f32a7afa6d07017adccfc Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 10 Apr 2019 14:54:02 +0100 Subject: [PATCH 426/836] Fix minimum size check on split and size of first cell on spread out with a pane status line. --- layout.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/layout.c b/layout.c index b825ee528a..f974e10d7b 100644 --- a/layout.c +++ b/layout.c @@ -834,9 +834,9 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, int flags) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; - u_int sx, sy, xoff, yoff, size1, size2; + u_int sx, sy, xoff, yoff, size1, size2, minimum; u_int new_size, saved_size, resize_first = 0; - int full_size = (flags & SPAWN_FULLSIZE); + int full_size = (flags & SPAWN_FULLSIZE), status; /* * If full_size is specified, add a new cell at the top of the window @@ -846,6 +846,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, lc = wp->window->layout_root; else lc = wp->layout_cell; + status = options_get_number(wp->window->options, "pane-border-status"); /* Copy the old cell size. */ sx = lc->sx; @@ -860,7 +861,10 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, return (NULL); break; case LAYOUT_TOPBOTTOM: - if (sy < PANE_MINIMUM * 2 + 1) + minimum = PANE_MINIMUM * 2 + 1; + if (status != 0) + minimum += layout_need_status(lc, status == 1); + if (sy < minimum) return (NULL); break; default: @@ -1012,22 +1016,29 @@ int layout_spread_cell(struct window *w, struct layout_cell *parent) { struct layout_cell *lc; - u_int number, each, size; - int change, changed; + u_int number, each, size, this; + int change, changed, status; number = 0; TAILQ_FOREACH (lc, &parent->cells, entry) number++; if (number <= 1) return (0); + status = options_get_number(w->options, "pane-border-status"); if (parent->type == LAYOUT_LEFTRIGHT) size = parent->sx; - else if (parent->type == LAYOUT_TOPBOTTOM) + else if (parent->type == LAYOUT_TOPBOTTOM) { size = parent->sy; - else + if (status != 0) + size -= layout_need_status(parent, status == 1); + } else + return (0); + if (size < number - 1) return (0); each = (size - (number - 1)) / number; + if (each == 0) + return (0); changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { @@ -1038,7 +1049,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) change = each - (int)lc->sx; layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { - change = each - (int)lc->sy; + this = each; + if (status != 0) + this += layout_need_status(lc, status == 1); + change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } if (change != 0) From e6ee3e9504e0abc9014e1b20ac6a9c43dd6145fb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 10 Apr 2019 19:27:09 +0100 Subject: [PATCH 427/836] =?UTF-8?q?Warning=20fixes=20from=20Carlo=20Marcel?= =?UTF-8?q?o=20Arenas=20Bel=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd-respawn-pane.c | 1 - osdep-darwin.c | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index df234cd302..44234315c7 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -52,7 +52,6 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; - struct client *c = cmd_find_client(item, NULL, 1); char *cause = NULL; memset(&sc, 0, sizeof sc); diff --git a/osdep-darwin.c b/osdep-darwin.c index 5d69cddae4..d4a88028e9 100644 --- a/osdep-darwin.c +++ b/osdep-darwin.c @@ -30,7 +30,9 @@ char *osdep_get_name(int, char *); char *osdep_get_cwd(int); struct event_base *osdep_event_init(void); +#ifndef __unused #define __unused __attribute__ ((__unused__)) +#endif char * osdep_get_name(int fd, __unused char *tty) @@ -47,6 +49,7 @@ osdep_get_name(int fd, __unused char *tty) &bsdinfo, sizeof bsdinfo); if (ret == sizeof bsdinfo && *bsdinfo.pbsi_comm != '\0') return (strdup(bsdinfo.pbsi_comm)); + return (NULL); #else int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, 0 }; size_t size; From bba1809eac7eda21842fef1aab8723d9bfb56c8f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 11 Apr 2019 09:26:34 +0100 Subject: [PATCH 428/836] Merge a number of fixes from master for layouts, mostly prompted by testing by Thomas Sattler. --- cmd-select-layout.c | 1 + configure.ac | 2 +- layout-set.c | 275 ++++++++++++++++---------------------------- layout.c | 33 ++++-- resize.c | 2 + screen-redraw.c | 5 +- tty.c | 3 +- 7 files changed, 134 insertions(+), 187 deletions(-) diff --git a/cmd-select-layout.c b/cmd-select-layout.c index d8fc1aebfa..775d32c5f9 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -135,6 +135,7 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) changed: free(oldlayout); + recalculate_sizes(); server_redraw_window(w); notify_window("window-layout-changed", w); return (CMD_RETURN_NORMAL); diff --git a/configure.ac b/configure.ac index 79e3ba8c75..f04ae14d6c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 2.9-rc2) +AC_INIT([tmux], 2.9-rc3) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) diff --git a/layout-set.c b/layout-set.c index d99453c255..504d9630dc 100644 --- a/layout-set.c +++ b/layout-set.c @@ -119,7 +119,7 @@ layout_set_even(struct window *w, enum layout_type type) { struct window_pane *wp; struct layout_cell *lc, *lcnew; - u_int n; + u_int n, sx, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -131,7 +131,18 @@ layout_set_even(struct window *w, enum layout_type type) /* Free the old root and construct a new. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + if (type == LAYOUT_LEFTRIGHT) { + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; + sy = w->sy; + } else { + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; + sx = w->sx; + } + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, type); /* Build new leaf cells. */ @@ -152,6 +163,7 @@ layout_set_even(struct window *w, enum layout_type type) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -172,9 +184,8 @@ static void layout_set_main_h(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lcrow, *lcchild; - u_int n, mainheight, otherheight, width, height; - u_int used, i, j, columns, rows, totalrows; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainh, otherh, sx; layout_print_cell(w->layout_root, __func__, 1); @@ -184,103 +195,57 @@ layout_set_main_h(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - columns = (w->sx + 1) / (PANE_MINIMUM + 1); /* maximum columns */ - if (columns == 0) - columns = 1; - rows = 1 + (n - 1) / columns; - columns = 1 + (n - 1) / rows; - width = (w->sx - (n - 1)) / columns; - - /* Get the main pane height and add one for separator line. */ - mainheight = options_get_number(w->options, "main-pane-height") + 1; - - /* Get the optional other pane height and add one for separator line. */ - otherheight = options_get_number(w->options, "other-pane-height") + 1; - - /* - * If an other pane height was specified, honour it so long as it - * doesn't shrink the main height to less than the main-pane-height - */ - if (otherheight > 1 && w->sy - otherheight > mainheight) - mainheight = w->sy - otherheight; - if (mainheight < PANE_MINIMUM + 1) - mainheight = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalrows = rows * (PANE_MINIMUM + 1) - 1; - if (mainheight + totalrows > w->sy) { - if (totalrows + PANE_MINIMUM + 1 > w->sy) - mainheight = PANE_MINIMUM + 2; + /* Get the main pane height and work out the other pane height. */ + mainh = options_get_number(w->options, "main-pane-height"); + if (mainh + PANE_MINIMUM + 1 >= w->sy) { + if (w->sy <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainh = PANE_MINIMUM; else - mainheight = w->sy - totalrows; - height = PANE_MINIMUM; - } else - height = (w->sy - mainheight - (rows - 1)) / rows; + mainh = w->sy - (PANE_MINIMUM + 1); + otherh = PANE_MINIMUM; + } else { + otherh = options_get_number(w->options, "other-pane-height"); + if (otherh == 0) + otherh = w->sy - mainh; + else if (otherh > w->sy || w->sy - otherh < mainh) + otherh = w->sy - mainh; + else + mainh = w->sy - otherh; + } + + /* Work out what height is needed. */ + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, mainheight + rows * (height + 1) - 1, 0, 0); + layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, w->sx, mainheight - 1, 0, 0); + layout_set_size(lcmain, sx, mainh, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < rows; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; - - /* Create the new row. */ - lcrow = layout_create_cell(lc); - layout_set_size(lcrow, w->sx, height, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lcrow, entry); - - /* If only one column, just use the row directly. */ - if (columns == 1) { - layout_make_leaf(lcrow, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the columns. */ - layout_make_node(lcrow, LAYOUT_LEFTRIGHT); - for (i = 0; i < columns; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lcrow); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry); + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, sx, otherh, 0, 0); + layout_make_node(lcother, LAYOUT_LEFTRIGHT); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } - - /* Adjust the row to fit the full width if necessary. */ - if (i == columns) - i--; - used = ((i + 1) * (width + 1)) - 1; - if (w->sx <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lcrow->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_LEFTRIGHT, - w->sx - used); - } - - /* Adjust the last row height to fit if necessary. */ - used = mainheight + (rows * height) + rows - 1; - if (w->sy > used) { - lcrow = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lcrow, LAYOUT_TOPBOTTOM, - w->sy - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -288,6 +253,7 @@ layout_set_main_h(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -296,9 +262,8 @@ static void layout_set_main_v(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lccolumn, *lcchild; - u_int n, mainwidth, otherwidth, width, height; - u_int used, i, j, columns, rows, totalcolumns; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainw, otherw, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -308,103 +273,57 @@ layout_set_main_v(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - rows = (w->sy + 1) / (PANE_MINIMUM + 1); /* maximum rows */ - if (rows == 0) - rows = 1; - columns = 1 + (n - 1) / rows; - rows = 1 + (n - 1) / columns; - height = (w->sy - (n - 1)) / rows; - - /* Get the main pane width and add one for separator line. */ - mainwidth = options_get_number(w->options, "main-pane-width") + 1; - - /* Get the optional other pane width and add one for separator line. */ - otherwidth = options_get_number(w->options, "other-pane-width") + 1; - - /* - * If an other pane width was specified, honour it so long as it - * doesn't shrink the main width to less than the main-pane-width - */ - if (otherwidth > 1 && w->sx - otherwidth > mainwidth) - mainwidth = w->sx - otherwidth; - if (mainwidth < PANE_MINIMUM + 1) - mainwidth = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalcolumns = columns * (PANE_MINIMUM + 1) - 1; - if (mainwidth + totalcolumns > w->sx) { - if (totalcolumns + PANE_MINIMUM + 1 > w->sx) - mainwidth = PANE_MINIMUM + 2; + /* Get the main pane width and work out the other pane width. */ + mainw = options_get_number(w->options, "main-pane-width"); + if (mainw + PANE_MINIMUM + 1 >= w->sx) { + if (w->sx <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainw = PANE_MINIMUM; else - mainwidth = w->sx - totalcolumns; - width = PANE_MINIMUM; - } else - width = (w->sx - mainwidth - (columns - 1)) / columns; + mainw = w->sx - (PANE_MINIMUM + 1); + otherw = PANE_MINIMUM; + } else { + otherw = options_get_number(w->options, "other-pane-width"); + if (otherw == 0) + otherw = w->sx - mainw; + else if (otherw > w->sx || w->sx - otherw < mainw) + otherw = w->sx - mainw; + else + mainw = w->sx - otherw; + } + + /* Work out what height is needed. */ + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainwidth + columns * (width + 1) - 1, w->sy, 0, 0); + layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, mainwidth - 1, w->sy, 0, 0); + layout_set_size(lcmain, mainw, sy, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < columns; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; - - /* Create the new column. */ - lccolumn = layout_create_cell(lc); - layout_set_size(lccolumn, width, w->sy, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lccolumn, entry); + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, otherw, sy, 0, 0); + layout_make_node(lcother, LAYOUT_TOPBOTTOM); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* If only one row, just use the row directly. */ - if (rows == 1) { - layout_make_leaf(lccolumn, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the rows. */ - layout_make_node(lccolumn, LAYOUT_TOPBOTTOM); - for (i = 0; i < rows; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lccolumn); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lccolumn->cells, lcchild, entry); - - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } - - /* Adjust the column to fit the full height if necessary. */ - if (i == rows) - i--; - used = ((i + 1) * (height + 1)) - 1; - if (w->sy <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lccolumn->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_TOPBOTTOM, - w->sy - used); - } - - /* Adjust the last column width to fit if necessary. */ - used = mainwidth + (columns * width) + columns - 1; - if (w->sx > used) { - lccolumn = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lccolumn, LAYOUT_LEFTRIGHT, - w->sx - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -412,6 +331,7 @@ layout_set_main_v(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -421,7 +341,7 @@ layout_set_tiled(struct window *w) { struct window_pane *wp; struct layout_cell *lc, *lcrow, *lcchild; - u_int n, width, height, used; + u_int n, width, height, used, sx, sy; u_int i, j, columns, rows; layout_print_cell(w->layout_root, __func__, 1); @@ -450,7 +370,13 @@ layout_set_tiled(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + sx = ((width + 1) * columns) - 1; + if (sx < w->sx) + sx = w->sx; + sy = ((height + 1) * rows) - 1; + if (sy < w->sy) + sy = w->sy; + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create a grid of the cells. */ @@ -514,6 +440,7 @@ layout_set_tiled(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } diff --git a/layout.c b/layout.c index 7093c607a4..fa6f0613d1 100644 --- a/layout.c +++ b/layout.c @@ -479,7 +479,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) * out proportionately - this should leave the layout fitting the new * window size. */ - xchange = sx - w->sx; + xchange = sx - lc->sx; xlimit = layout_resize_check(w, lc, LAYOUT_LEFTRIGHT); if (xchange < 0 && xchange < -xlimit) xchange = -xlimit; @@ -493,7 +493,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, xchange); /* Adjust vertically in a similar fashion. */ - ychange = sy - w->sy; + ychange = sy - lc->sy; ylimit = layout_resize_check(w, lc, LAYOUT_TOPBOTTOM); if (ychange < 0 && ychange < -ylimit) ychange = -ylimit; @@ -834,8 +834,9 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, int insert_before, int full_size) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; - u_int sx, sy, xoff, yoff, size1, size2; + u_int sx, sy, xoff, yoff, size1, size2, minimum; u_int new_size, saved_size, resize_first = 0; + int status; /* * If full_size is specified, add a new cell at the top of the window @@ -845,6 +846,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, lc = wp->window->layout_root; else lc = wp->layout_cell; + status = options_get_number(wp->window->options, "pane-border-status"); /* Copy the old cell size. */ sx = lc->sx; @@ -859,7 +861,10 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, return (NULL); break; case LAYOUT_TOPBOTTOM: - if (sy < PANE_MINIMUM * 2 + 1) + minimum = PANE_MINIMUM * 2 + 1; + if (status != 0) + minimum += layout_need_status(lc, status == 1); + if (sy < minimum) return (NULL); break; default: @@ -1011,22 +1016,29 @@ int layout_spread_cell(struct window *w, struct layout_cell *parent) { struct layout_cell *lc; - u_int number, each, size; - int change, changed; + u_int number, each, size, this; + int change, changed, status; number = 0; TAILQ_FOREACH (lc, &parent->cells, entry) number++; if (number <= 1) return (0); + status = options_get_number(w->options, "pane-border-status"); if (parent->type == LAYOUT_LEFTRIGHT) size = parent->sx; - else if (parent->type == LAYOUT_TOPBOTTOM) + else if (parent->type == LAYOUT_TOPBOTTOM) { size = parent->sy; - else + if (status != 0) + size -= layout_need_status(parent, status == 1); + } else + return (0); + if (size < number - 1) return (0); each = (size - (number - 1)) / number; + if (each == 0) + return (0); changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { @@ -1037,7 +1049,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) change = each - (int)lc->sx; layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { - change = each - (int)lc->sy; + this = each; + if (status != 0) + this += layout_need_status(lc, status == 1); + change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } if (change != 0) diff --git a/resize.c b/resize.c index 868ddac817..caac74baca 100644 --- a/resize.c +++ b/resize.c @@ -51,6 +51,8 @@ resize_window(struct window *w, u_int sx, u_int sy) if (sy < w->layout_root->sy) sy = w->layout_root->sy; window_resize(w, sx, sy); + log_debug("%s: @%u resized to %u,%u; layout %u,%u", __func__, w->id, + sx, sy, w->layout_root->sx, w->layout_root->sy); /* Restore the window zoom state. */ if (zoomed) diff --git a/screen-redraw.c b/screen-redraw.c index 691b219439..0ce3374d45 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -290,7 +290,10 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, format_defaults(ft, c, NULL, NULL, wp); expanded = format_expand_time(ft, fmt); - wp->status_size = width = wp->sx - 4; + if (wp->sx < 4) + wp->status_size = width = 0; + else + wp->status_size = width = wp->sx - 4; memcpy(&old, &wp->status_screen, sizeof old); screen_init(&wp->status_screen, width, 1, 0); diff --git a/tty.c b/tty.c index 855f8e6a5b..9ed2b3a9dc 100644 --- a/tty.c +++ b/tty.c @@ -907,9 +907,8 @@ tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, lines = 0; if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { + yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) return (0); - } return (1); } From cd4c94f76bcad0f0c9e3dfc8310a56c982eb3844 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 7 Apr 2019 20:18:20 +0000 Subject: [PATCH 429/836] Current window style also needs to be tested for default. --- options-table.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/options-table.c b/options-table.c index 1301f92d30..40639affdb 100644 --- a/options-table.c +++ b/options-table.c @@ -96,7 +96,10 @@ static const char *options_table_window_size_list[] = { "#{?window_end_flag,,#{window-status-separator}}" \ "," \ "#[range=window|#{window_index} list=focus " \ - "#{window-status-current-style}" \ + "#{?#{!=:#{window-status-current-style},default}," \ + "#{window-status-current-style}," \ + "#{window-status-style}" \ + "}" \ "#{?#{&&:#{window_last_flag}," \ "#{!=:#{window-status-last-style},default}}, " \ "#{window-status-last-style}," \ From 82bc2c87a98d9d16d6acef5687d80dc85ef7a18d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 17 Apr 2019 09:10:23 +0100 Subject: [PATCH 430/836] Add to TODO. --- TODO | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO b/TODO index ed081bf4e5..220e4eb91d 100644 --- a/TODO +++ b/TODO @@ -156,3 +156,4 @@ TODO soonish maybe: collected LRU. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630. +- Merge alternate and normal screen modes: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/5#note_112220 From 78287e27c87ccdda1f8580382b336a0d02c26a03 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:37:48 +0000 Subject: [PATCH 431/836] Break new window and pane creation common code from various commands and window.c into a separate file spawn.c. --- Makefile | 1 + cmd-attach-session.c | 2 +- cmd-join-pane.c | 10 +- cmd-kill-session.c | 4 +- cmd-new-session.c | 105 ++++------- cmd-new-window.c | 109 +++-------- cmd-queue.c | 2 +- cmd-respawn-pane.c | 60 +++--- cmd-respawn-window.c | 72 +++---- cmd-rotate-window.c | 4 +- cmd-select-pane.c | 4 +- cmd-split-window.c | 139 +++++--------- cmd-swap-pane.c | 10 +- cmd-switch-client.c | 2 +- layout.c | 15 +- server-fn.c | 4 +- server.c | 2 +- session.c | 68 +------ spawn.c | 434 +++++++++++++++++++++++++++++++++++++++++++ tmux.h | 58 ++++-- window-tree.c | 2 +- window.c | 215 +++------------------ 22 files changed, 709 insertions(+), 613 deletions(-) create mode 100644 spawn.c diff --git a/Makefile b/Makefile index 99417ba203..aedabadf64 100644 --- a/Makefile +++ b/Makefile @@ -104,6 +104,7 @@ SRCS= alerts.c \ server-fn.c \ server.c \ session.c \ + spawn.c \ status.c \ style.c \ tmux.c \ diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 73ff530da6..bcd6d89529 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -87,7 +87,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, if (wl != NULL) { if (wp != NULL) - window_set_active_pane(wp->window, wp); + window_set_active_pane(wp->window, wp, 1); session_set_current(s, wl); if (wp != NULL) cmd_find_from_winlink_pane(current, wl, wp, 0); diff --git a/cmd-join-pane.c b/cmd-join-pane.c index 79bc1c9d04..ab24530275 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -72,7 +72,7 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) int size, percentage, dst_idx; enum layout_type type; struct layout_cell *lc; - int not_same_window; + int not_same_window, flags; if (self->entry == &cmd_join_pane_entry) not_same_window = 1; @@ -124,7 +124,11 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) else size = (dst_wp->sx * percentage) / 100; } - lc = layout_split_pane(dst_wp, type, size, args_has(args, 'b'), 0); + if (args_has(args, 'b')) + flags = SPAWN_BEFORE; + else + flags = 0; + lc = layout_split_pane(dst_wp, type, size, flags); if (lc == NULL) { cmdq_error(item, "create pane failed: pane too small"); return (CMD_RETURN_ERROR); @@ -145,7 +149,7 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) server_redraw_window(dst_w); if (!args_has(args, 'd')) { - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(dst_w, src_wp, 1); session_select(dst_s, dst_idx); cmd_find_from_session(current, dst_s, 0); server_redraw_session(dst_s); diff --git a/cmd-kill-session.c b/cmd-kill-session.c index 00ea7789c1..dcef809789 100644 --- a/cmd-kill-session.c +++ b/cmd-kill-session.c @@ -61,12 +61,12 @@ cmd_kill_session_exec(struct cmd *self, struct cmdq_item *item) RB_FOREACH_SAFE(sloop, sessions, &sessions, stmp) { if (sloop != s) { server_destroy_session(sloop); - session_destroy(sloop, __func__); + session_destroy(sloop, 1, __func__); } } } else { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } return (CMD_RETURN_NORMAL); } diff --git a/cmd-new-session.c b/cmd-new-session.c index e1be350b9e..f0a353d8a4 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -69,20 +69,17 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct args *args = self->args; struct client *c = item->client; struct session *s, *as, *groupwith; - struct window *w; struct environ *env; struct options *oo; struct termios tio, *tiop; struct session_group *sg; - const char *errstr, *template, *group, *prefix; - const char *path, *cmd, *tmp, *value; - char **argv, *cause, *cp, *newname, *cwd = NULL; - int detached, already_attached, idx, argc; - int is_control = 0; - u_int sx, sy, dsx = 80, dsy = 24; - struct environ_entry *envent; - struct cmd_find_state fs; + const char *errstr, *template, *group, *prefix, *tmp; + char *cause, *cwd = NULL, *cp, *newname = NULL; + int detached, already_attached, is_control = 0; + u_int sx, sy, dsx, dsy; + struct spawn_context sc; enum cmd_retval retval; + struct cmd_find_state fs; if (self->entry == &cmd_has_session_entry) { /* @@ -97,13 +94,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - newname = NULL; if (args_has(args, 's')) { newname = format_single(item, args_get(args, 's'), c, NULL, NULL, NULL); if (!session_check_name(newname)) { cmdq_error(item, "bad session name: %s", newname); - goto error; + goto fail; } if ((as = session_find(newname)) != NULL) { if (args_has(args, 'A')) { @@ -114,7 +110,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (retval); } cmdq_error(item, "duplicate session: %s", newname); - goto error; + goto fail; } } @@ -125,7 +121,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (groupwith == NULL) { if (!session_check_name(group)) { cmdq_error(item, "bad group name: %s", group); - goto error; + goto fail; } sg = session_group_find(group); } else @@ -173,7 +169,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (server_client_check_nested(item->client)) { cmdq_error(item, "sessions should be nested with care, " "unset $TMUX to force"); - return (CMD_RETURN_ERROR); + goto fail; } if (tcgetattr(c->tty.fd, &tio) != 0) fatal("tcgetattr failed"); @@ -186,7 +182,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (server_client_open(c, &cause) != 0) { cmdq_error(item, "open terminal failed: %s", cause); free(cause); - goto error; + goto fail; } } @@ -200,7 +196,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) dsx = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "width %s", errstr); - goto error; + goto fail; } } } @@ -213,7 +209,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) dsy = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { cmdq_error(item, "height %s", errstr); - goto error; + goto fail; } } } @@ -225,8 +221,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (sy > 0 && options_get_number(global_s_options, "status")) sy--; } else { - value = options_get_string(global_s_options, "default-size"); - if (sscanf(value, "%ux%u", &sx, &sy) != 2) { + tmp = options_get_string(global_s_options, "default-size"); + if (sscanf(tmp, "%ux%u", &sx, &sy) != 2) { sx = 80; sy = 24; } @@ -240,59 +236,34 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (sy == 0) sy = 1; - /* Figure out the command for the new window. */ - argc = -1; - argv = NULL; - if (!args_has(args, 't') && args->argc != 0) { - argc = args->argc; - argv = args->argv; - } else if (sg == NULL && groupwith == NULL) { - cmd = options_get_string(global_s_options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } - - path = NULL; - if (c != NULL && c->session == NULL) - envent = environ_find(c->environ, "PATH"); - else - envent = environ_find(global_environ, "PATH"); - if (envent != NULL) - path = envent->value; - - /* Construct the environment. */ + /* Create the new session. */ + oo = options_create(global_s_options); + if (args_has(args, 'x') || args_has(args, 'y')) + options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); env = environ_create(); if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); + s = session_create(prefix, newname, cwd, env, oo, tiop); - /* Set up the options. */ - oo = options_create(global_s_options); - if (args_has(args, 'x') || args_has(args, 'y')) - options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + /* Spawn the initial window. */ + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; - /* Create the new session. */ - idx = -1 - options_get_number(global_s_options, "base-index"); - s = session_create(prefix, newname, argc, argv, path, cwd, env, oo, - tiop, idx, &cause); - environ_free(env); - if (s == NULL) { - cmdq_error(item, "create session failed: %s", cause); - free(cause); - goto error; - } + sc.name = args_get(args, 'n'); + sc.argc = args->argc; + sc.argv = args->argv; - /* Set the initial window name if one given. */ - if (argc >= 0 && (tmp = args_get(args, 'n')) != NULL) { - cp = format_single(item, tmp, c, s, NULL, NULL); - w = s->curw->window; - window_set_name(w, cp); - options_set_number(w->options, "automatic-rename", 0); - free(cp); + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = 0; + + if (spawn_window(&sc, &cause) == NULL) { + session_destroy(s, 0, __func__); + cmdq_error(item, "create window failed: %s", cause); + free(cause); + goto fail; } /* @@ -364,7 +335,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) free(newname); return (CMD_RETURN_NORMAL); -error: +fail: free(cwd); free(newname); return (CMD_RETURN_ERROR); diff --git a/cmd-new-window.c b/cmd-new-window.c index 5baeff6506..e3bacff863 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -53,87 +53,45 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct cmd_find_state *current = &item->shared->current; + struct spawn_context sc; + struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct client *c = cmd_find_client(item, NULL, 1); int idx = item->target.idx; - const char *cmd, *path, *template, *tmp; - char **argv, *cause, *cp, *cwd, *name; - int argc, detached; - struct environ_entry *envent; + struct winlink *new_wl; + char *cause = NULL, *cp; + const char *template; struct cmd_find_state fs; - if (args_has(args, 'a') && wl != NULL) { - if ((idx = winlink_shuffle_up(s, wl)) == -1) { - cmdq_error(item, "no free window indexes"); - return (CMD_RETURN_ERROR); - } - } - detached = args_has(args, 'd'); - - if (args->argc == 0) { - cmd = options_get_string(s->options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } else { - argc = args->argc; - argv = args->argv; + if (args_has(args, 'a') && (idx = winlink_shuffle_up(s, wl)) == -1) { + cmdq_error(item, "couldn't get a window index"); + return (CMD_RETURN_ERROR); } - path = NULL; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - if ((tmp = args_get(args, 'c')) != NULL) - cwd = format_single(item, tmp, c, s, NULL, NULL); - else - cwd = xstrdup(server_client_get_cwd(item->client, s)); - - if ((tmp = args_get(args, 'n')) != NULL) - name = format_single(item, tmp, c, s, NULL, NULL); - else - name = NULL; - - if (idx != -1) - wl = winlink_find_by_index(&s->windows, idx); - if (wl != NULL && args_has(args, 'k')) { - /* - * Can't use session_detach as it will destroy session if this - * makes it empty. - */ - notify_session_window("window-unlinked", s, wl->window); - wl->flags &= ~WINLINK_ALERTFLAGS; - winlink_stack_remove(&s->lastw, wl); - winlink_remove(&s->windows, wl); - - /* Force select/redraw if current. */ - if (wl == s->curw) { - detached = 0; - s->curw = NULL; - } - } + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; - if (idx == -1) - idx = -1 - options_get_number(s->options, "base-index"); - wl = session_new(s, name, argc, argv, path, cwd, idx, - &cause); - if (wl == NULL) { + sc.name = args_get(args, 'n'); + sc.argc = args->argc; + sc.argv = args->argv; + + sc.idx = idx; + sc.cwd = args_get(args, 'c'); + + sc.flags = 0; + if (args_has(args, 'd')) + sc.flags |= SPAWN_DETACHED; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; + + if ((new_wl = spawn_window(&sc, &cause)) == NULL) { cmdq_error(item, "create window failed: %s", cause); free(cause); - goto error; + return (CMD_RETURN_ERROR); } - if (!detached) { - session_select(s, wl->idx); - cmd_find_from_winlink(current, wl, 0); + if (!args_has(args, 'd') || new_wl == s->curw) { + cmd_find_from_winlink(current, new_wl, 0); server_redraw_session_group(s); } else server_status_session_group(s); @@ -141,20 +99,13 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'P')) { if ((template = args_get(args, 'F')) == NULL) template = NEW_WINDOW_TEMPLATE; - cp = format_single(item, template, c, s, wl, NULL); + cp = format_single(item, template, c, s, new_wl, NULL); cmdq_print(item, "%s", cp); free(cp); } - cmd_find_from_winlink(&fs, wl, 0); + cmd_find_from_winlink(&fs, new_wl, 0); hooks_insert(s->hooks, item, &fs, "after-new-window"); - free(name); - free(cwd); return (CMD_RETURN_NORMAL); - -error: - free(name); - free(cwd); - return (CMD_RETURN_ERROR); } diff --git a/cmd-queue.c b/cmd-queue.c index 97b3c1c97e..03fd5f10c8 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -111,7 +111,7 @@ cmdq_remove(struct cmdq_item *item) if (item->client != NULL) server_client_unref(item->client); - if (item->type == CMDQ_COMMAND) + if (item->cmdlist != NULL) cmd_list_free(item->cmdlist); TAILQ_REMOVE(item->queue, item, entry); diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index eb4a7e09e1..44234315c7 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -20,7 +20,7 @@ #include #include -#include +#include #include "tmux.h" @@ -36,7 +36,7 @@ const struct cmd_entry cmd_respawn_pane_entry = { .args = { "c:kt:", 0, -1 }, .usage = "[-c start-directory] [-k] " CMD_TARGET_PANE_USAGE - " [command]", + " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -48,53 +48,39 @@ static enum cmd_retval cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; + struct spawn_context sc; + struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; struct window_pane *wp = item->target.wp; - struct client *c = cmd_find_client(item, NULL, 1); - struct session *s = item->target.s; - struct environ *env; - const char *path = NULL, *cp; - char *cause, *cwd = NULL; - u_int idx; - struct environ_entry *envent; - - if (!args_has(self->args, 'k') && wp->fd != -1) { - if (window_pane_index(wp, &idx) != 0) - fatalx("index not found"); - cmdq_error(item, "pane still active: %s:%d.%u", - s->name, wl->idx, idx); - return (CMD_RETURN_ERROR); - } + char *cause = NULL; + + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; + + sc.wp0 = wp; + sc.lc = NULL; - window_pane_reset_mode_all(wp); - screen_reinit(&wp->base); - input_init(wp); + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; + sc.idx = -1; + sc.cwd = args_get(args, 'c'); - if ((cp = args_get(args, 'c')) != NULL) - cwd = format_single(item, cp, c, s, NULL, NULL); + sc.flags = SPAWN_RESPAWN; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; - env = environ_for_session(s, 0); - if (window_pane_spawn(wp, args->argc, args->argv, path, NULL, cwd, env, - s->tio, &cause) != 0) { + if (spawn_pane(&sc, &cause) == NULL) { cmdq_error(item, "respawn pane failed: %s", cause); free(cause); - environ_free(env); - free(cwd); return (CMD_RETURN_ERROR); } - environ_free(env); - free(cwd); wp->flags |= PANE_REDRAW; - server_status_window(w); + server_status_window(wp->window); return (CMD_RETURN_NORMAL); } diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index 6879199063..2ccb2fded4 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include "tmux.h" @@ -48,64 +48,34 @@ static enum cmd_retval cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; + struct spawn_context sc; struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; - struct window_pane *wp; - struct client *c = cmd_find_client(item, NULL, 1); - struct environ *env; - const char *path = NULL, *cp; - char *cause, *cwd = NULL; - struct environ_entry *envent; - - if (!args_has(self->args, 'k')) { - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->fd == -1) - continue; - cmdq_error(item, "window still active: %s:%d", s->name, - wl->idx); - return (CMD_RETURN_ERROR); - } - } + char *cause = NULL; + + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; + + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; - wp = TAILQ_FIRST(&w->panes); - TAILQ_REMOVE(&w->panes, wp, entry); - layout_free(w); - window_destroy_panes(w); - TAILQ_INSERT_HEAD(&w->panes, wp, entry); - window_pane_resize(wp, w->sx, w->sy); - - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - if ((cp = args_get(args, 'c')) != NULL) - cwd = format_single(item, cp, c, s, NULL, NULL); - - env = environ_for_session(s, 0); - if (window_pane_spawn(wp, args->argc, args->argv, path, NULL, cwd, env, - s->tio, &cause) != 0) { + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = SPAWN_RESPAWN; + if (args_has(args, 'k')) + sc.flags |= SPAWN_KILL; + + if (spawn_window(&sc, &cause) == NULL) { cmdq_error(item, "respawn window failed: %s", cause); free(cause); - environ_free(env); - free(cwd); - server_destroy_pane(wp, 0); return (CMD_RETURN_ERROR); } - environ_free(env); - free(cwd); - - layout_init(w, wp); - window_pane_reset_mode_all(wp); - screen_reinit(&wp->base); - input_init(wp); - window_set_active_pane(w, wp); - recalculate_sizes(); - server_redraw_window(w); + server_redraw_window(wl->window); return (CMD_RETURN_NORMAL); } diff --git a/cmd-rotate-window.c b/cmd-rotate-window.c index 5a900a1341..6dc0f2a828 100644 --- a/cmd-rotate-window.c +++ b/cmd-rotate-window.c @@ -77,7 +77,7 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_PREV(w->active, window_panes, entry)) == NULL) wp = TAILQ_LAST(&w->panes, window_panes); - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); cmd_find_from_winlink_pane(current, wl, wp, 0); server_redraw_window(w); } else { @@ -105,7 +105,7 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_NEXT(w->active, entry)) == NULL) wp = TAILQ_FIRST(&w->panes); - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); cmd_find_from_winlink_pane(current, wl, wp, 0); server_redraw_window(w); } diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 2873737f7b..af0f033bb8 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -112,7 +112,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) else { server_unzoom_window(w); window_redraw_active_switch(w, lastwp); - if (window_set_active_pane(w, lastwp)) { + if (window_set_active_pane(w, lastwp, 1)) { cmd_find_from_winlink(current, wl, 0); cmd_select_pane_redraw(w); } @@ -194,7 +194,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); server_unzoom_window(wp->window); window_redraw_active_switch(w, wp); - if (window_set_active_pane(w, wp)) { + if (window_set_active_pane(w, wp, 1)) { cmd_find_from_winlink_pane(current, wl, wp, 0); hooks_insert(s->hooks, item, current, "after-select-pane"); cmd_select_pane_redraw(w); diff --git a/cmd-split-window.c b/cmd-split-window.c index 2882141313..f8cab9f99d 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -53,111 +53,87 @@ const struct cmd_entry cmd_split_window_entry = { static enum cmd_retval cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) { - struct cmd_find_state *current = &item->shared->current; struct args *args = self->args; + struct cmd_find_state *current = &item->shared->current; + struct spawn_context sc; struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; - struct window *w = wl->window; - struct window_pane *wp = item->target.wp, *new_wp = NULL; - struct environ *env; - const char *cmd, *path, *shell, *template, *tmp; - char **argv, *cause, *new_cause, *cp, *cwd; - u_int hlimit; - int argc, size, percentage, before; + struct window_pane *wp = item->target.wp, *new_wp; enum layout_type type; struct layout_cell *lc; - struct environ_entry *envent; - struct cmd_find_state fs; - - server_unzoom_window(w); - - if (args->argc == 0) { - cmd = options_get_string(s->options, "default-command"); - if (cmd != NULL && *cmd != '\0') { - argc = 1; - argv = (char **)&cmd; - } else { - argc = 0; - argv = NULL; - } - } else { - argc = args->argc; - argv = args->argv; - } - - if ((tmp = args_get(args, 'c')) != NULL) - cwd = format_single(item, tmp, c, s, NULL, NULL); - else - cwd = xstrdup(server_client_get_cwd(item->client, s)); + struct cmd_find_state fs; + int size, percentage, flags; + const char *template; + char *cause, *cp; - type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; - before = args_has(args, 'b'); - - size = -1; + else + type = LAYOUT_TOPBOTTOM; if (args_has(args, 'l')) { size = args_strtonum(args, 'l', 0, INT_MAX, &cause); if (cause != NULL) { - xasprintf(&new_cause, "size %s", cause); + cmdq_error(item, "create pane failed: -l %s", cause); free(cause); - cause = new_cause; - goto error; + return (CMD_RETURN_ERROR); } } else if (args_has(args, 'p')) { percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause); if (cause != NULL) { - xasprintf(&new_cause, "percentage %s", cause); + cmdq_error(item, "create pane failed: -p %s", cause); free(cause); - cause = new_cause; - goto error; + return (CMD_RETURN_ERROR); } if (type == LAYOUT_TOPBOTTOM) size = (wp->sy * percentage) / 100; else size = (wp->sx * percentage) / 100; - } - hlimit = options_get_number(s->options, "history-limit"); + } else + size = -1; + + server_unzoom_window(wp->window); - shell = options_get_string(s->options, "default-shell"); - if (*shell == '\0' || areshell(shell)) - shell = _PATH_BSHELL; + flags = 0; + if (args_has(args, 'b')) + flags |= SPAWN_BEFORE; + if (args_has(args, 'f')) + flags |= SPAWN_FULLSIZE; - lc = layout_split_pane(wp, type, size, before, args_has(args, 'f')); + lc = layout_split_pane(wp, type, size, flags); if (lc == NULL) { - cause = xstrdup("pane too small"); - goto error; + cmdq_error(item, "no space for new pane"); + return (CMD_RETURN_ERROR); } - new_wp = window_add_pane(w, wp, before, args_has(args, 'f'), hlimit); - layout_make_leaf(lc, new_wp); - path = NULL; - if (item->client != NULL && item->client->session == NULL) - envent = environ_find(item->client->environ, "PATH"); - else - envent = environ_find(s->environ, "PATH"); - if (envent != NULL) - path = envent->value; - - env = environ_for_session(s, 0); - if (window_pane_spawn(new_wp, argc, argv, path, shell, cwd, env, - s->tio, &cause) != 0) { - environ_free(env); - goto error; - } - environ_free(env); + memset(&sc, 0, sizeof sc); + sc.item = item; + sc.s = s; + sc.wl = wl; - layout_fix_panes(w); - server_redraw_window(w); + sc.wp0 = wp; + sc.lc = lc; - if (!args_has(args, 'd')) { - window_set_active_pane(w, new_wp); - session_select(s, wl->idx); - cmd_find_from_session(current, s, 0); - server_redraw_session(s); - } else - server_status_session(s); + sc.name = NULL; + sc.argc = args->argc; + sc.argv = args->argv; + + sc.idx = -1; + sc.cwd = args_get(args, 'c'); + + sc.flags = flags; + if (args_has(args, 'd')) + sc.flags |= SPAWN_DETACHED; + + if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { + cmdq_error(item, "create pane failed: %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + if (!args_has(args, 'd')) + cmd_find_from_winlink_pane(current, wl, new_wp, 0); + server_redraw_window(wp->window); + server_status_session(s); if (args_has(args, 'P')) { if ((template = args_get(args, 'F')) == NULL) @@ -166,22 +142,9 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmdq_print(item, "%s", cp); free(cp); } - notify_window("window-layout-changed", w); cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); hooks_insert(s->hooks, item, &fs, "after-split-window"); - free(cwd); return (CMD_RETURN_NORMAL); - -error: - if (new_wp != NULL) { - layout_close_pane(new_wp); - window_remove_pane(w, new_wp); - } - cmdq_error(item, "create pane failed: %s", cause); - free(cause); - - free(cwd); - return (CMD_RETURN_ERROR); } diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 1de272c4ca..2ad05561be 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -101,17 +101,17 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) if (!args_has(self->args, 'd')) { if (src_w != dst_w) { - window_set_active_pane(src_w, dst_wp); - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(src_w, dst_wp, 1); + window_set_active_pane(dst_w, src_wp, 1); } else { tmp_wp = dst_wp; - window_set_active_pane(src_w, tmp_wp); + window_set_active_pane(src_w, tmp_wp, 1); } } else { if (src_w->active == src_wp) - window_set_active_pane(src_w, dst_wp); + window_set_active_pane(src_w, dst_wp, 1); if (dst_w->active == dst_wp) - window_set_active_pane(dst_w, src_wp); + window_set_active_pane(dst_w, src_wp, 1); } if (src_w != dst_w) { if (src_w->last == src_wp) diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 3e19346ee5..a4f55102c4 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -116,7 +116,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) server_unzoom_window(wl->window); if (wp != NULL) { window_redraw_active_switch(wp->window, wp); - window_set_active_pane(wp->window, wp); + window_set_active_pane(wp->window, wp, 1); } session_set_current(s, wl); cmd_find_from_session(&item->shared->current, s, 0); diff --git a/layout.c b/layout.c index 7093c607a4..1a43014dfa 100644 --- a/layout.c +++ b/layout.c @@ -831,11 +831,12 @@ layout_resize_child_cells(struct window *w, struct layout_cell *lc) */ struct layout_cell * layout_split_pane(struct window_pane *wp, enum layout_type type, int size, - int insert_before, int full_size) + int flags) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; u_int sx, sy, xoff, yoff, size1, size2; u_int new_size, saved_size, resize_first = 0; + int full_size = (flags & SPAWN_FULLSIZE); /* * If full_size is specified, add a new cell at the top of the window @@ -876,7 +877,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, saved_size = sy; if (size < 0) size2 = ((saved_size + 1) / 2) - 1; - else if (insert_before) + else if (flags & SPAWN_BEFORE) size2 = saved_size - size - 1; else size2 = size; @@ -887,7 +888,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, size1 = saved_size - 1 - size2; /* Which size are we using? */ - if (insert_before) + if (flags & SPAWN_BEFORE) new_size = size2; else new_size = size1; @@ -903,7 +904,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, */ lcparent = lc->parent; lcnew = layout_create_cell(lcparent); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_BEFORE(lc, lcnew, entry); else TAILQ_INSERT_AFTER(&lcparent->cells, lc, lcnew, entry); @@ -932,7 +933,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, layout_set_size(lcnew, size, sy, 0, 0); else if (lc->type == LAYOUT_TOPBOTTOM) layout_set_size(lcnew, sx, size, 0, 0); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_HEAD(&lc->cells, lcnew, entry); else TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry); @@ -956,12 +957,12 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, /* Create the new child cell. */ lcnew = layout_create_cell(lcparent); - if (insert_before) + if (flags & SPAWN_BEFORE) TAILQ_INSERT_HEAD(&lcparent->cells, lcnew, entry); else TAILQ_INSERT_TAIL(&lcparent->cells, lcnew, entry); } - if (insert_before) { + if (flags & SPAWN_BEFORE) { lc1 = lcnew; lc2 = lc; } else { diff --git a/server-fn.c b/server-fn.c index f947d8ffa3..c4ff4aa944 100644 --- a/server-fn.c +++ b/server-fn.c @@ -368,7 +368,7 @@ server_destroy_session_group(struct session *s) else { TAILQ_FOREACH_SAFE(s, &sg->sessions, gentry, s1) { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } } } @@ -435,7 +435,7 @@ server_check_unattached(void) if (s->attached != 0) continue; if (options_get_number (s->options, "destroy-unattached")) - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } } diff --git a/server.c b/server.c index dd09c3c468..3c54f45318 100644 --- a/server.c +++ b/server.c @@ -297,7 +297,7 @@ server_send_exit(void) } RB_FOREACH_SAFE(s, sessions, &sessions, s1) - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } /* Update socket execute permissions based on whether sessions are attached. */ diff --git a/session.c b/session.c index 43ca321a7e..dddf18b055 100644 --- a/session.c +++ b/session.c @@ -112,12 +112,10 @@ session_find_by_id(u_int id) /* Create a new session. */ struct session * -session_create(const char *prefix, const char *name, int argc, char **argv, - const char *path, const char *cwd, struct environ *env, struct options *oo, - struct termios *tio, int idx, char **cause) +session_create(const char *prefix, const char *name, const char *cwd, + struct environ *env, struct options *oo, struct termios *tio) { struct session *s; - struct winlink *wl; s = xcalloc(1, sizeof *s); s->references = 1; @@ -129,10 +127,7 @@ session_create(const char *prefix, const char *name, int argc, char **argv, TAILQ_INIT(&s->lastw); RB_INIT(&s->windows); - s->environ = environ_create(); - if (env != NULL) - environ_copy(env, s->environ); - + s->environ = env; s->options = oo; s->hooks = hooks_create(global_hooks); @@ -166,17 +161,6 @@ session_create(const char *prefix, const char *name, int argc, char **argv, fatal("gettimeofday failed"); session_update_activity(s, &s->creation_time); - if (argc >= 0) { - wl = session_new(s, NULL, argc, argv, path, cwd, idx, cause); - if (wl == NULL) { - session_destroy(s, __func__); - return (NULL); - } - session_select(s, RB_ROOT(&s->windows)->idx); - } - - log_debug("session %s created", s->name); - return (s); } @@ -220,7 +204,7 @@ session_free(__unused int fd, __unused short events, void *arg) /* Destroy a session. */ void -session_destroy(struct session *s, const char *from) +session_destroy(struct session *s, int notify, const char *from) { struct winlink *wl; @@ -228,7 +212,8 @@ session_destroy(struct session *s, const char *from) s->curw = NULL; RB_REMOVE(sessions, &sessions, s); - notify_session("session-closed", s); + if (notify) + notify_session("session-closed", s); free(s->tio); @@ -338,45 +323,6 @@ session_previous_session(struct session *s) return (s2); } -/* Create a new window on a session. */ -struct winlink * -session_new(struct session *s, const char *name, int argc, char **argv, - const char *path, const char *cwd, int idx, char **cause) -{ - struct window *w; - struct winlink *wl; - struct environ *env; - const char *shell; - u_int hlimit, sx, sy; - - if ((wl = winlink_add(&s->windows, idx)) == NULL) { - xasprintf(cause, "index in use: %d", idx); - return (NULL); - } - wl->session = s; - - shell = options_get_string(s->options, "default-shell"); - if (*shell == '\0' || areshell(shell)) - shell = _PATH_BSHELL; - - default_window_size(s, NULL, &sx, &sy, -1); - hlimit = options_get_number(s->options, "history-limit"); - env = environ_for_session(s, 0); - w = window_create_spawn(name, argc, argv, path, shell, cwd, env, s->tio, - sx, sy, hlimit, cause); - if (w == NULL) { - winlink_remove(&s->windows, wl); - environ_free(env); - return (NULL); - } - winlink_set_window(wl, w); - environ_free(env); - notify_session_window("window-linked", s, w); - - session_group_synchronize_from(s); - return (wl); -} - /* Attach a window to a session. */ struct winlink * session_attach(struct session *s, struct window *w, int idx, char **cause) @@ -412,7 +358,7 @@ session_detach(struct session *s, struct winlink *wl) session_group_synchronize_from(s); if (RB_EMPTY(&s->windows)) { - session_destroy(s, __func__); + session_destroy(s, 1, __func__); return (1); } return (0); diff --git a/spawn.c b/spawn.c new file mode 100644 index 0000000000..0565fee386 --- /dev/null +++ b/spawn.c @@ -0,0 +1,434 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "tmux.h" + +/* + * Set up the environment and create a new window and pane or a new pane. + * + * We need to set up the following items: + * + * - history limit, comes from the session; + * + * - base index, comes from the session; + * + * - current working directory, may be specified - if it isn't it comes from + * either the client or the session; + * + * - PATH variable, comes from the client if any, otherwise from the session + * environment; + * + * - shell, comes from default-shell; + * + * - termios, comes from the session; + * + * - remaining environment, comes from the session. + */ + +static void +spawn_log(const char *from, struct spawn_context *sc) +{ + struct session *s = sc->s; + struct winlink *wl = sc->wl; + struct window_pane *wp0 = sc->wp0; + char tmp[128]; + const char *name; + + log_debug("%s: %s, flags=%#x", from, sc->item->name, sc->flags); + + if (wl != NULL && wp0 != NULL) + xsnprintf(tmp, sizeof tmp, "wl=%d wp0=%%%u", wl->idx, wp0->id); + else if (wl != NULL) + xsnprintf(tmp, sizeof tmp, "wl=%d wp0=none", wl->idx); + else if (wp0 != NULL) + xsnprintf(tmp, sizeof tmp, "wl=none wp0=%%%u", wp0->id); + else + xsnprintf(tmp, sizeof tmp, "wl=none wp0=none"); + log_debug("%s: s=$%u %s idx=%d", from, s->id, tmp, sc->idx); + + name = sc->name; + if (name == NULL) + name = "none"; + log_debug("%s: name=%s", from, name); +} + +struct winlink * +spawn_window(struct spawn_context *sc, char **cause) +{ + struct session *s = sc->s; + struct window *w; + struct window_pane *wp; + struct winlink *wl; + int idx = sc->idx; + u_int sx, sy; + + spawn_log(__func__, sc); + + /* + * If the window already exists, we are respawning, so destroy all the + * panes except one. + */ + if (sc->flags & SPAWN_RESPAWN) { + w = sc->wl->window; + if (~sc->flags & SPAWN_KILL) { + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp->fd != -1) + break; + } + if (wp != NULL) { + xasprintf(cause, "window %s:%d still active", + s->name, sc->wl->idx); + return (NULL); + } + } + + sc->wp0 = TAILQ_FIRST(&w->panes); + TAILQ_REMOVE(&w->panes, sc->wp0, entry); + + layout_free(w); + window_destroy_panes(w); + + TAILQ_INSERT_HEAD(&w->panes, sc->wp0, entry); + window_pane_resize(sc->wp0, w->sx, w->sy); + + layout_init(w, sc->wp0); + window_set_active_pane(w, sc->wp0, 0); + } + + /* + * Otherwise we have no window so we will need to create one. First + * check if the given index already exists and destroy it if so. + */ + if ((~sc->flags & SPAWN_RESPAWN) && idx != -1) { + wl = winlink_find_by_index(&s->windows, idx); + if (wl != NULL && (~sc->flags & SPAWN_KILL)) { + xasprintf(cause, "index %d in use", idx); + return (NULL); + } + if (wl != NULL) { + /* + * Can't use session_detach as it will destroy session + * if this makes it empty. + */ + wl->flags &= ~WINLINK_ALERTFLAGS; + notify_session_window("window-unlinked", s, wl->window); + winlink_stack_remove(&s->lastw, wl); + winlink_remove(&s->windows, wl); + + if (s->curw == wl) { + s->curw = NULL; + sc->flags &= ~SPAWN_DETACHED; + } + } + } + + /* Then create a window if needed. */ + if (~sc->flags & SPAWN_RESPAWN) { + if (idx == -1) + idx = -1 - options_get_number(s->options, "base-index"); + if ((sc->wl = winlink_add(&s->windows, idx)) == NULL) { + xasprintf(cause, "couldn't add window %d", idx); + return (NULL); + } + default_window_size(s, NULL, &sx, &sy, -1); + if ((w = window_create(sx, sy)) == NULL) { + winlink_remove(&s->windows, sc->wl); + xasprintf(cause, "couldn't create window %d", idx); + return (NULL); + } + sc->wl->session = s; + winlink_set_window(sc->wl, w); + } else + w = NULL; + sc->flags |= SPAWN_NONOTIFY; + + /* Spawn the pane. */ + wp = spawn_pane(sc, cause); + if (wp == NULL) { + if (~sc->flags & SPAWN_RESPAWN) { + window_destroy(w); + winlink_remove(&s->windows, sc->wl); + } + return (NULL); + } + + /* Set the name of the new window. */ + if (~sc->flags & SPAWN_RESPAWN) { + if (sc->name != NULL) { + w->name = xstrdup(sc->name); + options_set_number(w->options, "automatic-rename", 0); + } else + w->name = xstrdup(default_window_name(w)); + } + + /* Switch to the new window if required. */ + if (~sc->flags & SPAWN_DETACHED) + session_select(s, sc->wl->idx); + + /* Fire notification if new window. */ + if (~sc->flags & SPAWN_RESPAWN) + notify_session_window("window-linked", s, w); + + session_group_synchronize_from(s); + return (sc->wl); +} + +struct window_pane * +spawn_pane(struct spawn_context *sc, char **cause) +{ + struct cmdq_item *item = sc->item; + struct client *c = item->client; + struct session *s = sc->s; + struct window *w = sc->wl->window; + struct window_pane *new_wp; + struct environ *child; + struct environ_entry *ee; + char **argv, *cp, **argvp, *argv0, *cwd; + const char *cmd, *tmp; + int argc; + u_int idx; + struct termios now; + u_int hlimit; + struct winsize ws; + sigset_t set, oldset; + + spawn_log(__func__, sc); + + /* + * If we are respawning then get rid of the old process. Otherwise + * either create a new cell or assign to the one we are given. + */ + hlimit = options_get_number(s->options, "history-limit"); + if (sc->flags & SPAWN_RESPAWN) { + if (sc->wp0->fd != -1 && (~sc->flags & SPAWN_KILL)) { + window_pane_index(sc->wp0, &idx); + xasprintf(cause, "pane %s:%d.%u still active", + s->name, sc->wl->idx, idx); + return (NULL); + } + if (sc->wp0->fd != -1) { + bufferevent_free(sc->wp0->event); + close(sc->wp0->fd); + } + window_pane_reset_mode_all(sc->wp0); + screen_reinit(&sc->wp0->base); + input_init(sc->wp0); + new_wp = sc->wp0; + new_wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); + } else if (sc->lc == NULL) { + new_wp = window_add_pane(w, NULL, hlimit, sc->flags); + layout_init(w, new_wp); + } else { + new_wp = window_add_pane(w, sc->wp0, hlimit, sc->flags); + layout_assign_pane(sc->lc, new_wp); + } + + /* + * Now we have a pane with nothing running in it ready for the new + * process. Work out the command and arguments. + */ + if (sc->argc == 0) { + cmd = options_get_string(s->options, "default-command"); + if (cmd != NULL && *cmd != '\0') { + argc = 1; + argv = (char **)&cmd; + } else { + argc = 0; + argv = NULL; + } + } else { + argc = sc->argc; + argv = sc->argv; + } + + /* + * Replace the stored arguments if there are new ones. If not, the + * existing ones will be used (they will only exist for respawn). + */ + if (argc > 0) { + cmd_free_argv(new_wp->argc, new_wp->argv); + new_wp->argc = argc; + new_wp->argv = cmd_copy_argv(argc, argv); + } + + /* + * Work out the current working directory. If respawning, use + * the pane's stored one unless specified. + */ + if (sc->cwd != NULL) + cwd = format_single(item, sc->cwd, c, s, NULL, NULL); + else if (~sc->flags & SPAWN_RESPAWN) + cwd = xstrdup(server_client_get_cwd(c, s)); + else + cwd = NULL; + if (cwd != NULL) { + free(new_wp->cwd); + new_wp->cwd = cwd; + } + + /* Create an environment for this pane. */ + child = environ_for_session(s, 0); + environ_set(child, "TMUX_PANE", "%%%u", new_wp->id); + + /* + * Then the PATH environment variable. The session one is replaced from + * the client if there is one because otherwise running "tmux new + * myprogram" wouldn't work if myprogram isn't in the session's path. + */ + if (c != NULL && c->session == NULL) { /* only unattached clients */ + ee = environ_find(c->environ, "PATH"); + if (ee != NULL) + environ_set(child, "PATH", "%s", ee->value); + } + if (environ_find(child, "PATH") == NULL) + environ_set(child, "%s", _PATH_DEFPATH); + + /* Then the shell. If respawning, use the old one. */ + if (~sc->flags & SPAWN_RESPAWN) { + tmp = options_get_string(s->options, "default-shell"); + if (*tmp == '\0' || areshell(tmp)) + tmp = _PATH_BSHELL; + free(new_wp->shell); + new_wp->shell = xstrdup(tmp); + } + environ_set(child, "SHELL", "%s", new_wp->shell); + + /* Log the arguments we are going to use. */ + log_debug("%s: shell=%s", __func__, new_wp->shell); + if (new_wp->argc != 0) { + cp = cmd_stringify_argv(new_wp->argc, new_wp->argv); + log_debug("%s: cmd=%s", __func__, cp); + free(cp); + } + if (cwd != NULL) + log_debug("%s: cwd=%s", __func__, cwd); + cmd_log_argv(new_wp->argc, new_wp->argv, __func__); + environ_log(child, "%s: environment ", __func__); + + /* Initialize the window size. */ + memset(&ws, 0, sizeof ws); + ws.ws_col = screen_size_x(&new_wp->base); + ws.ws_row = screen_size_y(&new_wp->base); + + /* Block signals until fork has completed. */ + sigfillset(&set); + sigprocmask(SIG_BLOCK, &set, &oldset); + + /* Fork the new process. */ + new_wp->pid = fdforkpty(ptm_fd, &new_wp->fd, new_wp->tty, NULL, &ws); + if (new_wp->pid == -1) { + xasprintf(cause, "fork failed: %s", strerror(errno)); + new_wp->fd = -1; + if (~sc->flags & SPAWN_RESPAWN) { + layout_close_pane(new_wp); + window_remove_pane(w, new_wp); + } + sigprocmask(SIG_SETMASK, &oldset, NULL); + return (NULL); + } + + /* In the parent process, everything is done now. */ + if (new_wp->pid != 0) { + new_wp->pipe_off = 0; + new_wp->flags &= ~PANE_EXITED; + + sigprocmask(SIG_SETMASK, &oldset, NULL); + window_pane_set_event(new_wp); + + if (sc->flags & SPAWN_RESPAWN) + return (new_wp); + if ((~sc->flags & SPAWN_DETACHED) || w->active == NULL) { + if (sc->flags & SPAWN_NONOTIFY) + window_set_active_pane(w, new_wp, 0); + else + window_set_active_pane(w, new_wp, 1); + } + if (~sc->flags & SPAWN_NONOTIFY) + notify_window("window-layout-changed", w); + return (new_wp); + } + + /* + * Child process. Change to the working directory or home if that + * fails. + */ + if (chdir(new_wp->cwd) != 0) { + if ((tmp = find_home()) == NULL || chdir(tmp) != 0) + chdir("/"); + } + + /* + * Update terminal escape characters from the session if available and + * force VERASE to tmux's \177. + */ + if (tcgetattr(STDIN_FILENO, &now) != 0) + _exit(1); + if (s->tio != NULL) + memcpy(now.c_cc, s->tio->c_cc, sizeof now.c_cc); + now.c_cc[VERASE] = '\177'; + if (tcsetattr(STDIN_FILENO, TCSANOW, &now) != 0) + _exit(1); + + /* Clean up file descriptors and signals and update the environment. */ + closefrom(STDERR_FILENO + 1); + proc_clear_signals(server_proc, 1); + sigprocmask(SIG_SETMASK, &oldset, NULL); + log_close(); + environ_push(child); + + /* + * If given multiple arguments, use execvp(). Copy the arguments to + * ensure they end in a NULL. + */ + if (new_wp->argc != 0 && new_wp->argc != 1) { + argvp = cmd_copy_argv(new_wp->argc, new_wp->argv); + execvp(argvp[0], argvp); + _exit(1); + } + + /* + * If one argument, pass it to $SHELL -c. Otherwise create a login + * shell. + */ + cp = strrchr(new_wp->shell, '/'); + if (new_wp->argc == 1) { + tmp = new_wp->argv[0]; + if (cp != NULL && cp[1] != '\0') + xasprintf(&argv0, "%s", cp + 1); + else + xasprintf(&argv0, "%s", new_wp->shell); + execl(new_wp->shell, argv0, "-c", tmp, (char *)NULL); + _exit(1); + } + if (cp != NULL && cp[1] != '\0') + xasprintf(&argv0, "-%s", cp + 1); + else + xasprintf(&argv0, "-%s", new_wp->shell); + execl(new_wp->shell, argv0, (char *)NULL); + _exit(1); +} diff --git a/tmux.h b/tmux.h index 31fbae3247..fc85344dc0 100644 --- a/tmux.h +++ b/tmux.h @@ -233,8 +233,8 @@ enum { /* Termcap codes. */ enum tty_code_code { - TTYC_AX = 0, TTYC_ACSC, + TTYC_AX, TTYC_BCE, TTYC_BEL, TTYC_BLINK, @@ -814,7 +814,7 @@ struct window_pane { int argc; char **argv; char *shell; - const char *cwd; + char *cwd; pid_t pid; char tty[TTY_NAME_MAX]; @@ -1561,6 +1561,32 @@ struct options_table_entry { #define CMD_SRCDST_CLIENT_USAGE "[-s src-client] [-t dst-client]" #define CMD_BUFFER_USAGE "[-b buffer-name]" +/* Spawn common context. */ +struct spawn_context { + struct cmdq_item *item; + + struct session *s; + struct winlink *wl; + + struct window_pane *wp0; + struct layout_cell *lc; + + const char *name; + char **argv; + int argc; + + int idx; + const char *cwd; + + int flags; +#define SPAWN_KILL 0x1 +#define SPAWN_DETACHED 0x2 +#define SPAWN_RESPAWN 0x4 +#define SPAWN_BEFORE 0x8 +#define SPAWN_NONOTIFY 0x10 +#define SPAWN_FULLSIZE 0x20 +}; + /* tmux.c */ extern struct hooks *global_hooks; extern struct options *global_options; @@ -2232,17 +2258,17 @@ struct window *window_find_by_id_str(const char *); struct window *window_find_by_id(u_int); void window_update_activity(struct window *); struct window *window_create(u_int, u_int); -struct window *window_create_spawn(const char *, int, char **, const char *, - const char *, const char *, struct environ *, - struct termios *, u_int, u_int, u_int, char **); +void window_destroy(struct window *); +void window_pane_set_event(struct window_pane *); struct window_pane *window_get_active_at(struct window *, u_int, u_int); struct window_pane *window_find_string(struct window *, const char *); int window_has_pane(struct window *, struct window_pane *); -int window_set_active_pane(struct window *, struct window_pane *); +int window_set_active_pane(struct window *, struct window_pane *, + int); void window_redraw_active_switch(struct window *, struct window_pane *); -struct window_pane *window_add_pane(struct window *, struct window_pane *, int, - int, u_int); +struct window_pane *window_add_pane(struct window *, struct window_pane *, + u_int, int); void window_resize(struct window *, u_int, u_int); int window_zoom(struct window_pane *); int window_unzoom(struct window *); @@ -2259,9 +2285,6 @@ void window_destroy_panes(struct window *); struct window_pane *window_pane_find_by_id_str(const char *); struct window_pane *window_pane_find_by_id(u_int); int window_pane_destroy_ready(struct window_pane *); -int window_pane_spawn(struct window_pane *, int, char **, - const char *, const char *, const char *, struct environ *, - struct termios *, char **); void window_pane_resize(struct window_pane *, u_int, u_int); void window_pane_alternate_on(struct window_pane *, struct grid_cell *, int); @@ -2319,7 +2342,7 @@ void layout_resize_pane_to(struct window_pane *, enum layout_type, u_int); void layout_assign_pane(struct layout_cell *, struct window_pane *); struct layout_cell *layout_split_pane(struct window_pane *, enum layout_type, - int, int, int); + int, int); void layout_close_pane(struct window_pane *); int layout_spread_cell(struct window *, struct layout_cell *); void layout_spread_out(struct window_pane *); @@ -2418,10 +2441,9 @@ int session_alive(struct session *); struct session *session_find(const char *); struct session *session_find_by_id_str(const char *); struct session *session_find_by_id(u_int); -struct session *session_create(const char *, const char *, int, char **, - const char *, const char *, struct environ *, - struct options *, struct termios *, int, char **); -void session_destroy(struct session *, const char *); +struct session *session_create(const char *, const char *, const char *, + struct environ *, struct options *, struct termios *); +void session_destroy(struct session *, int, const char *); void session_add_ref(struct session *, const char *); void session_remove_ref(struct session *, const char *); int session_check_name(const char *); @@ -2493,4 +2515,8 @@ void style_set(struct style *, const struct grid_cell *); void style_copy(struct style *, struct style *); int style_is_default(struct style *); +/* spawn.c */ +struct winlink *spawn_window(struct spawn_context *, char **); +struct window_pane *spawn_pane(struct spawn_context *, char **); + #endif /* TMUX_H */ diff --git a/window-tree.c b/window-tree.c index 120d22c824..fe0e5c14f3 100644 --- a/window-tree.c +++ b/window-tree.c @@ -1006,7 +1006,7 @@ window_tree_kill_each(__unused void* modedata, void* itemdata, case WINDOW_TREE_SESSION: if (s != NULL) { server_destroy_session(s); - session_destroy(s, __func__); + session_destroy(s, 1, __func__); } break; case WINDOW_TREE_WINDOW: diff --git a/window.c b/window.c index 3ec5d50444..10571f99b6 100644 --- a/window.c +++ b/window.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -73,20 +72,10 @@ const struct window_mode *all_window_modes[] = { NULL }; -static void window_destroy(struct window *); - static struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int); static void window_pane_destroy(struct window_pane *); -static void window_pane_read_callback(struct bufferevent *, void *); -static void window_pane_error_callback(struct bufferevent *, short, void *); - -static int winlink_next_index(struct winlinks *, int); - -static struct window_pane *window_pane_choose_best(struct window_pane **, - u_int); - RB_GENERATE(windows, window, entry, window_cmp); RB_GENERATE(winlinks, winlink, entry, winlink_cmp); RB_GENERATE(window_pane_tree, window_pane, tree_entry, window_pane_cmp); @@ -342,37 +331,7 @@ window_create(u_int sx, u_int sy) return (w); } -struct window * -window_create_spawn(const char *name, int argc, char **argv, const char *path, - const char *shell, const char *cwd, struct environ *env, - struct termios *tio, u_int sx, u_int sy, u_int hlimit, char **cause) -{ - struct window *w; - struct window_pane *wp; - - w = window_create(sx, sy); - wp = window_add_pane(w, NULL, 0, 0, hlimit); - layout_init(w, wp); - - if (window_pane_spawn(wp, argc, argv, path, shell, cwd, - env, tio, cause) != 0) { - window_destroy(w); - return (NULL); - } - - w->active = TAILQ_FIRST(&w->panes); - if (name != NULL) { - w->name = xstrdup(name); - options_set_number(w->options, "automatic-rename", 0); - } else - w->name = default_window_name(w); - - notify_window("window-pane-changed", w); - - return (w); -} - -static void +void window_destroy(struct window *w) { log_debug("window @%u destroyed (%d references)", w->id, w->references); @@ -463,17 +422,22 @@ window_has_pane(struct window *w, struct window_pane *wp) } int -window_set_active_pane(struct window *w, struct window_pane *wp) +window_set_active_pane(struct window *w, struct window_pane *wp, int notify) { - log_debug("%s: pane %%%u (was %%%u)", __func__, wp->id, w->active->id); + log_debug("%s: pane %%%u", __func__, wp->id); + if (wp == w->active) return (0); w->last = w->active; + w->active = wp; w->active->active_point = next_active_point++; w->active->flags |= PANE_CHANGED; + tty_update_window_offset(w); - notify_window("window-pane-changed", w); + + if (notify) + notify_window("window-pane-changed", w); return (1); } @@ -571,7 +535,7 @@ window_zoom(struct window_pane *wp) return (-1); if (w->active != wp) - window_set_active_pane(w, wp); + window_set_active_pane(w, wp, 1); TAILQ_FOREACH(wp1, &w->panes, entry) { wp1->saved_layout_cell = wp1->layout_cell; @@ -610,8 +574,8 @@ window_unzoom(struct window *w) } struct window_pane * -window_add_pane(struct window *w, struct window_pane *other, int before, - int full_size, u_int hlimit) +window_add_pane(struct window *w, struct window_pane *other, u_int hlimit, + int flags) { struct window_pane *wp; @@ -622,15 +586,15 @@ window_add_pane(struct window *w, struct window_pane *other, int before, if (TAILQ_EMPTY(&w->panes)) { log_debug("%s: @%u at start", __func__, w->id); TAILQ_INSERT_HEAD(&w->panes, wp, entry); - } else if (before) { + } else if (flags & SPAWN_BEFORE) { log_debug("%s: @%u before %%%u", __func__, w->id, wp->id); - if (full_size) + if (flags & SPAWN_FULLSIZE) TAILQ_INSERT_HEAD(&w->panes, wp, entry); else TAILQ_INSERT_BEFORE(other, wp, entry); } else { log_debug("%s: @%u after %%%u", __func__, w->id, wp->id); - if (full_size) + if (flags & SPAWN_FULLSIZE) TAILQ_INSERT_TAIL(&w->panes, wp, entry); else TAILQ_INSERT_AFTER(&w->panes, other, wp, entry); @@ -887,141 +851,6 @@ window_pane_destroy(struct window_pane *wp) free(wp); } -int -window_pane_spawn(struct window_pane *wp, int argc, char **argv, - const char *path, const char *shell, const char *cwd, struct environ *env, - struct termios *tio, char **cause) -{ - struct winsize ws; - char *argv0, *cmd, **argvp; - const char *ptr, *first, *home; - struct termios tio2; - sigset_t set, oldset; - - if (wp->fd != -1) { - bufferevent_free(wp->event); - close(wp->fd); - } - if (argc > 0) { - cmd_free_argv(wp->argc, wp->argv); - wp->argc = argc; - wp->argv = cmd_copy_argv(argc, argv); - } - if (shell != NULL) { - free(wp->shell); - wp->shell = xstrdup(shell); - } - if (cwd != NULL) { - free((void *)wp->cwd); - wp->cwd = xstrdup(cwd); - } - wp->flags &= ~(PANE_STATUSREADY|PANE_STATUSDRAWN); - - cmd = cmd_stringify_argv(wp->argc, wp->argv); - log_debug("%s: shell=%s", __func__, wp->shell); - log_debug("%s: cmd=%s", __func__, cmd); - log_debug("%s: cwd=%s", __func__, cwd); - cmd_log_argv(wp->argc, wp->argv, __func__); - environ_log(env, "%s: environment ", __func__); - - memset(&ws, 0, sizeof ws); - ws.ws_col = screen_size_x(&wp->base); - ws.ws_row = screen_size_y(&wp->base); - - sigfillset(&set); - sigprocmask(SIG_BLOCK, &set, &oldset); - switch (wp->pid = fdforkpty(ptm_fd, &wp->fd, wp->tty, NULL, &ws)) { - case -1: - wp->event = NULL; - wp->fd = -1; - - xasprintf(cause, "%s: %s", cmd, strerror(errno)); - free(cmd); - - sigprocmask(SIG_SETMASK, &oldset, NULL); - return (-1); - case 0: - proc_clear_signals(server_proc, 1); - sigprocmask(SIG_SETMASK, &oldset, NULL); - - cwd = NULL; - if (chdir(wp->cwd) == 0) - cwd = wp->cwd; - else if ((home = find_home()) != NULL && chdir(home) == 0) - cwd = home; - else - chdir("/"); - - if (tcgetattr(STDIN_FILENO, &tio2) != 0) - fatal("tcgetattr failed"); - if (tio != NULL) - memcpy(tio2.c_cc, tio->c_cc, sizeof tio2.c_cc); - tio2.c_cc[VERASE] = '\177'; - if (tcsetattr(STDIN_FILENO, TCSANOW, &tio2) != 0) - fatal("tcgetattr failed"); - - log_close(); - closefrom(STDERR_FILENO + 1); - - if (path != NULL) - environ_set(env, "PATH", "%s", path); - if (cwd != NULL) - environ_set(env, "PWD", "%s", cwd); - environ_set(env, "TMUX_PANE", "%%%u", wp->id); - environ_push(env); - - setenv("SHELL", wp->shell, 1); - ptr = strrchr(wp->shell, '/'); - - /* - * If given one argument, assume it should be passed to sh -c; - * with more than one argument, use execvp(). If there is no - * arguments, create a login shell. - */ - if (wp->argc > 0) { - if (wp->argc != 1) { - /* Copy to ensure argv ends in NULL. */ - argvp = cmd_copy_argv(wp->argc, wp->argv); - execvp(argvp[0], argvp); - fatal("execvp failed"); - } - first = wp->argv[0]; - - if (ptr != NULL && *(ptr + 1) != '\0') - xasprintf(&argv0, "%s", ptr + 1); - else - xasprintf(&argv0, "%s", wp->shell); - execl(wp->shell, argv0, "-c", first, (char *)NULL); - fatal("execl failed"); - } - if (ptr != NULL && *(ptr + 1) != '\0') - xasprintf(&argv0, "-%s", ptr + 1); - else - xasprintf(&argv0, "-%s", wp->shell); - execl(wp->shell, argv0, (char *)NULL); - fatal("execl failed"); - } - log_debug("%s: master=%s", __func__, ttyname(wp->fd)); - log_debug("%s: slave=%s", __func__, wp->tty); - - sigprocmask(SIG_SETMASK, &oldset, NULL); - setblocking(wp->fd, 0); - - wp->event = bufferevent_new(wp->fd, window_pane_read_callback, NULL, - window_pane_error_callback, wp); - if (wp->event == NULL) - fatalx("out of memory"); - - wp->pipe_off = 0; - wp->flags &= ~PANE_EXITED; - - bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); - bufferevent_enable(wp->event, EV_READ|EV_WRITE); - - free(cmd); - return (0); -} - static void window_pane_read_callback(__unused struct bufferevent *bufev, void *data) { @@ -1056,6 +885,18 @@ window_pane_error_callback(__unused struct bufferevent *bufev, server_destroy_pane(wp, 1); } +void +window_pane_set_event(struct window_pane *wp) +{ + setblocking(wp->fd, 0); + + wp->event = bufferevent_new(wp->fd, window_pane_read_callback, + NULL, window_pane_error_callback, wp); + + bufferevent_setwatermark(wp->event, EV_READ, 0, READ_SIZE); + bufferevent_enable(wp->event, EV_READ|EV_WRITE); +} + void window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) { @@ -1604,6 +1445,8 @@ winlink_shuffle_up(struct session *s, struct winlink *wl) { int idx, last; + if (wl == NULL) + return (-1); idx = wl->idx + 1; /* Find the next free index. */ From 5943cd1907d20381c527d4b3b338df090cbbb1de Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:39:37 +0000 Subject: [PATCH 432/836] Document that switch-client can change all of session,window,pane and check for % in the target as well as ":.". --- cmd-switch-client.c | 2 +- tmux.1 | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd-switch-client.c b/cmd-switch-client.c index a4f55102c4..8f51d0fe3c 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -61,7 +61,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL) return (CMD_RETURN_ERROR); - if (tflag != NULL && tflag[strcspn(tflag, ":.")] != '\0') { + if (tflag != NULL && tflag[strcspn(tflag, ":.%")] != '\0') { type = CMD_FIND_PANE; flags = 0; } else { diff --git a/tmux.1 b/tmux.1 index 54404b8096..0d4a17ebe2 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1053,6 +1053,14 @@ Switch the current session for client .Ar target-client to .Ar target-session . +As a special case, +.Fl t +may refer to a pane (a target that contains +.Ql : , +.Ql . +or +.Ql % ) +in which case the session, window and pane are all changed. If .Fl l , .Fl n From e3b1358bbc616c1ba95414d6102c23bfcaa37687 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:41:08 +0000 Subject: [PATCH 433/836] Do not let the size of the pane status screen go negative. --- screen-redraw.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/screen-redraw.c b/screen-redraw.c index 691b219439..0ce3374d45 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -290,7 +290,10 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, format_defaults(ft, c, NULL, NULL, wp); expanded = format_expand_time(ft, fmt); - wp->status_size = width = wp->sx - 4; + if (wp->sx < 4) + wp->status_size = width = 0; + else + wp->status_size = width = wp->sx - 4; memcpy(&old, &wp->status_screen, sizeof old); screen_init(&wp->status_screen, width, 1, 0); From c660e46149d606bd5e52941081cbe155e493768b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:43:49 +0000 Subject: [PATCH 434/836] Set the window size as well as the layout size when using the preset layouts. --- cmd-select-layout.c | 1 + layout-set.c | 29 +++++++++++++++++++++++++---- layout.c | 4 ++-- resize.c | 2 ++ tty.c | 3 +-- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/cmd-select-layout.c b/cmd-select-layout.c index d8fc1aebfa..775d32c5f9 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -135,6 +135,7 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item) changed: free(oldlayout); + recalculate_sizes(); server_redraw_window(w); notify_window("window-layout-changed", w); return (CMD_RETURN_NORMAL); diff --git a/layout-set.c b/layout-set.c index d99453c255..97315964d9 100644 --- a/layout-set.c +++ b/layout-set.c @@ -119,7 +119,7 @@ layout_set_even(struct window *w, enum layout_type type) { struct window_pane *wp; struct layout_cell *lc, *lcnew; - u_int n; + u_int n, sx, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -131,7 +131,18 @@ layout_set_even(struct window *w, enum layout_type type) /* Free the old root and construct a new. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + if (type == LAYOUT_LEFTRIGHT) { + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; + sy = w->sy; + } else { + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; + sx = w->sx; + } + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, type); /* Build new leaf cells. */ @@ -152,6 +163,7 @@ layout_set_even(struct window *w, enum layout_type type) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -288,6 +300,7 @@ layout_set_main_h(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -412,6 +425,7 @@ layout_set_main_v(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -421,7 +435,7 @@ layout_set_tiled(struct window *w) { struct window_pane *wp; struct layout_cell *lc, *lcrow, *lcchild; - u_int n, width, height, used; + u_int n, width, height, used, sx, sy; u_int i, j, columns, rows; layout_print_cell(w->layout_root, __func__, 1); @@ -450,7 +464,13 @@ layout_set_tiled(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, w->sy, 0, 0); + sx = ((width + 1) * columns) - 1; + if (sx < w->sx) + sx = w->sx; + sy = ((height + 1) * rows) - 1; + if (sy < w->sy) + sy = w->sy; + layout_set_size(lc, sx, sy, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create a grid of the cells. */ @@ -514,6 +534,7 @@ layout_set_tiled(struct window *w) layout_print_cell(w->layout_root, __func__, 1); + window_resize(w, lc->sx, lc->sy); notify_window("window-layout-changed", w); server_redraw_window(w); } diff --git a/layout.c b/layout.c index 1a43014dfa..b825ee528a 100644 --- a/layout.c +++ b/layout.c @@ -479,7 +479,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) * out proportionately - this should leave the layout fitting the new * window size. */ - xchange = sx - w->sx; + xchange = sx - lc->sx; xlimit = layout_resize_check(w, lc, LAYOUT_LEFTRIGHT); if (xchange < 0 && xchange < -xlimit) xchange = -xlimit; @@ -493,7 +493,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, xchange); /* Adjust vertically in a similar fashion. */ - ychange = sy - w->sy; + ychange = sy - lc->sy; ylimit = layout_resize_check(w, lc, LAYOUT_TOPBOTTOM); if (ychange < 0 && ychange < -ylimit) ychange = -ylimit; diff --git a/resize.c b/resize.c index 868ddac817..caac74baca 100644 --- a/resize.c +++ b/resize.c @@ -51,6 +51,8 @@ resize_window(struct window *w, u_int sx, u_int sy) if (sy < w->layout_root->sy) sy = w->layout_root->sy; window_resize(w, sx, sy); + log_debug("%s: @%u resized to %u,%u; layout %u,%u", __func__, w->id, + sx, sy, w->layout_root->sx, w->layout_root->sy); /* Restore the window zoom state. */ if (zoomed) diff --git a/tty.c b/tty.c index 855f8e6a5b..9ed2b3a9dc 100644 --- a/tty.c +++ b/tty.c @@ -907,9 +907,8 @@ tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, lines = 0; if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx || - yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) { + yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) return (0); - } return (1); } From da31eddadc0c70875cd261d8925e4346c3e26590 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:44:14 +0000 Subject: [PATCH 435/836] Rewrite main-vertical and horizontal to use the common spread out code and to handle the case where the panes won't fit into the existing window size. --- layout-set.c | 246 ++++++++++++++++----------------------------------- 1 file changed, 76 insertions(+), 170 deletions(-) diff --git a/layout-set.c b/layout-set.c index 97315964d9..504d9630dc 100644 --- a/layout-set.c +++ b/layout-set.c @@ -184,9 +184,8 @@ static void layout_set_main_h(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lcrow, *lcchild; - u_int n, mainheight, otherheight, width, height; - u_int used, i, j, columns, rows, totalrows; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainh, otherh, sx; layout_print_cell(w->layout_root, __func__, 1); @@ -196,103 +195,57 @@ layout_set_main_h(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - columns = (w->sx + 1) / (PANE_MINIMUM + 1); /* maximum columns */ - if (columns == 0) - columns = 1; - rows = 1 + (n - 1) / columns; - columns = 1 + (n - 1) / rows; - width = (w->sx - (n - 1)) / columns; - - /* Get the main pane height and add one for separator line. */ - mainheight = options_get_number(w->options, "main-pane-height") + 1; - - /* Get the optional other pane height and add one for separator line. */ - otherheight = options_get_number(w->options, "other-pane-height") + 1; - - /* - * If an other pane height was specified, honour it so long as it - * doesn't shrink the main height to less than the main-pane-height - */ - if (otherheight > 1 && w->sy - otherheight > mainheight) - mainheight = w->sy - otherheight; - if (mainheight < PANE_MINIMUM + 1) - mainheight = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalrows = rows * (PANE_MINIMUM + 1) - 1; - if (mainheight + totalrows > w->sy) { - if (totalrows + PANE_MINIMUM + 1 > w->sy) - mainheight = PANE_MINIMUM + 2; + /* Get the main pane height and work out the other pane height. */ + mainh = options_get_number(w->options, "main-pane-height"); + if (mainh + PANE_MINIMUM + 1 >= w->sy) { + if (w->sy <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainh = PANE_MINIMUM; else - mainheight = w->sy - totalrows; - height = PANE_MINIMUM; - } else - height = (w->sy - mainheight - (rows - 1)) / rows; + mainh = w->sy - (PANE_MINIMUM + 1); + otherh = PANE_MINIMUM; + } else { + otherh = options_get_number(w->options, "other-pane-height"); + if (otherh == 0) + otherh = w->sy - mainh; + else if (otherh > w->sy || w->sy - otherh < mainh) + otherh = w->sy - mainh; + else + mainh = w->sy - otherh; + } + + /* Work out what height is needed. */ + sx = (n * (PANE_MINIMUM + 1)) - 1; + if (sx < w->sx) + sx = w->sx; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, w->sx, mainheight + rows * (height + 1) - 1, 0, 0); + layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, w->sx, mainheight - 1, 0, 0); + layout_set_size(lcmain, sx, mainh, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < rows; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, sx, otherh, 0, 0); + layout_make_node(lcother, LAYOUT_LEFTRIGHT); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* Create the new row. */ - lcrow = layout_create_cell(lc); - layout_set_size(lcrow, w->sx, height, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lcrow, entry); - - /* If only one column, just use the row directly. */ - if (columns == 1) { - layout_make_leaf(lcrow, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the columns. */ - layout_make_node(lcrow, LAYOUT_LEFTRIGHT); - for (i = 0; i < columns; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lcrow); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry); - - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } - - /* Adjust the row to fit the full width if necessary. */ - if (i == columns) - i--; - used = ((i + 1) * (width + 1)) - 1; - if (w->sx <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lcrow->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_LEFTRIGHT, - w->sx - used); - } - - /* Adjust the last row height to fit if necessary. */ - used = mainheight + (rows * height) + rows - 1; - if (w->sy > used) { - lcrow = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lcrow, LAYOUT_TOPBOTTOM, - w->sy - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -309,9 +262,8 @@ static void layout_set_main_v(struct window *w) { struct window_pane *wp; - struct layout_cell *lc, *lcmain, *lccolumn, *lcchild; - u_int n, mainwidth, otherwidth, width, height; - u_int used, i, j, columns, rows, totalcolumns; + struct layout_cell *lc, *lcmain, *lcother, *lcchild; + u_int n, mainw, otherw, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -321,103 +273,57 @@ layout_set_main_v(struct window *w) return; n--; /* take off main pane */ - /* How many rows and columns will be needed, not counting main? */ - rows = (w->sy + 1) / (PANE_MINIMUM + 1); /* maximum rows */ - if (rows == 0) - rows = 1; - columns = 1 + (n - 1) / rows; - rows = 1 + (n - 1) / columns; - height = (w->sy - (n - 1)) / rows; - - /* Get the main pane width and add one for separator line. */ - mainwidth = options_get_number(w->options, "main-pane-width") + 1; - - /* Get the optional other pane width and add one for separator line. */ - otherwidth = options_get_number(w->options, "other-pane-width") + 1; - - /* - * If an other pane width was specified, honour it so long as it - * doesn't shrink the main width to less than the main-pane-width - */ - if (otherwidth > 1 && w->sx - otherwidth > mainwidth) - mainwidth = w->sx - otherwidth; - if (mainwidth < PANE_MINIMUM + 1) - mainwidth = PANE_MINIMUM + 1; - - /* Try and make everything fit. */ - totalcolumns = columns * (PANE_MINIMUM + 1) - 1; - if (mainwidth + totalcolumns > w->sx) { - if (totalcolumns + PANE_MINIMUM + 1 > w->sx) - mainwidth = PANE_MINIMUM + 2; + /* Get the main pane width and work out the other pane width. */ + mainw = options_get_number(w->options, "main-pane-width"); + if (mainw + PANE_MINIMUM + 1 >= w->sx) { + if (w->sx <= PANE_MINIMUM + 1 + PANE_MINIMUM) + mainw = PANE_MINIMUM; else - mainwidth = w->sx - totalcolumns; - width = PANE_MINIMUM; - } else - width = (w->sx - mainwidth - (columns - 1)) / columns; + mainw = w->sx - (PANE_MINIMUM + 1); + otherw = PANE_MINIMUM; + } else { + otherw = options_get_number(w->options, "other-pane-width"); + if (otherw == 0) + otherw = w->sx - mainw; + else if (otherw > w->sx || w->sx - otherw < mainw) + otherw = w->sx - mainw; + else + mainw = w->sx - otherw; + } + + /* Work out what height is needed. */ + sy = (n * (PANE_MINIMUM + 1)) - 1; + if (sy < w->sy) + sy = w->sy; /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainwidth + columns * (width + 1) - 1, w->sy, 0, 0); + layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ lcmain = layout_create_cell(lc); - layout_set_size(lcmain, mainwidth - 1, w->sy, 0, 0); + layout_set_size(lcmain, mainw, sy, 0, 0); layout_make_leaf(lcmain, TAILQ_FIRST(&w->panes)); TAILQ_INSERT_TAIL(&lc->cells, lcmain, entry); - /* Create a grid of the remaining cells. */ - wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); - for (j = 0; j < columns; j++) { - /* If this is the last cell, all done. */ - if (wp == NULL) - break; - - /* Create the new column. */ - lccolumn = layout_create_cell(lc); - layout_set_size(lccolumn, width, w->sy, 0, 0); - TAILQ_INSERT_TAIL(&lc->cells, lccolumn, entry); - - /* If only one row, just use the row directly. */ - if (rows == 1) { - layout_make_leaf(lccolumn, wp); - wp = TAILQ_NEXT(wp, entry); - continue; - } - - /* Add in the rows. */ - layout_make_node(lccolumn, LAYOUT_TOPBOTTOM); - for (i = 0; i < rows; i++) { - /* Create and add a pane cell. */ - lcchild = layout_create_cell(lccolumn); - layout_set_size(lcchild, width, height, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lccolumn->cells, lcchild, entry); - - /* Move to the next cell. */ - if ((wp = TAILQ_NEXT(wp, entry)) == NULL) - break; - } + /* Create the other pane. */ + lcother = layout_create_cell(lc); + layout_set_size(lcother, otherw, sy, 0, 0); + layout_make_node(lcother, LAYOUT_TOPBOTTOM); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - /* Adjust the column to fit the full height if necessary. */ - if (i == rows) - i--; - used = ((i + 1) * (height + 1)) - 1; - if (w->sy <= used) + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) continue; - lcchild = TAILQ_LAST(&lccolumn->cells, layout_cells); - layout_resize_adjust(w, lcchild, LAYOUT_TOPBOTTOM, - w->sy - used); - } - - /* Adjust the last column width to fit if necessary. */ - used = mainwidth + (columns * width) + columns - 1; - if (w->sx > used) { - lccolumn = TAILQ_LAST(&lc->cells, layout_cells); - layout_resize_adjust(w, lccolumn, LAYOUT_LEFTRIGHT, - w->sx - used); + lcchild = layout_create_cell(lc); + layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); } + layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); From 1fd3b9ec1c61c96c6cd86f81a50470f4428eeafe Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Apr 2019 14:44:33 +0000 Subject: [PATCH 436/836] Fix minimum size check on split and size of first cell on spread out with a pane status line. --- layout.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/layout.c b/layout.c index b825ee528a..f974e10d7b 100644 --- a/layout.c +++ b/layout.c @@ -834,9 +834,9 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, int flags) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; - u_int sx, sy, xoff, yoff, size1, size2; + u_int sx, sy, xoff, yoff, size1, size2, minimum; u_int new_size, saved_size, resize_first = 0; - int full_size = (flags & SPAWN_FULLSIZE); + int full_size = (flags & SPAWN_FULLSIZE), status; /* * If full_size is specified, add a new cell at the top of the window @@ -846,6 +846,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, lc = wp->window->layout_root; else lc = wp->layout_cell; + status = options_get_number(wp->window->options, "pane-border-status"); /* Copy the old cell size. */ sx = lc->sx; @@ -860,7 +861,10 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, return (NULL); break; case LAYOUT_TOPBOTTOM: - if (sy < PANE_MINIMUM * 2 + 1) + minimum = PANE_MINIMUM * 2 + 1; + if (status != 0) + minimum += layout_need_status(lc, status == 1); + if (sy < minimum) return (NULL); break; default: @@ -1012,22 +1016,29 @@ int layout_spread_cell(struct window *w, struct layout_cell *parent) { struct layout_cell *lc; - u_int number, each, size; - int change, changed; + u_int number, each, size, this; + int change, changed, status; number = 0; TAILQ_FOREACH (lc, &parent->cells, entry) number++; if (number <= 1) return (0); + status = options_get_number(w->options, "pane-border-status"); if (parent->type == LAYOUT_LEFTRIGHT) size = parent->sx; - else if (parent->type == LAYOUT_TOPBOTTOM) + else if (parent->type == LAYOUT_TOPBOTTOM) { size = parent->sy; - else + if (status != 0) + size -= layout_need_status(parent, status == 1); + } else + return (0); + if (size < number - 1) return (0); each = (size - (number - 1)) / number; + if (each == 0) + return (0); changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { @@ -1038,7 +1049,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) change = each - (int)lc->sx; layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { - change = each - (int)lc->sy; + this = each; + if (status != 0) + this += layout_need_status(lc, status == 1); + change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } if (change != 0) From 2219f7cc73abc20407739e27ef191df393142795 Mon Sep 17 00:00:00 2001 From: jmc Date: Wed, 17 Apr 2019 16:34:35 +0000 Subject: [PATCH 437/836] mark up punctuation-as-macro-args properly; --- tmux.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tmux.1 b/tmux.1 index 0d4a17ebe2..28fa5fbc48 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1056,10 +1056,10 @@ to As a special case, .Fl t may refer to a pane (a target that contains -.Ql : , -.Ql . +.Ql \&: , +.Ql \&. or -.Ql % ) +.Ql % ) , in which case the session, window and pane are all changed. If .Fl l , From f3ab05e7cd9287d1e4be9a122687f568a8ef1f05 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Apr 2019 10:11:52 +0000 Subject: [PATCH 438/836] Update session activity on focus event, from tafryn at gmail dot com. --- server-client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/server-client.c b/server-client.c index 3aa159c337..4cd5be745b 100644 --- a/server-client.c +++ b/server-client.c @@ -1369,6 +1369,7 @@ server_client_check_focus(struct window_pane *wp) if (wp->base.mode & MODE_FOCUSON) bufferevent_write(wp->event, "\033[I", 3); notify_pane("pane-focus-in", wp); + session_update_activity(c->session, NULL); } wp->flags |= PANE_FOCUSED; } From 3f189945d8838f98920a6d24a838bc8614ace636 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Apr 2019 11:07:28 +0000 Subject: [PATCH 439/836] Pass target client and session to load_cfg from source-file so formats work. Reported by Thomas Sattler. --- cfg.c | 30 +++++++++++++++++++++--------- screen-write.c | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/cfg.c b/cfg.c index 1a7e4375cf..0eadb6c327 100644 --- a/cfg.c +++ b/cfg.c @@ -116,7 +116,8 @@ start_cfg(void) } static int -cfg_check_condition(const char *path, size_t line, const char *p, int *skip) +cfg_check_cond(const char *path, size_t line, const char *p, int *skip, + struct client *c, struct cmd_find_state *fs) { struct format_tree *ft; char *s; @@ -131,6 +132,10 @@ cfg_check_condition(const char *path, size_t line, const char *p, int *skip) } ft = format_create(NULL, NULL, FORMAT_NONE, FORMAT_NOJOBS); + if (fs != NULL) + format_defaults(ft, c, fs->s, fs->wl, fs->wp); + else + format_defaults(ft, c, NULL, NULL, NULL); s = format_expand(ft, p); result = format_true(s); free(s); @@ -142,7 +147,7 @@ cfg_check_condition(const char *path, size_t line, const char *p, int *skip) static void cfg_handle_if(const char *path, size_t line, struct cfg_conds *conds, - const char *p) + const char *p, struct client *c, struct cmd_find_state *fs) { struct cfg_cond *cond; struct cfg_cond *parent = TAILQ_FIRST(conds); @@ -154,7 +159,7 @@ cfg_handle_if(const char *path, size_t line, struct cfg_conds *conds, cond = xcalloc(1, sizeof *cond); cond->line = line; if (parent == NULL || parent->met) - cond->met = cfg_check_condition(path, line, p, &cond->skip); + cond->met = cfg_check_cond(path, line, p, &cond->skip, c, fs); else cond->skip = 1; cond->saw_else = 0; @@ -163,7 +168,7 @@ cfg_handle_if(const char *path, size_t line, struct cfg_conds *conds, static void cfg_handle_elif(const char *path, size_t line, struct cfg_conds *conds, - const char *p) + const char *p, struct client *c, struct cmd_find_state *fs) { struct cfg_cond *cond = TAILQ_FIRST(conds); @@ -174,7 +179,7 @@ cfg_handle_elif(const char *path, size_t line, struct cfg_conds *conds, if (cond == NULL || cond->saw_else) cfg_add_cause("%s:%zu: unexpected %%elif", path, line); else if (!cond->skip) - cond->met = cfg_check_condition(path, line, p, &cond->skip); + cond->met = cfg_check_cond(path, line, p, &cond->skip, c, fs); else cond->met = 0; } @@ -215,16 +220,16 @@ cfg_handle_endif(const char *path, size_t line, struct cfg_conds *conds) static void cfg_handle_directive(const char *p, const char *path, size_t line, - struct cfg_conds *conds) + struct cfg_conds *conds, struct client *c, struct cmd_find_state *fs) { int n = 0; while (p[n] != '\0' && !isspace((u_char)p[n])) n++; if (strncmp(p, "%if", n) == 0) - cfg_handle_if(path, line, conds, p + n); + cfg_handle_if(path, line, conds, p + n, c, fs); else if (strncmp(p, "%elif", n) == 0) - cfg_handle_elif(path, line, conds, p + n); + cfg_handle_elif(path, line, conds, p + n, c, fs); else if (strcmp(p, "%else") == 0) cfg_handle_else(path, line, conds); else if (strcmp(p, "%endif") == 0) @@ -245,6 +250,13 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) struct cmdq_item *new_item; struct cfg_cond *cond, *cond1; struct cfg_conds conds; + struct cmd_find_state *fs = NULL; + struct client *fc = NULL; + + if (item != NULL) { + fs = &item->target; + fc = cmd_find_client(item, NULL, 1); + } TAILQ_INIT(&conds); @@ -271,7 +283,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) *q-- = '\0'; if (*p == '%') { - cfg_handle_directive(p, path, line, &conds); + cfg_handle_directive(p, path, line, &conds, fc, fs); continue; } cond = TAILQ_FIRST(&conds); diff --git a/screen-write.c b/screen-write.c index 566d4d1455..237b63593c 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1139,7 +1139,7 @@ screen_write_collect_clear(struct screen_write_ctx *ctx, u_int y, u_int n) u_int i; size_t size; - for (i = y ; i < y + n; i++) { + for (i = y; i < y + n; i++) { if (TAILQ_EMPTY(&ctx->list[i].items)) continue; size = 0; From 5b9211d827dec53c8a90f35846ff52d663d4c0d1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 18 Apr 2019 12:22:07 +0000 Subject: [PATCH 440/836] Copy the code to infer the option type to show-options and document it. --- cmd-show-options.c | 130 ++++++++++++++++++++++++++++----------------- tmux.1 | 17 ++++++ 2 files changed, 99 insertions(+), 48 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 79bb6c54b9..b8b9a9bd1e 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -30,8 +30,8 @@ static enum cmd_retval cmd_show_options_exec(struct cmd *, struct cmdq_item *); -static enum cmd_retval cmd_show_options_one(struct cmd *, struct cmdq_item *, - struct options *); +static void cmd_show_options_print(struct cmd *, struct cmdq_item *, + struct options_entry *, int); static enum cmd_retval cmd_show_options_all(struct cmd *, struct cmdq_item *, struct options *); @@ -66,23 +66,95 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct cmd_find_state *fs = &item->target; + struct client *c = cmd_find_client(item, NULL, 1); + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; struct options *oo; enum options_table_scope scope; - char *cause; - int window; + char *argument, *name = NULL, *cause; + const char *target; + int window, idx, ambiguous; + struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); - scope = options_scope_from_flags(args, window, fs, &oo, &cause); + if (args->argc == 0) { + scope = options_scope_from_flags(args, window, fs, &oo, &cause); + return (cmd_show_options_all(self, item, oo)); + } + argument = format_single(item, args->argv[0], c, s, wl, NULL); + + name = options_match(argument, &idx, &ambiguous); + if (name == NULL) { + if (args_has(args, 'q')) + goto fail; + if (ambiguous) + cmdq_error(item, "ambiguous option: %s", argument); + else + cmdq_error(item, "invalid option: %s", argument); + goto fail; + } + if (*name == '@') + scope = options_scope_from_flags(args, window, fs, &oo, &cause); + else { + if (options_get_only(global_options, name) != NULL) + scope = OPTIONS_TABLE_SERVER; + else if (options_get_only(global_s_options, name) != NULL) + scope = OPTIONS_TABLE_SESSION; + else if (options_get_only(global_w_options, name) != NULL) + scope = OPTIONS_TABLE_WINDOW; + else { + scope = OPTIONS_TABLE_NONE; + xasprintf(&cause, "unknown option: %s", argument); + } + if (scope == OPTIONS_TABLE_SERVER) + oo = global_options; + else if (scope == OPTIONS_TABLE_SESSION) { + if (args_has(self->args, 'g')) + oo = global_s_options; + else if (s == NULL) { + target = args_get(args, 't'); + if (target != NULL) { + cmdq_error(item, "no such session: %s", + target); + } else + cmdq_error(item, "no current session"); + goto fail; + } else + oo = s->options; + } else if (scope == OPTIONS_TABLE_WINDOW) { + if (args_has(self->args, 'g')) + oo = global_w_options; + else if (wl == NULL) { + target = args_get(args, 't'); + if (target != NULL) { + cmdq_error(item, "no such window: %s", + target); + } else + cmdq_error(item, "no current window"); + goto fail; + } else + oo = wl->window->options; + } + } if (scope == OPTIONS_TABLE_NONE) { + if (args_has(args, 'q')) + goto fail; cmdq_error(item, "%s", cause); free(cause); - return (CMD_RETURN_ERROR); + goto fail; } + o = options_get_only(oo, name); + if (o != NULL) + cmd_show_options_print(self, item, o, idx); - if (args->argc == 0) - return (cmd_show_options_all(self, item, oo)); - else - return (cmd_show_options_one(self, item, oo)); + free(name); + free(argument); + return (CMD_RETURN_NORMAL); + +fail: + free(name); + free(argument); + return (CMD_RETURN_ERROR); } static void @@ -123,44 +195,6 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, free(tmp); } -static enum cmd_retval -cmd_show_options_one(struct cmd *self, struct cmdq_item *item, - struct options *oo) -{ - struct args *args = self->args; - struct client *c = cmd_find_client(item, NULL, 1); - struct session *s = item->target.s; - struct winlink *wl = item->target.wl; - struct options_entry *o; - int idx, ambiguous; - char *name; - - name = format_single(item, args->argv[0], c, s, wl, NULL); - o = options_match_get(oo, name, &idx, 1, &ambiguous); - if (o == NULL) { - if (args_has(args, 'q')) { - free(name); - return (CMD_RETURN_NORMAL); - } - if (ambiguous) { - cmdq_error(item, "ambiguous option: %s", name); - free(name); - return (CMD_RETURN_ERROR); - } - if (*name != '@' && - options_match_get(oo, name, &idx, 0, &ambiguous) != NULL) { - free(name); - return (CMD_RETURN_NORMAL); - } - cmdq_error(item, "unknown option: %s", name); - free(name); - return (CMD_RETURN_ERROR); - } - cmd_show_options_print(self, item, o, idx); - free(name); - return (CMD_RETURN_NORMAL); -} - static enum cmd_retval cmd_show_options_all(struct cmd *self, struct cmdq_item *item, struct options *oo) diff --git a/tmux.1 b/tmux.1 index 28fa5fbc48..73fb486539 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2488,9 +2488,17 @@ command), a server option with .Fl s , otherwise a session option. +If the option is not a user option, +.Fl w +and +.Fl s +are unnecessary - +.Nm +will infer the type from the option name. If .Fl g is given, the global session or window option is set. +.Pp .Fl F expands formats in the option value. The @@ -3384,6 +3392,15 @@ the server options with .Fl s , otherwise the session options for .Ar target session . +If +.Ar option +is given and is not a user option, +.Fl w +and +.Fl s +are unnecessary - +.Nm +will infer the type from the option name. Global session or window options are listed if .Fl g is used. From e7827f8bc25e2051e6ed6ae3b5a5fba2cddb7ac0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 18 Apr 2019 14:16:19 +0100 Subject: [PATCH 441/836] Remove duplicate entry. --- Makefile.am | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 573868cc4c..942a9e28a9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -163,7 +163,6 @@ dist_tmux_SOURCES = \ spawn.c \ status.c \ style.c \ - spawn.c \ tmux.c \ tmux.h \ tty-acs.c \ From 8d752f5aaaee1a20d37f8df90f361550fecd6427 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 18 Apr 2019 22:11:46 +0100 Subject: [PATCH 442/836] Update CHANGES. --- CHANGES | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGES b/CHANGES index 3fefa19296..87097f9efb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,10 +1,28 @@ CHANGES FROM 2.9 to X.X +* Add an argument to copy commands to set the prefix for the buffer name, this + (for example) allows buffers for different sessions to be named separately. + +* Update session activity on focus event. + +* Pass target from source-file into the config file parser so formats in %if + and %endif have access to more useful variables. + +* Add the ability to infer an option type (server, session, window) from its + name to show-options (it was already present in set-option). + * Allow the prefix used for new buffer names to be given as an argument to the copy commands in copy mode. CHANGES FROM 2.8 to 2.9 +* Attempt to preserve horizontal cursor position as well as vertical with + reflow. + +* Rewrite main-vertical and horizontal and change layouts to better handle the + case where all panes won't fit into the window size, reduce problems with + pane border status lines and fix other bugs mostly found by Thomas Sattler. + * Add format variables for the default formats in the various modes (tree_mode_format and so on) and add a -a flag to display-message to list variables with values. From d24a44230acf6447ae39347f3c5a27727c1ca4ab Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 18 Apr 2019 22:12:15 +0100 Subject: [PATCH 443/836] Update CHANGES for 2.9. --- CHANGES | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 6489c91370..e78921fe42 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,12 @@ CHANGES FROM 2.8 to 2.9 +* Attempt to preserve horizontal cursor position as well as vertical with + reflow. + +* Rewrite main-vertical and horizontal and change layouts to better handle the + case where all panes won't fit into the window size, reduce problems with + pane border status lines and fix other bugs mostly found by Thomas Sattler. + * Add format variables for the default formats in the various modes (tree_mode_format and so on) and add a -a flag to display-message to list variables with values. @@ -19,7 +26,7 @@ CHANGES FROM 2.8 to 2.9 Now that it is possible to configure their content, enable the existing code that lets the status line be multiple lines in height. The status option can - now take a value of 2, 3, 4 or 5 (as well as the previou s on or off) to + now take a value of 2, 3, 4 or 5 (as well as the previous on or off) to configure more than one line. The new status-format array option configures the format of each line, the default just references the existing status-* options, although some of the more obscure status options may be eliminated @@ -42,8 +49,6 @@ CHANGES FROM 2.8 to 2.9 and retrieved if the same mode is entered again. Exiting the active mode goes back to the previous one. -* Add support for origin mode. - * When showing command output in copy mode, call it view mode instead (affects pane_mode format). From 6752f41c2a5ddfe2ac41ffd6a658a0f387b75804 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 23 Apr 2019 09:15:24 +0000 Subject: [PATCH 444/836] Do not try to resize if the parent cell is NULL, problem reported by Sunil Nimmagadda. --- layout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/layout.c b/layout.c index f974e10d7b..86d307ef3a 100644 --- a/layout.c +++ b/layout.c @@ -414,9 +414,9 @@ layout_destroy_cell(struct window *w, struct layout_cell *lc, lcother = TAILQ_NEXT(lc, entry); else lcother = TAILQ_PREV(lc, layout_cells, entry); - if (lcparent->type == LAYOUT_LEFTRIGHT) + if (lcother != NULL && lcparent->type == LAYOUT_LEFTRIGHT) layout_resize_adjust(w, lcother, lcparent->type, lc->sx + 1); - else + else if (lcother != NULL) layout_resize_adjust(w, lcother, lcparent->type, lc->sy + 1); /* Remove this from the parent's list. */ From 564e44adc6816282cd40d59d1bc642937e53dc54 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 23 Apr 2019 09:39:07 +0000 Subject: [PATCH 445/836] Add -no-clear variants of copy-selection and copy-pipe which do not clear the selection after copying. Make copy-pipe clear the selection by default to be consistent with copy-selection. From Avi Halachmi. --- tmux.1 | 4 ++++ window-copy.c | 63 ++++++++++++++++++++++++--------------------------- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/tmux.1 b/tmux.1 index 73fb486539..3010abc55a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1143,8 +1143,10 @@ The following commands are supported in copy mode: .It Li "copy-end-of-line []" Ta "D" Ta "C-k" .It Li "copy-line []" Ta "" Ta "" .It Li "copy-pipe []" Ta "" Ta "" +.It Li "copy-pipe-no-clear []" Ta "" Ta "" .It Li "copy-pipe-and-cancel []" Ta "" Ta "" .It Li "copy-selection []" Ta "" Ta "" +.It Li "copy-selection-no-clear []" Ta "" Ta "" .It Li "copy-selection-and-cancel []" Ta "Enter" Ta "M-w" .It Li "cursor-down" Ta "j" Ta "Down" .It Li "cursor-left" Ta "h" Ta "Left" @@ -1206,6 +1208,8 @@ The .Ql -and-cancel variants of some commands exit copy mode after they have completed (for copy commands) or when the cursor reaches the bottom (for scrolling commands). +.Ql -no-clear +variants do not clear the selection. .Pp The next and previous word keys use space and the .Ql - , diff --git a/window-copy.c b/window-copy.c index aacea5c5e4..53dd97d373 100644 --- a/window-copy.c +++ b/window-copy.c @@ -734,7 +734,7 @@ window_copy_cmd_copy_line(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_selection_no_clear(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; @@ -748,9 +748,18 @@ window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) if (s != NULL) window_copy_copy_selection(wme, prefix); - window_copy_clear_selection(wme); free(prefix); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_cmd_copy_selection_no_clear(cs); + window_copy_clear_selection(wme); return (WINDOW_COPY_CMD_REDRAW); } @@ -758,20 +767,9 @@ static enum window_copy_cmd_action window_copy_cmd_copy_selection_and_cancel(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; - struct client *c = cs->c; - struct session *s = cs->s; - struct winlink *wl = cs->wl; - struct window_pane *wp = wme->wp; - char *prefix = NULL; - if (cs->args->argc == 2) - prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); - - if (s != NULL) - window_copy_copy_selection(wme, prefix); + window_copy_cmd_copy_selection_no_clear(cs); window_copy_clear_selection(wme); - - free(prefix); return (WINDOW_COPY_CMD_CANCEL); } @@ -1256,7 +1254,7 @@ window_copy_cmd_top_line(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_pipe_no_clear(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; @@ -1280,30 +1278,23 @@ window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; - struct client *c = cs->c; - struct session *s = cs->s; - struct winlink *wl = cs->wl; - struct window_pane *wp = wme->wp; - char *command = NULL; - char *prefix = NULL; - if (cs->args->argc == 3) - prefix = format_single(NULL, cs->args->argv[2], c, s, wl, wp); - - if (s != NULL && *cs->args->argv[1] != '\0') { - command = format_single(NULL, cs->args->argv[1], c, s, wl, wp); - window_copy_copy_pipe(wme, s, prefix, command); - free(command); + window_copy_cmd_copy_pipe_no_clear(cs); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} - free(prefix); - return (WINDOW_COPY_CMD_CANCEL); - } +static enum window_copy_cmd_action +window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; - free(prefix); - return (WINDOW_COPY_CMD_NOTHING); + window_copy_cmd_copy_pipe_no_clear(cs); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); } static enum window_copy_cmd_action @@ -1542,10 +1533,14 @@ static const struct { window_copy_cmd_copy_end_of_line }, { "copy-line", 0, 1, window_copy_cmd_copy_line }, + { "copy-pipe-no-clear", 1, 2, + window_copy_cmd_copy_pipe_no_clear }, { "copy-pipe", 1, 2, window_copy_cmd_copy_pipe }, { "copy-pipe-and-cancel", 1, 2, window_copy_cmd_copy_pipe_and_cancel }, + { "copy-selection-no-clear", 0, 1, + window_copy_cmd_copy_selection_no_clear }, { "copy-selection", 0, 1, window_copy_cmd_copy_selection }, { "copy-selection-and-cancel", 0, 1, From 772b3b7a06ceba64933cb3a9dfff61e56c229a74 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 23 Apr 2019 20:36:55 +0000 Subject: [PATCH 446/836] Indicate an array option with a flag rather than a special type so that in future will not have to be strings. --- cmd-set-option.c | 2 - cmd.c | 19 +++-- environ.c | 10 +-- options-table.c | 15 ++-- options.c | 209 ++++++++++++++++++++++++++--------------------- status.c | 8 +- tmux.h | 19 ++++- tty-term.c | 7 +- 8 files changed, 164 insertions(+), 125 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index 96428d7345..edeb838512 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -366,8 +366,6 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, return (-1); } return (0); - case OPTIONS_TABLE_ARRAY: - break; } return (-1); } diff --git a/cmd.c b/cmd.c index eace4bbd34..cf1f74960e 100644 --- a/cmd.c +++ b/cmd.c @@ -321,10 +321,11 @@ cmd_try_alias(int *argc, char ***argv) { struct options_entry *o; struct options_array_item *a; + union options_value *ov; int old_argc = *argc, new_argc, i; char **old_argv = *argv, **new_argv; size_t wanted; - const char *s, *cp = NULL; + const char *cp = NULL; o = options_get_only(global_options, "command-alias"); if (o == NULL) @@ -333,14 +334,16 @@ cmd_try_alias(int *argc, char ***argv) a = options_array_first(o); while (a != NULL) { - s = options_array_item_value(a); - if (s != NULL) { - cp = strchr(s, '='); - if (cp != NULL && - (size_t)(cp - s) == wanted && - strncmp(old_argv[0], s, wanted) == 0) - break; + ov = options_array_item_value(a); + if (ov == NULL) { + a = options_array_next(a); + continue; } + cp = strchr(ov->string, '='); + if (cp != NULL && + (size_t)(cp - ov->string) == wanted && + strncmp(old_argv[0], ov->string, wanted) == 0) + break; a = options_array_next(a); } if (a == NULL) diff --git a/environ.c b/environ.c index 2764e0274d..301c4f2977 100644 --- a/environ.c +++ b/environ.c @@ -177,20 +177,20 @@ environ_update(struct options *oo, struct environ *src, struct environ *dst) struct environ_entry *envent; struct options_entry *o; struct options_array_item *a; - const char *value; + union options_value *ov; o = options_get(oo, "update-environment"); if (o == NULL) return; a = options_array_first(o); while (a != NULL) { - value = options_array_item_value(a); - if (value == NULL) { + ov = options_array_item_value(a); + if (ov == NULL) { a = options_array_next(a); continue; } - if ((envent = environ_find(src, value)) == NULL) - environ_clear(dst, value); + if ((envent = environ_find(src, ov->string)) == NULL) + environ_clear(dst, ov->string); else environ_set(dst, envent->name, "%s", envent->value); a = options_array_next(a); diff --git a/options-table.c b/options-table.c index b30d749021..03e0dbad24 100644 --- a/options-table.c +++ b/options-table.c @@ -141,8 +141,9 @@ const struct options_table_entry options_table[] = { }, { .name = "command-alias", - .type = OPTIONS_TABLE_ARRAY, + .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SERVER, + .flags = OPTIONS_TABLE_IS_ARRAY, .default_str = "split-pane=split-window," "splitp=split-window," "server-info=show-messages -JT," @@ -206,8 +207,9 @@ const struct options_table_entry options_table[] = { }, { .name = "terminal-overrides", - .type = OPTIONS_TABLE_ARRAY, + .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SERVER, + .flags = OPTIONS_TABLE_IS_ARRAY, .default_str = "xterm*:XT:Ms=\\E]52;%p1%s;%p2%s\\007" ":Cs=\\E]12;%p1%s\\007:Cr=\\E]112\\007" ":Ss=\\E[%p1%d q:Se=\\E[2 q,screen*:XT", @@ -215,8 +217,9 @@ const struct options_table_entry options_table[] = { }, { .name = "user-keys", - .type = OPTIONS_TABLE_ARRAY, + .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SERVER, + .flags = OPTIONS_TABLE_IS_ARRAY, .default_str = "", .separator = "," }, @@ -421,8 +424,9 @@ const struct options_table_entry options_table[] = { }, { .name = "status-format", - .type = OPTIONS_TABLE_ARRAY, + .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SESSION, + .flags = OPTIONS_TABLE_IS_ARRAY, .default_arr = options_table_status_format_default, }, @@ -504,8 +508,9 @@ const struct options_table_entry options_table[] = { }, { .name = "update-environment", - .type = OPTIONS_TABLE_ARRAY, + .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SESSION, + .flags = OPTIONS_TABLE_IS_ARRAY, .default_str = "DISPLAY KRB5CCNAME SSH_ASKPASS SSH_AUTH_SOCK " "SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY" }, diff --git a/options.c b/options.c index 369776e30d..0b13bca0b3 100644 --- a/options.c +++ b/options.c @@ -32,10 +32,9 @@ struct options_array_item { u_int index; - char *value; + union options_value value; RB_ENTRY(options_array_item) entry; }; -RB_HEAD(options_array, options_array_item); static int options_array_cmp(struct options_array_item *a1, struct options_array_item *a2) { @@ -48,19 +47,13 @@ options_array_cmp(struct options_array_item *a1, struct options_array_item *a2) RB_GENERATE_STATIC(options_array, options_array_item, entry, options_array_cmp); struct options_entry { - struct options *owner; + struct options *owner; - const char *name; - const struct options_table_entry *tableentry; + const char *name; + const struct options_table_entry *tableentry; + union options_value value; - union { - char *string; - long long number; - struct style style; - struct options_array array; - }; - - RB_ENTRY(options_entry) entry; + RB_ENTRY(options_entry) entry; }; struct options { @@ -83,9 +76,10 @@ static struct options_entry *options_add(struct options *, const char *); #define OPTIONS_IS_STYLE(o) \ ((o)->tableentry != NULL && \ (o)->tableentry->type == OPTIONS_TABLE_STYLE) -#define OPTIONS_IS_ARRAY(o) \ + +#define OPTIONS_IS_ARRAY(o) \ ((o)->tableentry != NULL && \ - (o)->tableentry->type == OPTIONS_TABLE_ARRAY) + ((o)->tableentry->flags & OPTIONS_TABLE_IS_ARRAY)) static int options_cmp(struct options_entry *, struct options_entry *); RB_GENERATE_STATIC(options_tree, options_entry, entry, options_cmp); @@ -109,6 +103,56 @@ options_parent_table_entry(struct options *oo, const char *s) return (o->tableentry); } +static void +options_value_free(struct options_entry *o, union options_value *ov) +{ + if (OPTIONS_IS_STRING(o)) + free(ov->string); +} + +static const char * +options_value_tostring(struct options_entry *o, union options_value *ov, + int numeric) +{ + static char s[1024]; + const char *tmp; + + if (OPTIONS_IS_STYLE(o)) + return (style_tostring(&ov->style)); + if (OPTIONS_IS_NUMBER(o)) { + tmp = NULL; + switch (o->tableentry->type) { + case OPTIONS_TABLE_NUMBER: + xsnprintf(s, sizeof s, "%lld", ov->number); + break; + case OPTIONS_TABLE_KEY: + tmp = key_string_lookup_key(ov->number); + break; + case OPTIONS_TABLE_COLOUR: + tmp = colour_tostring(ov->number); + break; + case OPTIONS_TABLE_FLAG: + if (numeric) + xsnprintf(s, sizeof s, "%lld", ov->number); + else + tmp = (ov->number ? "on" : "off"); + break; + case OPTIONS_TABLE_CHOICE: + tmp = o->tableentry->choices[ov->number]; + break; + case OPTIONS_TABLE_STRING: + case OPTIONS_TABLE_STYLE: + break; + } + if (tmp != NULL) + xsnprintf(s, sizeof s, "%s", tmp); + return (s); + } + if (OPTIONS_IS_STRING(o)) + return (ov->string); + return (""); +} + struct options * options_create(struct options *parent) { @@ -174,8 +218,11 @@ options_empty(struct options *oo, const struct options_table_entry *oe) o = options_add(oo, oe->name); o->tableentry = oe; - if (oe->type == OPTIONS_TABLE_ARRAY) - RB_INIT(&o->array); + if (oe->flags & OPTIONS_TABLE_IS_ARRAY) { + if (oe->type != OPTIONS_TABLE_STRING) + fatalx("arrays can only be strings"); + RB_INIT(&o->value.array); + } return (o); } @@ -183,23 +230,34 @@ options_empty(struct options *oo, const struct options_table_entry *oe) struct options_entry * options_default(struct options *oo, const struct options_table_entry *oe) { - struct options_entry *o; - u_int i; + struct options_entry *o; + union options_value *ov; + u_int i; o = options_empty(oo, oe); - if (oe->type == OPTIONS_TABLE_ARRAY) { + ov = &o->value; + + if (oe->flags & OPTIONS_TABLE_IS_ARRAY) { if (oe->default_arr != NULL) { for (i = 0; oe->default_arr[i] != NULL; i++) options_array_set(o, i, oe->default_arr[i], 0); } else options_array_assign(o, oe->default_str); - } else if (oe->type == OPTIONS_TABLE_STRING) - o->string = xstrdup(oe->default_str); - else if (oe->type == OPTIONS_TABLE_STYLE) { - style_set(&o->style, &grid_default_cell); - style_parse(&o->style, &grid_default_cell, oe->default_str); - } else - o->number = oe->default_num; + return (o); + } + + switch (oe->type) { + case OPTIONS_TABLE_STRING: + ov->string = xstrdup(oe->default_str); + break; + case OPTIONS_TABLE_STYLE: + style_set(&ov->style, &grid_default_cell); + style_parse(&ov->style, &grid_default_cell, oe->default_str); + break; + default: + ov->number = oe->default_num; + break; + } return (o); } @@ -225,11 +283,10 @@ options_remove(struct options_entry *o) { struct options *oo = o->owner; - if (OPTIONS_IS_STRING(o)) - free(o->string); - else if (OPTIONS_IS_ARRAY(o)) + if (OPTIONS_IS_ARRAY(o)) options_array_clear(o); - + else + options_value_free(o, &o->value); RB_REMOVE(options_tree, &oo->tree, o); free(o); } @@ -252,14 +309,14 @@ options_array_item(struct options_entry *o, u_int idx) struct options_array_item a; a.index = idx; - return (RB_FIND(options_array, &o->array, &a)); + return (RB_FIND(options_array, &o->value.array, &a)); } static void options_array_free(struct options_entry *o, struct options_array_item *a) { - free(a->value); - RB_REMOVE(options_array, &o->array, a); + options_value_free(o, &a->value); + RB_REMOVE(options_array, &o->value.array, a); free(a); } @@ -271,11 +328,11 @@ options_array_clear(struct options_entry *o) if (!OPTIONS_IS_ARRAY(o)) return; - RB_FOREACH_SAFE(a, options_array, &o->array, a1) + RB_FOREACH_SAFE(a, options_array, &o->value.array, a1) options_array_free(o, a); } -const char * +union options_value * options_array_get(struct options_entry *o, u_int idx) { struct options_array_item *a; @@ -285,7 +342,7 @@ options_array_get(struct options_entry *o, u_int idx) a = options_array_item(o, idx); if (a == NULL) return (NULL); - return (a->value); + return (&a->value); } int @@ -308,15 +365,15 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, if (a == NULL) { a = xcalloc(1, sizeof *a); a->index = idx; - a->value = xstrdup(value); - RB_INSERT(options_array, &o->array, a); + a->value.string = xstrdup(value); + RB_INSERT(options_array, &o->value.array, a); } else { - free(a->value); + options_value_free(o, &a->value); if (a != NULL && append) - xasprintf(&new, "%s%s", a->value, value); + xasprintf(&new, "%s%s", a->value.string, value); else new = xstrdup(value); - a->value = new; + a->value.string = new; } return (0); @@ -353,13 +410,13 @@ options_array_first(struct options_entry *o) { if (!OPTIONS_IS_ARRAY(o)) return (NULL); - return (RB_MIN(options_array, &o->array)); + return (RB_MIN(options_array, &o->value.array)); } struct options_array_item * options_array_next(struct options_array_item *a) { - return (RB_NEXT(options_array, &o->array, a)); + return (RB_NEXT(options_array, &o->value.array, a)); } u_int @@ -368,10 +425,10 @@ options_array_item_index(struct options_array_item *a) return (a->index); } -const char * +union options_value * options_array_item_value(struct options_array_item *a) { - return (a->value); + return (&a->value); } int @@ -383,14 +440,12 @@ options_isarray(struct options_entry *o) int options_isstring(struct options_entry *o) { - return (OPTIONS_IS_STRING(o) || OPTIONS_IS_ARRAY(o)); + return (OPTIONS_IS_STRING(o)); } const char * options_tostring(struct options_entry *o, int idx, int numeric) { - static char s[1024]; - const char *tmp; struct options_array_item *a; if (OPTIONS_IS_ARRAY(o)) { @@ -399,43 +454,9 @@ options_tostring(struct options_entry *o, int idx, int numeric) a = options_array_item(o, idx); if (a == NULL) return (""); - return (a->value); - } - if (OPTIONS_IS_STYLE(o)) - return (style_tostring(&o->style)); - if (OPTIONS_IS_NUMBER(o)) { - tmp = NULL; - switch (o->tableentry->type) { - case OPTIONS_TABLE_NUMBER: - xsnprintf(s, sizeof s, "%lld", o->number); - break; - case OPTIONS_TABLE_KEY: - tmp = key_string_lookup_key(o->number); - break; - case OPTIONS_TABLE_COLOUR: - tmp = colour_tostring(o->number); - break; - case OPTIONS_TABLE_FLAG: - if (numeric) - xsnprintf(s, sizeof s, "%lld", o->number); - else - tmp = (o->number ? "on" : "off"); - break; - case OPTIONS_TABLE_CHOICE: - tmp = o->tableentry->choices[o->number]; - break; - case OPTIONS_TABLE_STRING: - case OPTIONS_TABLE_STYLE: - case OPTIONS_TABLE_ARRAY: - break; - } - if (tmp != NULL) - xsnprintf(s, sizeof s, "%s", tmp); - return (s); + return (options_value_tostring(o, &a->value, numeric)); } - if (OPTIONS_IS_STRING(o)) - return (o->string); - return (NULL); + return (options_value_tostring(o, &o->value, numeric)); } char * @@ -549,7 +570,7 @@ options_get_string(struct options *oo, const char *name) fatalx("missing option %s", name); if (!OPTIONS_IS_STRING(o)) fatalx("option %s is not a string", name); - return (o->string); + return (o->value.string); } long long @@ -562,7 +583,7 @@ options_get_number(struct options *oo, const char *name) fatalx("missing option %s", name); if (!OPTIONS_IS_NUMBER(o)) fatalx("option %s is not a number", name); - return (o->number); + return (o->value.number); } struct style * @@ -575,7 +596,7 @@ options_get_style(struct options *oo, const char *name) fatalx("missing option %s", name); if (!OPTIONS_IS_STYLE(o)) fatalx("option %s is not a style", name); - return (&o->style); + return (&o->value.style); } struct options_entry * @@ -592,7 +613,7 @@ options_set_string(struct options *oo, const char *name, int append, o = options_get_only(oo, name); if (o != NULL && append && OPTIONS_IS_STRING(o)) { - xasprintf(&value, "%s%s", o->string, s); + xasprintf(&value, "%s%s", o->value.string, s); free(s); } else value = s; @@ -606,8 +627,8 @@ options_set_string(struct options *oo, const char *name, int append, if (!OPTIONS_IS_STRING(o)) fatalx("option %s is not a string", name); - free(o->string); - o->string = value; + free(o->value.string); + o->value.string = value; return (o); } @@ -628,7 +649,7 @@ options_set_number(struct options *oo, const char *name, long long value) if (!OPTIONS_IS_NUMBER(o)) fatalx("option %s is not a number", name); - o->number = value; + o->value.number = value; return (o); } @@ -644,7 +665,7 @@ options_set_style(struct options *oo, const char *name, int append, o = options_get_only(oo, name); if (o != NULL && append && OPTIONS_IS_STYLE(o)) - style_copy(&sy, &o->style); + style_copy(&sy, &o->value.style); else style_set(&sy, &grid_default_cell); if (style_parse(&sy, &grid_default_cell, value) == -1) @@ -657,7 +678,7 @@ options_set_style(struct options *oo, const char *name, int append, if (!OPTIONS_IS_STYLE(o)) fatalx("option %s is not a style", name); - style_copy(&o->style, &sy); + style_copy(&o->value.style, &sy); return (o); } diff --git a/status.c b/status.c index 467db6ad2d..9e43b5b119 100644 --- a/status.c +++ b/status.c @@ -323,8 +323,8 @@ status_redraw(struct client *c) u_int lines, i, width = c->tty.sx; int flags, force = 0, changed = 0; struct options_entry *o; + union options_value *ov; struct format_tree *ft; - const char *fmt; char *expanded; log_debug("%s enter", __func__); @@ -370,14 +370,14 @@ status_redraw(struct client *c) for (i = 0; i < lines; i++) { screen_write_cursormove(&ctx, 0, i, 0); - fmt = options_array_get(o, i); - if (fmt == NULL) { + ov = options_array_get(o, i); + if (ov == NULL) { screen_write_clearline(&ctx, gc.bg); continue; } sle = &sl->entries[i]; - expanded = format_expand_time(ft, fmt); + expanded = format_expand_time(ft, ov->string); if (!force && sle->expanded != NULL && strcmp(expanded, sle->expanded) == 0) { diff --git a/tmux.h b/tmux.h index fc85344dc0..31514e845d 100644 --- a/tmux.h +++ b/tmux.h @@ -1514,6 +1514,15 @@ struct key_table { }; RB_HEAD(key_tables, key_table); +/* Option data. */ +RB_HEAD(options_array, options_array_item); +union options_value { + char *string; + long long number; + struct style style; + struct options_array array; +}; + /* Option table entries. */ enum options_table_type { OPTIONS_TABLE_STRING, @@ -1522,8 +1531,7 @@ enum options_table_type { OPTIONS_TABLE_COLOUR, OPTIONS_TABLE_FLAG, OPTIONS_TABLE_CHOICE, - OPTIONS_TABLE_STYLE, - OPTIONS_TABLE_ARRAY, + OPTIONS_TABLE_STYLE }; enum options_table_scope { @@ -1533,10 +1541,13 @@ enum options_table_scope { OPTIONS_TABLE_WINDOW, }; +#define OPTIONS_TABLE_IS_ARRAY 0x1 + struct options_table_entry { const char *name; enum options_table_type type; enum options_table_scope scope; + int flags; u_int minimum; u_int maximum; @@ -1721,14 +1732,14 @@ struct options_entry *options_get_only(struct options *, const char *); struct options_entry *options_get(struct options *, const char *); void options_remove(struct options_entry *); void options_array_clear(struct options_entry *); -const char *options_array_get(struct options_entry *, u_int); +union options_value *options_array_get(struct options_entry *, u_int); int options_array_set(struct options_entry *, u_int, const char *, int); void options_array_assign(struct options_entry *, const char *); struct options_array_item *options_array_first(struct options_entry *); struct options_array_item *options_array_next(struct options_array_item *); u_int options_array_item_index(struct options_array_item *); -const char *options_array_item_value(struct options_array_item *); +union options_value *options_array_item_value(struct options_array_item *); int options_isarray(struct options_entry *); int options_isstring(struct options_entry *); const char *options_tostring(struct options_entry *, int, int); diff --git a/tty-term.c b/tty-term.c index 9e0bb63dfd..47da390537 100644 --- a/tty-term.c +++ b/tty-term.c @@ -417,6 +417,7 @@ tty_term_find(char *name, int fd, char **cause) struct tty_code *code; struct options_entry *o; struct options_array_item *a; + union options_value *ov; u_int i; int n, error; const char *s, *acs; @@ -494,9 +495,9 @@ tty_term_find(char *name, int fd, char **cause) o = options_get_only(global_options, "terminal-overrides"); a = options_array_first(o); while (a != NULL) { - s = options_array_item_value(a); - if (s != NULL) - tty_term_override(term, s); + ov = options_array_item_value(a); + if (ov != NULL) + tty_term_override(term, ov->string); a = options_array_next(a); } From b9022e33eac0152850ae59be99b54cccc10f4c63 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 23 Apr 2019 20:40:03 +0000 Subject: [PATCH 447/836] Somehow missed these bits in last commit. --- status.c | 8 ++++++-- tty-keys.c | 9 +++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/status.c b/status.c index 9e43b5b119..1a11a5641f 100644 --- a/status.c +++ b/status.c @@ -1293,6 +1293,7 @@ status_prompt_complete_list(u_int *size, const char *s) size_t slen = strlen(s), valuelen; struct options_entry *o; struct options_array_item *a; + union options_value *ov; const char *layouts[] = { "even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled", NULL @@ -1321,10 +1322,13 @@ status_prompt_complete_list(u_int *size, const char *s) if (o != NULL) { a = options_array_first(o); while (a != NULL) { - value = options_array_item_value(a);; - if (value == NULL || (cp = strchr(value, '=')) == NULL) + ov = options_array_item_value(a); + if (ov == NULL) goto next; + value = ov->string; + if ((cp = strchr(value, '=')) == NULL) + goto next; valuelen = cp - value; if (slen > valuelen || strncmp(value, s, slen) != 0) goto next; diff --git a/tty-keys.c b/tty-keys.c index 7557eca0df..c6dcbb56ad 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -399,9 +399,10 @@ tty_keys_build(struct tty *tty) const struct tty_default_key_raw *tdkr; const struct tty_default_key_code *tdkc; u_int i; - const char *s, *value; + const char *s; struct options_entry *o; struct options_array_item *a; + union options_value *ov; if (tty->key_tree != NULL) tty_keys_free(tty); @@ -427,9 +428,9 @@ tty_keys_build(struct tty *tty) if (o != NULL) { a = options_array_first(o); while (a != NULL) { - value = options_array_item_value(a); - if (value != NULL) - tty_keys_add(tty, value, KEYC_USER + i); + ov = options_array_item_value(a); + if (ov != NULL) + tty_keys_add(tty, ov->string, KEYC_USER + i); a = options_array_next(a); } } From c6e39976c63813168619e7607484887830ffd0f0 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 24 Apr 2019 20:27:52 +0000 Subject: [PATCH 448/836] Do not loop forever if there is a nonprintable character in the format. --- format-draw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/format-draw.c b/format-draw.c index b0b050f61e..514042543c 100644 --- a/format-draw.c +++ b/format-draw.c @@ -837,7 +837,8 @@ format_trim_left(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); @@ -883,7 +884,8 @@ format_trim_right(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); From 6aa0bedad281cef0e9411f3530052d09bbc583f1 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 24 Apr 2019 20:32:31 +0000 Subject: [PATCH 449/836] Use bg not fg when adjusting for aixterm, from Ailin Nemui. --- tty.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tty.c b/tty.c index 9ed2b3a9dc..ff72b7daee 100644 --- a/tty.c +++ b/tty.c @@ -2361,7 +2361,7 @@ tty_check_bg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) if (gc->bg & 8) { gc->bg &= 7; if (colours >= 16) - gc->fg += 90; + gc->bg += 90; } } return; @@ -2388,8 +2388,7 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) /* Is this an aixterm bright colour? */ if (gc->fg >= 90 && gc->fg <= 97) { - xsnprintf(s, sizeof s, "\033[%dm", gc->fg); - tty_puts(tty, s); + tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8); goto save_fg; } @@ -2417,8 +2416,7 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) /* Is this an aixterm bright colour? */ if (gc->bg >= 90 && gc->bg <= 97) { - xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10); - tty_puts(tty, s); + tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8); goto save_bg; } From 7d06216289cb36fd7b8a16373d8c527f71816e4e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 24 Apr 2019 20:27:52 +0000 Subject: [PATCH 450/836] Do not loop forever if there is a nonprintable character in the format. --- format-draw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/format-draw.c b/format-draw.c index b0b050f61e..514042543c 100644 --- a/format-draw.c +++ b/format-draw.c @@ -837,7 +837,8 @@ format_trim_left(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); @@ -883,7 +884,8 @@ format_trim_right(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); From cb75ec25c8f023b23aa1edd082763e1ca0f14559 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 24 Apr 2019 22:35:23 +0100 Subject: [PATCH 451/836] 2.9 now. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f04ae14d6c..89e6206686 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 2.9-rc3) +AC_INIT([tmux], 2.9) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 567d3e27abec00ee0af02a9d245146820f9c2f38 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Apr 2019 06:34:57 +0000 Subject: [PATCH 452/836] Automatically scroll if dragging to create a selection with the mouse and the cursor reaches the top or bottom line. --- window-copy.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/window-copy.c b/window-copy.c index 53dd97d373..741e2bfdef 100644 --- a/window-copy.c +++ b/window-copy.c @@ -116,6 +116,7 @@ static void window_copy_scroll_down(struct window_mode_entry *, u_int); static void window_copy_rectangle_toggle(struct window_mode_entry *); static void window_copy_move_mouse(struct mouse_event *); static void window_copy_drag_update(struct client *, struct mouse_event *); +static void window_copy_drag_release(struct client *, struct mouse_event *); const struct window_mode window_copy_mode = { .name = "copy-mode", @@ -231,8 +232,35 @@ struct window_copy_mode_data { int jumptype; char jumpchar; + + struct event dragtimer; +#define WINDOW_COPY_DRAG_REPEAT_TIME 50000 }; +static void +window_copy_scroll_timer(__unused int fd, __unused short events, void *arg) +{ + struct window_mode_entry *wme = arg; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; + struct timeval tv = { + .tv_usec = WINDOW_COPY_DRAG_REPEAT_TIME + }; + + evtimer_del(&data->dragtimer); + + if (TAILQ_FIRST(&wp->modes) != wme) + return; + + if (data->cy == 0) { + evtimer_add(&data->dragtimer, &tv); + window_copy_cursor_up(wme, 1); + } else if (data->cy == screen_size_y(&data->screen) - 1) { + evtimer_add(&data->dragtimer, &tv); + window_copy_cursor_down(wme, 1); + } +} + static struct window_copy_mode_data * window_copy_common_init(struct window_mode_entry *wme) { @@ -261,6 +289,8 @@ window_copy_common_init(struct window_mode_entry *wme) screen_init(&data->screen, screen_size_x(base), screen_size_y(base), 0); data->modekeys = options_get_number(wp->window->options, "mode-keys"); + evtimer_set(&data->dragtimer, window_copy_scroll_timer, wme); + return (data); } @@ -319,6 +349,8 @@ window_copy_free(struct window_mode_entry *wme) struct window_pane *wp = wme->wp; struct window_copy_mode_data *data = wme->data; + evtimer_del(&data->dragtimer); + if (wp->fd != -1 && --wp->disabled == 0) bufferevent_enable(wp->event, EV_READ|EV_WRITE); @@ -3248,7 +3280,7 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) return; c->tty.mouse_drag_update = window_copy_drag_update; - c->tty.mouse_drag_release = NULL; /* will fire MouseDragEnd key */ + c->tty.mouse_drag_release = window_copy_drag_release; window_copy_update_cursor(wme, x, y); window_copy_start_selection(wme); @@ -3261,7 +3293,10 @@ window_copy_drag_update(struct client *c, struct mouse_event *m) struct window_pane *wp; struct window_mode_entry *wme; struct window_copy_mode_data *data; - u_int x, y, old_cy; + u_int x, y, old_cx, old_cy; + struct timeval tv = { + .tv_usec = WINDOW_COPY_DRAG_REPEAT_TIME + }; if (c == NULL) return; @@ -3272,13 +3307,46 @@ window_copy_drag_update(struct client *c, struct mouse_event *m) wme = TAILQ_FIRST(&wp->modes); if (wme == NULL || wme->mode != &window_copy_mode) return; + data = wme->data; + evtimer_del(&data->dragtimer); if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) return; + old_cx = data->cx; old_cy = data->cy; window_copy_update_cursor(wme, x, y); if (window_copy_update_selection(wme, 1)) window_copy_redraw_selection(wme, old_cy); + if (old_cy != data->cy || old_cx == data->cx) { + if (y == 0) { + evtimer_add(&data->dragtimer, &tv); + window_copy_cursor_up(wme, 1); + } else if (y == screen_size_y(&data->screen) - 1) { + evtimer_add(&data->dragtimer, &tv); + window_copy_cursor_down(wme, 1); + } + } +} + +static void +window_copy_drag_release(struct client *c, struct mouse_event *m) +{ + struct window_pane *wp; + struct window_mode_entry *wme; + struct window_copy_mode_data *data; + + if (c == NULL) + return; + + wp = cmd_mouse_pane(m, NULL, NULL); + if (wp == NULL) + return; + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_copy_mode) + return; + + data = wme->data; + evtimer_del(&data->dragtimer); } From dddc544b8f8f954afeaa6c696f107b25a64904b2 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 25 Apr 2019 13:00:32 +0100 Subject: [PATCH 453/836] Update CHANGES. --- CHANGES | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 87097f9efb..b4a0d76751 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,12 @@ CHANGES FROM 2.9 to X.X +* Automatically scroll if dragging to create a selection with the mouse and the + cursor reaches the top or bottom line. + +* Add -no-clear variants of copy-selection and copy-pipe which do not clear the + selection after copying. Make copy-pipe clear the selection by default to be + consistent with copy-selection. + * Add an argument to copy commands to set the prefix for the buffer name, this (for example) allows buffers for different sessions to be named separately. @@ -11,9 +18,6 @@ CHANGES FROM 2.9 to X.X * Add the ability to infer an option type (server, session, window) from its name to show-options (it was already present in set-option). -* Allow the prefix used for new buffer names to be given as an argument to the - copy commands in copy mode. - CHANGES FROM 2.8 to 2.9 * Attempt to preserve horizontal cursor position as well as vertical with From 1677bb0deaa0e5c3e962e36ce98076b0db8507f6 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Apr 2019 15:35:07 +0000 Subject: [PATCH 454/836] Need to escape ]. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 3010abc55a..d68e649765 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3933,7 +3933,7 @@ In addition, embedded styles may be specified in format options, such as by enclosing them in .Ql #[ and -.Ql ] . +.Ql \&] . .Pp A style may be the single term .Ql default From 32a81e197bce3b16113c7603a766773c1a5cdcaf Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Apr 2019 18:18:55 +0000 Subject: [PATCH 455/836] Make options_tostring allocate its result instead of using a stack buffer (needed for something in the future). --- cmd-show-options.c | 5 +++-- format.c | 27 ++++++++++++--------------- options.c | 39 ++++++++++++++++----------------------- tmux.h | 2 +- 4 files changed, 32 insertions(+), 41 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index b8b9a9bd1e..328e9c0324 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -162,8 +162,8 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, struct options_entry *o, int idx) { struct options_array_item *a; - const char *name, *value; - char *tmp, *escaped; + const char *name; + char *value, *tmp, *escaped; if (idx != -1) { xasprintf(&tmp, "%s[%d]", options_name(o), idx); @@ -191,6 +191,7 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, free(escaped); } else cmdq_print(item, "%s %s", name, value); + free(value); free(tmp); } diff --git a/format.c b/format.c index e544e6b398..abcdb1d784 100644 --- a/format.c +++ b/format.c @@ -904,9 +904,8 @@ format_find(struct format_tree *ft, const char *key, int modifiers) struct environ_entry *envent; static char s[64]; struct options_entry *o; - const char *found; int idx; - char *copy, *saved; + char *found, *saved; if (~modifiers & FORMAT_TIMESTRING) { o = options_parse_get(global_options, key, &idx, 0); @@ -933,12 +932,11 @@ format_find(struct format_tree *ft, const char *key, int modifiers) return (NULL); ctime_r(&fe->t, s); s[strcspn(s, "\n")] = '\0'; - found = s; + found = xstrdup(s); goto found; } if (fe->t != 0) { - xsnprintf(s, sizeof s, "%lld", (long long)fe->t); - found = s; + xasprintf(&found, "%lld", (long long)fe->t); goto found; } if (fe->value == NULL && fe->cb != NULL) { @@ -946,7 +944,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) if (fe->value == NULL) fe->value = xstrdup(""); } - found = fe->value; + found = xstrdup(fe->value); goto found; } @@ -957,7 +955,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) if (envent == NULL) envent = environ_find(global_environ, key); if (envent != NULL) { - found = envent->value; + found = xstrdup(envent->value); goto found; } } @@ -967,23 +965,22 @@ format_find(struct format_tree *ft, const char *key, int modifiers) found: if (found == NULL) return (NULL); - copy = xstrdup(found); if (modifiers & FORMAT_BASENAME) { - saved = copy; - copy = xstrdup(basename(saved)); + saved = found; + found = xstrdup(basename(saved)); free(saved); } if (modifiers & FORMAT_DIRNAME) { - saved = copy; - copy = xstrdup(dirname(saved)); + saved = found; + found = xstrdup(dirname(saved)); free(saved); } if (modifiers & FORMAT_QUOTE) { - saved = copy; - copy = xstrdup(format_quote(saved)); + saved = found; + found = xstrdup(format_quote(saved)); free(saved); } - return (copy); + return (found); } /* Skip until end. */ diff --git a/options.c b/options.c index 0b13bca0b3..fb271d5eb4 100644 --- a/options.c +++ b/options.c @@ -110,47 +110,43 @@ options_value_free(struct options_entry *o, union options_value *ov) free(ov->string); } -static const char * +static char * options_value_tostring(struct options_entry *o, union options_value *ov, int numeric) { - static char s[1024]; - const char *tmp; + char *s; if (OPTIONS_IS_STYLE(o)) - return (style_tostring(&ov->style)); + return (xstrdup(style_tostring(&ov->style))); if (OPTIONS_IS_NUMBER(o)) { - tmp = NULL; switch (o->tableentry->type) { case OPTIONS_TABLE_NUMBER: - xsnprintf(s, sizeof s, "%lld", ov->number); + xasprintf(&s, "%lld", ov->number); break; case OPTIONS_TABLE_KEY: - tmp = key_string_lookup_key(ov->number); + s = xstrdup(key_string_lookup_key(ov->number)); break; case OPTIONS_TABLE_COLOUR: - tmp = colour_tostring(ov->number); + s = xstrdup(colour_tostring(ov->number)); break; case OPTIONS_TABLE_FLAG: if (numeric) - xsnprintf(s, sizeof s, "%lld", ov->number); + xasprintf(&s, "%lld", ov->number); else - tmp = (ov->number ? "on" : "off"); + s = xstrdup(ov->number ? "on" : "off"); break; case OPTIONS_TABLE_CHOICE: - tmp = o->tableentry->choices[ov->number]; + s = xstrdup(o->tableentry->choices[ov->number]); break; case OPTIONS_TABLE_STRING: case OPTIONS_TABLE_STYLE: - break; + fatalx("not a number option type"); } - if (tmp != NULL) - xsnprintf(s, sizeof s, "%s", tmp); return (s); } if (OPTIONS_IS_STRING(o)) - return (ov->string); - return (""); + return (xstrdup(ov->string)); + return (xstrdup("")); } struct options * @@ -218,11 +214,8 @@ options_empty(struct options *oo, const struct options_table_entry *oe) o = options_add(oo, oe->name); o->tableentry = oe; - if (oe->flags & OPTIONS_TABLE_IS_ARRAY) { - if (oe->type != OPTIONS_TABLE_STRING) - fatalx("arrays can only be strings"); + if (oe->flags & OPTIONS_TABLE_IS_ARRAY) RB_INIT(&o->value.array); - } return (o); } @@ -443,17 +436,17 @@ options_isstring(struct options_entry *o) return (OPTIONS_IS_STRING(o)); } -const char * +char * options_tostring(struct options_entry *o, int idx, int numeric) { struct options_array_item *a; if (OPTIONS_IS_ARRAY(o)) { if (idx == -1) - return (NULL); + return (xstrdup("")); a = options_array_item(o, idx); if (a == NULL) - return (""); + return (xstrdup("")); return (options_value_tostring(o, &a->value, numeric)); } return (options_value_tostring(o, &o->value, numeric)); diff --git a/tmux.h b/tmux.h index 31514e845d..ab8142f75c 100644 --- a/tmux.h +++ b/tmux.h @@ -1742,7 +1742,7 @@ u_int options_array_item_index(struct options_array_item *); union options_value *options_array_item_value(struct options_array_item *); int options_isarray(struct options_entry *); int options_isstring(struct options_entry *); -const char *options_tostring(struct options_entry *, int, int); +char *options_tostring(struct options_entry *, int, int); char *options_parse(const char *, int *); struct options_entry *options_parse_get(struct options *, const char *, int *, int); From a609e6361a2dd9a7ec6d9dd8dfd80d86d38c033b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Apr 2019 19:03:43 +0000 Subject: [PATCH 456/836] Need a fallback for -2 for aixterm colours. --- tty.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tty.c b/tty.c index ff72b7daee..cc528e8ecf 100644 --- a/tty.c +++ b/tty.c @@ -2388,7 +2388,11 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) /* Is this an aixterm bright colour? */ if (gc->fg >= 90 && gc->fg <= 97) { - tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8); + if (tty->term_flags & TERM_256COLOURS) { + xsnprintf(s, sizeof s, "\033[%dm", gc->fg); + tty_puts(tty, s); + } else + tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8); goto save_fg; } @@ -2416,7 +2420,11 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) /* Is this an aixterm bright colour? */ if (gc->bg >= 90 && gc->bg <= 97) { - tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8); + if (tty->term_flags & TERM_256COLOURS) { + xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10); + tty_puts(tty, s); + } else + tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8); goto save_bg; } From 2d65bbd94129c4542394a83151cb1a131c3c7871 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 25 Apr 2019 19:36:59 +0000 Subject: [PATCH 457/836] options_array_item_value cannot return NULL. --- cmd.c | 4 ---- environ.c | 4 ---- status.c | 7 +------ tty-keys.c | 3 +-- tty-term.c | 3 +-- 5 files changed, 3 insertions(+), 18 deletions(-) diff --git a/cmd.c b/cmd.c index cf1f74960e..8ed6596c89 100644 --- a/cmd.c +++ b/cmd.c @@ -335,10 +335,6 @@ cmd_try_alias(int *argc, char ***argv) a = options_array_first(o); while (a != NULL) { ov = options_array_item_value(a); - if (ov == NULL) { - a = options_array_next(a); - continue; - } cp = strchr(ov->string, '='); if (cp != NULL && (size_t)(cp - ov->string) == wanted && diff --git a/environ.c b/environ.c index 301c4f2977..25968f7bc6 100644 --- a/environ.c +++ b/environ.c @@ -185,10 +185,6 @@ environ_update(struct options *oo, struct environ *src, struct environ *dst) a = options_array_first(o); while (a != NULL) { ov = options_array_item_value(a); - if (ov == NULL) { - a = options_array_next(a); - continue; - } if ((envent = environ_find(src, ov->string)) == NULL) environ_clear(dst, ov->string); else diff --git a/status.c b/status.c index 1a11a5641f..34ed377805 100644 --- a/status.c +++ b/status.c @@ -1293,7 +1293,6 @@ status_prompt_complete_list(u_int *size, const char *s) size_t slen = strlen(s), valuelen; struct options_entry *o; struct options_array_item *a; - union options_value *ov; const char *layouts[] = { "even-horizontal", "even-vertical", "main-horizontal", "main-vertical", "tiled", NULL @@ -1322,11 +1321,7 @@ status_prompt_complete_list(u_int *size, const char *s) if (o != NULL) { a = options_array_first(o); while (a != NULL) { - ov = options_array_item_value(a); - if (ov == NULL) - goto next; - - value = ov->string; + value = options_array_item_value(a)->string; if ((cp = strchr(value, '=')) == NULL) goto next; valuelen = cp - value; diff --git a/tty-keys.c b/tty-keys.c index c6dcbb56ad..850c911977 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -429,8 +429,7 @@ tty_keys_build(struct tty *tty) a = options_array_first(o); while (a != NULL) { ov = options_array_item_value(a); - if (ov != NULL) - tty_keys_add(tty, ov->string, KEYC_USER + i); + tty_keys_add(tty, ov->string, KEYC_USER + i); a = options_array_next(a); } } diff --git a/tty-term.c b/tty-term.c index 47da390537..b692a6cc52 100644 --- a/tty-term.c +++ b/tty-term.c @@ -496,8 +496,7 @@ tty_term_find(char *name, int fd, char **cause) a = options_array_first(o); while (a != NULL) { ov = options_array_item_value(a); - if (ov != NULL) - tty_term_override(term, ov->string); + tty_term_override(term, ov->string); a = options_array_next(a); } From 6644d209d29c802c6115137cc74e4e57b76dd3e1 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 26 Apr 2019 10:15:40 +0000 Subject: [PATCH 458/836] Unbreak main-vertical and main-horizontal layouts. --- layout-set.c | 66 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/layout-set.c b/layout-set.c index 504d9630dc..3a088a4c56 100644 --- a/layout-set.c +++ b/layout-set.c @@ -213,7 +213,7 @@ layout_set_main_h(struct window *w) mainh = w->sy - otherh; } - /* Work out what height is needed. */ + /* Work out what width is needed. */ sx = (n * (PANE_MINIMUM + 1)) - 1; if (sx < w->sx) sx = w->sx; @@ -221,7 +221,7 @@ layout_set_main_h(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); + layout_set_size(lc, sx, mainh + otherh, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ @@ -233,19 +233,25 @@ layout_set_main_h(struct window *w) /* Create the other pane. */ lcother = layout_create_cell(lc); layout_set_size(lcother, sx, otherh, 0, 0); - layout_make_node(lcother, LAYOUT_LEFTRIGHT); - TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - - /* Add the remaining panes as children. */ - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp == TAILQ_FIRST(&w->panes)) - continue; - lcchild = layout_create_cell(lc); - layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + if (n == 1) { + wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); + layout_make_leaf(lcother, wp); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + } else { + layout_make_node(lcother, LAYOUT_LEFTRIGHT); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) + continue; + lcchild = layout_create_cell(lcother); + layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + } + layout_spread_cell(w, lcother); } - layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -299,7 +305,7 @@ layout_set_main_v(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); + layout_set_size(lc, mainw + otherw, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ @@ -311,19 +317,25 @@ layout_set_main_v(struct window *w) /* Create the other pane. */ lcother = layout_create_cell(lc); layout_set_size(lcother, otherw, sy, 0, 0); - layout_make_node(lcother, LAYOUT_TOPBOTTOM); - TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - - /* Add the remaining panes as children. */ - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp == TAILQ_FIRST(&w->panes)) - continue; - lcchild = layout_create_cell(lc); - layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + if (n == 1) { + wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); + layout_make_leaf(lcother, wp); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + } else { + layout_make_node(lcother, LAYOUT_TOPBOTTOM); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) + continue; + lcchild = layout_create_cell(lcother); + layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + } + layout_spread_cell(w, lcother); } - layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); From f1e14f86c4d2467571e20a3dca4a96a3cc357897 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 26 Apr 2019 10:24:26 +0000 Subject: [PATCH 459/836] Destroy panes before options to avoid crash when forced into a mode by a hook. --- window.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/window.c b/window.c index 10571f99b6..7a2d9f6cf7 100644 --- a/window.c +++ b/window.c @@ -344,6 +344,8 @@ window_destroy(struct window *w) layout_free_cell(w->saved_layout_root); free(w->old_layout); + window_destroy_panes(w); + if (event_initialized(&w->name_event)) evtimer_del(&w->name_event); @@ -354,8 +356,6 @@ window_destroy(struct window *w) options_free(w->options); - window_destroy_panes(w); - free(w->name); free(w); } From dfb7bb683057d08303955c49073f4b475bd0e2d6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 26 Apr 2019 11:38:51 +0000 Subject: [PATCH 460/836] Merge hooks into options and make each one an array option. This allows multiple commands to be easily bound to one hook. set-hook and show-hooks remain but they are now variants of set-option and show-options. show-options now has a -H flag to show hooks (by default they are not shown). --- Makefile | 2 - cmd-new-session.c | 2 +- cmd-new-window.c | 2 +- cmd-queue.c | 56 +++++++++++++- cmd-select-pane.c | 2 +- cmd-select-window.c | 4 +- cmd-set-hook.c | 133 ---------------------------------- cmd-set-option.c | 39 ++++++++-- cmd-show-options.c | 52 ++++++++++--- cmd-split-window.c | 2 +- cmd-string.c | 5 +- hooks.c | 173 -------------------------------------------- notify.c | 74 +++++++++++++------ options-table.c | 74 +++++++++++++++++++ options.c | 73 ++++++++++++++----- session.c | 3 - status.c | 2 +- tmux.1 | 30 +++++++- tmux.c | 3 - tmux.h | 39 +++------- 20 files changed, 356 insertions(+), 414 deletions(-) delete mode 100644 cmd-set-hook.c delete mode 100644 hooks.c diff --git a/Makefile b/Makefile index aedabadf64..1dd4ed8c9b 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,6 @@ SRCS= alerts.c \ cmd-send-keys.c \ cmd-set-buffer.c \ cmd-set-environment.c \ - cmd-set-hook.c \ cmd-set-option.c \ cmd-show-environment.c \ cmd-show-messages.c \ @@ -78,7 +77,6 @@ SRCS= alerts.c \ format-draw.c \ grid-view.c \ grid.c \ - hooks.c \ input-keys.c \ input.c \ job.c \ diff --git a/cmd-new-session.c b/cmd-new-session.c index f0a353d8a4..6818ce9cb9 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -329,7 +329,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) } cmd_find_from_session(&fs, s, 0); - hooks_insert(s->hooks, item, &fs, "after-new-session"); + cmdq_insert_hook(s, item, &fs, "after-new-session"); free(cwd); free(newname); diff --git a/cmd-new-window.c b/cmd-new-window.c index e3bacff863..1007c5977f 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -105,7 +105,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) } cmd_find_from_winlink(&fs, new_wl, 0); - hooks_insert(s->hooks, item, &fs, "after-new-window"); + cmdq_insert_hook(s, item, &fs, "after-new-window"); return (CMD_RETURN_NORMAL); } diff --git a/cmd-queue.c b/cmd-queue.c index 03fd5f10c8..9ce25f5fe8 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -98,6 +98,60 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item) } while (item != NULL); } + +/* Insert a hook. */ +void +cmdq_insert_hook(struct session *s, struct cmdq_item *item, + struct cmd_find_state *fs, const char *fmt, ...) +{ + struct options *oo; + va_list ap; + char *name; + struct cmdq_item *new_item; + struct options_entry *o; + struct options_array_item *a; + struct cmd_list *cmdlist; + + if (item->flags & CMDQ_NOHOOKS) + return; + if (s == NULL) + oo = global_s_options; + else + oo = s->options; + + va_start(ap, fmt); + xvasprintf(&name, fmt, ap); + va_end(ap); + + o = options_get(oo, name); + if (o == NULL) { + free(name); + return; + } + log_debug("running hook %s (parent %p)", name, item); + + a = options_array_first(o); + while (a != NULL) { + cmdlist = options_array_item_value(a)->cmdlist; + if (cmdlist == NULL) { + a = options_array_next(a); + continue; + } + + new_item = cmdq_get_command(cmdlist, fs, NULL, CMDQ_NOHOOKS); + cmdq_format(new_item, "hook", "%s", name); + if (item != NULL) { + cmdq_insert_after(item, new_item); + item = new_item; + } else + cmdq_append(NULL, new_item); + + a = options_array_next(a); + } + + free(name); +} + /* Remove an item. */ static void cmdq_remove(struct cmdq_item *item) @@ -245,7 +299,7 @@ cmdq_fire_command(struct cmdq_item *item) fsp = &fs; else goto out; - hooks_insert(fsp->s->hooks, item, fsp, "after-%s", entry->name); + cmdq_insert_hook(fsp->s, item, fsp, "after-%s", entry->name); } out: diff --git a/cmd-select-pane.c b/cmd-select-pane.c index af0f033bb8..89c6fb201a 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -196,7 +196,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) window_redraw_active_switch(w, wp); if (window_set_active_pane(w, wp, 1)) { cmd_find_from_winlink_pane(current, wl, wp, 0); - hooks_insert(s->hooks, item, current, "after-select-pane"); + cmdq_insert_hook(s, item, current, "after-select-pane"); cmd_select_pane_redraw(w); } diff --git a/cmd-select-window.c b/cmd-select-window.c index f35b82021f..54965e89e7 100644 --- a/cmd-select-window.c +++ b/cmd-select-window.c @@ -119,7 +119,7 @@ cmd_select_window_exec(struct cmd *self, struct cmdq_item *item) } cmd_find_from_session(current, s, 0); server_redraw_session(s); - hooks_insert(s->hooks, item, current, "after-select-window"); + cmdq_insert_hook(s, item, current, "after-select-window"); } else { /* * If -T and select-window is invoked on same window as @@ -137,7 +137,7 @@ cmd_select_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_session(current, s, 0); server_redraw_session(s); } - hooks_insert(s->hooks, item, current, "after-select-window"); + cmdq_insert_hook(s, item, current, "after-select-window"); } recalculate_sizes(); diff --git a/cmd-set-hook.c b/cmd-set-hook.c deleted file mode 100644 index b04e63359d..0000000000 --- a/cmd-set-hook.c +++ /dev/null @@ -1,133 +0,0 @@ -/* $OpenBSD$ */ - -/* - * Copyright (c) 2012 Thomas Adam - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#include -#include - -#include "tmux.h" - -/* - * Set or show global or session hooks. - */ - -static enum cmd_retval cmd_set_hook_exec(struct cmd *, struct cmdq_item *); - -const struct cmd_entry cmd_set_hook_entry = { - .name = "set-hook", - .alias = NULL, - - .args = { "gRt:u", 1, 2 }, - .usage = "[-gRu] " CMD_TARGET_SESSION_USAGE " hook-name [command]", - - .target = { 't', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, - - .flags = CMD_AFTERHOOK, - .exec = cmd_set_hook_exec -}; - -const struct cmd_entry cmd_show_hooks_entry = { - .name = "show-hooks", - .alias = NULL, - - .args = { "gt:", 0, 1 }, - .usage = "[-g] " CMD_TARGET_SESSION_USAGE, - - .target = { 't', CMD_FIND_SESSION, 0 }, - - .flags = CMD_AFTERHOOK, - .exec = cmd_set_hook_exec -}; - -static enum cmd_retval -cmd_set_hook_exec(struct cmd *self, struct cmdq_item *item) -{ - struct args *args = self->args; - struct cmd_list *cmdlist; - struct hooks *hooks; - struct hook *hook; - char *cause, *tmp; - const char *name, *cmd, *target; - - if (args_has(args, 'g')) - hooks = global_hooks; - else { - if (item->target.s == NULL) { - target = args_get(args, 't'); - if (target != NULL) - cmdq_error(item, "no such session: %s", target); - else - cmdq_error(item, "no current session"); - return (CMD_RETURN_ERROR); - } - hooks = item->target.s->hooks; - } - - if (self->entry == &cmd_show_hooks_entry) { - hook = hooks_first(hooks); - while (hook != NULL) { - tmp = cmd_list_print(hook->cmdlist); - cmdq_print(item, "%s -> %s", hook->name, tmp); - free(tmp); - - hook = hooks_next(hook); - } - return (CMD_RETURN_NORMAL); - } - - name = args->argv[0]; - if (*name == '\0') { - cmdq_error(item, "invalid hook name"); - return (CMD_RETURN_ERROR); - } - if (args->argc < 2) - cmd = NULL; - else - cmd = args->argv[1]; - - if (cmd != NULL && (args_has(args, 'R') || args_has(args, 'u'))) { - cmdq_error(item, "no command allowed"); - return (CMD_RETURN_ERROR); - } - if (args_has(args, 'R')) { - notify_hook(item, name); - return (CMD_RETURN_NORMAL); - } - if (args_has(args, 'u')) { - hooks_remove(hooks, name); - return (CMD_RETURN_NORMAL); - } - - if (cmd == NULL) { - cmdq_error(item, "no command given"); - return (CMD_RETURN_ERROR); - } - cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) { - cmdq_error(item, "%s", cause); - free(cause); - } - return (CMD_RETURN_ERROR); - } - hooks_add(hooks, name, cmdlist); - cmd_list_free(cmdlist); - - return (CMD_RETURN_NORMAL); -} diff --git a/cmd-set-option.c b/cmd-set-option.c index edeb838512..7be561f2b3 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -65,6 +65,19 @@ const struct cmd_entry cmd_set_window_option_entry = { .exec = cmd_set_option_exec }; +const struct cmd_entry cmd_set_hook_entry = { + .name = "set-hook", + .alias = NULL, + + .args = { "agRt:u", 1, 2 }, + .usage = "[-agRu] " CMD_TARGET_SESSION_USAGE " hook [command]", + + .target = { 't', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_set_option_exec +}; + static enum cmd_retval cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) { @@ -87,6 +100,11 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) c = cmd_find_client(item, NULL, 1); argument = format_single(item, args->argv[0], c, s, wl, NULL); + if (self->entry == &cmd_set_hook_entry && args_has(args, 'R')) { + notify_hook(item, argument); + return (CMD_RETURN_NORMAL); + } + /* Parse option name and index. */ name = options_match(argument, &idx, &ambiguous); if (name == NULL) { @@ -200,8 +218,11 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) options_default(oo, options_table_entry(o)); else options_remove(o); - } else - options_array_set(o, idx, NULL, 0); + } else if (options_array_set(o, idx, NULL, 0, &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); + goto fail; + } } else if (*name == '@') { if (value == NULL) { cmdq_error(item, "empty value"); @@ -222,9 +243,15 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) if (idx == -1) { if (!append) options_array_clear(o); - options_array_assign(o, value); - } else if (options_array_set(o, idx, value, append) != 0) { - cmdq_error(item, "invalid index: %s", argument); + if (options_array_assign(o, value, &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); + goto fail; + } + } else if (options_array_set(o, idx, value, append, + &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); goto fail; } } @@ -366,6 +393,8 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, return (-1); } return (0); + case OPTIONS_TABLE_COMMAND: + break; } return (-1); } diff --git a/cmd-show-options.c b/cmd-show-options.c index 328e9c0324..e19a634a9f 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_show_options_entry = { .name = "show-options", .alias = "show", - .args = { "gqst:vw", 0, 1 }, - .usage = "[-gqsvw] [-t target-session|target-window] [option]", + .args = { "gHqst:vw", 0, 1 }, + .usage = "[-gHqsvw] [-t target-session|target-window] [option]", .target = { 't', CMD_FIND_WINDOW, CMD_FIND_CANFAIL }, @@ -61,6 +61,19 @@ const struct cmd_entry cmd_show_window_options_entry = { .exec = cmd_show_options_exec }; +const struct cmd_entry cmd_show_hooks_entry = { + .name = "show-hooks", + .alias = NULL, + + .args = { "gt:", 0, 1 }, + .usage = "[-g] " CMD_TARGET_SESSION_USAGE, + + .target = { 't', CMD_FIND_SESSION, 0 }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_show_options_exec +}; + static enum cmd_retval cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) { @@ -162,15 +175,20 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, struct options_entry *o, int idx) { struct options_array_item *a; - const char *name; - char *value, *tmp, *escaped; + const char *name = options_name(o); + char *value, *tmp = NULL, *escaped; if (idx != -1) { - xasprintf(&tmp, "%s[%d]", options_name(o), idx); + xasprintf(&tmp, "%s[%d]", name, idx); name = tmp; } else { if (options_isarray(o)) { a = options_array_first(o); + if (a == NULL) { + if (!args_has(self->args, 'v')) + cmdq_print(item, "%s", name); + return; + } while (a != NULL) { idx = options_array_item_index(a); cmd_show_options_print(self, item, o, idx); @@ -178,8 +196,6 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, } return; } - tmp = NULL; - name = options_name(o); } value = options_tostring(o, idx, 0); @@ -200,16 +216,28 @@ static enum cmd_retval cmd_show_options_all(struct cmd *self, struct cmdq_item *item, struct options *oo) { - struct options_entry *o; - struct options_array_item *a; - u_int idx; + struct options_entry *o; + struct options_array_item *a; + u_int idx; + int flags; o = options_first(oo); while (o != NULL) { + flags = options_table_entry(o)->flags; + if ((self->entry != &cmd_show_hooks_entry && + !args_has(self->args, 'H') && + (flags & OPTIONS_TABLE_IS_HOOK)) || + (self->entry == &cmd_show_hooks_entry && + (~flags & OPTIONS_TABLE_IS_HOOK))) { + o = options_next(o); + continue; + } if (!options_isarray(o)) cmd_show_options_print(self, item, o, -1); - else { - a = options_array_first(o); + else if ((a = options_array_first(o)) == NULL) { + if (!args_has(self->args, 'v')) + cmdq_print(item, "%s", options_name(o)); + } else { while (a != NULL) { idx = options_array_item_index(a); cmd_show_options_print(self, item, o, idx); diff --git a/cmd-split-window.c b/cmd-split-window.c index f8cab9f99d..597a5c96c1 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -144,7 +144,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) } cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); - hooks_insert(s->hooks, item, &fs, "after-split-window"); + cmdq_insert_hook(s, item, &fs, "after-split-window"); return (CMD_RETURN_NORMAL); } diff --git a/cmd-string.c b/cmd-string.c index 440a02317c..058f997ca8 100644 --- a/cmd-string.c +++ b/cmd-string.c @@ -174,7 +174,10 @@ cmd_string_parse(const char *s, const char *file, u_int line, char **cause) int argc; char **argv; - *cause = NULL; + if (cause != NULL) + *cause = NULL; + log_debug ("%s: %s", __func__, s); + if (cmd_string_split(s, &argc, &argv) != 0) { xasprintf(cause, "invalid or unknown command: %s", s); return (NULL); diff --git a/hooks.c b/hooks.c deleted file mode 100644 index 361f352208..0000000000 --- a/hooks.c +++ /dev/null @@ -1,173 +0,0 @@ -/* $OpenBSD$ */ - -/* - * Copyright (c) 2012 Thomas Adam - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#include -#include - -#include "tmux.h" - -struct hooks { - RB_HEAD(hooks_tree, hook) tree; - struct hooks *parent; -}; - -static int hooks_cmp(struct hook *, struct hook *); -RB_GENERATE_STATIC(hooks_tree, hook, entry, hooks_cmp); - -static struct hook *hooks_find1(struct hooks *, const char *); -static void hooks_free1(struct hooks *, struct hook *); - -static int -hooks_cmp(struct hook *hook1, struct hook *hook2) -{ - return (strcmp(hook1->name, hook2->name)); -} - -struct hooks * -hooks_get(struct session *s) -{ - if (s != NULL) - return (s->hooks); - return (global_hooks); -} - -struct hooks * -hooks_create(struct hooks *parent) -{ - struct hooks *hooks; - - hooks = xcalloc(1, sizeof *hooks); - RB_INIT(&hooks->tree); - hooks->parent = parent; - return (hooks); -} - -static void -hooks_free1(struct hooks *hooks, struct hook *hook) -{ - RB_REMOVE(hooks_tree, &hooks->tree, hook); - cmd_list_free(hook->cmdlist); - free((char *)hook->name); - free(hook); -} - -void -hooks_free(struct hooks *hooks) -{ - struct hook *hook, *hook1; - - RB_FOREACH_SAFE(hook, hooks_tree, &hooks->tree, hook1) - hooks_free1(hooks, hook); - free(hooks); -} - -struct hook * -hooks_first(struct hooks *hooks) -{ - return (RB_MIN(hooks_tree, &hooks->tree)); -} - -struct hook * -hooks_next(struct hook *hook) -{ - return (RB_NEXT(hooks_tree, &hooks->tree, hook)); -} - -void -hooks_add(struct hooks *hooks, const char *name, struct cmd_list *cmdlist) -{ - struct hook *hook; - - if ((hook = hooks_find1(hooks, name)) != NULL) - hooks_free1(hooks, hook); - - hook = xcalloc(1, sizeof *hook); - hook->name = xstrdup(name); - hook->cmdlist = cmdlist; - hook->cmdlist->references++; - RB_INSERT(hooks_tree, &hooks->tree, hook); -} - -void -hooks_remove(struct hooks *hooks, const char *name) -{ - struct hook *hook; - - if ((hook = hooks_find1(hooks, name)) != NULL) - hooks_free1(hooks, hook); -} - -static struct hook * -hooks_find1(struct hooks *hooks, const char *name) -{ - struct hook hook; - - hook.name = name; - return (RB_FIND(hooks_tree, &hooks->tree, &hook)); -} - -struct hook * -hooks_find(struct hooks *hooks, const char *name) -{ - struct hook hook0, *hook; - - hook0.name = name; - hook = RB_FIND(hooks_tree, &hooks->tree, &hook0); - while (hook == NULL) { - hooks = hooks->parent; - if (hooks == NULL) - break; - hook = RB_FIND(hooks_tree, &hooks->tree, &hook0); - } - return (hook); -} - -void -hooks_insert(struct hooks *hooks, struct cmdq_item *item, - struct cmd_find_state *fs, const char *fmt, ...) -{ - struct hook *hook; - va_list ap; - char *name; - struct cmdq_item *new_item; - - if (item->flags & CMDQ_NOHOOKS) - return; - - va_start(ap, fmt); - xvasprintf(&name, fmt, ap); - va_end(ap); - - hook = hooks_find(hooks, name); - if (hook == NULL) { - free(name); - return; - } - log_debug("running hook %s (parent %p)", name, item); - - new_item = cmdq_get_command(hook->cmdlist, fs, NULL, CMDQ_NOHOOKS); - cmdq_format(new_item, "hook", "%s", name); - if (item != NULL) - cmdq_insert_after(item, new_item); - else - cmdq_append(NULL, new_item); - - free(name); -} diff --git a/notify.c b/notify.c index 96c0e5901c..088d75960d 100644 --- a/notify.c +++ b/notify.c @@ -36,13 +36,34 @@ struct notify_entry { }; static void -notify_hook1(struct cmdq_item *item, struct notify_entry *ne) +notify_hook_formats(struct cmdq_item *item, struct session *s, struct window *w, + int pane) { - struct cmd_find_state fs; - struct hook *hook; - struct cmdq_item *new_item; - struct session *s = ne->session; - struct window *w = ne->window; + if (s != NULL) { + cmdq_format(item, "hook_session", "$%u", s->id); + cmdq_format(item, "hook_session_name", "%s", s->name); + } + if (w != NULL) { + cmdq_format(item, "hook_window", "@%u", w->id); + cmdq_format(item, "hook_window_name", "%s", w->name); + } + if (pane != -1) + cmdq_format(item, "hook_pane", "%%%d", pane); +} + +static void +notify_insert_hook(struct cmdq_item *item, struct notify_entry *ne) +{ + struct cmd_find_state fs; + struct options *oo; + struct cmdq_item *new_item; + struct session *s = ne->session; + struct window *w = ne->window; + struct options_entry *o; + struct options_array_item *a; + struct cmd_list *cmdlist; + + log_debug("%s: %s", __func__, ne->name); cmd_find_clear_state(&fs, 0); if (cmd_find_empty_state(&ne->fs) || !cmd_find_valid_state(&ne->fs)) @@ -50,26 +71,31 @@ notify_hook1(struct cmdq_item *item, struct notify_entry *ne) else cmd_find_copy_state(&fs, &ne->fs); - hook = hooks_find(hooks_get(fs.s), ne->name); - if (hook == NULL) + if (fs.s == NULL) + oo = global_s_options; + else + oo = fs.s->options; + o = options_get(oo, ne->name); + if (o == NULL) return; - log_debug("notify hook %s", ne->name); - new_item = cmdq_get_command(hook->cmdlist, &fs, NULL, CMDQ_NOHOOKS); - cmdq_format(new_item, "hook", "%s", ne->name); + a = options_array_first(o); + while (a != NULL) { + cmdlist = options_array_item_value(a)->cmdlist; + if (cmdlist == NULL) { + a = options_array_next(a); + continue; + } - if (s != NULL) { - cmdq_format(new_item, "hook_session", "$%u", s->id); - cmdq_format(new_item, "hook_session_name", "%s", s->name); - } - if (w != NULL) { - cmdq_format(new_item, "hook_window", "@%u", w->id); - cmdq_format(new_item, "hook_window_name", "%s", w->name); - } - if (ne->pane != -1) - cmdq_format(new_item, "hook_pane", "%%%d", ne->pane); + new_item = cmdq_get_command(cmdlist, &fs, NULL, CMDQ_NOHOOKS); + cmdq_format(new_item, "hook", "%s", ne->name); + notify_hook_formats(new_item, s, w, ne->pane); - cmdq_insert_after(item, new_item); + cmdq_insert_after(item, new_item); + item = new_item; + + a = options_array_next(a); + } } static enum cmd_retval @@ -102,7 +128,7 @@ notify_callback(struct cmdq_item *item, void *data) if (strcmp(ne->name, "session-window-changed") == 0) control_notify_session_window_changed(ne->session); - notify_hook1(item, ne); + notify_insert_hook(item, ne); if (ne->client != NULL) server_client_unref(ne->client); @@ -169,7 +195,7 @@ notify_hook(struct cmdq_item *item, const char *name) ne.window = item->target.w; ne.pane = item->target.wp->id; - notify_hook1(item, &ne); + notify_insert_hook(item, &ne); } void diff --git a/options-table.c b/options-table.c index 03e0dbad24..788e231f58 100644 --- a/options-table.c +++ b/options-table.c @@ -130,8 +130,19 @@ static const char *options_table_status_format_default[] = { OPTIONS_TABLE_STATUS_FORMAT1, OPTIONS_TABLE_STATUS_FORMAT2, NULL }; +/* Helper for hook options. */ +#define OPTIONS_TABLE_HOOK(hook_name, default_value) \ + { .name = hook_name, \ + .type = OPTIONS_TABLE_COMMAND, \ + .scope = OPTIONS_TABLE_SESSION, \ + .flags = OPTIONS_TABLE_IS_ARRAY|OPTIONS_TABLE_IS_HOOK, \ + .default_str = default_value, \ + .separator = "" \ + } + /* Top-level options. */ const struct options_table_entry options_table[] = { + /* Server options. */ { .name = "buffer-limit", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SERVER, @@ -224,6 +235,7 @@ const struct options_table_entry options_table[] = { .separator = "," }, + /* Session options. */ { .name = "activity-action", .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_SESSION, @@ -542,6 +554,7 @@ const struct options_table_entry options_table[] = { .default_str = " -_@" }, + /* Window options. */ { .name = "aggressive-resize", .type = OPTIONS_TABLE_FLAG, .scope = OPTIONS_TABLE_WINDOW, @@ -776,5 +789,66 @@ const struct options_table_entry options_table[] = { .default_num = 1 }, + /* Hook options. */ + OPTIONS_TABLE_HOOK("after-bind-key", ""), + OPTIONS_TABLE_HOOK("after-capture-pane", ""), + OPTIONS_TABLE_HOOK("after-copy-mode", ""), + OPTIONS_TABLE_HOOK("after-display-message", ""), + OPTIONS_TABLE_HOOK("after-display-panes", ""), + OPTIONS_TABLE_HOOK("after-list-buffers", ""), + OPTIONS_TABLE_HOOK("after-list-clients", ""), + OPTIONS_TABLE_HOOK("after-list-keys", ""), + OPTIONS_TABLE_HOOK("after-list-panes", ""), + OPTIONS_TABLE_HOOK("after-list-sessions", ""), + OPTIONS_TABLE_HOOK("after-list-windows", ""), + OPTIONS_TABLE_HOOK("after-load-buffer", ""), + OPTIONS_TABLE_HOOK("after-lock-server", ""), + OPTIONS_TABLE_HOOK("after-new-session", ""), + OPTIONS_TABLE_HOOK("after-new-window", ""), + OPTIONS_TABLE_HOOK("after-paste-buffer", ""), + OPTIONS_TABLE_HOOK("after-pipe-pane", ""), + OPTIONS_TABLE_HOOK("after-queue", ""), + OPTIONS_TABLE_HOOK("after-refresh-client", ""), + OPTIONS_TABLE_HOOK("after-rename-session", ""), + OPTIONS_TABLE_HOOK("after-rename-window", ""), + OPTIONS_TABLE_HOOK("after-resize-pane", ""), + OPTIONS_TABLE_HOOK("after-resize-window", ""), + OPTIONS_TABLE_HOOK("after-save-buffer", ""), + OPTIONS_TABLE_HOOK("after-select-layout", ""), + OPTIONS_TABLE_HOOK("after-select-pane", ""), + OPTIONS_TABLE_HOOK("after-select-window", ""), + OPTIONS_TABLE_HOOK("after-send-keys", ""), + OPTIONS_TABLE_HOOK("after-set-buffer", ""), + OPTIONS_TABLE_HOOK("after-set-environment", ""), + OPTIONS_TABLE_HOOK("after-set-hook", ""), + OPTIONS_TABLE_HOOK("after-set-option", ""), + OPTIONS_TABLE_HOOK("after-show-environment", ""), + OPTIONS_TABLE_HOOK("after-show-messages", ""), + OPTIONS_TABLE_HOOK("after-show-options", ""), + OPTIONS_TABLE_HOOK("after-split-window", ""), + OPTIONS_TABLE_HOOK("after-unbind-key", ""), + OPTIONS_TABLE_HOOK("alert-activity", ""), + OPTIONS_TABLE_HOOK("alert-bell", ""), + OPTIONS_TABLE_HOOK("alert-silence", ""), + OPTIONS_TABLE_HOOK("client-attached", ""), + OPTIONS_TABLE_HOOK("client-detached", ""), + OPTIONS_TABLE_HOOK("client-resized", ""), + OPTIONS_TABLE_HOOK("client-session-changed", ""), + OPTIONS_TABLE_HOOK("pane-died", ""), + OPTIONS_TABLE_HOOK("pane-exited", ""), + OPTIONS_TABLE_HOOK("pane-focus-in", ""), + OPTIONS_TABLE_HOOK("pane-focus-out", ""), + OPTIONS_TABLE_HOOK("pane-mode-changed", ""), + OPTIONS_TABLE_HOOK("pane-set-clipboard", ""), + OPTIONS_TABLE_HOOK("session-closed", ""), + OPTIONS_TABLE_HOOK("session-created", ""), + OPTIONS_TABLE_HOOK("session-renamed", ""), + OPTIONS_TABLE_HOOK("session-window-changed", ""), + OPTIONS_TABLE_HOOK("window-layout-changed", ""), + OPTIONS_TABLE_HOOK("window-linked", ""), + OPTIONS_TABLE_HOOK("window-pane-changed", ""), + OPTIONS_TABLE_HOOK("window-renamed", ""), + OPTIONS_TABLE_HOOK("window-unlinked", ""), + { .name = NULL } }; diff --git a/options.c b/options.c index fb271d5eb4..c5a776e5c8 100644 --- a/options.c +++ b/options.c @@ -76,6 +76,9 @@ static struct options_entry *options_add(struct options *, const char *); #define OPTIONS_IS_STYLE(o) \ ((o)->tableentry != NULL && \ (o)->tableentry->type == OPTIONS_TABLE_STYLE) +#define OPTIONS_IS_COMMAND(o) \ + ((o)->tableentry != NULL && \ + (o)->tableentry->type == OPTIONS_TABLE_COMMAND) #define OPTIONS_IS_ARRAY(o) \ ((o)->tableentry != NULL && \ @@ -108,6 +111,8 @@ options_value_free(struct options_entry *o, union options_value *ov) { if (OPTIONS_IS_STRING(o)) free(ov->string); + if (OPTIONS_IS_COMMAND(o) && ov->cmdlist != NULL) + cmd_list_free(ov->cmdlist); } static char * @@ -116,6 +121,8 @@ options_value_tostring(struct options_entry *o, union options_value *ov, { char *s; + if (OPTIONS_IS_COMMAND(o)) + return (cmd_list_print(ov->cmdlist)); if (OPTIONS_IS_STYLE(o)) return (xstrdup(style_tostring(&ov->style))); if (OPTIONS_IS_NUMBER(o)) { @@ -140,6 +147,7 @@ options_value_tostring(struct options_entry *o, union options_value *ov, break; case OPTIONS_TABLE_STRING: case OPTIONS_TABLE_STYLE: + case OPTIONS_TABLE_COMMAND: fatalx("not a number option type"); } return (s); @@ -231,11 +239,12 @@ options_default(struct options *oo, const struct options_table_entry *oe) ov = &o->value; if (oe->flags & OPTIONS_TABLE_IS_ARRAY) { - if (oe->default_arr != NULL) { - for (i = 0; oe->default_arr[i] != NULL; i++) - options_array_set(o, i, oe->default_arr[i], 0); - } else - options_array_assign(o, oe->default_str); + if (oe->default_arr == NULL) { + options_array_assign(o, oe->default_str, NULL); + return (o); + } + for (i = 0; oe->default_arr[i] != NULL; i++) + options_array_set(o, i, oe->default_arr[i], 0, NULL); return (o); } @@ -340,13 +349,22 @@ options_array_get(struct options_entry *o, u_int idx) int options_array_set(struct options_entry *o, u_int idx, const char *value, - int append) + int append, char **cause) { struct options_array_item *a; char *new; + struct cmd_list *cmdlist; - if (!OPTIONS_IS_ARRAY(o)) + if (!OPTIONS_IS_ARRAY(o)) { + *cause = xstrdup("not an array"); return (-1); + } + + if (OPTIONS_IS_COMMAND(o)) { + cmdlist = cmd_string_parse(value, NULL, 0, cause); + if (cmdlist == NULL && *cause != NULL) + return (-1); + } a = options_array_item(o, idx); if (value == NULL) { @@ -355,25 +373,29 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, return (0); } - if (a == NULL) { - a = xcalloc(1, sizeof *a); - a->index = idx; - a->value.string = xstrdup(value); - RB_INSERT(options_array, &o->value.array, a); - } else { - options_value_free(o, &a->value); + if (OPTIONS_IS_STRING(o)) { if (a != NULL && append) xasprintf(&new, "%s%s", a->value.string, value); else new = xstrdup(value); - a->value.string = new; } + if (a == NULL) { + a = xcalloc(1, sizeof *a); + a->index = idx; + RB_INSERT(options_array, &o->value.array, a); + } else + options_value_free(o, &a->value); + + if (OPTIONS_IS_STRING(o)) + a->value.string = new; + else if (OPTIONS_IS_COMMAND(o)) + a->value.cmdlist = cmdlist; return (0); } -void -options_array_assign(struct options_entry *o, const char *s) +int +options_array_assign(struct options_entry *o, const char *s, char **cause) { const char *separator; char *copy, *next, *string; @@ -382,7 +404,18 @@ options_array_assign(struct options_entry *o, const char *s) separator = o->tableentry->separator; if (separator == NULL) separator = " ,"; + if (*separator == '\0') { + if (*s == '\0') + return (0); + for (i = 0; i < UINT_MAX; i++) { + if (options_array_item(o, i) == NULL) + break; + } + return (options_array_set(o, i, s, 0, cause)); + } + if (*s == '\0') + return (0); copy = string = xstrdup(s); while ((next = strsep(&string, separator)) != NULL) { if (*next == '\0') @@ -393,9 +426,13 @@ options_array_assign(struct options_entry *o, const char *s) } if (i == UINT_MAX) break; - options_array_set(o, i, next, 0); + if (options_array_set(o, i, next, 0, cause) != 0) { + free(copy); + return (-1); + } } free(copy); + return (0); } struct options_array_item * diff --git a/session.c b/session.c index dddf18b055..b1f49e4161 100644 --- a/session.c +++ b/session.c @@ -129,7 +129,6 @@ session_create(const char *prefix, const char *name, const char *cwd, s->environ = env; s->options = oo; - s->hooks = hooks_create(global_hooks); status_update_cache(s); @@ -193,9 +192,7 @@ session_free(__unused int fd, __unused short events, void *arg) if (s->references == 0) { environ_free(s->environ); - options_free(s->options); - hooks_free(s->hooks); free(s->name); free(s); diff --git a/status.c b/status.c index 34ed377805..89912114bb 100644 --- a/status.c +++ b/status.c @@ -1323,7 +1323,7 @@ status_prompt_complete_list(u_int *size, const char *s) while (a != NULL) { value = options_array_item_value(a)->string; if ((cp = strchr(value, '=')) == NULL) - goto next; + goto next; valuelen = cp - value; if (slen > valuelen || strncmp(value, s, slen) != 0) goto next; diff --git a/tmux.1 b/tmux.1 index d68e649765..e5343991a6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3383,7 +3383,7 @@ function key sequences; these have a number included to indicate modifiers such as Shift, Alt or Ctrl. .El .It Xo Ic show-options -.Op Fl gqsvw +.Op Fl gHqsvw .Op Fl t Ar target-session | Ar target-window .Op Ar option .Xc @@ -3415,6 +3415,8 @@ If is set, no error will be returned if .Ar option is unset. +.Fl H +includes hooks (omitted by default). .It Xo Ic show-window-options .Op Fl gv .Op Fl t Ar target-window @@ -3439,6 +3441,26 @@ commands have an .Em after hook and there are a number of hooks not associated with commands. .Pp +Hooks are stored as array options, members of the array are executed in +order when the hook is triggered. +Hooks may be configured with the +.Ic set-hook +or +.Ic set-option +commands and displayed with +.Ic show-hooks +or +.Ic show-options +.Fl H . +The following two commands are equivalent: +.Bd -literal -offset indent. +set-hook -g pane-mode-changed[42] 'set -g status-left-style bg=red' +set-option -g pane-mode-changed[42] 'set -g status-left-style bg=red' +.Ed +.Pp +Setting a hook without specifying an array index clears the hook and sets the +first member of the array. +.Pp A command's after hook is run after it completes, except when the command is run as part of a hook itself. @@ -3449,7 +3471,7 @@ For example, the following command adds a hook to select the even-vertical layout after every .Ic split-window : .Bd -literal -offset indent -set-hook after-split-window "selectl even-vertical" +set-hook -g after-split-window "selectl even-vertical" .Ed .Pp All the notifications listed in the @@ -3513,7 +3535,7 @@ Run when a window is unlinked from a session. Hooks are managed with these commands: .Bl -tag -width Ds .It Xo Ic set-hook -.Op Fl gRu +.Op Fl agRu .Op Fl t Ar target-session .Ar hook-name .Ar command @@ -3535,6 +3557,8 @@ hooks (for .Ar target-session with .Fl t ) . +.Fl a +appends to a hook. Like options, session hooks inherit from the global ones. .Pp With diff --git a/tmux.c b/tmux.c index d7f8ab536f..ac8a131a32 100644 --- a/tmux.c +++ b/tmux.c @@ -39,7 +39,6 @@ struct options *global_options; /* server options */ struct options *global_s_options; /* session options */ struct options *global_w_options; /* window options */ struct environ *global_environ; -struct hooks *global_hooks; struct timeval start_time; const char *socket_path; @@ -312,8 +311,6 @@ main(int argc, char **argv) flags |= CLIENT_UTF8; } - global_hooks = hooks_create(NULL); - global_environ = environ_create(); for (var = environ; *var != NULL; var++) environ_put(global_environ, *var); diff --git a/tmux.h b/tmux.h index ab8142f75c..550c93324a 100644 --- a/tmux.h +++ b/tmux.h @@ -683,15 +683,6 @@ struct style { u_int range_argument; }; -/* Hook data structures. */ -struct hook { - const char *name; - - struct cmd_list *cmdlist; - - RB_ENTRY(hook) entry; -}; - /* Virtual screen. */ struct screen_sel; struct screen_titles; @@ -995,7 +986,6 @@ struct session { int statusat; u_int statuslines; - struct hooks *hooks; struct options *options; #define SESSION_PASTING 0x1 @@ -1521,6 +1511,7 @@ union options_value { long long number; struct style style; struct options_array array; + struct cmd_list *cmdlist; }; /* Option table entries. */ @@ -1531,17 +1522,19 @@ enum options_table_type { OPTIONS_TABLE_COLOUR, OPTIONS_TABLE_FLAG, OPTIONS_TABLE_CHOICE, - OPTIONS_TABLE_STYLE + OPTIONS_TABLE_STYLE, + OPTIONS_TABLE_COMMAND }; enum options_table_scope { OPTIONS_TABLE_NONE, OPTIONS_TABLE_SERVER, OPTIONS_TABLE_SESSION, - OPTIONS_TABLE_WINDOW, + OPTIONS_TABLE_WINDOW }; #define OPTIONS_TABLE_IS_ARRAY 0x1 +#define OPTIONS_TABLE_IS_HOOK 0x2 struct options_table_entry { const char *name; @@ -1599,7 +1592,6 @@ struct spawn_context { }; /* tmux.c */ -extern struct hooks *global_hooks; extern struct options *global_options; extern struct options *global_s_options; extern struct options *global_w_options; @@ -1693,20 +1685,6 @@ u_int format_width(const char *); char *format_trim_left(const char *, u_int); char *format_trim_right(const char *, u_int); -/* hooks.c */ -struct hook; -struct hooks *hooks_get(struct session *); -struct hooks *hooks_create(struct hooks *); -void hooks_free(struct hooks *); -struct hook *hooks_first(struct hooks *); -struct hook *hooks_next(struct hook *); -void hooks_add(struct hooks *, const char *, struct cmd_list *); -void hooks_copy(struct hooks *, struct hooks *); -void hooks_remove(struct hooks *, const char *); -struct hook *hooks_find(struct hooks *, const char *); -void printflike(4, 5) hooks_insert(struct hooks *, struct cmdq_item *, - struct cmd_find_state *, const char *, ...); - /* notify.c */ void notify_hook(struct cmdq_item *, const char *); void notify_input(struct window_pane *, struct evbuffer *); @@ -1734,8 +1712,9 @@ void options_remove(struct options_entry *); void options_array_clear(struct options_entry *); union options_value *options_array_get(struct options_entry *, u_int); int options_array_set(struct options_entry *, u_int, const char *, - int); -void options_array_assign(struct options_entry *, const char *); + int, char **); +int options_array_assign(struct options_entry *, const char *, + char **); struct options_array_item *options_array_first(struct options_entry *); struct options_array_item *options_array_next(struct options_array_item *); u_int options_array_item_index(struct options_array_item *); @@ -1956,6 +1935,8 @@ struct cmdq_item *cmdq_get_command(struct cmd_list *, struct cmd_find_state *, struct cmdq_item *cmdq_get_callback1(const char *, cmdq_cb, void *); void cmdq_insert_after(struct cmdq_item *, struct cmdq_item *); void cmdq_append(struct client *, struct cmdq_item *); +void cmdq_insert_hook(struct session *, struct cmdq_item *, + struct cmd_find_state *, const char *, ...); void printflike(3, 4) cmdq_format(struct cmdq_item *, const char *, const char *, ...); u_int cmdq_next(struct client *); From 293fd0d258e8cfdcbfe7ea37cdcc29ffa84ce9f2 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 26 Apr 2019 12:44:25 +0100 Subject: [PATCH 461/836] Update CHANGES and TODO. --- CHANGES | 6 ++++++ TODO | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index b4a0d76751..ee1945f380 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,11 @@ CHANGES FROM 2.9 to X.X +* Hooks are now stored in the options tree as array options, allowing them to + have multiple separate commands. set-hook and show-hooks remain but + set-option and show-options can now also be used (show-options will only show + hooks if given the -H flag). Hooks with multiple commands are run in index + order. + * Automatically scroll if dragging to create a selection with the mouse and the cursor reaches the top or bottom line. diff --git a/TODO b/TODO index 220e4eb91d..59c31cc85b 100644 --- a/TODO +++ b/TODO @@ -147,7 +147,6 @@ TODO soonish maybe: -- Store hooks as options, issue 1619. - -E flag to pass environment to new-*, issue 1498. - Copy mode searching is slow when there is a big history, issue 1545. - Grid "block" stuff, issue 1269. Can be used potentially for compression of From c4b0da5513ee4c9692f0980408b0da2ee7e3a553 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 28 Apr 2019 20:05:50 +0000 Subject: [PATCH 462/836] Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697. --- arguments.c | 157 ++++++++++++++++++++++++++++++------------- cmd-new-window.c | 17 +++-- cmd-respawn-pane.c | 16 ++++- cmd-respawn-window.c | 16 ++++- cmd-split-window.c | 15 ++++- spawn.c | 2 + tmux.1 | 28 +++++++- tmux.h | 4 ++ 8 files changed, 192 insertions(+), 63 deletions(-) diff --git a/arguments.c b/arguments.c index c0a09729ee..f7288e81a7 100644 --- a/arguments.c +++ b/arguments.c @@ -29,9 +29,15 @@ * Manipulate command arguments. */ +struct args_value { + char *value; + TAILQ_ENTRY(args_value) entry; +}; +TAILQ_HEAD(args_values, args_value); + struct args_entry { u_char flag; - char *value; + struct args_values values; RB_ENTRY(args_entry) entry; }; @@ -93,12 +99,18 @@ args_free(struct args *args) { struct args_entry *entry; struct args_entry *entry1; + struct args_value *value; + struct args_value *value1; cmd_free_argv(args->argc, args->argv); RB_FOREACH_SAFE(entry, args_tree, &args->tree, entry1) { RB_REMOVE(args_tree, &args->tree, entry); - free(entry->value); + TAILQ_FOREACH_SAFE(value, &entry->values, entry, value1) { + TAILQ_REMOVE(&entry->values, value, entry); + free(value->value); + free(value); + } free(entry); } @@ -124,22 +136,69 @@ args_print_add(char **buf, size_t *len, const char *fmt, ...) free(s); } +/* Add value to string. */ +static void +args_print_add_value(char **buf, size_t *len, struct args_entry *entry, + struct args_value *value) +{ + static const char quoted[] = " #\"';$"; + char *escaped; + int flags; + + if (**buf != '\0') + args_print_add(buf, len, " -%c ", entry->flag); + else + args_print_add(buf, len, "-%c ", entry->flag); + + flags = VIS_OCTAL|VIS_TAB|VIS_NL; + if (value->value[strcspn(value->value, quoted)] != '\0') + flags |= VIS_DQ; + utf8_stravis(&escaped, value->value, flags); + if (flags & VIS_DQ) + args_print_add(buf, len, "\"%s\"", escaped); + else + args_print_add(buf, len, "%s", escaped); + free(escaped); +} + +/* Add argument to string. */ +static void +args_print_add_argument(char **buf, size_t *len, const char *argument) +{ + static const char quoted[] = " #\"';$"; + char *escaped; + int flags; + + if (**buf != '\0') + args_print_add(buf, len, " "); + + flags = VIS_OCTAL|VIS_TAB|VIS_NL; + if (argument[strcspn(argument, quoted)] != '\0') + flags |= VIS_DQ; + utf8_stravis(&escaped, argument, flags); + if (flags & VIS_DQ) + args_print_add(buf, len, "\"%s\"", escaped); + else + args_print_add(buf, len, "%s", escaped); + free(escaped); +} + /* Print a set of arguments. */ char * args_print(struct args *args) { size_t len; - char *buf, *escaped; - int i, flags; + char *buf; + int i; struct args_entry *entry; - static const char quoted[] = " #\"';$"; + struct args_value *value; len = 1; buf = xcalloc(1, len); /* Process the flags first. */ RB_FOREACH(entry, args_tree, &args->tree) { - if (entry->value != NULL) + if (!TAILQ_EMPTY(&entry->values)) continue; if (*buf == '\0') @@ -149,40 +208,13 @@ args_print(struct args *args) /* Then the flags with arguments. */ RB_FOREACH(entry, args_tree, &args->tree) { - if (entry->value == NULL) - continue; - - if (*buf != '\0') - args_print_add(&buf, &len, " -%c ", entry->flag); - else - args_print_add(&buf, &len, "-%c ", entry->flag); - - flags = VIS_OCTAL|VIS_TAB|VIS_NL; - if (entry->value[strcspn(entry->value, quoted)] != '\0') - flags |= VIS_DQ; - utf8_stravis(&escaped, entry->value, flags); - if (flags & VIS_DQ) - args_print_add(&buf, &len, "\"%s\"", escaped); - else - args_print_add(&buf, &len, "%s", escaped); - free(escaped); + TAILQ_FOREACH(value, &entry->values, entry) + args_print_add_value(&buf, &len, entry, value); } /* And finally the argument vector. */ - for (i = 0; i < args->argc; i++) { - if (*buf != '\0') - args_print_add(&buf, &len, " "); - - flags = VIS_OCTAL|VIS_TAB|VIS_NL; - if (args->argv[i][strcspn(args->argv[i], quoted)] != '\0') - flags |= VIS_DQ; - utf8_stravis(&escaped, args->argv[i], flags); - if (flags & VIS_DQ) - args_print_add(&buf, &len, "\"%s\"", escaped); - else - args_print_add(&buf, &len, "%s", escaped); - free(escaped); - } + for (i = 0; i < args->argc; i++) + args_print_add_argument(&buf, &len, args->argv[i]); return (buf); } @@ -196,22 +228,24 @@ args_has(struct args *args, u_char ch) /* Set argument value in the arguments tree. */ void -args_set(struct args *args, u_char ch, const char *value) +args_set(struct args *args, u_char ch, const char *s) { struct args_entry *entry; + struct args_value *value; - /* Replace existing argument. */ - if ((entry = args_find(args, ch)) != NULL) { - free(entry->value); - entry->value = NULL; - } else { + entry = args_find(args, ch); + if (entry == NULL) { entry = xcalloc(1, sizeof *entry); entry->flag = ch; + TAILQ_INIT(&entry->values); RB_INSERT(args_tree, &args->tree, entry); } - if (value != NULL) - entry->value = xstrdup(value); + if (s != NULL) { + value = xcalloc(1, sizeof *value); + value->value = xstrdup(s); + TAILQ_INSERT_TAIL(&entry->values, value, entry); + } } /* Get argument value. Will be NULL if it isn't present. */ @@ -222,7 +256,34 @@ args_get(struct args *args, u_char ch) if ((entry = args_find(args, ch)) == NULL) return (NULL); - return (entry->value); + return (TAILQ_LAST(&entry->values, args_values)->value); +} + +/* Get first value in argument. */ +const char * +args_first_value(struct args *args, u_char ch, struct args_value **value) +{ + struct args_entry *entry; + + if ((entry = args_find(args, ch)) == NULL) + return (NULL); + + *value = TAILQ_FIRST(&entry->values); + if (*value == NULL) + return (NULL); + return ((*value)->value); +} + +/* Get next value in argument. */ +const char * +args_next_value(struct args_value **value) +{ + if (*value == NULL) + return (NULL); + *value = TAILQ_NEXT(*value, entry); + if (*value == NULL) + return (NULL); + return ((*value)->value); } /* Convert an argument value to a number. */ @@ -233,13 +294,15 @@ args_strtonum(struct args *args, u_char ch, long long minval, long long maxval, const char *errstr; long long ll; struct args_entry *entry; + struct args_value *value; if ((entry = args_find(args, ch)) == NULL) { *cause = xstrdup("missing"); return (0); } + value = TAILQ_LAST(&entry->values, args_values); - ll = strtonum(entry->value, minval, maxval, &errstr); + ll = strtonum(value->value, minval, maxval, &errstr); if (errstr != NULL) { *cause = xstrdup(errstr); return (0); diff --git a/cmd-new-window.c b/cmd-new-window.c index 1007c5977f..6cb33dd962 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -38,9 +38,9 @@ const struct cmd_entry cmd_new_window_entry = { .name = "new-window", .alias = "neww", - .args = { "ac:dF:kn:Pt:", 0, -1 }, - .usage = "[-adkP] [-c start-directory] [-F format] [-n window-name] " - CMD_TARGET_WINDOW_USAGE " [command]", + .args = { "ac:de:F:kn:Pt:", 0, -1 }, + .usage = "[-adkP] [-c start-directory] [-e environment] [-F format] " + "[-n window-name] " CMD_TARGET_WINDOW_USAGE " [command]", .target = { 't', CMD_FIND_WINDOW, CMD_FIND_WINDOW_INDEX }, @@ -60,8 +60,9 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) int idx = item->target.idx; struct winlink *new_wl; char *cause = NULL, *cp; - const char *template; + const char *template, *add; struct cmd_find_state fs; + struct args_value *value; if (args_has(args, 'a') && (idx = winlink_shuffle_up(s, wl)) == -1) { cmdq_error(item, "couldn't get a window index"); @@ -75,6 +76,13 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) sc.name = args_get(args, 'n'); sc.argc = args->argc; sc.argv = args->argv; + sc.environ = environ_create(); + + add = args_first_value(args, 'e', &value); + while (add != NULL) { + environ_put(sc.environ, add); + add = args_next_value(&value); + } sc.idx = idx; sc.cwd = args_get(args, 'c'); @@ -107,5 +115,6 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_winlink(&fs, new_wl, 0); cmdq_insert_hook(s, item, &fs, "after-new-window"); + environ_free(sc.environ); return (CMD_RETURN_NORMAL); } diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index 44234315c7..5e23fa15c7 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -34,9 +34,9 @@ const struct cmd_entry cmd_respawn_pane_entry = { .name = "respawn-pane", .alias = "respawnp", - .args = { "c:kt:", 0, -1 }, - .usage = "[-c start-directory] [-k] " CMD_TARGET_PANE_USAGE - " [command]", + .args = { "c:e:kt:", 0, -1 }, + .usage = "[-k] [-c start-directory] [-e environment] " + CMD_TARGET_PANE_USAGE " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -53,6 +53,8 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; char *cause = NULL; + const char *add; + struct args_value *value; memset(&sc, 0, sizeof sc); sc.item = item; @@ -65,6 +67,13 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) sc.name = NULL; sc.argc = args->argc; sc.argv = args->argv; + sc.environ = environ_create(); + + add = args_first_value(args, 'e', &value); + while (add != NULL) { + environ_put(sc.environ, add); + add = args_next_value(&value); + } sc.idx = -1; sc.cwd = args_get(args, 'c'); @@ -82,5 +91,6 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmdq_item *item) wp->flags |= PANE_REDRAW; server_status_window(wp->window); + environ_free(sc.environ); return (CMD_RETURN_NORMAL); } diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index 2ccb2fded4..aec22912a1 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -34,9 +34,9 @@ const struct cmd_entry cmd_respawn_window_entry = { .name = "respawn-window", .alias = "respawnw", - .args = { "c:kt:", 0, -1 }, - .usage = "[-c start-directory] [-k] " CMD_TARGET_WINDOW_USAGE - " [command]", + .args = { "c:e:kt:", 0, -1 }, + .usage = "[-k] [-c start-directory] [-e environment] " + CMD_TARGET_WINDOW_USAGE " [command]", .target = { 't', CMD_FIND_WINDOW, 0 }, @@ -52,6 +52,8 @@ cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; char *cause = NULL; + const char *add; + struct args_value *value; memset(&sc, 0, sizeof sc); sc.item = item; @@ -61,6 +63,13 @@ cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) sc.name = NULL; sc.argc = args->argc; sc.argv = args->argv; + sc.environ = environ_create(); + + add = args_first_value(args, 'e', &value); + while (add != NULL) { + environ_put(sc.environ, add); + add = args_next_value(&value); + } sc.idx = -1; sc.cwd = args_get(args, 'c'); @@ -77,5 +86,6 @@ cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) server_redraw_window(wl->window); + environ_free(sc.environ); return (CMD_RETURN_NORMAL); } diff --git a/cmd-split-window.c b/cmd-split-window.c index 597a5c96c1..3b9040dcd1 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -40,8 +40,8 @@ const struct cmd_entry cmd_split_window_entry = { .name = "split-window", .alias = "splitw", - .args = { "bc:dfF:l:hp:Pt:v", 0, -1 }, - .usage = "[-bdfhvP] [-c start-directory] [-F format] " + .args = { "bc:de:fF:l:hp:Pt:v", 0, -1 }, + .usage = "[-bdefhvP] [-c start-directory] [-e environment] [-F format] " "[-p percentage|-l size] " CMD_TARGET_PANE_USAGE " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -64,8 +64,9 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) struct layout_cell *lc; struct cmd_find_state fs; int size, percentage, flags; - const char *template; + const char *template, *add; char *cause, *cp; + struct args_value *value; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; @@ -117,6 +118,13 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) sc.name = NULL; sc.argc = args->argc; sc.argv = args->argv; + sc.environ = environ_create(); + + add = args_first_value(args, 'e', &value); + while (add != NULL) { + environ_put(sc.environ, add); + add = args_next_value(&value); + } sc.idx = -1; sc.cwd = args_get(args, 'c'); @@ -146,5 +154,6 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmd_find_from_winlink_pane(&fs, wl, new_wp, 0); cmdq_insert_hook(s, item, &fs, "after-split-window"); + environ_free(sc.environ); return (CMD_RETURN_NORMAL); } diff --git a/spawn.c b/spawn.c index 0565fee386..8e577ff561 100644 --- a/spawn.c +++ b/spawn.c @@ -293,6 +293,8 @@ spawn_pane(struct spawn_context *sc, char **cause) /* Create an environment for this pane. */ child = environ_for_session(s, 0); + if (sc->environ != NULL) + environ_copy(sc->environ, child); environ_set(child, "TMUX_PANE", "%%%u", new_wp->id); /* diff --git a/tmux.1 b/tmux.1 index e5343991a6..80e51a6978 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1784,6 +1784,7 @@ option. .It Xo Ic new-window .Op Fl adkP .Op Fl c Ar start-directory +.Op Fl e Ar environment .Op Fl F Ar format .Op Fl n Ar window-name .Op Fl t Ar target-window @@ -1823,6 +1824,12 @@ See the .Ic remain-on-exit option to change this behaviour. .Pp +.Fl e +takes the form +.Ql VARIABLE=value +and sets an environment variable for the newly created window; it may be +specified multiple times. +.Pp The .Ev TERM environment variable must be set to @@ -1835,7 +1842,9 @@ for all programs running New windows will automatically have .Ql TERM=screen added to their environment, but care must be taken not to reset this in shell -start-up files. +start-up files or by the +.Fl e +option. .Pp The .Fl P @@ -1994,8 +2003,9 @@ This command will automatically set .Ic window-size to manual in the window options. .It Xo Ic respawn-pane -.Op Fl c Ar start-directory .Op Fl k +.Op Fl c Ar start-directory +.Op Fl e Ar environment .Op Fl t Ar target-pane .Op Ar shell-command .Xc @@ -2011,9 +2021,15 @@ The pane must be already inactive, unless is given, in which case any existing command is killed. .Fl c specifies a new working directory for the pane. +The +.Fl e +option has the same meaning as for the +.Ic new-window +command. .It Xo Ic respawn-window -.Op Fl c Ar start-directory .Op Fl k +.Op Fl c Ar start-directory +.Op Fl e Ar environment .Op Fl t Ar target-window .Op Ar shell-command .Xc @@ -2029,6 +2045,11 @@ The window must be already inactive, unless is given, in which case any existing command is killed. .Fl c specifies a new working directory for the window. +The +.Fl e +option has the same meaning as for the +.Ic new-window +command. .It Xo Ic rotate-window .Op Fl DU .Op Fl t Ar target-window @@ -2147,6 +2168,7 @@ the command behaves like .It Xo Ic split-window .Op Fl bdfhvP .Op Fl c Ar start-directory +.Op Fl e Ar environment .Oo Fl l .Ar size | .Fl p Ar percentage Oc diff --git a/tmux.h b/tmux.h index 550c93324a..0e79d42955 100644 --- a/tmux.h +++ b/tmux.h @@ -37,6 +37,7 @@ extern char **environ; struct args; +struct args_value; struct client; struct cmd_find_state; struct cmdq_item; @@ -1578,6 +1579,7 @@ struct spawn_context { const char *name; char **argv; int argc; + struct environ *environ; int idx; const char *cwd; @@ -1871,6 +1873,8 @@ void args_free(struct args *); char *args_print(struct args *); int args_has(struct args *, u_char); const char *args_get(struct args *, u_char); +const char *args_first_value(struct args *, u_char, struct args_value **); +const char *args_next_value(struct args_value **); long long args_strtonum(struct args *, u_char, long long, long long, char **); From 2cecabd75ecb19e46c221c76f642807869ae63e6 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 28 Apr 2019 22:16:12 +0100 Subject: [PATCH 463/836] Fix gseq use in RGB colour script. --- tools/24-bit-color.sh | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/tools/24-bit-color.sh b/tools/24-bit-color.sh index b83ef51f8f..3e91da20bb 100644 --- a/tools/24-bit-color.sh +++ b/tools/24-bit-color.sh @@ -14,9 +14,23 @@ # https://github.com/gnachman/iTerm2/blob/master/LICENSE # -if which gseq >/dev/null 2>&1 -then - SEQ=gseq +SEQ1= +if which gseq >/dev/null 2>&1; then + SEQ1=gseq +elif seq --version|grep -q GNU; then + SEQ1=seq +fi +if [ -n "$SEQ1" ]; then + # GNU seq requires a -ve increment if going backwards + seq1() + { + if [ $1 -gt $2 ]; then + $SEQ1 $1 -1 $2 + else + $SEQ1 $1 $2 + fi + } + SEQ=seq1 else SEQ=seq fi From ec81bd2399d2b038d03f85177bf0c33c3e530737 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 29 Apr 2019 06:55:21 +0000 Subject: [PATCH 464/836] Add support for keys to jump between matching brackets - C-M-f and C-M-b in emacs, % in vi. Suggested by and help from Chris Barber in GitHub issue 1666. --- key-bindings.c | 3 + window-copy.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 225 insertions(+), 1 deletion(-) diff --git a/key-bindings.c b/key-bindings.c index fbc54fb814..5af8f3ed86 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -335,7 +335,9 @@ key_bindings_init(void) "bind -Tcopy-mode M-> send -X history-bottom", "bind -Tcopy-mode M-R send -X top-line", "bind -Tcopy-mode M-b send -X previous-word", + "bind -Tcopy-mode C-M-b send -X previous-matching-bracket", "bind -Tcopy-mode M-f send -X next-word-end", + "bind -Tcopy-mode C-M-f send -X next-matching-bracket", "bind -Tcopy-mode M-m send -X back-to-indentation", "bind -Tcopy-mode M-r send -X middle-line", "bind -Tcopy-mode M-v send -X page-up", @@ -408,6 +410,7 @@ key_bindings_init(void) "bind -Tcopy-mode-vi w send -X next-word", "bind -Tcopy-mode-vi { send -X previous-paragraph", "bind -Tcopy-mode-vi } send -X next-paragraph", + "bind -Tcopy-mode-vi % send -X next-matching-bracket", "bind -Tcopy-mode-vi MouseDown1Pane select-pane", "bind -Tcopy-mode-vi MouseDrag1Pane select-pane\\; send -X begin-selection", "bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-selection-and-cancel", diff --git a/window-copy.c b/window-copy.c index 741e2bfdef..82b4765cbd 100644 --- a/window-copy.c +++ b/window-copy.c @@ -223,7 +223,7 @@ struct window_copy_mode_data { int searchtype; char *searchstr; - bitstr_t *searchmark; + bitstr_t *searchmark; u_int searchcount; int searchthis; int searchx; @@ -994,6 +994,218 @@ window_copy_cmd_middle_line(struct window_copy_cmd_state *cs) return (WINDOW_COPY_CMD_REDRAW); } +static enum window_copy_cmd_action +window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + struct window_copy_mode_data *data = wme->data; + struct screen *s = data->backing; + char open[] = "{[(", close[] = "}])"; + char tried, found, start, *cp; + u_int px, py, xx, yy, n; + struct grid_cell gc; + int failed; + + for (; np != 0; np--) { + /* Get cursor position and line length. */ + px = data->cx; + py = screen_hsize(s) + data->cy - data->oy; + xx = window_copy_find_length(wme, py); + yy = screen_hsize(s) + screen_size_y(s) - 1; + if (xx == 0) + break; + + /* + * Get the current character. If not on a bracket, try the + * previous. If still not, then behave like previous-word. + */ + tried = 0; + retry: + grid_get_cell(s->grid, px, py, &gc); + if (gc.data.size != 1 || (gc.flags & GRID_FLAG_PADDING)) + cp = NULL; + else { + found = *gc.data.data; + cp = strchr(close, found); + } + if (cp == NULL) { + if (data->modekeys == MODEKEY_EMACS) { + if (!tried && px > 0) { + px--; + tried = 1; + goto retry; + } + window_copy_cursor_previous_word(wme, "}]) "); + px = data->cx; + continue; + } + continue; + } + start = open[cp - close]; + + /* Walk backward until the matching bracket is reached. */ + n = 1; + failed = 0; + do { + if (px == 0) { + if (py == 0) { + failed = 1; + break; + } + do { + py--; + xx = window_copy_find_length(wme, py); + } while (xx == 0 && py > 0); + if (xx == 0 && py == 0) { + failed = 1; + break; + } + px = xx - 1; + } else + px--; + + grid_get_cell(s->grid, px, py, &gc); + if (gc.data.size == 1 && + (~gc.flags & GRID_FLAG_PADDING)) { + if (*gc.data.data == found) + n++; + else if (*gc.data.data == start) + n--; + } + } while (n != 0); + + /* Move the cursor to the found location if any. */ + if (!failed) + window_copy_scroll_to(wme, px, py); + } + + return (WINDOW_COPY_CMD_NOTHING); +} + + +static enum window_copy_cmd_action +window_copy_cmd_next_matching_bracket(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + u_int np = wme->prefix; + struct window_copy_mode_data *data = wme->data; + struct screen *s = data->backing; + char open[] = "{[(", close[] = "}])"; + char tried, found, end, *cp; + u_int px, py, xx, yy, sx, sy, n; + struct grid_cell gc; + int failed; + struct grid_line *gl; + + for (; np != 0; np--) { + /* Get cursor position and line length. */ + px = data->cx; + py = screen_hsize(s) + data->cy - data->oy; + xx = window_copy_find_length(wme, py); + yy = screen_hsize(s) + screen_size_y(s) - 1; + if (xx == 0) + break; + + /* + * Get the current character. If not on a bracket, try the + * next. If still not, then behave like next-word. + */ + tried = 0; + retry: + grid_get_cell(s->grid, px, py, &gc); + if (gc.data.size != 1 || (gc.flags & GRID_FLAG_PADDING)) + cp = NULL; + else { + found = *gc.data.data; + + /* + * In vi mode, attempt to move to previous bracket if a + * closing bracket is found first. If this fails, + * return to the original cursor position. + */ + cp = strchr(close, found); + if (cp != NULL && data->modekeys == MODEKEY_VI) { + sx = data->cx; + sy = screen_hsize(s) + data->cy - data->oy; + + window_copy_scroll_to(wme, px, py); + window_copy_cmd_previous_matching_bracket(cs); + + px = data->cx; + py = screen_hsize(s) + data->cy - data->oy; + grid_get_cell(s->grid, px, py, &gc); + if (gc.data.size != 1 || + (gc.flags & GRID_FLAG_PADDING) || + strchr(close, *gc.data.data) == NULL) + window_copy_scroll_to(wme, sx, sy); + break; + } + + cp = strchr(open, found); + } + if (cp == NULL) { + if (data->modekeys == MODEKEY_EMACS) { + if (!tried && px <= xx) { + px++; + tried = 1; + goto retry; + } + window_copy_cursor_next_word_end(wme, "{[( "); + px = data->cx; + continue; + } + /* For vi, continue searching for bracket until EOL. */ + if (px > xx) { + if (py == yy) + continue; + gl = grid_get_line(s->grid, py); + if (~gl->flags & GRID_LINE_WRAPPED) + continue; + if (gl->cellsize > s->grid->sx) + continue; + px = 0; + py++; + xx = window_copy_find_length(wme, py); + } else + px++; + goto retry; + } + end = close[cp - open]; + + /* Walk forward until the matching bracket is reached. */ + n = 1; + failed = 0; + do { + if (px > xx) { + if (py == yy) { + failed = 1; + break; + } + px = 0; + py++; + xx = window_copy_find_length(wme, py); + } else + px++; + + grid_get_cell(s->grid, px, py, &gc); + if (gc.data.size == 1 && + (~gc.flags & GRID_FLAG_PADDING)) { + if (*gc.data.data == found) + n++; + else if (*gc.data.data == end) + n--; + } + } while (n != 0); + + /* Move the cursor to the found location if any. */ + if (!failed) + window_copy_scroll_to(wme, px, py); + } + + return (WINDOW_COPY_CMD_NOTHING); +} + static enum window_copy_cmd_action window_copy_cmd_next_paragraph(struct window_copy_cmd_state *cs) { @@ -1613,6 +1825,8 @@ static const struct { window_copy_cmd_jump_to_forward }, { "middle-line", 0, 0, window_copy_cmd_middle_line }, + { "next-matching-bracket", 0, 0, + window_copy_cmd_next_matching_bracket }, { "next-paragraph", 0, 0, window_copy_cmd_next_paragraph }, { "next-space", 0, 0, @@ -1631,6 +1845,8 @@ static const struct { window_copy_cmd_page_down_and_cancel }, { "page-up", 0, 0, window_copy_cmd_page_up }, + { "previous-matching-bracket", 0, 0, + window_copy_cmd_previous_matching_bracket }, { "previous-paragraph", 0, 0, window_copy_cmd_previous_paragraph }, { "previous-space", 0, 0, @@ -3147,6 +3363,11 @@ window_copy_cursor_previous_word(struct window_mode_entry *wme, py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wme, py); + + /* Stop if separator at EOL. */ + if (px > 0 && + window_copy_in_set(wme, px - 1, py, separators)) + break; } } From 87bd8965c6128a0238cd1488e5c89bde95968eb1 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Apr 2019 20:18:07 +0100 Subject: [PATCH 465/836] Add to CHANGES & remove from TODO. --- CHANGES | 5 +++++ TODO | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index ee1945f380..6c8dc3216b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,10 @@ CHANGES FROM 2.9 to X.X +* Add keys to jump between matching brackets (emacs C-M-f and C-M-b, vi %). + +* Add a -e flag to new-window, split-window, respawn-window, respawn-pane to + pass environment variables into the newly created process. + * Hooks are now stored in the options tree as array options, allowing them to have multiple separate commands. set-hook and show-hooks remain but set-option and show-options can now also be used (show-options will only show diff --git a/TODO b/TODO index 59c31cc85b..03e02bb09b 100644 --- a/TODO +++ b/TODO @@ -147,12 +147,9 @@ TODO soonish maybe: -- -E flag to pass environment to new-*, issue 1498. - Copy mode searching is slow when there is a big history, issue 1545. - Grid "block" stuff, issue 1269. Can be used potentially for compression of history (bit silly really though), reflow performance (can reflow blocks on demand). It would possibly be good if history-limit could be global and collected LRU. -- Command aliases should be able to override builtin commands in order to add - default flags (some mechanism needed to avoid recursion). GitHub issue 1630. - Merge alternate and normal screen modes: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/5#note_112220 From 7e0f9ab3ebc03725a522ec118fdc4f27080e657c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Apr 2019 21:48:15 +0100 Subject: [PATCH 466/836] Don't think I will do this. --- TODO | 1 - 1 file changed, 1 deletion(-) diff --git a/TODO b/TODO index 03e02bb09b..655f869c51 100644 --- a/TODO +++ b/TODO @@ -152,4 +152,3 @@ TODO soonish maybe: history (bit silly really though), reflow performance (can reflow blocks on demand). It would possibly be good if history-limit could be global and collected LRU. -- Merge alternate and normal screen modes: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/5#note_112220 From 82c789ee585ea2b3cc9c95241e62fad9f1e4af30 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 30 Apr 2019 06:19:51 +0000 Subject: [PATCH 467/836] Fix memory leak in window tree search, from Amos Bird. --- window-tree.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/window-tree.c b/window-tree.c index fe0e5c14f3..32dc0251b6 100644 --- a/window-tree.c +++ b/window-tree.c @@ -785,7 +785,8 @@ window_tree_search(__unused void *modedata, void *itemdata, const char *ss) struct session *s; struct winlink *wl; struct window_pane *wp; - const char *cmd; + char *cmd; + int retval; window_tree_pull_item(item, &s, &wl, &wp); @@ -806,7 +807,9 @@ window_tree_search(__unused void *modedata, void *itemdata, const char *ss) cmd = get_proc_name(wp->fd, wp->tty); if (cmd == NULL || *cmd == '\0') return (0); - return (strstr(cmd, ss) != NULL); + retval = (strstr(cmd, ss) != NULL); + free(cmd); + return retval; } return (0); } From 5a288b1efe9b5b6cb521a2b0861e6deb2252cb3c Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 30 Apr 2019 06:21:30 +0000 Subject: [PATCH 468/836] Don't redraw control clients, from George Nachman. --- cmd-select-pane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 89c6fb201a..92ecb73466 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -66,7 +66,7 @@ cmd_select_pane_redraw(struct window *w) */ TAILQ_FOREACH(c, &clients, entry) { - if (c->session == NULL) + if (c->session == NULL || (c->flags & CLIENT_CONTROL)) continue; if (c->session->curw->window == w && tty_window_bigger(&c->tty)) server_redraw_client(c); From 1156d91cf848cbeb9792b729f16cd359d15fbe6d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 30 Apr 2019 18:39:07 +0100 Subject: [PATCH 469/836] Simple -C sanity test. --- regress/control-client-sanity.sh | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 regress/control-client-sanity.sh diff --git a/regress/control-client-sanity.sh b/regress/control-client-sanity.sh new file mode 100644 index 0000000000..bf76b4d5a9 --- /dev/null +++ b/regress/control-client-sanity.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +OUT=$(mktemp) +trap "rm -f $TMP $OUT" 0 1 15 + +$TMUX -f/dev/null new -d -x200 -y200 || exit 1 +$TMUX -f/dev/null splitw || exit 1 +sleep 1 +cat <$TMP +selectp -t%0 +splitw +neww +splitw +selectp -t%0 +killp -t%1 +swapp -t%2 -s%3 +neww +splitw +splitw +selectl tiled +killw +EOF +sleep 1 +$TMUX has || exit 1 +$TMUX lsp -aF '#{pane_id} #{window_layout}' >$TMP || exit 1 +cat </dev/null + +exit 0 From 429c4bc51b2c03e400802c9d224e4f7cc6113194 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 30 Apr 2019 18:02:03 +0000 Subject: [PATCH 470/836] Fix user options after show-hooks merge, GitHub issue 1704. --- cmd-show-options.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index e19a634a9f..80e9cd4278 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -216,19 +216,21 @@ static enum cmd_retval cmd_show_options_all(struct cmd *self, struct cmdq_item *item, struct options *oo) { - struct options_entry *o; - struct options_array_item *a; - u_int idx; - int flags; + struct options_entry *o; + struct options_array_item *a; + u_int idx; + const struct options_table_entry *oe; o = options_first(oo); while (o != NULL) { - flags = options_table_entry(o)->flags; + oe = options_table_entry(o); if ((self->entry != &cmd_show_hooks_entry && !args_has(self->args, 'H') && - (flags & OPTIONS_TABLE_IS_HOOK)) || + oe != NULL && + (oe->flags & OPTIONS_TABLE_IS_HOOK)) || (self->entry == &cmd_show_hooks_entry && - (~flags & OPTIONS_TABLE_IS_HOOK))) { + (oe == NULL || + (~oe->flags & OPTIONS_TABLE_IS_HOOK)))) { o = options_next(o); continue; } From c176361788f11a20f85708b7eb32a6931710109b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 1 May 2019 06:07:14 +0000 Subject: [PATCH 471/836] Remove unused variable from Thomas Adam. --- window-copy.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/window-copy.c b/window-copy.c index 82b4765cbd..f8569d79ae 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1003,7 +1003,7 @@ window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) struct screen *s = data->backing; char open[] = "{[(", close[] = "}])"; char tried, found, start, *cp; - u_int px, py, xx, yy, n; + u_int px, py, xx, n; struct grid_cell gc; int failed; @@ -1012,7 +1012,6 @@ window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) px = data->cx; py = screen_hsize(s) + data->cy - data->oy; xx = window_copy_find_length(wme, py); - yy = screen_hsize(s) + screen_size_y(s) - 1; if (xx == 0) break; From e286178aa7f3e98ae76be58fe708db8822c6351c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 26 Apr 2019 10:15:40 +0000 Subject: [PATCH 472/836] Unbreak main-vertical and main-horizontal layouts. --- layout-set.c | 66 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/layout-set.c b/layout-set.c index 504d9630dc..3a088a4c56 100644 --- a/layout-set.c +++ b/layout-set.c @@ -213,7 +213,7 @@ layout_set_main_h(struct window *w) mainh = w->sy - otherh; } - /* Work out what height is needed. */ + /* Work out what width is needed. */ sx = (n * (PANE_MINIMUM + 1)) - 1; if (sx < w->sx) sx = w->sx; @@ -221,7 +221,7 @@ layout_set_main_h(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); + layout_set_size(lc, sx, mainh + otherh, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ @@ -233,19 +233,25 @@ layout_set_main_h(struct window *w) /* Create the other pane. */ lcother = layout_create_cell(lc); layout_set_size(lcother, sx, otherh, 0, 0); - layout_make_node(lcother, LAYOUT_LEFTRIGHT); - TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - - /* Add the remaining panes as children. */ - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp == TAILQ_FIRST(&w->panes)) - continue; - lcchild = layout_create_cell(lc); - layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + if (n == 1) { + wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); + layout_make_leaf(lcother, wp); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + } else { + layout_make_node(lcother, LAYOUT_LEFTRIGHT); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) + continue; + lcchild = layout_create_cell(lcother); + layout_set_size(lcchild, PANE_MINIMUM, otherh, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + } + layout_spread_cell(w, lcother); } - layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); @@ -299,7 +305,7 @@ layout_set_main_v(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); + layout_set_size(lc, mainw + otherw, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ @@ -311,19 +317,25 @@ layout_set_main_v(struct window *w) /* Create the other pane. */ lcother = layout_create_cell(lc); layout_set_size(lcother, otherw, sy, 0, 0); - layout_make_node(lcother, LAYOUT_TOPBOTTOM); - TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); - - /* Add the remaining panes as children. */ - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp == TAILQ_FIRST(&w->panes)) - continue; - lcchild = layout_create_cell(lc); - layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); - layout_make_leaf(lcchild, wp); - TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + if (n == 1) { + wp = TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry); + layout_make_leaf(lcother, wp); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + } else { + layout_make_node(lcother, LAYOUT_TOPBOTTOM); + TAILQ_INSERT_TAIL(&lc->cells, lcother, entry); + + /* Add the remaining panes as children. */ + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp == TAILQ_FIRST(&w->panes)) + continue; + lcchild = layout_create_cell(lcother); + layout_set_size(lcchild, otherw, PANE_MINIMUM, 0, 0); + layout_make_leaf(lcchild, wp); + TAILQ_INSERT_TAIL(&lcother->cells, lcchild, entry); + } + layout_spread_cell(w, lcother); } - layout_spread_cell(w, lcother); /* Fix cell offsets. */ layout_fix_offsets(lc); From 750d5830c2344d28bd6824681dfe5e3222933ef4 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 30 Apr 2019 06:21:30 +0000 Subject: [PATCH 473/836] Don't redraw control clients, from George Nachman. --- cmd-select-pane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 2873737f7b..747f082272 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -66,7 +66,7 @@ cmd_select_pane_redraw(struct window *w) */ TAILQ_FOREACH(c, &clients, entry) { - if (c->session == NULL) + if (c->session == NULL || (c->flags & CLIENT_CONTROL)) continue; if (c->session->curw->window == w && tty_window_bigger(&c->tty)) server_redraw_client(c); From 901eed7b71cfb22bc7bd3a1500c74ef4f2fdb095 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 24 Apr 2019 20:27:52 +0000 Subject: [PATCH 474/836] Do not loop forever if there is a nonprintable character in the format. --- format-draw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/format-draw.c b/format-draw.c index b0b050f61e..514042543c 100644 --- a/format-draw.c +++ b/format-draw.c @@ -837,7 +837,8 @@ format_trim_left(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); @@ -883,7 +884,8 @@ format_trim_right(const char *expanded, u_int limit) *out++ = *cp; width++; cp++; - } + } else + cp++; } *out = '\0'; return (copy); From e36d6ee06afe6ef2467124dc166889c88dfdf341 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 1 May 2019 07:12:14 +0100 Subject: [PATCH 475/836] Version 2.9a. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f04ae14d6c..c55f55c5ec 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 2.9-rc3) +AC_INIT([tmux], 2.9a) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 4cb13d95bac1c7a14f216a0fd1644d8b5e389258 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 1 May 2019 07:16:20 +0100 Subject: [PATCH 476/836] Add to CHANGES. --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index e78921fe42..a3da3ef018 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +CHANGES FROM 2.9 to 2.9a + +* Fix bugs in select-pane and the main-horizontal and main-vertical layouts. + CHANGES FROM 2.8 to 2.9 * Attempt to preserve horizontal cursor position as well as vertical with From 5d9e591ae8ebf60bdabd9535877af96ce1ca9980 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 2 May 2019 20:12:40 +0000 Subject: [PATCH 477/836] Fix up some bits about window-size that seem to have got lost. --- tmux.1 | 107 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 81 insertions(+), 26 deletions(-) diff --git a/tmux.1 b/tmux.1 index 80e51a6978..5990c0c793 100644 --- a/tmux.1 +++ b/tmux.1 @@ -206,7 +206,6 @@ and files in the current directory, where .Em PID is the PID of the server or client process. -.Pp If .Fl v is specified twice, an additional @@ -847,13 +846,22 @@ and are the name of and shell command to execute in the initial window. With .Fl d , -the initial size is 80 x 24; +the initial size comes from the global +.Ic default-size +option; .Fl x and .Fl y can be used to specify a different size. .Ql - uses the size of the current client if any. +If +.Fl x +or +.Fl y +is given, the +.Ic default-size +option is set for the session. .Pp If run from a terminal, any .Xr termios 4 @@ -931,6 +939,36 @@ If .Fl S is specified, only update the client's status line. .Pp +The +.Fl U , +.Fl D , +.Fl L +.Fl R , +and +.Fl c +flags allow the visible portion of a window which is larger than the client +to be changed. +.Fl U +moves the visible part up by +.Ar adjustment +rows and +.Fl D +down, +.Fl L +left by +.Ar adjustment +columns and +.Fl R +right. +.Fl c +returns to tracking the cursor automatically. +If +.Ar adjustment +is omitted, 1 is used. +Note that the visible position is a property of the client not of the +window, changing the current window in the attached session will reset +it. +.Pp .Fl C sets the width and height of a control client. .Fl l @@ -2783,9 +2821,15 @@ This option should be configured when .Nm is used as a login shell. .It Ic default-size Ar XxY -Set the default size of windows when the size is not set or the -.Ic window-size -option is manual. +Set the default size of new windows when the +.Ar window-size +option is set to manual or when a session is created with +.Ic new-session +.Fl d . +The value is the width and height separated by an +.Ql x +character. +The default is 80x24. .It Xo Ic destroy-unattached .Op Ic on | off .Xc @@ -3120,10 +3164,13 @@ Supported window options are: Aggressively resize the chosen window. This means that .Nm -will resize the window to the size of the smallest session for which it is the -current window, rather than the smallest session to which it is attached. -The window may resize when the current window is changed on another sessions; -this option is good for full-screen programs which support +will resize the window to the size of the smallest or largest session +(see the +.Ic window-size +option) for which it is the current window, rather than the session to +which it is attached. +The window may resize when the current window is changed on another +session; this option is good for full-screen programs which support .Dv SIGWINCH and poor for interactive programs such as shells. .Pp @@ -3365,28 +3412,35 @@ see the .Sx STYLES section. .Pp -.It Ic window-style Ar style -Set the default window style. -For how to specify -.Ar style , -see the -.Sx STYLES -section. -.Pp .It Xo Ic window-size -.Op Ic smallest | largest | manual +.Ar largest | Ar smallest | Ar manual .Xc -Tell +Configure how .Nm -how to automatically size windows either the size of the smallest session -containing the window, the size of the largest, or manual size. +determines the window size. +If set to +.Ar largest , +the size of the largest attached session is used; if +.Ar smallest , +the size of the smallest. +If +.Ar manual , +the size of a new window is set from the +.Ic default-size +option and windows are resized automatically. See also the .Ic resize-window command and the -.Ic default-size -and .Ic aggressive-resize -options. +option. +.Pp +.It Ic window-style Ar style +Set the default window style. +For how to specify +.Ar style , +see the +.Sx STYLES +section. .Pp .It Xo Ic wrap-search .Op Ic on | off @@ -3936,12 +3990,10 @@ The following variables are available, where appropriate: .It Li "session_group_size" Ta "" Ta "Size of session group" .It Li "session_group_list" Ta "" Ta "List of sessions in group" .It Li "session_grouped" Ta "" Ta "1 if session in a group" -.It Li "session_height" Ta "" Ta "Height of session" .It Li "session_id" Ta "" Ta "Unique session ID" .It Li "session_many_attached" Ta "" Ta "1 if multiple clients attached" .It Li "session_name" Ta "#S" Ta "Name of session" .It Li "session_stack" Ta "" Ta "Window indexes in most recent order" -.It Li "session_width" Ta "" Ta "Width of session" .It Li "session_windows" Ta "" Ta "Number of windows in session" .It Li "socket_path" Ta "" Ta "Server socket path" .It Li "start_time" Ta "" Ta "Server start time" @@ -3949,6 +4001,7 @@ The following variables are available, where appropriate: .It Li "window_activity_flag" Ta "" Ta "1 if window has activity" .It Li "window_active" Ta "" Ta "1 if window active" .It Li "window_bell_flag" Ta "" Ta "1 if window has bell" +.It Li "window_bigger" Ta "" Ta "1 if window is larger than client" .It Li "window_end_flag" Ta "" Ta "1 if window has the highest index" .It Li "window_flags" Ta "#F" Ta "Window flags" .It Li "window_format" Ta "" Ta "1 if format is for a window (not assuming the current)" @@ -3959,6 +4012,8 @@ The following variables are available, where appropriate: .It Li "window_layout" Ta "" Ta "Window layout description, ignoring zoomed window panes" .It Li "window_linked" Ta "" Ta "1 if window is linked across sessions" .It Li "window_name" Ta "#W" Ta "Name of window" +.It Li "window_offset_x" Ta "" Ta "X offset into window if larger than client" +.It Li "window_offset_y" Ta "" Ta "Y offset into window if larger than client" .It Li "window_panes" Ta "" Ta "Number of panes in window" .It Li "window_silence_flag" Ta "" Ta "1 if window has silence alert" .It Li "window_stack_index" Ta "" Ta "Index in session most recent stack" From 4bb48998e075017707b0fd8d61499409bd144c6d Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 10:00:48 +0000 Subject: [PATCH 478/836] Fix reverse attribute in status line, GitHub issue 1709. --- status.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/status.c b/status.c index 89912114bb..332f8fd648 100644 --- a/status.c +++ b/status.c @@ -320,7 +320,7 @@ status_redraw(struct client *c) struct session *s = c->session; struct screen_write_ctx ctx; struct grid_cell gc; - u_int lines, i, width = c->tty.sx; + u_int lines, i, n, width = c->tty.sx; int flags, force = 0, changed = 0; struct options_entry *o; union options_value *ov; @@ -364,15 +364,17 @@ status_redraw(struct client *c) /* Write the status lines. */ o = options_get(s->options, "status-format"); - if (o == NULL) - screen_write_clearscreen(&ctx, gc.bg); - else { + if (o == NULL) { + for (n = 0; n < width * lines; n++) + screen_write_putc(&ctx, &gc, ' '); + } else { for (i = 0; i < lines; i++) { screen_write_cursormove(&ctx, 0, i, 0); ov = options_array_get(o, i); if (ov == NULL) { - screen_write_clearline(&ctx, gc.bg); + for (n = 0; n < width; n++) + screen_write_putc(&ctx, &gc, ' '); continue; } sle = &sl->entries[i]; @@ -386,7 +388,10 @@ status_redraw(struct client *c) } changed = 1; - screen_write_clearline(&ctx, gc.bg); + for (n = 0; n < width; n++) + screen_write_putc(&ctx, &gc, ' '); + screen_write_cursormove(&ctx, 0, i, 0); + status_free_ranges(&sle->ranges); format_draw(&ctx, &gc, width, expanded, &sle->ranges); From 33298d6df67e2ba3d90abdc94250eeaa963c3730 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 14:51:30 +0000 Subject: [PATCH 479/836] Instead of processing keys all together, put them up on the client command queue so they are ordered correctly with the commands that they execute. --- server-client.c | 63 ++++++++++++++++++++++++++++++------------------- tmux.h | 13 +++++++--- tty-keys.c | 60 +++++++++++++++++++++++++++------------------- 3 files changed, 85 insertions(+), 51 deletions(-) diff --git a/server-client.c b/server-client.c index 4cd5be745b..a3d6aebf51 100644 --- a/server-client.c +++ b/server-client.c @@ -35,7 +35,7 @@ static void server_client_free(int, short, void *); static void server_client_check_focus(struct window_pane *); static void server_client_check_resize(struct window_pane *); -static key_code server_client_check_mouse(struct client *); +static key_code server_client_check_mouse(struct client *, struct key_event *); static void server_client_repeat_timer(int, short, void *); static void server_client_click_timer(int, short, void *); static void server_client_check_exit(struct client *); @@ -407,10 +407,10 @@ server_client_exec(struct client *c, const char *cmd) /* Check for mouse keys. */ static key_code -server_client_check_mouse(struct client *c) +server_client_check_mouse(struct client *c, struct key_event *event) { + struct mouse_event *m = &event->m; struct session *s = c->session; - struct mouse_event *m = &c->tty.mouse; struct winlink *wl; struct window_pane *wp; u_int x, y, b, sx, sy, px, py; @@ -419,7 +419,13 @@ server_client_check_mouse(struct client *c) struct timeval tv; struct style_range *sr; enum { NOTYPE, MOVE, DOWN, UP, DRAG, WHEEL, DOUBLE, TRIPLE } type; - enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, STATUS_DEFAULT, BORDER } where; + enum { NOWHERE, + PANE, + STATUS, + STATUS_LEFT, + STATUS_RIGHT, + STATUS_DEFAULT, + BORDER } where; type = NOTYPE; where = NOWHERE; @@ -976,11 +982,17 @@ server_client_assume_paste(struct session *s) return (0); } -/* Handle data key input from client. */ -void -server_client_handle_key(struct client *c, key_code key) +/* + * Handle data key input from client. This owns and can modify the key event it + * is given and is responsible for freeing it. + */ +enum cmd_retval +server_client_key_callback(struct cmdq_item *item, void *data) { - struct mouse_event *m = &c->tty.mouse; + struct client *c = item->client; + struct key_event *event = data; + key_code key = event->key; + struct mouse_event *m = &event->m; struct session *s = c->session; struct winlink *wl; struct window *w; @@ -995,7 +1007,7 @@ server_client_handle_key(struct client *c, key_code key) /* Check the client is good to accept input. */ if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) - return; + goto out; wl = s->curw; w = wl->window; @@ -1007,11 +1019,11 @@ server_client_handle_key(struct client *c, key_code key) /* Number keys jump to pane in identify mode. */ if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') { if (c->flags & CLIENT_READONLY) - return; + goto out; window_unzoom(w); wp = window_pane_at_index(w, key - '0'); server_client_clear_identify(c, wp); - return; + goto out; } /* Handle status line. */ @@ -1021,19 +1033,19 @@ server_client_handle_key(struct client *c, key_code key) } if (c->prompt_string != NULL) { if (c->flags & CLIENT_READONLY) - return; + goto out; if (status_prompt_key(c, key) == 0) - return; + goto out; } /* Check for mouse keys. */ m->valid = 0; if (key == KEYC_MOUSE) { if (c->flags & CLIENT_READONLY) - return; - key = server_client_check_mouse(c); + goto out; + key = server_client_check_mouse(c, event); if (key == KEYC_UNKNOWN) - return; + goto out; m->valid = 1; m->key = key; @@ -1044,10 +1056,9 @@ server_client_handle_key(struct client *c, key_code key) */ if (key == KEYC_DRAGGING) { c->tty.mouse_drag_update(c, m); - return; + goto out; } - } else - m->valid = 0; + } /* Find affected pane. */ if (!KEYC_IS_MOUSE(key) || cmd_find_from_mouse(&fs, m, 0) != 0) @@ -1086,7 +1097,7 @@ server_client_handle_key(struct client *c, key_code key) strcmp(table->name, "prefix") != 0) { server_client_set_key_table(c, "prefix"); server_status_client(c); - return; + goto out; } flags = c->flags; @@ -1144,9 +1155,9 @@ server_client_handle_key(struct client *c, key_code key) server_status_client(c); /* Execute the key binding. */ - key_bindings_dispatch(bd, NULL, c, m, &fs); + key_bindings_dispatch(bd, item, c, m, &fs); key_bindings_unref_table(table); - return; + goto out; } /* @@ -1181,14 +1192,18 @@ server_client_handle_key(struct client *c, key_code key) if (first != table && (~flags & CLIENT_REPEAT)) { server_client_set_key_table(c, NULL); server_status_client(c); - return; + goto out; } forward_key: if (c->flags & CLIENT_READONLY) - return; + goto out; if (wp != NULL) window_pane_key(wp, c, s, wl, key, m); + +out: + free(event); + return (CMD_RETURN_NORMAL); } /* Client functions that need to happen every loop. */ diff --git a/tmux.h b/tmux.h index 0e79d42955..4f69301f7a 100644 --- a/tmux.h +++ b/tmux.h @@ -1052,6 +1052,12 @@ struct mouse_event { u_int sgr_b; }; +/* Key event. */ +struct key_event { + key_code key; + struct mouse_event m; +}; + /* TTY information. */ struct tty_key { char ch; @@ -1143,7 +1149,8 @@ struct tty { TTY_UNKNOWN } term_type; - struct mouse_event mouse; + u_int mouse_last_x; + u_int mouse_last_y; int mouse_drag_flag; void (*mouse_drag_update)(struct client *, struct mouse_event *); @@ -1864,7 +1871,7 @@ const char *tty_acs_get(struct tty *, u_char); /* tty-keys.c */ void tty_keys_build(struct tty *); void tty_keys_free(struct tty *); -key_code tty_keys_next(struct tty *); +int tty_keys_next(struct tty *); /* arguments.c */ void args_set(struct args *, u_char, const char *); @@ -2002,7 +2009,7 @@ void server_client_set_identify(struct client *, u_int); void server_client_set_key_table(struct client *, const char *); const char *server_client_get_key_table(struct client *); int server_client_check_nested(struct client *); -void server_client_handle_key(struct client *, key_code); +enum cmd_retval server_client_key_callback(struct cmdq_item *, void *); struct client *server_client_create(int); int server_client_open(struct client *, char **); void server_client_unref(struct client *); diff --git a/tty-keys.c b/tty-keys.c index 850c911977..1aecbcb244 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -46,7 +46,8 @@ static struct tty_key *tty_keys_find(struct tty *, const char *, size_t, static int tty_keys_next1(struct tty *, const char *, size_t, key_code *, size_t *, int); static void tty_keys_callback(int, short, void *); -static int tty_keys_mouse(struct tty *, const char *, size_t, size_t *); +static int tty_keys_mouse(struct tty *, const char *, size_t, size_t *, + struct mouse_event *); static int tty_keys_clipboard(struct tty *, const char *, size_t, size_t *); static int tty_keys_device_attributes(struct tty *, const char *, size_t, @@ -560,25 +561,26 @@ tty_keys_next1(struct tty *tty, const char *buf, size_t len, key_code *key, return (-1); } -/* - * Process at least one key in the buffer and invoke tty->key_callback. Return - * 0 if there are no further keys, or 1 if there could be more in the buffer. - */ -key_code +/* Process at least one key in the buffer. Return 0 if no keys present. */ +int tty_keys_next(struct tty *tty) { - struct client *c = tty->client; - struct timeval tv; - const char *buf; - size_t len, size; - cc_t bspace; - int delay, expired = 0, n; - key_code key; + struct client *c = tty->client; + struct timeval tv; + const char *buf; + size_t len, size; + cc_t bspace; + int delay, expired = 0, n; + key_code key; + struct cmdq_item *item; + struct mouse_event m = { 0 }; + struct key_event *event; + + gettimeofday(&tv, NULL); /* Get key buffer. */ buf = EVBUFFER_DATA(tty->in); len = EVBUFFER_LENGTH(tty->in); - if (len == 0) return (0); log_debug("%s: keys are %zu (%.*s)", c->name, len, (int)len, buf); @@ -606,7 +608,7 @@ tty_keys_next(struct tty *tty) } /* Is this a mouse key press? */ - switch (tty_keys_mouse(tty, buf, len, &size)) { + switch (tty_keys_mouse(tty, buf, len, &size, &m)) { case 0: /* yes */ key = KEYC_MOUSE; goto complete_key; @@ -725,8 +727,14 @@ tty_keys_next(struct tty *tty) } /* Fire the key. */ - if (key != KEYC_UNKNOWN) - server_client_handle_key(tty->client, key); + if (key != KEYC_UNKNOWN) { + event = xmalloc(sizeof *event); + event->key = key; + memcpy(&event->m, &m, sizeof event->m); + + item = cmdq_get_callback(server_client_key_callback, event); + cmdq_append(c, item); + } return (1); @@ -756,12 +764,12 @@ tty_keys_callback(__unused int fd, __unused short events, void *data) * (probably a mouse sequence but need more data). */ static int -tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size) +tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size, + struct mouse_event *m) { - struct client *c = tty->client; - struct mouse_event *m = &tty->mouse; - u_int i, x, y, b, sgr_b; - u_char sgr_type, ch; + struct client *c = tty->client; + u_int i, x, y, b, sgr_b; + u_char sgr_type, ch; /* * Standard mouse sequences are \033[M followed by three characters @@ -882,15 +890,19 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size) return (-1); /* Fill mouse event. */ - m->lx = m->x; + m->lx = tty->mouse_last_x; m->x = x; - m->ly = m->y; + m->ly = tty->mouse_last_y; m->y = y; m->lb = m->b; m->b = b; m->sgr_type = sgr_type; m->sgr_b = sgr_b; + /* Update last mouse state. */ + tty->mouse_last_x = x; + tty->mouse_last_y = y; + return (0); } From cf6075fb29fcd86f11a1f2cc6e906c62f39d4032 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 15:43:01 +0000 Subject: [PATCH 480/836] Correct ordering when adding after an existing item. --- cmd-queue.c | 24 +++++++++--------------- tmux.h | 2 +- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/cmd-queue.c b/cmd-queue.c index 9ce25f5fe8..14d6a82467 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -66,6 +66,7 @@ cmdq_append(struct client *c, struct cmdq_item *item) item->queue = queue; TAILQ_INSERT_TAIL(queue, item, entry); + log_debug("%s %s: %s", __func__, cmdq_name(c), item->name); item = next; } while (item != NULL); @@ -81,18 +82,17 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item) do { next = item->next; - item->next = NULL; + item->next = after->next; + after->next = item; if (c != NULL) c->references++; item->client = c; item->queue = queue; - if (after->next != NULL) - TAILQ_INSERT_AFTER(queue, after->next, item, entry); - else - TAILQ_INSERT_AFTER(queue, after, item, entry); - after->next = item; + TAILQ_INSERT_AFTER(queue, after, item, entry); + log_debug("%s %s: %s after %s", __func__, cmdq_name(c), + item->name, after->name); item = next; } while (item != NULL); @@ -170,7 +170,7 @@ cmdq_remove(struct cmdq_item *item) TAILQ_REMOVE(item->queue, item, entry); - free((void *)item->name); + free(item->name); free(item); } @@ -206,7 +206,6 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; u_int group = cmdq_next_group(); - char *tmp; struct cmdq_shared *shared; shared = xcalloc(1, sizeof *shared); @@ -218,10 +217,8 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, memcpy(&shared->mouse, m, sizeof shared->mouse); TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { - xasprintf(&tmp, "command[%s]", cmd->entry->name); - item = xcalloc(1, sizeof *item); - item->name = tmp; + xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item); item->type = CMDQ_COMMAND; item->group = group; @@ -316,12 +313,9 @@ struct cmdq_item * cmdq_get_callback1(const char *name, cmdq_cb cb, void *data) { struct cmdq_item *item; - char *tmp; - - xasprintf(&tmp, "callback[%s]", name); item = xcalloc(1, sizeof *item); - item->name = tmp; + xasprintf(&item->name, "[%s/%p]", name, item); item->type = CMDQ_CALLBACK; item->group = 0; diff --git a/tmux.h b/tmux.h index 4f69301f7a..e8d03c4bd3 100644 --- a/tmux.h +++ b/tmux.h @@ -1291,7 +1291,7 @@ struct cmdq_shared { /* Command queue item. */ typedef enum cmd_retval (*cmdq_cb) (struct cmdq_item *, void *); struct cmdq_item { - const char *name; + char *name; struct cmdq_list *queue; struct cmdq_item *next; From 43656d4ea7cb70e3e50b73405f71def5e322c94c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 3 May 2019 17:12:30 +0100 Subject: [PATCH 481/836] Sync up some tmux.1 bits. --- tmux.1 | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/tmux.1 b/tmux.1 index 63293ac289..0ea1fdd5d5 100644 --- a/tmux.1 +++ b/tmux.1 @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 25 2013 $ +.Dd $Mdocdate$ .Dt TMUX 1 .Os .Sh NAME @@ -1099,10 +1099,10 @@ to As a special case, .Fl t may refer to a pane (a target that contains -.Ql : , -.Ql . +.Ql \&: , +.Ql \&. or -.Ql % ) +.Ql % ) , in which case the session, window and pane are all changed. If .Fl l , @@ -2809,16 +2809,6 @@ The default is an empty string, which instructs to create a login shell using the value of the .Ic default-shell option. -.It Ic default-size Ar XxY -Set the default size of new windows when the -.Ar window-size -option is set to manual or when a session is created with -.Ic new-session -.Fl d . -The value is the width and height separated by an -.Ql x -character. -The default is 80x24. .It Ic default-shell Ar path Specify the default shell. This is used as the login shell for new windows when the @@ -2837,7 +2827,7 @@ This option should be configured when is used as a login shell. .It Ic default-size Ar XxY Set the default size of new windows when the -.Ar window-size +.Ic window-size option is set to manual or when a session is created with .Ic new-session .Fl d . From fc3d85e34bf323762ac000b44bfd4a6b33aad37c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 16:51:29 +0000 Subject: [PATCH 482/836] Fix mouse positioning when the pane is not entirely visible. --- cmd-resize-pane.c | 2 +- cmd.c | 7 +++---- server-client.c | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 31474f3f0b..410a625710 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -148,7 +148,7 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) y--; else if (m->statusat > 0 && y >= (u_int)m->statusat) y = m->statusat - 1; - ly = m->ly; lx = m->lx; + ly = m->ly + m->oy; lx = m->lx + m->ox; if (m->statusat == 0 && ly > 0) ly--; else if (m->statusat > 0 && ly >= (u_int)m->statusat) diff --git a/cmd.c b/cmd.c index 8ed6596c89..57b3350c2e 100644 --- a/cmd.c +++ b/cmd.c @@ -481,17 +481,16 @@ cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, u_int x, y; if (last) { - x = m->lx; - y = m->ly; + x = m->lx + m->ox; + y = m->ly + m->oy; } else { x = m->x; y = m->y; } + log_debug("%s: x=%u, y=%u%s", __func__, x, y, last ? " (last)" : ""); if (m->statusat == 0 && y > 0) y--; - else if (m->statusat > 0 && y >= (u_int)m->statusat) - y = m->statusat - 1; if (x < wp->xoff || x >= wp->xoff + wp->sx) return (-1); diff --git a/server-client.c b/server-client.c index a3d6aebf51..f25e372ef5 100644 --- a/server-client.c +++ b/server-client.c @@ -450,7 +450,7 @@ server_client_check_mouse(struct client *c, struct key_event *event) x = m->x, y = m->y, b = m->b; log_debug("drag update at %u,%u", x, y); } else { - x = m->lx - m->ox, y = m->ly - m->oy, b = m->lb; + x = m->lx, y = m->ly, b = m->lb; log_debug("drag start at %u,%u", x, y); } } else if (MOUSE_WHEEL(m->b)) { From 84e46525136481ba5bd60e73ae2fffdf74c0417c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 18:00:19 +0000 Subject: [PATCH 483/836] Use the right index for user-keys. --- tty-keys.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tty-keys.c b/tty-keys.c index 1aecbcb244..90f3487723 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -429,6 +429,7 @@ tty_keys_build(struct tty *tty) if (o != NULL) { a = options_array_first(o); while (a != NULL) { + i = options_array_item_index(a); ov = options_array_item_value(a); tty_keys_add(tty, ov->string, KEYC_USER + i); a = options_array_next(a); From 4097257beffc100d1eb0948d1390cea952e5fe4a Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 18:42:40 +0000 Subject: [PATCH 484/836] Do not store the mouse position we calculate as the start of a drag back into the mouse event that later code uses, it has been adjusted and they should use the original position. GitHub issue 1710. --- cmd-resize-pane.c | 2 +- cmd.c | 4 ++-- server-client.c | 4 ++-- window-copy.c | 2 ++ 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 410a625710..c978edfb53 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -143,7 +143,7 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) } w = wl->window; - y = m->y; x = m->x; + y = m->y + m->oy; x = m->x + m->ox; if (m->statusat == 0 && y > 0) y--; else if (m->statusat > 0 && y >= (u_int)m->statusat) diff --git a/cmd.c b/cmd.c index 57b3350c2e..a0ec6aa6b8 100644 --- a/cmd.c +++ b/cmd.c @@ -484,8 +484,8 @@ cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, x = m->lx + m->ox; y = m->ly + m->oy; } else { - x = m->x; - y = m->y; + x = m->x + m->ox; + y = m->y + m->oy; } log_debug("%s: x=%u, y=%u%s", __func__, x, y, last ? " (last)" : ""); diff --git a/server-client.c b/server-client.c index f25e372ef5..78e12b1952 100644 --- a/server-client.c +++ b/server-client.c @@ -448,6 +448,8 @@ server_client_check_mouse(struct client *c, struct key_event *event) type = DRAG; if (c->tty.mouse_drag_flag) { x = m->x, y = m->y, b = m->b; + if (x == m->lx && y == m->ly) + return (KEYC_UNKNOWN); log_debug("drag update at %u,%u", x, y); } else { x = m->lx, y = m->ly, b = m->lb; @@ -555,8 +557,6 @@ server_client_check_mouse(struct client *c, struct key_event *event) return (KEYC_UNKNOWN); px = px + m->ox; py = py + m->oy; - m->x = x + m->ox; - m->y = y + m->oy; /* Try the pane borders if not zoomed. */ if (~s->curw->window->flags & WINDOW_ZOOMED) { diff --git a/window-copy.c b/window-copy.c index f8569d79ae..4ff6b9ddd8 100644 --- a/window-copy.c +++ b/window-copy.c @@ -3505,6 +3505,8 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) window_copy_update_cursor(wme, x, y); window_copy_start_selection(wme); window_copy_redraw_screen(wme); + + window_copy_drag_update(c, m); } static void From e8e4f4ec3e4de0bd0e4eb2a7ee995fb6f5f7f937 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 18:59:58 +0000 Subject: [PATCH 485/836] Insert after the right element on queue. --- cmd-queue.c | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-queue.c b/cmd-queue.c index 14d6a82467..fb2c7fac91 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -94,6 +94,7 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item) log_debug("%s %s: %s after %s", __func__, cmdq_name(c), item->name, after->name); + after = item; item = next; } while (item != NULL); } From 9f75635596d0a01282156eb9e17fde6f4205c05c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 20:44:24 +0000 Subject: [PATCH 486/836] Allow panes to be empty (no command), output can be piped to them with split-window or display-message -I. --- cmd-display-message.c | 15 +++++++++++--- cmd-split-window.c | 22 ++++++++++++++++---- format.c | 5 ++++- input.c | 2 ++ server-client.c | 3 +-- server-fn.c | 3 +-- spawn.c | 48 ++++++++++++++++++++++++++----------------- tmux.1 | 28 ++++++++++++++++++++++--- tmux.h | 5 +++++ window.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 144 insertions(+), 34 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 2e93590872..8c1ad5f6f6 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_display_message_entry = { .name = "display-message", .alias = "display", - .args = { "ac:pt:F:v", 0, 1 }, - .usage = "[-apv] [-c target-client] [-F format] " + .args = { "ac:Ipt:F:v", 0, 1 }, + .usage = "[-aIpv] [-c target-client] [-F format] " CMD_TARGET_PANE_USAGE " [message]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -66,10 +66,19 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; const char *template; - char *msg; + char *msg, *cause; struct format_tree *ft; int flags; + if (args_has(args, 'I')) { + if (window_pane_start_input(wp, item, &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + return (CMD_RETURN_WAIT); + } + if (args_has(args, 'F') && args->argc != 0) { cmdq_error(item, "only one of -F or argument must be given"); return (CMD_RETURN_ERROR); diff --git a/cmd-split-window.c b/cmd-split-window.c index 3b9040dcd1..d004aa95f4 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -40,9 +40,10 @@ const struct cmd_entry cmd_split_window_entry = { .name = "split-window", .alias = "splitw", - .args = { "bc:de:fF:l:hp:Pt:v", 0, -1 }, - .usage = "[-bdefhvP] [-c start-directory] [-e environment] [-F format] " - "[-p percentage|-l size] " CMD_TARGET_PANE_USAGE " [command]", + .args = { "bc:de:fF:hIl:p:Pt:v", 0, -1 }, + .usage = "[-bdefhIPv] [-c start-directory] [-e environment] " + "[-F format] [-p percentage|-l size] " CMD_TARGET_PANE_USAGE + " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -63,7 +64,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) enum layout_type type; struct layout_cell *lc; struct cmd_find_state fs; - int size, percentage, flags; + int size, percentage, flags, input; const char *template, *add; char *cause, *cp; struct args_value *value; @@ -94,12 +95,15 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) size = -1; server_unzoom_window(wp->window); + input = (args_has(args, 'I') && args->argc == 0); flags = 0; if (args_has(args, 'b')) flags |= SPAWN_BEFORE; if (args_has(args, 'f')) flags |= SPAWN_FULLSIZE; + if (input || (args->argc == 1 && *args->argv[0] == '\0')) + flags |= SPAWN_EMPTY; lc = layout_split_pane(wp, type, size, flags); if (lc == NULL) { @@ -134,10 +138,18 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) sc.flags |= SPAWN_DETACHED; if ((new_wp = spawn_pane(&sc, &cause)) == NULL) { + layout_close_pane(new_wp); cmdq_error(item, "create pane failed: %s", cause); free(cause); return (CMD_RETURN_ERROR); } + if (input && window_pane_start_input(new_wp, item, &cause) != 0) { + layout_close_pane(new_wp); + window_remove_pane(wp->window, new_wp); + cmdq_error(item, "%s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } if (!args_has(args, 'd')) cmd_find_from_winlink_pane(current, wl, new_wp, 0); server_redraw_window(wp->window); @@ -155,5 +167,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) cmdq_insert_hook(s, item, &fs, "after-split-window"); environ_free(sc.environ); + if (input) + return (CMD_RETURN_WAIT); return (CMD_RETURN_NORMAL); } diff --git a/format.c b/format.c index abcdb1d784..a3a58d9277 100644 --- a/format.c +++ b/format.c @@ -2031,7 +2031,10 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) if ((wp->flags & PANE_STATUSREADY) && WIFEXITED(status)) format_add(ft, "pane_dead_status", "%d", WEXITSTATUS(status)); - format_add(ft, "pane_dead", "%d", wp->fd == -1); + if (~wp->flags & PANE_EMPTY) + format_add(ft, "pane_dead", "%d", wp->fd == -1); + else + format_add(ft, "pane_dead", "0"); format_add(ft, "pane_left", "%u", wp->xoff); format_add(ft, "pane_top", "%u", wp->yoff); diff --git a/input.c b/input.c index 0734140348..20272a62f3 100644 --- a/input.c +++ b/input.c @@ -1185,6 +1185,8 @@ input_c0_dispatch(struct input_ctx *ictx) case '\013': /* VT */ case '\014': /* FF */ screen_write_linefeed(sctx, 0, ictx->cell.cell.bg); + if (s->mode & MODE_CRLF) + screen_write_carriagereturn(sctx); break; case '\015': /* CR */ screen_write_carriagereturn(sctx); diff --git a/server-client.c b/server-client.c index 78e12b1952..13a589ef80 100644 --- a/server-client.c +++ b/server-client.c @@ -1671,8 +1671,7 @@ server_client_dispatch(struct imsg *imsg, void *arg) evbuffer_add(c->stdin_data, stdindata.data, stdindata.size); } - c->stdin_callback(c, c->stdin_closed, - c->stdin_callback_data); + c->stdin_callback(c, c->stdin_closed, c->stdin_callback_data); break; case MSG_RESIZE: if (datalen != 0) diff --git a/server-fn.c b/server-fn.c index c4ff4aa944..372bf21d9b 100644 --- a/server-fn.c +++ b/server-fn.c @@ -439,7 +439,6 @@ server_check_unattached(void) } } -/* Set stdin callback. */ int server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, void *), void *cb_data, char **cause) @@ -453,7 +452,7 @@ server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, return (-1); } if (c->stdin_callback != NULL) { - *cause = xstrdup("stdin in use"); + *cause = xstrdup("stdin is in use"); return (-1); } diff --git a/spawn.c b/spawn.c index 8e577ff561..84f468e288 100644 --- a/spawn.c +++ b/spawn.c @@ -332,6 +332,14 @@ spawn_pane(struct spawn_context *sc, char **cause) cmd_log_argv(new_wp->argc, new_wp->argv, __func__); environ_log(child, "%s: environment ", __func__); + /* If the command is empty, don't fork a child process. */ + if (sc->flags & SPAWN_EMPTY) { + new_wp->flags |= PANE_EMPTY; + new_wp->base.mode &= ~MODE_CURSOR; + new_wp->base.mode |= MODE_CRLF; + goto complete; + } + /* Initialize the window size. */ memset(&ws, 0, sizeof ws); ws.ws_col = screen_size_x(&new_wp->base); @@ -355,25 +363,8 @@ spawn_pane(struct spawn_context *sc, char **cause) } /* In the parent process, everything is done now. */ - if (new_wp->pid != 0) { - new_wp->pipe_off = 0; - new_wp->flags &= ~PANE_EXITED; - - sigprocmask(SIG_SETMASK, &oldset, NULL); - window_pane_set_event(new_wp); - - if (sc->flags & SPAWN_RESPAWN) - return (new_wp); - if ((~sc->flags & SPAWN_DETACHED) || w->active == NULL) { - if (sc->flags & SPAWN_NONOTIFY) - window_set_active_pane(w, new_wp, 0); - else - window_set_active_pane(w, new_wp, 1); - } - if (~sc->flags & SPAWN_NONOTIFY) - notify_window("window-layout-changed", w); - return (new_wp); - } + if (new_wp->pid != 0) + goto complete; /* * Child process. Change to the working directory or home if that @@ -433,4 +424,23 @@ spawn_pane(struct spawn_context *sc, char **cause) xasprintf(&argv0, "-%s", new_wp->shell); execl(new_wp->shell, argv0, (char *)NULL); _exit(1); + +complete: + new_wp->pipe_off = 0; + new_wp->flags &= ~PANE_EXITED; + + sigprocmask(SIG_SETMASK, &oldset, NULL); + window_pane_set_event(new_wp); + + if (sc->flags & SPAWN_RESPAWN) + return (new_wp); + if ((~sc->flags & SPAWN_DETACHED) || w->active == NULL) { + if (sc->flags & SPAWN_NONOTIFY) + window_set_active_pane(w, new_wp, 0); + else + window_set_active_pane(w, new_wp, 1); + } + if (~sc->flags & SPAWN_NONOTIFY) + notify_window("window-layout-changed", w); + return (new_wp); } diff --git a/tmux.1 b/tmux.1 index 5990c0c793..5255cb74c0 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2204,7 +2204,7 @@ is given and the selected window is already the current window, the command behaves like .Ic last-window . .It Xo Ic split-window -.Op Fl bdfhvP +.Op Fl bdfhIvP .Op Fl c Ar start-directory .Op Fl e Ar environment .Oo Fl l @@ -2240,6 +2240,24 @@ option creates a new pane spanning the full window height (with or full window width (with .Fl v ) , instead of splitting the active pane. +.Pp +An empty +.Ar shell-command +('') will create a pane with no command running in it. +Output can be sent to such a pane with the +.Ic display-message +command. +The +.Fl I +flag (if +.Ar shell-command +is not specified or empty) +will create an empty pane and forward any output from stdin to it. +For example: +.Bd -literal -offset indent +$ make 2>&1|tmux splitw -dI & +.Ed +.Pp All other options have the same meaning as for the .Ic new-window command. @@ -2822,7 +2840,7 @@ This option should be configured when is used as a login shell. .It Ic default-size Ar XxY Set the default size of new windows when the -.Ar window-size +.Ic window-size option is set to manual or when a session is created with .Ic new-session .Fl d . @@ -4428,7 +4446,7 @@ option. This command works only from inside .Nm . .It Xo Ic display-message -.Op Fl apv +.Op Fl aIpv .Op Fl c Ar target-client .Op Fl t Ar target-pane .Op Ar message @@ -4455,6 +4473,10 @@ is given, otherwise the active pane for the session attached to prints verbose logging as the format is parsed and .Fl a lists the format variables and their values. +.Pp +.Fl I +forwards any input read from stdin to the empty pane given by +.Ar target-pane . .El .Sh BUFFERS .Nm diff --git a/tmux.h b/tmux.h index e8d03c4bd3..31b03180d1 100644 --- a/tmux.h +++ b/tmux.h @@ -522,6 +522,7 @@ struct msg_stderr_data { #define MODE_FOCUSON 0x800 #define MODE_MOUSE_ALL 0x1000 #define MODE_ORIGIN 0x2000 +#define MODE_CRLF 0x4000 #define ALL_MODES 0xffffff #define ALL_MOUSE_MODES (MODE_MOUSE_STANDARD|MODE_MOUSE_BUTTON|MODE_MOUSE_ALL) @@ -802,6 +803,7 @@ struct window_pane { #define PANE_EXITED 0x100 #define PANE_STATUSREADY 0x200 #define PANE_STATUSDRAWN 0x400 +#define PANE_EMPTY 0x800 int argc; char **argv; @@ -1598,6 +1600,7 @@ struct spawn_context { #define SPAWN_BEFORE 0x8 #define SPAWN_NONOTIFY 0x10 #define SPAWN_FULLSIZE 0x20 +#define SPAWN_EMPTY 0x40 }; /* tmux.c */ @@ -2317,6 +2320,8 @@ void window_add_ref(struct window *, const char *); void window_remove_ref(struct window *, const char *); void winlink_clear_flags(struct winlink *); int winlink_shuffle_up(struct session *, struct winlink *); +int window_pane_start_input(struct window_pane *, + struct cmdq_item *, char **); /* layout.c */ u_int layout_count_cells(struct layout_cell *); diff --git a/window.c b/window.c index 7a2d9f6cf7..62de500620 100644 --- a/window.c +++ b/window.c @@ -72,6 +72,11 @@ const struct window_mode *all_window_modes[] = { NULL }; +struct window_pane_input_data { + struct cmdq_item *item; + u_int wp; +}; + static struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int); static void window_pane_destroy(struct window_pane *); @@ -1466,3 +1471,45 @@ winlink_shuffle_up(struct session *s, struct winlink *wl) return (idx); } + +static void +window_pane_input_callback(struct client *c, int closed, void *data) +{ + struct window_pane_input_data *cdata = data; + struct window_pane *wp; + + wp = window_pane_find_by_id(cdata->wp); + if (wp == NULL || closed || c->flags & CLIENT_DEAD) { + c->stdin_callback = NULL; + server_client_unref(c); + + cdata->item->flags &= ~CMDQ_WAITING; + free(cdata); + + return; + } + + if (evbuffer_add_buffer(wp->event->input, c->stdin_data) != 0) + evbuffer_drain(c->stdin_data, EVBUFFER_LENGTH(c->stdin_data)); + input_parse(wp); +} + +int +window_pane_start_input(struct window_pane *wp, struct cmdq_item *item, + char **cause) +{ + struct client *c = item->client; + struct window_pane_input_data *cdata; + + if (~wp->flags & PANE_EMPTY) { + *cause = xstrdup("pane is not empty"); + return (-1); + } + + cdata = xmalloc(sizeof *cdata); + cdata->item = item; + cdata->wp = wp->id; + + return (server_set_stdin_callback(c, window_pane_input_callback, cdata, + cause)); +} From 45ae9a8e3520d73c795bb993ced4fe43d06ad6f1 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 3 May 2019 21:21:00 +0000 Subject: [PATCH 487/836] Fix order of insertion in load_cfg. --- cfg.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cfg.c b/cfg.c index 0eadb6c327..1b85ac95c4 100644 --- a/cfg.c +++ b/cfg.c @@ -302,9 +302,10 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) free(buf); new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - if (item != NULL) + if (item != NULL) { cmdq_insert_after(item, new_item); - else + item = new_item; + } else cmdq_append(c, new_item); cmd_list_free(cmdlist); From eac30a86d78879f2dec802b0d246eba0afa79b3e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 6 May 2019 21:57:14 +0100 Subject: [PATCH 488/836] -attr -> -style. --- example_tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example_tmux.conf b/example_tmux.conf index 0058ceee33..11db9ec638 100644 --- a/example_tmux.conf +++ b/example_tmux.conf @@ -6,7 +6,7 @@ # Some tweaks to the status line set -g status-right "%H:%M" -set -g window-status-current-attr "underscore" +set -g window-status-current-style "underscore" # If running inside tmux ($TMUX is set), then change the status line to red %if #{TMUX} From 69440d19b783c72139f22c5c72b34b55d99e71de Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 7 May 2019 10:25:15 +0000 Subject: [PATCH 489/836] Do not use evbuffer_add_buffer because it is destructive and doesn't work in newer libevent. --- control-notify.c | 7 +------ input.c | 25 +++++++++++++------------ notify.c | 4 ++-- tmux.h | 5 +++-- window.c | 8 +++++--- 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/control-notify.c b/control-notify.c index 7b28e8f0a0..340dab734a 100644 --- a/control-notify.c +++ b/control-notify.c @@ -28,19 +28,14 @@ void control_notify_input(struct client *c, struct window_pane *wp, - struct evbuffer *input) + const u_char *buf, size_t len) { - u_char *buf; - size_t len; struct evbuffer *message; u_int i; if (c->session == NULL) return; - buf = EVBUFFER_DATA(input); - len = EVBUFFER_LENGTH(input); - /* * Only write input if the window pane is linked to a window belonging * to the client's session. diff --git a/input.c b/input.c index 20272a62f3..285de2d2c1 100644 --- a/input.c +++ b/input.c @@ -873,19 +873,28 @@ input_set_state(struct window_pane *wp, const struct input_transition *itr) /* Parse input. */ void input_parse(struct window_pane *wp) +{ + struct evbuffer *evb = wp->event->input; + + input_parse_buffer(wp, EVBUFFER_DATA(evb), EVBUFFER_LENGTH(evb)); + evbuffer_drain(evb, EVBUFFER_LENGTH(evb)); +} + +/* Parse given input. */ +void +input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len) { struct input_ctx *ictx = wp->ictx; struct screen_write_ctx *sctx = &ictx->ctx; const struct input_transition *itr; - struct evbuffer *evb = wp->event->input; - u_char *buf; - size_t len, off; + size_t off = 0; - if (EVBUFFER_LENGTH(evb) == 0) + if (len == 0) return; window_update_activity(wp->window); wp->flags |= PANE_CHANGED; + notify_input(wp, buf, len); /* * Open the screen. Use NULL wp if there is a mode set as don't want to @@ -897,12 +906,6 @@ input_parse(struct window_pane *wp) screen_write_start(sctx, NULL, &wp->base); ictx->wp = wp; - buf = EVBUFFER_DATA(evb); - len = EVBUFFER_LENGTH(evb); - off = 0; - - notify_input(wp, evb); - log_debug("%s: %%%u %s, %zu bytes: %.*s", __func__, wp->id, ictx->state->name, len, (int)len, buf); @@ -950,8 +953,6 @@ input_parse(struct window_pane *wp) /* Close the screen. */ screen_write_stop(sctx); - - evbuffer_drain(evb, len); } /* Split the parameter list (if any). */ diff --git a/notify.c b/notify.c index 088d75960d..3079f0eb80 100644 --- a/notify.c +++ b/notify.c @@ -199,13 +199,13 @@ notify_hook(struct cmdq_item *item, const char *name) } void -notify_input(struct window_pane *wp, struct evbuffer *input) +notify_input(struct window_pane *wp, const u_char *buf, size_t len) { struct client *c; TAILQ_FOREACH(c, &clients, entry) { if (c->flags & CLIENT_CONTROL) - control_notify_input(c, wp, input); + control_notify_input(c, wp, buf, len); } } diff --git a/tmux.h b/tmux.h index 31b03180d1..e6ed8c87b3 100644 --- a/tmux.h +++ b/tmux.h @@ -1699,7 +1699,7 @@ char *format_trim_right(const char *, u_int); /* notify.c */ void notify_hook(struct cmdq_item *, const char *); -void notify_input(struct window_pane *, struct evbuffer *); +void notify_input(struct window_pane *, const u_char *, size_t); void notify_client(const char *, struct client *); void notify_session(const char *, struct session *); void notify_winlink(const char *, struct winlink *); @@ -2087,6 +2087,7 @@ void input_free(struct window_pane *); void input_reset(struct window_pane *, int); struct evbuffer *input_pending(struct window_pane *); void input_parse(struct window_pane *); +void input_parse_buffer(struct window_pane *, u_char *, size_t); /* input-key.c */ void input_key(struct window_pane *, key_code, struct mouse_event *); @@ -2428,7 +2429,7 @@ void control_write_buffer(struct client *, struct evbuffer *); /* control-notify.c */ void control_notify_input(struct client *, struct window_pane *, - struct evbuffer *); + const u_char *, size_t); void control_notify_pane_mode_changed(int); void control_notify_window_layout_changed(struct window *); void control_notify_window_pane_changed(struct window *); diff --git a/window.c b/window.c index 62de500620..b08a5d355c 100644 --- a/window.c +++ b/window.c @@ -1477,6 +1477,9 @@ window_pane_input_callback(struct client *c, int closed, void *data) { struct window_pane_input_data *cdata = data; struct window_pane *wp; + struct evbuffer *evb = c->stdin_data; + u_char *buf = EVBUFFER_DATA(evb); + size_t len = EVBUFFER_LENGTH(evb); wp = window_pane_find_by_id(cdata->wp); if (wp == NULL || closed || c->flags & CLIENT_DEAD) { @@ -1489,9 +1492,8 @@ window_pane_input_callback(struct client *c, int closed, void *data) return; } - if (evbuffer_add_buffer(wp->event->input, c->stdin_data) != 0) - evbuffer_drain(c->stdin_data, EVBUFFER_LENGTH(c->stdin_data)); - input_parse(wp); + input_parse_buffer(wp, buf, len); + evbuffer_drain(evb, len); } int From 85a9c2f52b8855560fa9fdaa033d1c7bca738429 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 7 May 2019 11:24:03 +0000 Subject: [PATCH 490/836] Treat keys in identify mode (display-panes) specially and handle them immediately rather than queuing them (the command can block the queue which means they were not being seen until it finished which was too late). Reported by denis@ and solene@, ok solene@. --- cmd-copy-mode.c | 8 ++++---- server-client.c | 40 +++++++++++++++++++++++++++++++++++++++- tmux.h | 2 +- tty-keys.c | 6 ++---- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index bd05f8a232..b35d0af1f8 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -73,10 +73,10 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } - if (window_pane_set_mode(wp, &window_copy_mode, NULL, args) != 0) - return (CMD_RETURN_NORMAL); - if (args_has(args, 'M')) - window_copy_start_drag(c, &shared->mouse); + if (!window_pane_set_mode(wp, &window_copy_mode, NULL, args)) { + if (args_has(args, 'M')) + window_copy_start_drag(c, &shared->mouse); + } if (args_has(self->args, 'u')) window_copy_pageup(wp, 0); diff --git a/server-client.c b/server-client.c index 13a589ef80..2840ba60b1 100644 --- a/server-client.c +++ b/server-client.c @@ -986,7 +986,7 @@ server_client_assume_paste(struct session *s) * Handle data key input from client. This owns and can modify the key event it * is given and is responsible for freeing it. */ -enum cmd_retval +static enum cmd_retval server_client_key_callback(struct cmdq_item *item, void *data) { struct client *c = item->client; @@ -1206,6 +1206,44 @@ server_client_key_callback(struct cmdq_item *item, void *data) return (CMD_RETURN_NORMAL); } +/* Handle a key event. */ +int +server_client_handle_key(struct client *c, struct key_event *event) +{ + struct session *s = c->session; + struct window *w; + struct window_pane *wp = NULL; + struct cmdq_item *item; + + /* Check the client is good to accept input. */ + if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) + return (0); + w = s->curw->window; + + /* + * Key presses in identify mode are a special case. The queue might be + * blocked so they need to be processed immediately rather than queued. + */ + if (c->flags & CLIENT_IDENTIFY) { + if (c->flags & CLIENT_READONLY) + return (0); + if (event->key >= '0' && event->key <= '9') { + window_unzoom(w); + wp = window_pane_at_index(w, event->key - '0'); + } + server_client_clear_identify(c, wp); + return (0); + } + + /* + * Add the key to the queue so it happens after any commands queued by + * previous keys. + */ + item = cmdq_get_callback(server_client_key_callback, event); + cmdq_append(c, item); + return (1); +} + /* Client functions that need to happen every loop. */ void server_client_loop(void) diff --git a/tmux.h b/tmux.h index e6ed8c87b3..55c2453158 100644 --- a/tmux.h +++ b/tmux.h @@ -2012,7 +2012,7 @@ void server_client_set_identify(struct client *, u_int); void server_client_set_key_table(struct client *, const char *); const char *server_client_get_key_table(struct client *); int server_client_check_nested(struct client *); -enum cmd_retval server_client_key_callback(struct cmdq_item *, void *); +int server_client_handle_key(struct client *, struct key_event *); struct client *server_client_create(int); int server_client_open(struct client *, char **); void server_client_unref(struct client *); diff --git a/tty-keys.c b/tty-keys.c index 90f3487723..3ab7f184b9 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -573,7 +573,6 @@ tty_keys_next(struct tty *tty) cc_t bspace; int delay, expired = 0, n; key_code key; - struct cmdq_item *item; struct mouse_event m = { 0 }; struct key_event *event; @@ -732,9 +731,8 @@ tty_keys_next(struct tty *tty) event = xmalloc(sizeof *event); event->key = key; memcpy(&event->m, &m, sizeof event->m); - - item = cmdq_get_callback(server_client_key_callback, event); - cmdq_append(c, item); + if (!server_client_handle_key(c, event)) + free(event); } return (1); From fcd0e3082b3cf71a60d8cbc61a9767b4500ae654 Mon Sep 17 00:00:00 2001 From: schwarze Date: Tue, 7 May 2019 14:01:39 +0000 Subject: [PATCH 491/836] Rename the ENVIRONMENT section which was squatting on the standard manual page section and create a new ENVIRONMENT with the expected content. Move some information that was misplaced below the -u flag into that new section. Feedback and OK nicm@ jmc@ tb@ --- tmux.1 | 116 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 21 deletions(-) diff --git a/tmux.1 b/tmux.1 index 5255cb74c0..daaeadbe3c 100644 --- a/tmux.1 +++ b/tmux.1 @@ -176,27 +176,16 @@ is specified, the default socket directory is not used and any .Fl L flag is ignored. .It Fl u -When starting, -.Nm -looks for the +Write UTF-8 output to the terminal even if the first environment +variable of .Ev LC_ALL , -.Ev LC_CTYPE -and +.Ev LC_CTYPE , +or .Ev LANG -environment variables: if the first found contains -.Ql UTF-8 , -then the terminal is assumed to support UTF-8. -This is not always correct: the -.Fl u -flag explicitly informs -.Nm -that UTF-8 is supported. -.Pp -Note that -.Nm -itself always accepts UTF-8; this controls whether it will send UTF-8 -characters to the terminal it is running (if not, they are replaced by -.Ql _ ) . +that is set does not contain +.Qq UTF-8 +or +.Qq UTF8 . .It Fl v Request verbose logging. Log messages will be saved into @@ -3906,7 +3895,7 @@ line will not be updated more than once a second. Commands are executed with the .Nm global environment set (see the -.Sx ENVIRONMENT +.Sx GLOBAL AND SESSION ENVIRONMENT section). .Pp The following variables are available, where appropriate: @@ -4221,7 +4210,7 @@ It can also be modified with the .Ic select-pane .Fl T command. -.Sh ENVIRONMENT +.Sh GLOBAL AND SESSION ENVIRONMENT When the server is started, .Nm copies the environment into the @@ -4908,6 +4897,91 @@ The window with ID was renamed to .Ar name . .El +.Sh ENVIRONMENT +When +.Nm +is started, it inspects the following environment variables: +.Bl -tag -width LC_CTYPE +.It Ev EDITOR +If the command specified in this variable contains the string +.Ql vi +and +.Ev VISUAL +is unset, use vi-style key bindings. +Overridden by the +.Ic mode-keys +and +.Ic status-keys +options. +.It Ev HOME +The user's login directory. +If unset, the +.Xr passwd 5 +database is consulted. +.It Ev LC_CTYPE +The character encoding +.Xr locale 1 . +It is used for two separate purposes. +For output to the terminal, UTF-8 is used if the +.Fl u +option is given or if +.Ev LC_CTYPE +contains +.Qq UTF-8 +or +.Qq UTF8 . +Otherwise, only ASCII characters are written and non-ASCII characters +are replaced with underscores +.Pq Ql _ . +For input, +.Nm +always runs with a UTF-8 locale. +If en_US.UTF-8 is provided by the operating system it is used and +.Ev LC_CTYPE +is ignored for input. +Otherwise, +.Ev LC_CTYPE +tells +.Nm +what the UTF-8 locale is called on the current system. +If the locale specified by +.Ev LC_CTYPE +is not available or is not a UTF-8 locale, +.Nm +exits with an error message. +.It Ev LC_TIME +The date and time format +.Xr locale 1 . +It is used for locale-dependent +.Xr strftime 3 +format specifiers. +.It Ev PWD +The current working directory to be set in the global environment. +This may be useful if it contains symbolic links. +If the value of the variable does not match the current working +directory, the variable is ignored and the result of +.Xr getcwd 3 +is used instead. +.It Ev SHELL +The absolute path to the default shell for new windows. +See the +.Ic default-shell +option for details. +.It Ev TMUX_TMPDIR +The parent directory of the directory containing the server sockets. +See the +.Fl L +option for details. +.It Ev VISUAL +If the command specified in this variable contains the string +.Ql vi , +use vi-style key bindings. +Overridden by the +.Ic mode-keys +and +.Ic status-keys +options. +.El .Sh FILES .Bl -tag -width "/etc/tmux.confXXX" -compact .It Pa ~/.tmux.conf From d53d3bce59daa26720682dfcb6bcad182851c9a0 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 7 May 2019 19:46:17 +0000 Subject: [PATCH 492/836] Adjust the same bit to adjust the selection for history-top and history-bottom as for cursor-up and cursor-down. GitHub issue 1723. --- window-copy.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/window-copy.c b/window-copy.c index 4ff6b9ddd8..9531995951 100644 --- a/window-copy.c +++ b/window-copy.c @@ -902,9 +902,14 @@ window_copy_cmd_history_bottom(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; + u_int oy; + + oy = screen_hsize(data->backing) + data->cy - data->oy; + if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->endsely) + window_copy_other_end(wme); - data->cx = 0; data->cy = screen_size_y(&data->screen) - 1; + data->cx = window_copy_find_length(wme, data->cy); data->oy = 0; window_copy_update_selection(wme, 1); @@ -916,9 +921,14 @@ window_copy_cmd_history_top(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; + u_int oy; + + oy = screen_hsize(data->backing) + data->cy - data->oy; + if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) + window_copy_other_end(wme); - data->cx = 0; data->cy = 0; + data->cx = 0; data->oy = screen_hsize(data->backing); window_copy_update_selection(wme, 1); From 89db309e106cfdd901ab62243bc07f0b76ef41da Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 7 May 2019 20:01:41 +0000 Subject: [PATCH 493/836] Move around the display-panes identify code to make it a bit more generic and hide the display-panes specific bits into cmd-display-panes.c. --- cmd-display-panes.c | 254 +++++++++++++++++++++++++++++++++++--------- screen-redraw.c | 183 +++++-------------------------- server-client.c | 81 ++++++-------- tmux.h | 35 ++++-- 4 files changed, 286 insertions(+), 267 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index 1330ffac23..45f59a6b47 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -20,6 +20,7 @@ #include #include +#include #include "tmux.h" @@ -30,9 +31,6 @@ static enum cmd_retval cmd_display_panes_exec(struct cmd *, struct cmdq_item *); -static void cmd_display_panes_callback(struct client *, - struct window_pane *); - const struct cmd_entry cmd_display_panes_entry = { .name = "display-panes", .alias = "displayp", @@ -44,46 +42,145 @@ const struct cmd_entry cmd_display_panes_entry = { .exec = cmd_display_panes_exec }; -static enum cmd_retval -cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) +struct cmd_display_panes_data { + struct cmdq_item *item; + char *command; +}; + +static void +cmd_display_panes_draw_pane(struct screen_redraw_ctx *ctx, + struct window_pane *wp) { - struct args *args = self->args; - struct client *c; - struct session *s; - u_int delay; - char *cause; + struct client *c = ctx->c; + struct tty *tty = &c->tty; + struct session *s = c->session; + struct options *oo = s->options; + struct window *w = wp->window; + struct grid_cell gc; + u_int idx, px, py, i, j, xoff, yoff, sx, sy; + int colour, active_colour; + char buf[16], *ptr; + size_t len; - if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) - return (CMD_RETURN_ERROR); - s = c->session; + if (wp->xoff + wp->sx <= ctx->ox || + wp->xoff >= ctx->ox + ctx->sx || + wp->yoff + wp->sy <= ctx->oy || + wp->yoff >= ctx->oy + ctx->sy) + return; - if (c->identify_callback != NULL) - return (CMD_RETURN_NORMAL); + if (wp->xoff >= ctx->ox && wp->xoff + wp->sx <= ctx->ox + ctx->sx) { + /* All visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx; + } else if (wp->xoff < ctx->ox && + wp->xoff + wp->sx > ctx->ox + ctx->sx) { + /* Both left and right not visible. */ + xoff = 0; + sx = ctx->sx; + } else if (wp->xoff < ctx->ox) { + /* Left not visible. */ + xoff = 0; + sx = wp->sx - (ctx->ox - wp->xoff); + } else { + /* Right not visible. */ + xoff = wp->xoff - ctx->ox; + sx = wp->sx - xoff; + } + if (wp->yoff >= ctx->oy && wp->yoff + wp->sy <= ctx->oy + ctx->sy) { + /* All visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy; + } else if (wp->yoff < ctx->oy && + wp->yoff + wp->sy > ctx->oy + ctx->sy) { + /* Both top and bottom not visible. */ + yoff = 0; + sy = ctx->sy; + } else if (wp->yoff < ctx->oy) { + /* Top not visible. */ + yoff = 0; + sy = wp->sy - (ctx->oy - wp->yoff); + } else { + /* Bottom not visible. */ + yoff = wp->yoff - ctx->oy; + sy = wp->sy - yoff; + } - c->identify_callback = cmd_display_panes_callback; - if (args->argc != 0) - c->identify_callback_data = xstrdup(args->argv[0]); - else - c->identify_callback_data = xstrdup("select-pane -t '%%'"); - if (args_has(args, 'b')) - c->identify_callback_item = NULL; + if (ctx->statustop) + yoff += ctx->statuslines; + px = sx / 2; + py = sy / 2; + + if (window_pane_index(wp, &idx) != 0) + fatalx("index not found"); + len = xsnprintf(buf, sizeof buf, "%u", idx); + + if (sx < len) + return; + colour = options_get_number(oo, "display-panes-colour"); + active_colour = options_get_number(oo, "display-panes-active-colour"); + + if (sx < len * 6 || sy < 5) { + tty_cursor(tty, xoff + px - len / 2, yoff + py); + goto draw_text; + } + + px -= len * 3; + py -= 2; + + memcpy(&gc, &grid_default_cell, sizeof gc); + if (w->active == wp) + gc.bg = active_colour; else - c->identify_callback_item = item; + gc.bg = colour; + gc.flags |= GRID_FLAG_NOPALETTE; - if (args_has(args, 'd')) { - delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause); - if (cause != NULL) { - cmdq_error(item, "delay %s", cause); - free(cause); - return (CMD_RETURN_ERROR); + tty_attributes(tty, &gc, wp); + for (ptr = buf; *ptr != '\0'; ptr++) { + if (*ptr < '0' || *ptr > '9') + continue; + idx = *ptr - '0'; + + for (j = 0; j < 5; j++) { + for (i = px; i < px + 5; i++) { + tty_cursor(tty, xoff + i, yoff + py + j); + if (window_clock_table[idx][j][i - px]) + tty_putc(tty, ' '); + } } - } else - delay = options_get_number(s->options, "display-panes-time"); - server_client_set_identify(c, delay); + px += 6; + } - if (args_has(args, 'b')) - return (CMD_RETURN_NORMAL); - return (CMD_RETURN_WAIT); + len = xsnprintf(buf, sizeof buf, "%ux%u", wp->sx, wp->sy); + if (sx < len || sy < 6) + return; + tty_cursor(tty, xoff + sx - len, yoff); + +draw_text: + memcpy(&gc, &grid_default_cell, sizeof gc); + if (w->active == wp) + gc.fg = active_colour; + else + gc.fg = colour; + gc.flags |= GRID_FLAG_NOPALETTE; + + tty_attributes(tty, &gc, wp); + tty_puts(tty, buf); + + tty_cursor(tty, 0, 0); +} + +static void +cmd_display_panes_draw(struct client *c, struct screen_redraw_ctx *ctx) +{ + struct window *w = c->session->curw->window; + struct window_pane *wp; + + log_debug("%s: %s @%u", __func__, c->name, w->id); + + TAILQ_FOREACH(wp, &w->panes, entry) { + if (window_pane_visible(wp)) + cmd_display_panes_draw_pane(ctx, wp); + } } static enum cmd_retval @@ -98,17 +195,36 @@ cmd_display_panes_error(struct cmdq_item *item, void *data) } static void -cmd_display_panes_callback(struct client *c, struct window_pane *wp) +cmd_display_panes_free(struct client *c) { - struct cmd_list *cmdlist; - struct cmdq_item *new_item; - char *cmd, *expanded, *cause; + struct cmd_display_panes_data *cdata = c->overlay_data; + + if (cdata->item != NULL) + cdata->item->flags &= ~CMDQ_WAITING; + free(cdata->command); + free(cdata); +} + +static int +cmd_display_panes_key(struct client *c, struct key_event *event) +{ + struct cmd_display_panes_data *cdata = c->overlay_data; + struct cmd_list *cmdlist; + struct cmdq_item *new_item; + char *cmd, *expanded, *cause; + struct window *w = c->session->curw->window; + struct window_pane *wp; + + if (event->key < '0' || event->key > '9') + return (1); + wp = window_pane_at_index(w, event->key - '0'); if (wp == NULL) - goto out; + return (1); + window_unzoom(w); xasprintf(&expanded, "%%%u", wp->id); - cmd = cmd_template_replace(c->identify_callback_data, expanded, 1); + cmd = cmd_template_replace(cdata->command, expanded, 1); cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); if (cmdlist == NULL && cause != NULL) @@ -119,25 +235,59 @@ cmd_display_panes_callback(struct client *c, struct window_pane *wp) new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); } - if (new_item != NULL) { - if (c->identify_callback_item != NULL) - cmdq_insert_after(c->identify_callback_item, new_item); + if (cdata->item != NULL) + cmdq_insert_after(cdata->item, new_item); else cmdq_append(c, new_item); } free(cmd); free(expanded); + return (1); +} -out: - if (c->identify_callback_item != NULL) { - c->identify_callback_item->flags &= ~CMDQ_WAITING; - c->identify_callback_item = NULL; - } +static enum cmd_retval +cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) +{ + struct args *args = self->args; + struct client *c; + struct session *s; + u_int delay; + char *cause; + struct cmd_display_panes_data *cdata; + + if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) + return (CMD_RETURN_ERROR); + s = c->session; - free(c->identify_callback_data); - c->identify_callback_data = NULL; + if (c->overlay_draw != NULL) + return (CMD_RETURN_NORMAL); + + if (args_has(args, 'd')) { + delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause); + if (cause != NULL) { + cmdq_error(item, "delay %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + } else + delay = options_get_number(s->options, "display-panes-time"); + + cdata = xmalloc(sizeof *cdata); + if (args->argc != 0) + cdata->command = xstrdup(args->argv[0]); + else + cdata->command = xstrdup("select-pane -t '%%'"); + if (args_has(args, 'b')) + cdata->item = NULL; + else + cdata->item = item; + + server_client_set_overlay(c, delay, cmd_display_panes_draw, + cmd_display_panes_key, cmd_display_panes_free, cdata); - c->identify_callback = NULL; + if (args_has(args, 'b')) + return (CMD_RETURN_NORMAL); + return (CMD_RETURN_WAIT); } diff --git a/screen-redraw.c b/screen-redraw.c index 0ce3374d45..5278e77641 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -23,27 +23,11 @@ #include "tmux.h" -struct screen_redraw_ctx { - struct client *c; - - u_int lines; - int top; - - int pane_status; - - u_int sx; - u_int sy; - u_int ox; - u_int oy; -}; - static void screen_redraw_draw_borders(struct screen_redraw_ctx *); static void screen_redraw_draw_panes(struct screen_redraw_ctx *); static void screen_redraw_draw_status(struct screen_redraw_ctx *); static void screen_redraw_draw_pane(struct screen_redraw_ctx *, struct window_pane *); -static void screen_redraw_draw_number(struct screen_redraw_ctx *, - struct window_pane *); #define CELL_INSIDE 0 #define CELL_LEFTRIGHT 1 @@ -374,8 +358,8 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) width = size - x; } - if (ctx->top) - yoff += ctx->lines; + if (ctx->statustop) + yoff += ctx->statuslines; tty_draw_line(tty, NULL, s, i, 0, width, x, yoff - ctx->oy); } tty_cursor(tty, 0, 0); @@ -419,21 +403,25 @@ screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) struct options *oo = s->options; struct window *w = s->curw->window; struct options *wo = w->options; + u_int lines; memset(ctx, 0, sizeof *ctx); ctx->c = c; - ctx->lines = status_line_size(c); + lines = status_line_size(c); if (c->message_string != NULL || c->prompt_string != NULL) - ctx->lines = (ctx->lines == 0) ? 1 : ctx->lines; - if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) - ctx->top = 1; + lines = (lines == 0) ? 1 : lines; + if (lines != 0 && options_get_number(oo, "status-position") == 0) + ctx->statustop = 1; + ctx->statuslines = lines; + ctx->pane_status = options_get_number(wo, "pane-border-status"); tty_window_offset(&c->tty, &ctx->ox, &ctx->oy, &ctx->sx, &ctx->sy); log_debug("%s: %s @%u ox=%u oy=%u sx=%u sy=%u %u/%d", __func__, c->name, - w->id, ctx->ox, ctx->oy, ctx->sx, ctx->sy, ctx->lines, ctx->top); + w->id, ctx->ox, ctx->oy, ctx->sx, ctx->sy, ctx->statuslines, + ctx->statustop); } /* Redraw entire screen. */ @@ -456,9 +444,11 @@ screen_redraw_screen(struct client *c) } if (flags & CLIENT_REDRAWWINDOW) screen_redraw_draw_panes(&ctx); - if (ctx.lines != 0 && + if (ctx.statuslines != 0 && (flags & (CLIENT_REDRAWSTATUS|CLIENT_REDRAWSTATUSALWAYS))) screen_redraw_draw_status(&ctx); + if (c->overlay_draw != NULL) + c->overlay_draw(c, &ctx); tty_reset(&c->tty); } @@ -508,8 +498,8 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int i, u_int j, tty_attributes(tty, active_gc, NULL); else tty_attributes(tty, other_gc, NULL); - if (ctx->top) - tty_cursor(tty, i, ctx->lines + j); + if (ctx->statustop) + tty_cursor(tty, i, ctx->statuslines + j); else tty_cursor(tty, i, j); tty_putc(tty, CELL_BORDERS[type]); @@ -538,7 +528,7 @@ screen_redraw_draw_borders(struct screen_redraw_ctx *ctx) memcpy(&m_active_gc, &active_gc, sizeof m_active_gc); m_active_gc.attr ^= GRID_ATTR_REVERSE; - for (j = 0; j < tty->sy - ctx->lines; j++) { + for (j = 0; j < tty->sy - ctx->statuslines; j++) { for (i = 0; i < tty->sx; i++) { screen_redraw_draw_borders_cell(ctx, i, j, &m_active_gc, &active_gc, &m_other_gc, &other_gc); @@ -557,11 +547,8 @@ screen_redraw_draw_panes(struct screen_redraw_ctx *ctx) log_debug("%s: %s @%u", __func__, c->name, w->id); TAILQ_FOREACH(wp, &w->panes, entry) { - if (!window_pane_visible(wp)) - continue; - screen_redraw_draw_pane(ctx, wp); - if (c->flags & CLIENT_IDENTIFY) - screen_redraw_draw_number(ctx, wp); + if (window_pane_visible(wp)) + screen_redraw_draw_pane(ctx, wp); } } @@ -577,11 +564,11 @@ screen_redraw_draw_status(struct screen_redraw_ctx *ctx) log_debug("%s: %s @%u", __func__, c->name, w->id); - if (ctx->top) + if (ctx->statustop) y = 0; else - y = c->tty.sy - ctx->lines; - for (i = 0; i < ctx->lines; i++) + y = c->tty.sy - ctx->statuslines; + for (i = 0; i < ctx->statuslines; i++) tty_draw_line(tty, NULL, s, 0, i, UINT_MAX, 0, y + i); } @@ -599,8 +586,8 @@ screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp) if (wp->xoff + wp->sx <= ctx->ox || wp->xoff >= ctx->ox + ctx->sx) return; - if (ctx->top) - top = ctx->lines; + if (ctx->statustop) + top = ctx->statuslines; else top = 0; @@ -639,125 +626,3 @@ screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp) tty_draw_line(tty, wp, s, i, j, width, x, y); } } - -/* Draw number on a pane. */ -static void -screen_redraw_draw_number(struct screen_redraw_ctx *ctx, struct window_pane *wp) -{ - struct client *c = ctx->c; - struct tty *tty = &c->tty; - struct session *s = c->session; - struct options *oo = s->options; - struct window *w = wp->window; - struct grid_cell gc; - u_int idx, px, py, i, j, xoff, yoff, sx, sy; - int colour, active_colour; - char buf[16], *ptr; - size_t len; - - if (wp->xoff + wp->sx <= ctx->ox || - wp->xoff >= ctx->ox + ctx->sx || - wp->yoff + wp->sy <= ctx->oy || - wp->yoff >= ctx->oy + ctx->sy) - return; - - if (wp->xoff >= ctx->ox && wp->xoff + wp->sx <= ctx->ox + ctx->sx) { - /* All visible. */ - xoff = wp->xoff - ctx->ox; - sx = wp->sx; - } else if (wp->xoff < ctx->ox && - wp->xoff + wp->sx > ctx->ox + ctx->sx) { - /* Both left and right not visible. */ - xoff = 0; - sx = ctx->sx; - } else if (wp->xoff < ctx->ox) { - /* Left not visible. */ - xoff = 0; - sx = wp->sx - (ctx->ox - wp->xoff); - } else { - /* Right not visible. */ - xoff = wp->xoff - ctx->ox; - sx = wp->sx - xoff; - } - if (wp->yoff >= ctx->oy && wp->yoff + wp->sy <= ctx->oy + ctx->sy) { - /* All visible. */ - yoff = wp->yoff - ctx->oy; - sy = wp->sy; - } else if (wp->yoff < ctx->oy && - wp->yoff + wp->sy > ctx->oy + ctx->sy) { - /* Both top and bottom not visible. */ - yoff = 0; - sy = ctx->sy; - } else if (wp->yoff < ctx->oy) { - /* Top not visible. */ - yoff = 0; - sy = wp->sy - (ctx->oy - wp->yoff); - } else { - /* Bottom not visible. */ - yoff = wp->yoff - ctx->oy; - sy = wp->sy - yoff; - } - - if (ctx->top) - yoff += ctx->lines; - px = sx / 2; - py = sy / 2; - - if (window_pane_index(wp, &idx) != 0) - fatalx("index not found"); - len = xsnprintf(buf, sizeof buf, "%u", idx); - - if (sx < len) - return; - colour = options_get_number(oo, "display-panes-colour"); - active_colour = options_get_number(oo, "display-panes-active-colour"); - - if (sx < len * 6 || sy < 5) { - tty_cursor(tty, xoff + px - len / 2, yoff + py); - goto draw_text; - } - - px -= len * 3; - py -= 2; - - memcpy(&gc, &grid_default_cell, sizeof gc); - if (w->active == wp) - gc.bg = active_colour; - else - gc.bg = colour; - gc.flags |= GRID_FLAG_NOPALETTE; - - tty_attributes(tty, &gc, wp); - for (ptr = buf; *ptr != '\0'; ptr++) { - if (*ptr < '0' || *ptr > '9') - continue; - idx = *ptr - '0'; - - for (j = 0; j < 5; j++) { - for (i = px; i < px + 5; i++) { - tty_cursor(tty, xoff + i, yoff + py + j); - if (window_clock_table[idx][j][i - px]) - tty_putc(tty, ' '); - } - } - px += 6; - } - - len = xsnprintf(buf, sizeof buf, "%ux%u", wp->sx, wp->sy); - if (sx < len || sy < 6) - return; - tty_cursor(tty, xoff + sx - len, yoff); - -draw_text: - memcpy(&gc, &grid_default_cell, sizeof gc); - if (w->active == wp) - gc.fg = active_colour; - else - gc.fg = colour; - gc.flags |= GRID_FLAG_NOPALETTE; - - tty_attributes(tty, &gc, wp); - tty_puts(tty, buf); - - tty_cursor(tty, 0, 0); -} diff --git a/server-client.c b/server-client.c index 2840ba60b1..9e986d4d45 100644 --- a/server-client.c +++ b/server-client.c @@ -43,8 +43,7 @@ static void server_client_check_redraw(struct client *); static void server_client_set_title(struct client *); static void server_client_reset_state(struct client *); static int server_client_assume_paste(struct session *); -static void server_client_clear_identify(struct client *, - struct window_pane *); +static void server_client_clear_overlay(struct client *); static void server_client_dispatch(struct imsg *, void *); static void server_client_dispatch_command(struct client *, struct imsg *); @@ -66,44 +65,53 @@ server_client_how_many(void) return (n); } -/* Identify mode callback. */ +/* Overlay timer callback. */ static void -server_client_callback_identify(__unused int fd, __unused short events, - void *data) +server_client_overlay_timer(__unused int fd, __unused short events, void *data) { - server_client_clear_identify(data, NULL); + server_client_clear_overlay(data); } -/* Set identify mode on client. */ +/* Set an overlay on client. */ void -server_client_set_identify(struct client *c, u_int delay) +server_client_set_overlay(struct client *c, u_int delay, overlay_draw_cb drawcb, + overlay_key_cb keycb, overlay_free_cb freecb, void *data) { struct timeval tv; tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; - if (event_initialized(&c->identify_timer)) - evtimer_del(&c->identify_timer); - evtimer_set(&c->identify_timer, server_client_callback_identify, c); + if (event_initialized(&c->overlay_timer)) + evtimer_del(&c->overlay_timer); + evtimer_set(&c->overlay_timer, server_client_overlay_timer, c); if (delay != 0) - evtimer_add(&c->identify_timer, &tv); + evtimer_add(&c->overlay_timer, &tv); + + c->overlay_draw = drawcb; + c->overlay_key = keycb; + c->overlay_free = freecb; + c->overlay_data = data; - c->flags |= CLIENT_IDENTIFY; c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR); server_redraw_client(c); } -/* Clear identify mode on client. */ +/* Clear overlay mode on client. */ static void -server_client_clear_identify(struct client *c, struct window_pane *wp) +server_client_clear_overlay(struct client *c) { - if (~c->flags & CLIENT_IDENTIFY) + if (c->overlay_draw == NULL) return; - c->flags &= ~CLIENT_IDENTIFY; - if (c->identify_callback != NULL) - c->identify_callback(c, wp); + if (event_initialized(&c->overlay_timer)) + evtimer_del(&c->overlay_timer); + + if (c->overlay_free != NULL) + c->overlay_free(c); + + c->overlay_draw = NULL; + c->overlay_key = NULL; c->tty.flags &= ~(TTY_FREEZE|TTY_NOCURSOR); server_redraw_client(c); @@ -257,7 +265,7 @@ server_client_lost(struct client *c) c->flags |= CLIENT_DEAD; - server_client_clear_identify(c, NULL); + server_client_clear_overlay(c); status_prompt_clear(c); status_message_clear(c); @@ -291,9 +299,6 @@ server_client_lost(struct client *c) key_bindings_unref_table(c->keytable); - if (event_initialized(&c->identify_timer)) - evtimer_del(&c->identify_timer); - free(c->message_string); if (event_initialized(&c->message_timer)) evtimer_del(&c->message_timer); @@ -1016,21 +1021,9 @@ server_client_key_callback(struct cmdq_item *item, void *data) fatal("gettimeofday failed"); session_update_activity(s, &c->activity_time); - /* Number keys jump to pane in identify mode. */ - if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') { - if (c->flags & CLIENT_READONLY) - goto out; - window_unzoom(w); - wp = window_pane_at_index(w, key - '0'); - server_client_clear_identify(c, wp); - goto out; - } - /* Handle status line. */ - if (!(c->flags & CLIENT_READONLY)) { + if (~c->flags & CLIENT_READONLY) status_message_clear(c); - server_client_clear_identify(c, NULL); - } if (c->prompt_string != NULL) { if (c->flags & CLIENT_READONLY) goto out; @@ -1211,27 +1204,19 @@ int server_client_handle_key(struct client *c, struct key_event *event) { struct session *s = c->session; - struct window *w; - struct window_pane *wp = NULL; struct cmdq_item *item; /* Check the client is good to accept input. */ if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) return (0); - w = s->curw->window; /* - * Key presses in identify mode are a special case. The queue might be + * Key presses in overlay mode are a special case. The queue might be * blocked so they need to be processed immediately rather than queued. */ - if (c->flags & CLIENT_IDENTIFY) { - if (c->flags & CLIENT_READONLY) - return (0); - if (event->key >= '0' && event->key <= '9') { - window_unzoom(w); - wp = window_pane_at_index(w, event->key - '0'); - } - server_client_clear_identify(c, wp); + if ((~c->flags & CLIENT_READONLY) && c->overlay_key != NULL) { + if (c->overlay_key(c, event) != 0) + server_client_clear_overlay(c); return (0); } diff --git a/tmux.h b/tmux.h index 55c2453158..fb1da4a44d 100644 --- a/tmux.h +++ b/tmux.h @@ -727,6 +727,21 @@ struct screen_write_ctx { u_int skipped; }; +/* Screen redraw context. */ +struct screen_redraw_ctx { + struct client *c; + + u_int statuslines; + int statustop; + + int pane_status; + + u_int sx; + u_int sy; + u_int ox; + u_int oy; +}; + /* Screen size. */ #define screen_size_x(s) ((s)->grid->sx) #define screen_size_y(s) ((s)->grid->sy) @@ -1374,6 +1389,9 @@ struct status_line { /* Client connection. */ typedef int (*prompt_input_cb)(struct client *, void *, const char *, int); typedef void (*prompt_free_cb)(void *); +typedef void (*overlay_draw_cb)(struct client *, struct screen_redraw_ctx *); +typedef int (*overlay_key_cb)(struct client *, struct key_event *); +typedef void (*overlay_free_cb)(struct client *); struct client { const char *name; struct tmuxpeer *peer; @@ -1423,7 +1441,7 @@ struct client { #define CLIENT_REPEAT 0x20 #define CLIENT_SUSPENDED 0x40 #define CLIENT_ATTACHED 0x80 -#define CLIENT_IDENTIFY 0x100 +/* 0x100 unused */ #define CLIENT_DEAD 0x200 #define CLIENT_REDRAWBORDERS 0x400 #define CLIENT_READONLY 0x800 @@ -1452,12 +1470,6 @@ struct client { int flags; struct key_table *keytable; - struct event identify_timer; - void (*identify_callback)(struct client *, - struct window_pane *); - void *identify_callback_data; - struct cmdq_item *identify_callback_item; - char *message_string; struct event message_timer; u_int message_next; @@ -1488,6 +1500,12 @@ struct client { u_int pan_ox; u_int pan_oy; + overlay_draw_cb overlay_draw; + overlay_key_cb overlay_key; + overlay_free_cb overlay_free; + void *overlay_data; + struct event overlay_timer; + TAILQ_ENTRY(client) entry; }; TAILQ_HEAD(clients, client); @@ -2008,7 +2026,8 @@ void server_add_accept(int); /* server-client.c */ u_int server_client_how_many(void); -void server_client_set_identify(struct client *, u_int); +void server_client_set_overlay(struct client *, u_int, overlay_draw_cb, + overlay_key_cb, overlay_free_cb, void *); void server_client_set_key_table(struct client *, const char *); const char *server_client_get_key_table(struct client *); int server_client_check_nested(struct client *); From a384245c5aa1b1be2a73d9b3318a4c0d5bfc5391 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 8 May 2019 18:05:03 +0000 Subject: [PATCH 494/836] Adjust how mouse targets are found so they always have a session, window and pane. --- cmd-find.c | 8 ++++++-- cmd.c | 17 +++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 2fa53b9c7a..e5ef8b99b0 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -1040,12 +1040,16 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, switch (type) { case CMD_FIND_PANE: fs->wp = cmd_mouse_pane(m, &fs->s, &fs->wl); - if (fs->wp != NULL) + if (fs->wp != NULL) { fs->w = fs->wl->window; - break; + break; + } + /* FALLTHROUGH */ case CMD_FIND_WINDOW: case CMD_FIND_SESSION: fs->wl = cmd_mouse_window(m, &fs->s); + if (fs->wl == NULL && fs->s != NULL) + fs->wl = fs->s->curw; if (fs->wl != NULL) { fs->w = fs->wl->window; fs->wp = fs->w->active; diff --git a/cmd.c b/cmd.c index a0ec6aa6b8..c81ed12d8e 100644 --- a/cmd.c +++ b/cmd.c @@ -510,17 +510,22 @@ cmd_mouse_window(struct mouse_event *m, struct session **sp) { struct session *s; struct window *w; + struct winlink *wl; - if (!m->valid || m->s == -1 || m->w == -1) + if (!m->valid) return (NULL); - if ((s = session_find_by_id(m->s)) == NULL) + if (m->s == -1 || (s = session_find_by_id(m->s)) == NULL) return (NULL); - if ((w = window_find_by_id(m->w)) == NULL) - return (NULL); - + if (m->w == -1) + wl = s->curw; + else { + if ((w = window_find_by_id(m->w)) == NULL) + return (NULL); + wl = winlink_find_by_window(&s->windows, w); + } if (sp != NULL) *sp = s; - return (winlink_find_by_window(&s->windows, w)); + return (wl); } /* Get current mouse pane if any. */ From f9682d2e558c58117f23f302ce35d9b319151189 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 8 May 2019 18:07:12 +0000 Subject: [PATCH 495/836] Add a flag to redraw only the overlay, and remove the overlay on resize. --- cmd-display-panes.c | 1 - screen-redraw.c | 2 +- server-client.c | 11 +++++++++-- tmux.h | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index 45f59a6b47..8940b4293d 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -18,7 +18,6 @@ #include -#include #include #include diff --git a/screen-redraw.c b/screen-redraw.c index 5278e77641..dbae11b76a 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -447,7 +447,7 @@ screen_redraw_screen(struct client *c) if (ctx.statuslines != 0 && (flags & (CLIENT_REDRAWSTATUS|CLIENT_REDRAWSTATUSALWAYS))) screen_redraw_draw_status(&ctx); - if (c->overlay_draw != NULL) + if (c->overlay_draw != NULL && (flags & CLIENT_REDRAWOVERLAY)) c->overlay_draw(c, &ctx); tty_reset(&c->tty); } diff --git a/server-client.c b/server-client.c index 9e986d4d45..dc1f39396e 100644 --- a/server-client.c +++ b/server-client.c @@ -79,6 +79,9 @@ server_client_set_overlay(struct client *c, u_int delay, overlay_draw_cb drawcb, { struct timeval tv; + if (c->overlay_draw != NULL) + server_client_clear_overlay(c); + tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; @@ -1433,6 +1436,8 @@ server_client_reset_state(struct client *c) if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; + if (c->overlay_draw != NULL) + return; mode = s->mode; tty_region_off(&c->tty); @@ -1543,10 +1548,11 @@ server_client_check_redraw(struct client *c) if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; if (c->flags & CLIENT_ALLREDRAWFLAGS) { - log_debug("%s: redraw%s%s%s", c->name, + log_debug("%s: redraw%s%s%s%s", c->name, (c->flags & CLIENT_REDRAWWINDOW) ? " window" : "", (c->flags & CLIENT_REDRAWSTATUS) ? " status" : "", - (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : ""); + (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : "", + (c->flags & CLIENT_REDRAWOVERLAY) ? " overlay" : ""); } /* @@ -1702,6 +1708,7 @@ server_client_dispatch(struct imsg *imsg, void *arg) if (c->flags & CLIENT_CONTROL) break; + server_client_clear_overlay(c); tty_resize(&c->tty); recalculate_sizes(); server_redraw_client(c); diff --git a/tmux.h b/tmux.h index fb1da4a44d..39b77341e2 100644 --- a/tmux.h +++ b/tmux.h @@ -1458,11 +1458,13 @@ struct client { #define CLIENT_SIZECHANGED 0x400000 #define CLIENT_STATUSOFF 0x800000 #define CLIENT_REDRAWSTATUSALWAYS 0x1000000 +#define CLIENT_REDRAWOVERLAY 0x2000000 #define CLIENT_ALLREDRAWFLAGS \ (CLIENT_REDRAWWINDOW| \ CLIENT_REDRAWSTATUS| \ CLIENT_REDRAWSTATUSALWAYS| \ - CLIENT_REDRAWBORDERS) + CLIENT_REDRAWBORDERS| \ + CLIENT_REDRAWOVERLAY) #define CLIENT_NOSIZEFLAGS \ (CLIENT_DEAD| \ CLIENT_SUSPENDED| \ From 299b7289ea9b5ae9d5cccc57a87e6c26eb24b181 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 May 2019 08:38:13 +0000 Subject: [PATCH 496/836] Add formats to show if pane is the marked pane and if any marked pane is set. --- format.c | 6 ++++++ tmux.1 | 2 ++ 2 files changed, 8 insertions(+) diff --git a/format.c b/format.c index a3a58d9277..febf160b23 100644 --- a/format.c +++ b/format.c @@ -2036,6 +2036,12 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) else format_add(ft, "pane_dead", "0"); + if (server_check_marked() && marked_pane.wp == wp) + format_add(ft, "pane_marked", "1"); + else + format_add(ft, "pane_marked", "0"); + format_add(ft, "pane_marked_set", "%d", server_check_marked()); + format_add(ft, "pane_left", "%u", wp->xoff); format_add(ft, "pane_top", "%u", wp->yoff); format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); diff --git a/tmux.1 b/tmux.1 index daaeadbe3c..fcc1b9c11e 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3969,6 +3969,8 @@ 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_marked" Ta " Ta "1 if this is the marked pane" +.It Li "pane_marked_set" Ta " Ta "1 if a market pane is set" .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_pipe" Ta "" Ta "1 if pane is being piped" From 3c68e51609d35189e46d9b14c2a489a5ca3de67e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 May 2019 08:39:09 +0000 Subject: [PATCH 497/836] Change swap-window -d to be the other way round (stay with src window), so it works like swap-pane. --- cmd-swap-window.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-swap-window.c b/cmd-swap-window.c index 39670e3c53..f5224194ec 100644 --- a/cmd-swap-window.c +++ b/cmd-swap-window.c @@ -78,9 +78,9 @@ cmd_swap_window_exec(struct cmd *self, struct cmdq_item *item) TAILQ_INSERT_TAIL(&w_dst->winlinks, wl_src, wentry); if (!args_has(self->args, 'd')) { - session_select(dst, wl_dst->idx); + session_select(src, wl_src->idx); if (src != dst) - session_select(src, wl_src->idx); + session_select(dst, wl_dst->idx); } session_group_synchronize_from(src); server_redraw_session_group(src); From 21d97504505f2310c5d065e06d3c550d7b5d9f89 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 May 2019 13:12:59 +0000 Subject: [PATCH 498/836] send-keys also needs to insert key commands in the right order. --- cmd-send-keys.c | 32 +++++++++++++++++--------------- key-bindings.c | 3 ++- tmux.h | 5 +++-- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/cmd-send-keys.c b/cmd-send-keys.c index d9c39f6353..814755f307 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -55,31 +55,30 @@ const struct cmd_entry cmd_send_prefix_entry = { .exec = cmd_send_keys_exec }; -static void -cmd_send_keys_inject(struct client *c, struct cmdq_item *item, key_code key) +static struct cmdq_item * +cmd_send_keys_inject(struct client *c, struct cmd_find_state *fs, + struct cmdq_item *item, key_code key) { - struct window_pane *wp = item->target.wp; - struct session *s = item->target.s; - struct winlink *wl = item->target.wl; struct window_mode_entry *wme; struct key_table *table; struct key_binding *bd; - wme = TAILQ_FIRST(&wp->modes); + wme = TAILQ_FIRST(&fs->wp->modes); if (wme == NULL || wme->mode->key_table == NULL) { - if (options_get_number(wp->window->options, "xterm-keys")) + if (options_get_number(fs->wp->window->options, "xterm-keys")) key |= KEYC_XTERM; - window_pane_key(wp, NULL, s, wl, key, NULL); - return; + window_pane_key(fs->wp, NULL, fs->s, fs->wl, key, NULL); + return (item); } table = key_bindings_get_table(wme->mode->key_table(wme), 1); bd = key_bindings_get(table, key & ~KEYC_XTERM); if (bd != NULL) { table->references++; - key_bindings_dispatch(bd, item, c, NULL, &item->target); + item = key_bindings_dispatch(bd, item, c, NULL, &item->target); key_bindings_unref_table(table); } + return (item); } static enum cmd_retval @@ -91,6 +90,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct mouse_event *m = &item->shared->mouse; + struct cmd_find_state *fs = &item->target; struct window_mode_entry *wme = TAILQ_FIRST(&wp->modes); struct utf8_data *ud, *uc; wchar_t wc; @@ -141,7 +141,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) key = options_get_number(s->options, "prefix2"); else key = options_get_number(s->options, "prefix"); - cmd_send_keys_inject(c, item, key); + cmd_send_keys_inject(c, fs, item, key); return (CMD_RETURN_NORMAL); } @@ -155,9 +155,10 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) literal = args_has(args, 'l'); if (!literal) { key = key_string_lookup_string(args->argv[i]); - if (key != KEYC_NONE && key != KEYC_UNKNOWN) - cmd_send_keys_inject(c, item, key); - else + if (key != KEYC_NONE && key != KEYC_UNKNOWN) { + item = cmd_send_keys_inject(c, fs, item, + key); + } else literal = 1; } if (literal) { @@ -165,7 +166,8 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) for (uc = ud; uc->size != 0; uc++) { if (utf8_combine(uc, &wc) != UTF8_DONE) continue; - cmd_send_keys_inject(c, item, wc); + item = cmd_send_keys_inject(c, fs, item, + wc); } free(ud); } diff --git a/key-bindings.c b/key-bindings.c index 5af8f3ed86..4d5f7278b7 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -448,7 +448,7 @@ key_bindings_read_only(struct cmdq_item *item, __unused void *data) return (CMD_RETURN_ERROR); } -void +struct cmdq_item * key_bindings_dispatch(struct key_binding *bd, struct cmdq_item *item, struct client *c, struct mouse_event *m, struct cmd_find_state *fs) { @@ -472,4 +472,5 @@ key_bindings_dispatch(struct key_binding *bd, struct cmdq_item *item, cmdq_insert_after(item, new_item); else cmdq_append(c, new_item); + return (new_item); } diff --git a/tmux.h b/tmux.h index 39b77341e2..955643d858 100644 --- a/tmux.h +++ b/tmux.h @@ -2000,8 +2000,9 @@ void key_bindings_add(const char *, key_code, int, struct cmd_list *); void key_bindings_remove(const char *, key_code); void key_bindings_remove_table(const char *); void key_bindings_init(void); -void key_bindings_dispatch(struct key_binding *, struct cmdq_item *, - struct client *, struct mouse_event *, struct cmd_find_state *); +struct cmdq_item *key_bindings_dispatch(struct key_binding *, + struct cmdq_item *, struct client *, struct mouse_event *, + struct cmd_find_state *); /* key-string.c */ key_code key_string_lookup_string(const char *); From cb10bfb8effff694460af6927c30d8f805f8b9c0 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 9 May 2019 14:09:32 +0000 Subject: [PATCH 499/836] Save mouse buttons as well as position. --- tmux.h | 1 + tty-keys.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tmux.h b/tmux.h index 955643d858..c98d4c5150 100644 --- a/tmux.h +++ b/tmux.h @@ -1168,6 +1168,7 @@ struct tty { u_int mouse_last_x; u_int mouse_last_y; + u_int mouse_last_b; int mouse_drag_flag; void (*mouse_drag_update)(struct client *, struct mouse_event *); diff --git a/tty-keys.c b/tty-keys.c index 3ab7f184b9..f70b2c8dd4 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -893,7 +893,7 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size, m->x = x; m->ly = tty->mouse_last_y; m->y = y; - m->lb = m->b; + m->lb = tty->mouse_last_b; m->b = b; m->sgr_type = sgr_type; m->sgr_b = sgr_b; @@ -901,6 +901,7 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size, /* Update last mouse state. */ tty->mouse_last_x = x; tty->mouse_last_y = y; + tty->mouse_last_b = b; return (0); } From 004a9b52f0389700194d2789674a1fda90409438 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 10 May 2019 14:12:47 +0000 Subject: [PATCH 500/836] Add a function to draw a simple menu onto a screen. --- screen-write.c | 38 ++++++++++++++++++++++++++++++++++++++ tmux.h | 18 +++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/screen-write.c b/screen-write.c index 237b63593c..ad3808aeea 100644 --- a/screen-write.c +++ b/screen-write.c @@ -403,6 +403,44 @@ screen_write_vline(struct screen_write_ctx *ctx, u_int ny, int top, int bottom) screen_write_set_cursor(ctx, cx, cy); } +/* Draw a menu on screen. */ +void +screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu, int choice) +{ + struct screen *s = ctx->s; + struct grid_cell gc; + u_int cx, cy, i, j; + + cx = s->cx; + cy = s->cy; + + memcpy(&gc, &grid_default_cell, sizeof gc); + + screen_write_box(ctx, menu->width + 4, menu->count + 2); + screen_write_cursormove(ctx, cx + 2, cy, 0); + format_draw(ctx, &gc, menu->width, menu->title, NULL); + + for (i = 0; i < menu->count; i++) { + if (menu->items[i].name == NULL) { + screen_write_cursormove(ctx, cx, cy + 1 + i, 0); + screen_write_hline(ctx, menu->width + 4, 1, 1); + } else { + if (choice >= 0 && i == (u_int)choice) + gc.attr |= GRID_ATTR_REVERSE; + screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); + for (j = 0; j < menu->width; j++) + screen_write_putc(ctx, &gc, ' '); + screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); + format_draw(ctx, &gc, menu->width, menu->items[i].name, + NULL); + if (choice >= 0 && i == (u_int)choice) + gc.attr &= ~GRID_ATTR_REVERSE; + } + } + + screen_write_set_cursor(ctx, cx, cy); +} + /* Draw a box on screen. */ void screen_write_box(struct screen_write_ctx *ctx, u_int nx, u_int ny) diff --git a/tmux.h b/tmux.h index c98d4c5150..7bff1a1aff 100644 --- a/tmux.h +++ b/tmux.h @@ -748,6 +748,21 @@ struct screen_redraw_ctx { #define screen_hsize(s) ((s)->grid->hsize) #define screen_hlimit(s) ((s)->grid->hlimit) +/* Menu item. */ +struct menu_item { + char *name; + char *command; + key_code key; +}; + +/* Menu. */ +struct menu { + char *title; + struct menu_item *items; + u_int count; + u_int width; +}; + /* * Window mode. Windows can be in several modes and this is used to call the * right function to handle input and output. @@ -1687,7 +1702,7 @@ char *paste_make_sample(struct paste_buffer *); #define FORMAT_PANE 0x80000000U #define FORMAT_WINDOW 0x40000000U struct format_tree; -const char *format_skip(const char *s, const char *end); +const char *format_skip(const char *, const char *); int format_true(const char *); struct format_tree *format_create(struct client *, struct cmdq_item *, int, int); @@ -2200,6 +2215,7 @@ void screen_write_fast_copy(struct screen_write_ctx *, struct screen *, u_int, u_int, u_int, u_int); void screen_write_hline(struct screen_write_ctx *, u_int, int, int); void screen_write_vline(struct screen_write_ctx *, u_int, int, int); +void screen_write_menu(struct screen_write_ctx *, struct menu *, int); void screen_write_box(struct screen_write_ctx *, u_int, u_int); void screen_write_preview(struct screen_write_ctx *, struct screen *, u_int, u_int); From 6dcca5fda4b21cb1903204d6945bd7b418858afd Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 10 May 2019 18:04:06 +0000 Subject: [PATCH 501/836] Add support for simple menus usable with mouse or keyboard. New command display-menu shows a menu (bound to the mouse on status line by default) and a couple of extra formats for the default menus. --- Makefile | 2 + cmd-display-menu.c | 163 +++++++++++++++++++++ cmd.c | 2 + format.c | 48 +++++++ key-bindings.c | 5 + menu.c | 342 +++++++++++++++++++++++++++++++++++++++++++++ tmux.1 | 92 ++++++++++-- tmux.h | 22 ++- 8 files changed, 660 insertions(+), 16 deletions(-) create mode 100644 cmd-display-menu.c create mode 100644 menu.c diff --git a/Makefile b/Makefile index 1dd4ed8c9b..90ecbd848c 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ SRCS= alerts.c \ cmd-confirm-before.c \ cmd-copy-mode.c \ cmd-detach-client.c \ + cmd-display-menu.c \ cmd-display-message.c \ cmd-display-panes.c \ cmd-find-window.c \ @@ -86,6 +87,7 @@ SRCS= alerts.c \ layout-set.c \ layout.c \ log.c \ + menu.c \ mode-tree.c \ names.c \ notify.c \ diff --git a/cmd-display-menu.c b/cmd-display-menu.c new file mode 100644 index 0000000000..27bf454d77 --- /dev/null +++ b/cmd-display-menu.c @@ -0,0 +1,163 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include + +#include "tmux.h" + +/* + * Display a menu on a client. + */ + +static enum cmd_retval cmd_display_menu_exec(struct cmd *, + struct cmdq_item *); + +const struct cmd_entry cmd_display_menu_entry = { + .name = "display-menu", + .alias = "menu", + + .args = { "c:FM:t:T:x:y:", 0, 0 }, + .usage = "[-F] [-c target-client] [-M menu] " CMD_TARGET_PANE_USAGE " " + "[-T title] [-x position] [-y position]", + + .target = { 't', CMD_FIND_PANE, 0 }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_display_menu_exec +}; + +static enum cmd_retval +cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) +{ + struct args *args = self->args; + struct client *c; + struct session *s = item->target.s; + struct winlink *wl = item->target.wl; + struct window_pane *wp = item->target.wp; + struct cmd_find_state *fs = &item->target; + struct menu *menu = NULL; + struct style_range *sr; + const char *string, *xp, *yp; + int at, flags; + u_int px, py, ox, oy, sx, sy; + char *title; + + if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL) + return (CMD_RETURN_ERROR); + if (c->overlay_draw != NULL) + return (CMD_RETURN_NORMAL); + at = status_at_line(c); + + string = args_get(args, 'M'); + if (string == NULL) { + cmdq_error(item, "no menu specified"); + return (CMD_RETURN_ERROR); + } + if (args_has(args, 'F')) + string = format_single(NULL, string, c, s, wl, wp); + else + string = xstrdup(string); + if (args_has(args, 'T')) + title = format_single(NULL, args_get(args, 'T'), c, s, wl, wp); + else + title = xstrdup(""); + menu = menu_create_from_string(string, c, fs, title); + free(title); + if (menu == NULL) { + cmdq_error(item, "invalid menu %s", string); + return (CMD_RETURN_ERROR); + } + if (menu->count == 0) { + menu_free(menu); + return (CMD_RETURN_NORMAL); + } + + xp = args_get(args, 'x'); + if (xp == NULL) + px = 0; + else if (strcmp(xp, "R") == 0) + px = c->tty.sx - 1; + else if (strcmp(xp, "P") == 0) { + tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + if (wp->xoff >= ox) + px = wp->xoff - ox; + else + px = 0; + } else if (strcmp(xp, "M") == 0 && item->shared->mouse.valid) { + if (item->shared->mouse.x > (menu->width + 4) / 2) + px = item->shared->mouse.x - (menu->width + 4) / 2; + else + px = 0; + } + else if (strcmp(xp, "W") == 0) { + if (at == -1) + px = 0; + else { + TAILQ_FOREACH(sr, &c->status.entries[0].ranges, entry) { + if (sr->type != STYLE_RANGE_WINDOW) + continue; + if (sr->argument == (u_int)wl->idx) + break; + } + if (sr != NULL) + px = sr->start; + else + px = 0; + } + } else + px = strtoul(xp, NULL, 10); + if (px + menu->width + 4 >= c->tty.sx) + px = c->tty.sx - menu->width - 4; + + yp = args_get(args, 'y'); + if (yp == NULL) + py = 0; + else if (strcmp(yp, "P") == 0) { + tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + if (wp->yoff + wp->sy >= oy) + py = wp->yoff + wp->sy - oy; + else + py = 0; + } else if (strcmp(yp, "M") == 0 && item->shared->mouse.valid) + py = item->shared->mouse.y + menu->count + 2; + else if (strcmp(yp, "S") == 0) { + if (at == -1) + py = c->tty.sy; + else if (at == 0) + py = status_line_size(c) + menu->count + 2; + else + py = at; + } else + py = strtoul(yp, NULL, 10); + if (py < menu->count + 2) + py = 0; + else + py -= menu->count + 2; + if (py + menu->count + 2 >= c->tty.sy) + py = c->tty.sy - menu->count - 2; + + flags = 0; + if (!item->shared->mouse.valid) + flags |= MENU_NOMOUSE; + if (menu_display(menu, flags, item, px, py, c, fs, NULL, NULL) != 0) + return (CMD_RETURN_NORMAL); + return (CMD_RETURN_WAIT); +} diff --git a/cmd.c b/cmd.c index c81ed12d8e..59f2d4e9e4 100644 --- a/cmd.c +++ b/cmd.c @@ -42,6 +42,7 @@ extern const struct cmd_entry cmd_confirm_before_entry; extern const struct cmd_entry cmd_copy_mode_entry; extern const struct cmd_entry cmd_delete_buffer_entry; extern const struct cmd_entry cmd_detach_client_entry; +extern const struct cmd_entry cmd_display_menu_entry; extern const struct cmd_entry cmd_display_message_entry; extern const struct cmd_entry cmd_display_panes_entry; extern const struct cmd_entry cmd_down_pane_entry; @@ -130,6 +131,7 @@ const struct cmd_entry *cmd_table[] = { &cmd_copy_mode_entry, &cmd_delete_buffer_entry, &cmd_detach_client_entry, + &cmd_display_menu_entry, &cmd_display_message_entry, &cmd_display_panes_entry, &cmd_find_window_entry, diff --git a/format.c b/format.c index febf160b23..11c1a5a3ab 100644 --- a/format.c +++ b/format.c @@ -54,6 +54,49 @@ static void format_defaults_session(struct format_tree *, static void format_defaults_client(struct format_tree *, struct client *); static void format_defaults_winlink(struct format_tree *, struct winlink *); +/* Default menus. */ +#define DEFAULT_CLIENT_MENU \ + "Detach,d,detach-client|" \ + "Detach & Kill,X,detach-client -P|" \ + "Detach Others,o,detach-client -a|" \ + "|" \ + "#{?#{lock-command},Lock,},l,lock-client" +#define DEFAULT_SESSION_MENU \ + "Next,n,switch-client -n|" \ + "Previous,p,switch-client -p|" \ + "|" \ + "Renumber,N,move-window -r|" \ + "Rename,n,command-prompt -I \"#S\" \"rename-session -- '%%'\"|" \ + "|" \ + "New Session,s,new-session|" \ + "New Window,w,new-window" +#define DEFAULT_WINDOW_MENU \ + "Swap Left,l,swap-window -t,-1|" \ + "Swap Right,r,swap-window -t,+1|" \ + "#{?pane_marked_set,,#[dim]}Swap Marked,s,swap-window|" \ + "|" \ + "Kill,X,kill-window|" \ + "Respawn,R,respawn-window -k|" \ + "|" \ + "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ + "Rename,n,command-prompt -I \"#W\" \"rename-window -- '%%'\"|" \ + "|" \ + "New After,w,new-window -a|" \ + "New At End,W,new-window" +#define DEFAULT_PANE_MENU \ + "Horizontal Split,h,split-window -h|" \ + "Vertical Split,v,split-window -v|" \ + "|" \ + "Swap Up,u,swap-pane -U|" \ + "Swap Down,d,swap-pane -D|" \ + "#{?pane_marked_set,,#[dim]}Swap Marked,s,swap-pane|" \ + "|" \ + "Kill,X,kill-pane|" \ + "Respawn,R,respawn-pane -k|" \ + "|" \ + "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ + "#{?window_zoomed_flag,Unzoom,Zoom},z,resize-pane -Z" + /* Entry in format job tree. */ struct format_job { struct client *client; @@ -752,6 +795,11 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) } } + format_add(ft, "client_menu", "%s", DEFAULT_CLIENT_MENU); + format_add(ft, "session_menu", "%s", DEFAULT_SESSION_MENU); + format_add(ft, "window_menu", "%s", DEFAULT_WINDOW_MENU); + format_add(ft, "pane_menu", "%s", DEFAULT_PANE_MENU); + if (item != NULL) { if (item->cmd != NULL) format_add(ft, "command", "%s", item->cmd->entry->name); diff --git a/key-bindings.c b/key-bindings.c index 4d5f7278b7..ca4fdc5250 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -271,6 +271,7 @@ key_bindings_init(void) "bind -r C-Down resize-pane -D", "bind -r C-Left resize-pane -L", "bind -r C-Right resize-pane -R", + "bind -n MouseDown1Pane select-pane -t=\\; send-keys -M", "bind -n MouseDrag1Border resize-pane -M", "bind -n MouseDown1Status select-window -t=", @@ -279,6 +280,10 @@ key_bindings_init(void) "bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'", "bind -n MouseDown3Pane if-shell -Ft= '#{mouse_any_flag}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", "bind -n WheelUpPane if-shell -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", + "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -F -M \"#{client_menu}\" -T \"#[align=centre]#{client_name}\"", + "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -F -M \"#{session_menu}\" -T \"#[align=centre]#{session_name}\"", + "bind -n MouseDown3Status display-menu -t= -xW -yS -F -M \"#{window_menu}\" -T \"#[align=centre]#{window_index}:#{window_name}\"", + "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -F -M \"#{pane_menu}\" -T \"#[align=centre]#{pane_index} (#{pane_id})\"", "bind -Tcopy-mode C-Space send -X begin-selection", "bind -Tcopy-mode C-a send -X start-of-line", diff --git a/menu.c b/menu.c new file mode 100644 index 0000000000..0443d22f46 --- /dev/null +++ b/menu.c @@ -0,0 +1,342 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include + +#include "tmux.h" + +struct menu_data { + struct cmdq_item *item; + int flags; + + struct cmd_find_state fs; + struct screen s; + + u_int px; + u_int py; + + struct menu *menu; + int choice; + + menu_choice_cb cb; + void *data; +}; + +static void +menu_add_item(struct menu *menu, struct menu_item *item, struct client *c, + struct cmd_find_state *fs) +{ + struct menu_item *new_item; + const char *key; + char *name; + u_int width; + + menu->items = xreallocarray(menu->items, menu->count + 1, + sizeof *menu->items); + new_item = &menu->items[menu->count++]; + memset(new_item, 0, sizeof *new_item); + + if (item == NULL || *item->name == '\0') /* horizontal line */ + return; + name = format_single(NULL, item->name, c, fs->s, fs->wl, fs->wp); + if (*name == '\0') { /* no item if empty after format expanded */ + menu->count--; + return; + } + if (item->key != KEYC_UNKNOWN) { + key = key_string_lookup_key(item->key); + xasprintf(&new_item->name, "%s #[align=right](%s)", name, key); + } else + xasprintf(&new_item->name, "%s", name); + free(name); + + if (item->command != NULL) + new_item->command = xstrdup(item->command); + else + new_item->command = NULL; + new_item->key = item->key; + + width = format_width(new_item->name); + if (width > menu->width) + menu->width = width; +} + +static void +menu_parse_item(struct menu *menu, const char *s, struct client *c, + struct cmd_find_state *fs) +{ + char *copy, *first; + const char *second, *third; + struct menu_item item; + + first = copy = xstrdup(s); + if ((second = format_skip(first, ",")) != NULL) { + *(char *)second++ = '\0'; + if ((third = format_skip(second, ",")) != NULL) { + *(char *)third++ = '\0'; + + item.name = first; + item.command = (char *)third; + item.key = key_string_lookup_string(second); + menu_add_item(menu, &item, c, fs); + } + } + free(copy); +} + +struct menu * +menu_create_from_items(struct menu_item *items, u_int count, struct client *c, + struct cmd_find_state *fs, const char *title) +{ + struct menu *menu; + u_int i; + + menu = xcalloc(1, sizeof *menu); + menu->title = xstrdup(title); + + for (i = 0; i < count; i++) + menu_add_item(menu, &items[i], c, fs); + + return (menu); +} + +struct menu * +menu_create_from_string(const char *s, struct client *c, + struct cmd_find_state *fs, const char *title) +{ + struct menu *menu; + char *copy, *string, *next; + + if (*s == '\0') + return (NULL); + + menu = xcalloc(1, sizeof *menu); + menu->title = xstrdup(title); + + copy = string = xstrdup(s); + do { + next = (char *)format_skip(string, "|"); + log_debug("XXX %s -- %s", next, string); + if (next != NULL) + *next++ = '\0'; + if (*string == '\0') + menu_add_item(menu, NULL, c, fs); + else + menu_parse_item(menu, string, c, fs); + string = next; + } while (next != NULL); + free(copy); + + return (menu); +} + +void +menu_free(struct menu *menu) +{ + u_int i; + + for (i = 0; i < menu->count; i++) { + free(menu->items[i].name); + free(menu->items[i].command); + } + free(menu->items); + + free(menu->title); + free(menu); +} + +static void +menu_draw_cb(struct client *c, __unused struct screen_redraw_ctx *ctx0) +{ + struct menu_data *md = c->overlay_data; + struct tty *tty = &c->tty; + struct screen *s = &md->s; + struct menu *menu = md->menu; + struct screen_write_ctx ctx; + u_int i, px, py; + + screen_write_start(&ctx, NULL, s); + screen_write_clearscreen(&ctx, 8); + screen_write_menu(&ctx, menu, md->choice); + screen_write_stop(&ctx); + + px = md->px; + py = md->py; + + for (i = 0; i < screen_size_y(&md->s); i++) + tty_draw_line(tty, NULL, s, 0, i, menu->width + 4, px, py + i); + + if (~md->flags & MENU_NOMOUSE) + tty_update_mode(tty, MODE_MOUSE_ALL, NULL); +} + +static void +menu_free_cb(struct client *c) +{ + struct menu_data *md = c->overlay_data; + + if (md->item != NULL) + md->item->flags &= ~CMDQ_WAITING; + + screen_free(&md->s); + menu_free(md->menu); + free(md); +} + +static enum cmd_retval +menu_error_cb(struct cmdq_item *item, void *data) +{ + char *error = data; + + cmdq_error(item, "%s", error); + free(error); + + return (CMD_RETURN_NORMAL); +} + +static int +menu_key_cb(struct client *c, struct key_event *event) +{ + struct menu_data *md = c->overlay_data; + struct menu *menu = md->menu; + struct mouse_event *m = &event->m; + u_int i; + int count = menu->count, old = md->choice; + const struct menu_item *item; + struct cmd_list *cmdlist; + struct cmdq_item *new_item; + char *cause; + + if (KEYC_IS_MOUSE(event->key)) { + if (md->flags & MENU_NOMOUSE) + return (0); + if (m->x < md->px || + m->x > md->px + 4 + menu->width || + m->y < md->py + 1 || + m->y > md->py + 1 + count - 1) { + if (MOUSE_RELEASE(m->b)) + return (1); + if (md->choice != -1) { + md->choice = -1; + c->flags |= CLIENT_REDRAWOVERLAY; + } + return (0); + } + md->choice = m->y - (md->py + 1); + if (MOUSE_RELEASE(m->b)) + goto chosen; + if (md->choice != old) + c->flags |= CLIENT_REDRAWOVERLAY; + return (0); + } + switch (event->key) { + case KEYC_UP: + do { + if (md->choice == -1 || md->choice == 0) + md->choice = count - 1; + else + md->choice--; + } while (menu->items[md->choice].name == NULL); + c->flags |= CLIENT_REDRAWOVERLAY; + return (0); + case KEYC_DOWN: + do { + if (md->choice == -1 || md->choice == count - 1) + md->choice = 0; + else + md->choice++; + } while (menu->items[md->choice].name == NULL); + c->flags |= CLIENT_REDRAWOVERLAY; + return (0); + case '\r': + goto chosen; + case '\033': /* Escape */ + case '\003': /* C-c */ + case '\007': /* C-g */ + case 'q': + return (1); + } + for (i = 0; i < (u_int)count; i++) { + if (event->key == menu->items[i].key) { + md->choice = i; + goto chosen; + } + } + return (0); + +chosen: + if (md->choice == -1) + return (1); + item = &menu->items[md->choice]; + if (item->name == NULL) + return (1); + if (md->cb != NULL) { + md->cb(md->menu, md->choice, item->key, md->data); + return (1); + } + cmdlist = cmd_string_parse(item->command, NULL, 0, &cause); + if (cmdlist == NULL && cause != NULL) + new_item = cmdq_get_callback(menu_error_cb, cause); + else if (cmdlist == NULL) + new_item = NULL; + else { + new_item = cmdq_get_command(cmdlist, &md->fs, NULL, 0); + cmd_list_free(cmdlist); + } + if (new_item != NULL) { + if (md->item != NULL) + cmdq_insert_after(md->item, new_item); + else + cmdq_append(c, new_item); + } + return (1); +} + +int +menu_display(struct menu *menu, int flags, struct cmdq_item *item, u_int px, + u_int py, struct client *c, struct cmd_find_state *fs, menu_choice_cb cb, + void *data) +{ + struct menu_data *md; + + if (c->tty.sx < menu->width + 4 || c->tty.sy < menu->count + 2) + return (-1); + + md = xcalloc(1, sizeof *md); + md->item = item; + md->flags = flags; + + cmd_find_copy_state(&md->fs, fs); + screen_init(&md->s, menu->width + 4, menu->count + 2, 0); + + md->px = px; + md->py = py; + + md->menu = menu; + md->choice = -1; + + md->cb = cb; + md->data = data; + + server_client_set_overlay(c, 0, menu_draw_cb, menu_key_cb, menu_free_cb, + md); + return (0); +} diff --git a/tmux.1 b/tmux.1 index fcc1b9c11e..f2c529d70b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3909,12 +3909,13 @@ The following variables are available, where appropriate: .It Li "buffer_sample" Ta "" Ta "Sample of start of buffer" .It Li "buffer_size" Ta "" Ta "Size of the specified buffer in bytes" .It Li "client_activity" Ta "" Ta "Time client last had activity" -.It Li "client_created" Ta "" Ta "Time client created" .It Li "client_control_mode" Ta "" Ta "1 if client is in control mode" +.It Li "client_created" Ta "" Ta "Time client created" .It Li "client_discarded" Ta "" Ta "Bytes discarded when client behind" .It Li "client_height" Ta "" Ta "Height of client" .It Li "client_key_table" Ta "" Ta "Current key table" .It Li "client_last_session" Ta "" Ta "Name of the client's last session" +.It Li "client_menu" Ta "" Ta "The default client menu" .It Li "client_name" Ta "" Ta "Name of client" .It Li "client_pid" Ta "" Ta "PID of client process" .It Li "client_prefix" Ta "" Ta "1 if prefix key has been pressed" @@ -3927,11 +3928,11 @@ The following variables are available, where appropriate: .It Li "client_width" Ta "" Ta "Width of client" .It Li "client_written" Ta "" Ta "Bytes written to client" .It Li "command" Ta "" Ta "Name of command in use, if any" -.It Li "command_list_name" Ta "" Ta "Command name if listing commands" .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands" +.It Li "command_list_name" Ta "" Ta "Command name if listing commands" .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands" -.It Li "cursor_flag" Ta "" Ta "Pane cursor flag" .It Li "cursor_character" Ta "" Ta "Character at cursor in pane" +.It Li "cursor_flag" Ta "" Ta "Pane cursor flag" .It Li "cursor_x" Ta "" Ta "Cursor X position in pane" .It Li "cursor_y" Ta "" Ta "Cursor Y position in pane" .It Li "history_bytes" Ta "" Ta "Number of bytes in window history" @@ -3949,10 +3950,10 @@ The following variables are available, where appropriate: .It Li "keypad_cursor_flag" Ta "" Ta "Pane keypad cursor flag" .It Li "keypad_flag" Ta "" Ta "Pane keypad flag" .It Li "line" Ta "" Ta "Line number in the list" +.It Li "mouse_all_flag" Ta "" Ta "Pane mouse all flag" .It Li "mouse_any_flag" Ta "" Ta "Pane mouse any flag" .It Li "mouse_button_flag" Ta "" Ta "Pane mouse button flag" .It Li "mouse_standard_flag" Ta "" Ta "Pane mouse standard flag" -.It Li "mouse_all_flag" Ta "" Ta "Pane mouse all flag" .It Li "pane_active" Ta "" Ta "1 if active pane" .It Li "pane_at_bottom" Ta "" Ta "1 if pane is at the bottom of window" .It Li "pane_at_left" Ta "" Ta "1 if pane is at the left of window" @@ -3966,11 +3967,12 @@ The following variables are available, where appropriate: .It Li "pane_height" Ta "" Ta "Height of pane" .It Li "pane_id" Ta "#D" Ta "Unique pane ID" .It Li "pane_in_mode" Ta "" Ta "If pane is in a mode" -.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_input_off" Ta "" Ta "If input to pane is disabled" .It Li "pane_left" Ta "" Ta "Left of pane" .It Li "pane_marked" Ta " Ta "1 if this is the marked pane" .It Li "pane_marked_set" Ta " Ta "1 if a market pane is set" +.It Li "pane_menu" Ta "" Ta "The default pane menu" .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_pipe" Ta "" Ta "1 if pane is being piped" @@ -3985,30 +3987,31 @@ The following variables are available, where appropriate: .It Li "pane_width" Ta "" Ta "Width of pane" .It Li "pid" Ta "" Ta "Server PID" .It Li "rectangle_toggle" Ta "" Ta "1 if rectangle selection is activated" +.It Li "scroll_position" Ta "" Ta "Scroll position in copy mode" .It Li "scroll_region_lower" Ta "" Ta "Bottom of scroll region in pane" .It Li "scroll_region_upper" Ta "" Ta "Top of scroll region in pane" -.It Li "scroll_position" Ta "" Ta "Scroll position in copy mode" .It Li "selection_present" Ta "" Ta "1 if selection started in copy mode" +.It Li "session_activity" Ta "" Ta "Time of session last activity" .It Li "session_alerts" Ta "" Ta "List of window indexes with alerts" .It Li "session_attached" Ta "" Ta "Number of clients session is attached to" -.It Li "session_activity" Ta "" Ta "Time of session last activity" .It Li "session_created" Ta "" Ta "Time session created" .It Li "session_format" Ta "" Ta "1 if format is for a session (not assuming the current)" -.It Li "session_last_attached" Ta "" Ta "Time session last attached" .It Li "session_group" Ta "" Ta "Name of session group" -.It Li "session_group_size" Ta "" Ta "Size of session group" .It Li "session_group_list" Ta "" Ta "List of sessions in group" +.It Li "session_group_size" Ta "" Ta "Size of session group" .It Li "session_grouped" Ta "" Ta "1 if session in a group" .It Li "session_id" Ta "" Ta "Unique session ID" +.It Li "session_last_attached" Ta "" Ta "Time session last attached" .It Li "session_many_attached" Ta "" Ta "1 if multiple clients attached" +.It Li "session_menu" Ta "" Ta "The default session menu" .It Li "session_name" Ta "#S" Ta "Name of session" .It Li "session_stack" Ta "" Ta "Window indexes in most recent order" .It Li "session_windows" Ta "" Ta "Number of windows in session" .It Li "socket_path" Ta "" Ta "Server socket path" .It Li "start_time" Ta "" Ta "Server start time" +.It Li "window_active" Ta "" Ta "1 if window active" .It Li "window_activity" Ta "" Ta "Time of window last activity" .It Li "window_activity_flag" Ta "" Ta "1 if window has activity" -.It Li "window_active" Ta "" Ta "1 if window active" .It Li "window_bell_flag" Ta "" Ta "1 if window has bell" .It Li "window_bigger" Ta "" Ta "1 if window is larger than client" .It Li "window_end_flag" Ta "" Ta "1 if window has the highest index" @@ -4020,6 +4023,7 @@ The following variables are available, where appropriate: .It Li "window_last_flag" Ta "" Ta "1 if window is the last used" .It Li "window_layout" Ta "" Ta "Window layout description, ignoring zoomed window panes" .It Li "window_linked" Ta "" Ta "1 if window is linked across sessions" +.It Li "window_menu" Ta "" Ta "The default window menu" .It Li "window_name" Ta "#W" Ta "Name of window" .It Li "window_offset_x" Ta "" Ta "X offset into window if larger than client" .It Li "window_offset_y" Ta "" Ta "Y offset into window if larger than client" @@ -4436,6 +4440,74 @@ option. .Pp This command works only from inside .Nm . +.It Xo Ic display-menu +.Op Fl F +.Op Fl c Ar target-client +.Op Fl M Ar menu +.Op Fl t Ar target-pane +.Op Fl T Ar title +.Op Fl x Ar position +.Op Fl y Ar position +.Xc +.D1 (alias: Ic menu) +Display a menu on +.Ar target-client . +.Ar target-pane +gives the target for any commands run from the menu. +.Pp +A menu is passed to +.Fl M +as a list of menu items separated by +.Ql | . +Each menu item consists of three comma-separated parts: +.Bl -enum -width Ds +.It name +The menu item name. +This is a format and may include embedded styles, see the +.Sx FORMATS +and +.Sx STYLES +sections. +.It key +The menu item shortcut key. +If this is empty the menu item has no key shortcut. +.It command +The command run when the menu item is chosen. +.El +.Pp +An empty menu item is a separator line. +.Pp +.Fl T +is a format for the menu title (see +.Sx FORMATS ) . +.Pp +.Fl x +and +.Fl y +give the position of the menu. +Both may be a row or column number, or one of the following special values: +.Bl -column "XXXXX" "XXXX" -offset indent +.It Sy "Value" Ta Sy "Flag" Ta Sy "Meaning" +.It Li "R" Ta Fl x Ta "The right side of the terminal" +.It Li "P" Ta "Both" Ta "The bottom left of the pane" +.It Li "M" Ta "Both" Ta "The mouse position" +.It Li "W" Ta Fl x Ta "The window position on the status line" +.It Li "S" Ta Fl y Ta "The line above or below the status line" +.El +.Pp +Each menu consists of items followed by a key shortcut shown in brackets. +If the menu is too large to fit on the terminal, it is not displayed. +Pressing the key shortcut chooses the corresponding item. +If the mouse is enabled and the menu is opened from a mouse key binding, releasing +the mouse button with an item selected will choose that item. +The following keys are also available: +.Bl -column "Key" "Function" -offset indent +.It Sy "Key" Ta Sy "Function" +.It Li "Enter" Ta "Choose selected item" +.It Li "Up" Ta "Select previous item" +.It Li "Down" Ta "Select next item" +.It Li "q" Ta "Exit menu" +.El .It Xo Ic display-message .Op Fl aIpv .Op Fl c Ar target-client diff --git a/tmux.h b/tmux.h index 7bff1a1aff..757e7673e1 100644 --- a/tmux.h +++ b/tmux.h @@ -748,20 +748,20 @@ struct screen_redraw_ctx { #define screen_hsize(s) ((s)->grid->hsize) #define screen_hlimit(s) ((s)->grid->hlimit) -/* Menu item. */ +/* Menu. */ struct menu_item { - char *name; - char *command; - key_code key; + char *name; + char *command; + key_code key; }; - -/* Menu. */ struct menu { char *title; struct menu_item *items; u_int count; u_int width; }; +typedef void (*menu_choice_cb)(struct menu *, u_int, key_code, void *); +#define MENU_NOMOUSE 0x1 /* * Window mode. Windows can be in several modes and this is used to call the @@ -2550,6 +2550,16 @@ void printflike(1, 2) log_debug(const char *, ...); __dead void printflike(1, 2) fatal(const char *, ...); __dead void printflike(1, 2) fatalx(const char *, ...); +/* menu.c */ +struct menu *menu_create_from_items(struct menu_item *, u_int, + struct client *, struct cmd_find_state *, const char *); +struct menu *menu_create_from_string(const char *, struct client *, + struct cmd_find_state *, const char *); +void menu_free(struct menu *); +int menu_display(struct menu *, int, struct cmdq_item *, u_int, + u_int, struct client *, struct cmd_find_state *, + menu_choice_cb, void *); + /* style.c */ int style_parse(struct style *,const struct grid_cell *, const char *); From d62fd78655b305f4db9b41ff3b5a35b909674d74 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 10 May 2019 18:09:51 +0000 Subject: [PATCH 502/836] Fix a typo in previous (, -> :). --- format.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 11c1a5a3ab..79e7a94b26 100644 --- a/format.c +++ b/format.c @@ -71,8 +71,8 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "New Session,s,new-session|" \ "New Window,w,new-window" #define DEFAULT_WINDOW_MENU \ - "Swap Left,l,swap-window -t,-1|" \ - "Swap Right,r,swap-window -t,+1|" \ + "Swap Left,l,swap-window -t:-1|" \ + "Swap Right,r,swap-window -t:+1|" \ "#{?pane_marked_set,,#[dim]}Swap Marked,s,swap-window|" \ "|" \ "Kill,X,kill-window|" \ From fc00839adcbc84c2a04d441e7b463a03d0abe369 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Fri, 10 May 2019 22:27:33 +0100 Subject: [PATCH 503/836] Update CHANGES --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index 82fb21a4c5..35575e5076 100644 --- a/CHANGES +++ b/CHANGES @@ -29,6 +29,10 @@ CHANGES FROM 2.9 to X.X * Add the ability to infer an option type (server, session, window) from its name to show-options (it was already present in set-option). +* Add the ability to create simple menus using mouse or keyboard. Introduces + new command 'display-menu', and a few new formats: client_menu, + session_menu, window_menu, pane_menu. + CHANGES FROM 2.9 to 2.9a * Fix bugs in select-pane and the main-horizontal and main-vertical layouts. From ad27b7decd61d353031aeac5de01d44bcb374f26 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 11 May 2019 06:34:56 +0000 Subject: [PATCH 504/836] Do not reduce window height by status line height for control mode clients, from George Nachman. --- resize.c | 5 +++-- status.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/resize.c b/resize.c index caac74baca..0e0b070dcd 100644 --- a/resize.c +++ b/resize.c @@ -174,11 +174,12 @@ recalculate_sizes(void) TAILQ_FOREACH(c, &clients, entry) { if (ignore_client_size(c)) continue; - if (c->tty.sy <= status_line_size(c)) + s = c->session; + if (c->tty.sy <= s->statuslines || (c->flags & CLIENT_CONTROL)) c->flags |= CLIENT_STATUSOFF; else c->flags &= ~CLIENT_STATUSOFF; - c->session->attached++; + s->attached++; } /* Walk each window and adjust the size. */ diff --git a/status.c b/status.c index 332f8fd648..ef8cf14df4 100644 --- a/status.c +++ b/status.c @@ -203,7 +203,7 @@ status_at_line(struct client *c) { struct session *s = c->session; - if (c->flags & CLIENT_STATUSOFF) + if (c->flags & (CLIENT_STATUSOFF|CLIENT_CONTROL)) return (-1); if (s->statusat != 1) return (s->statusat); @@ -216,7 +216,7 @@ status_line_size(struct client *c) { struct session *s = c->session; - if (c->flags & CLIENT_STATUSOFF) + if (c->flags & (CLIENT_STATUSOFF|CLIENT_CONTROL)) return (0); return (s->statuslines); } From 198b0a23a21ac1cd30b1e9c23fcc38087c22bd7e Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 11 May 2019 06:40:01 +0000 Subject: [PATCH 505/836] Don't use arguments with It and -enum, pointed out by jmc. --- tmux.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tmux.1 b/tmux.1 index f2c529d70b..f0af27cb6a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4461,17 +4461,17 @@ as a list of menu items separated by .Ql | . Each menu item consists of three comma-separated parts: .Bl -enum -width Ds -.It name +.It The menu item name. This is a format and may include embedded styles, see the .Sx FORMATS and .Sx STYLES sections. -.It key +.It The menu item shortcut key. If this is empty the menu item has no key shortcut. -.It command +.It The command run when the menu item is chosen. .El .Pp From f44dafd224ee583d1ffd4358423d78a2bae75d5a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 9 May 2019 16:24:22 +0100 Subject: [PATCH 506/836] Add to CHANGES. --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index 35575e5076..36a29c39b0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,9 @@ CHANGES FROM 2.9 to X.X +* Allow panes to be empty (no command). They can be created either by piping to + split-window -I, or by passing an empty command ('') to split-window. Output + can be sent to an existing empty window with display-message -I. + * Add keys to jump between matching brackets (emacs C-M-f and C-M-b, vi %). * Add a -e flag to new-window, split-window, respawn-window, respawn-pane to From 0d64531f66309f013c1718d86ee907a058eca134 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 07:55:28 +0100 Subject: [PATCH 507/836] Tweaks to README, some from me, some from Nicolas CARPi. --- README | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/README b/README index 010111b60c..ecae0de740 100644 --- a/README +++ b/README @@ -6,13 +6,17 @@ screen and continue running in the background, then later reattached. This release runs on OpenBSD, FreeBSD, NetBSD, Linux, OS X and Solaris. -tmux depends on libevent 2.x. Download it from: +* Dependencies - http://libevent.org +tmux depends on libevent 2.x, available from: + + https://github.com/libevent/libevent/releases/latest It also depends on ncurses, available from: - http://invisible-island.net/ncurses/ + https://invisible-mirror.net/archives/ncurses/ + +* Installation To build and install tmux from a release tarball, use: @@ -32,40 +36,42 @@ To get and build the latest from version control: (Note that this requires at least a working C compiler, make, autoconf, automake, pkg-config as well as libevent and ncurses libraries and headers.) -For more information see http://git-scm.com. Patches should be sent by email to -the mailing list at tmux-users@googlegroups.com or submitted through GitHub at -https://github.com/tmux/tmux/issues. +* Contributing + +Bug reports, feature suggestions and especially code contributions are most +welcome. Please send by email to: + + tmux-users@googlegroups.com + +Or open a GitHub issue or pull request. -For documentation on using tmux, see the tmux.1 manpage. It can be viewed from -the source tree with: +* Documentation + +For documentation on using tmux, see the tmux.1 manpage. View it from the +source tree with: $ nroff -mdoc tmux.1|less -A small example configuration in example_tmux.conf. +A small example configuration is in example_tmux.conf. -And a bash(1) completion file at: +A bash(1) completion file is at: https://github.com/imomaliev/tmux-bash-completion -For debugging, running tmux with -v or -vv will generate server and client log -files in the current directory. - -tmux mailing lists are available. For general discussion and bug reports: +For debugging, run tmux with -v and -vv to generate server and client log files +in the current directory. - https://groups.google.com/forum/#!forum/tmux-users +* Support -And for Git commit emails: +The tmux mailing list for general discussion and bug reports is: - https://groups.google.com/forum/#!forum/tmux-git + https://groups.google.com/forum/#!forum/tmux-users -Subscribe by sending an email to . +Subscribe by sending an email to: -Bug reports, feature suggestions and especially code contributions are most -welcome. Please send by email to: + tmux-users+subscribe@googlegroups.com - tmux-users@googlegroups.com +* License This file and the CHANGES, FAQ, SYNCING and TODO files are licensed under the ISC license. All other files have a license and copyright notice at their start. - --- Nicholas Marriott From c18d7c5fcbdb391b94cb1f9c866e3417adb0ccff Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 08:07:35 +0100 Subject: [PATCH 508/836] Update CONTRIBUTING.md, mostly from Nicolas CARPi. --- .github/CONTRIBUTING.md | 79 +++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING | 33 ----------------- 2 files changed, 79 insertions(+), 33 deletions(-) create mode 100644 .github/CONTRIBUTING.md delete mode 100644 CONTRIBUTING diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..27532a9038 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,79 @@ +# What should I do before opening an issue? + +Before opening an issue, please ensure that: + +- TERM inside tmux is screen, screen-256color, tmux or tmux-256color. Check + by running echo $TERM inside tmux. + +- You can reproduce the problem with the latest tmux release, or a build from + Git master. + +- Your question or issue is not covered in the manual (run man tmux). + +- Nobody else has opened the same issue recently. + +# What should I include in an isue? + +Please include the output of: + +~~~bash +uname -sp && tmux -V && echo $TERM +~~~ + +Also include: + +- Your platform (Linux, OS X, or whatever). + +- A brief description of the problem with steps to reproduce. + +- A minimal tmux config, if you can't reproduce without a config. + +- Your terminal, and $TERM inside and outside of tmux. + +- Logs from tmux (see below). + +- At most one or two screenshots, if helpful. + +# How do I test without a .tmux.conf? + +Run a separate tmux server with -f/dev/null to skip loading .tmux.conf: + +~~~bash +tmux -Ltest kill-server +tmux -Ltest -f/dev/null new +~~~ + +# How do I get logs from tmux? + +Add -vv to tmux to create three log files in the current directory. If you can +reproduce without a configuration file: + +~~~bash +tmux -Ltest kill-server +tmux -vv -Ltest -f/dev/null new +~~~ + +Or if you need your configuration: + +~~~base +tmux kill-server +tmux -vv new +~~~ + +The log files are: + +- tmux-server*.log: server log file. + +- tmux-client*.log: client log file. + +- tmux-out*.log: output log file. + +To run tmux without a config and get logs, run: + +~~~bash +tmux -Ltest kill-server +tmux -vv -Ltest -f/dev/null new +~~~ + +Then reproduce the problem, exit tmux, and attach the `tmux-server-*.log` file +from the current directory to the issue. diff --git a/CONTRIBUTING b/CONTRIBUTING deleted file mode 100644 index a804ba41eb..0000000000 --- a/CONTRIBUTING +++ /dev/null @@ -1,33 +0,0 @@ -When reporting issues: - -YOU MUST INCLUDE THE TMUX VERSION - -DO NOT OPEN AN ISSUE THAT DOES NOT MENTION THE TMUX VERSION - -Please also include: - -- your platform (Linux, OS X, or whatever); -- a brief description of the problem with steps to reproduce; -- a minimal tmux config, if you can't reproduce without a config; -- your terminal, and $TERM inside and outside of tmux; -- logs from tmux (see below); -- at most one or two screenshots, if helpful. - -This should include at least the output of: - - $ uname -sp && tmux -V && echo $TERM - -Please do not report bugs (crashes, incorrect behaviour) without reproducing on -a tmux built from the latest code in Git. - -Note that TERM inside tmux must be a variant of screen or tmux (for example: -screen or screen-256color, tmux or tmux-256color). Please ensure this is the -case before opening an issue. - -To run tmux without a config and get logs, run: - - tmux -Ltest kill-server - tmux -vv -Ltest -f/dev/null new - -Then reproduce the problem, exit tmux, and attach the tmux-server-*.log file -from the current directory to the issue. From f1dd65cbdfd393c252a6003031a785c9793639b8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 08:09:49 +0100 Subject: [PATCH 509/836] Another tweak. --- .github/CONTRIBUTING.md | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 27532a9038..9f585db8fd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# What should I do before opening an issue? +## What should I do before opening an issue? Before opening an issue, please ensure that: @@ -12,7 +12,7 @@ Before opening an issue, please ensure that: - Nobody else has opened the same issue recently. -# What should I include in an isue? +## What should I include in an isue? Please include the output of: @@ -34,7 +34,7 @@ Also include: - At most one or two screenshots, if helpful. -# How do I test without a .tmux.conf? +## How do I test without a .tmux.conf? Run a separate tmux server with -f/dev/null to skip loading .tmux.conf: @@ -43,7 +43,7 @@ tmux -Ltest kill-server tmux -Ltest -f/dev/null new ~~~ -# How do I get logs from tmux? +## How do I get logs from tmux? Add -vv to tmux to create three log files in the current directory. If you can reproduce without a configuration file: @@ -68,12 +68,4 @@ The log files are: - tmux-out*.log: output log file. -To run tmux without a config and get logs, run: - -~~~bash -tmux -Ltest kill-server -tmux -vv -Ltest -f/dev/null new -~~~ - -Then reproduce the problem, exit tmux, and attach the `tmux-server-*.log` file -from the current directory to the issue. +Please attach the log files to your issue. From bd6d0b3101d1a9de9b5a325e532cc479e4b9d1bd Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 08:19:14 +0100 Subject: [PATCH 510/836] Formatted README.md, from Nicolas CARPi. --- .github/README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/README.md diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 0000000000..bd2eb2eaeb --- /dev/null +++ b/.github/README.md @@ -0,0 +1,81 @@ +# Welcome to tmux! + +tmux is a terminal multiplexer: it enables a number of terminals to be created, +accessed, and controlled from a single screen. tmux may be detached from a +screen and continue running in the background, then later reattached. + +This release runs on OpenBSD, FreeBSD, NetBSD, Linux, OS X and Solaris. + +## Dependencies + +tmux depends on [libevent](https://libevent.org) 2.x, avaailable from [this +page](https://github.com/libevent/libevent/releases/latest). + +It also depends on [ncurses](https://www.gnu.org/software/ncurses/), available from [this page](https://invisible-mirror.net/archives/ncurses/). + +## Installation + +### From release tarball + +To build and install tmux from a release tarball, use: + +~~~bash +./configure && make +sudo make install +~~~ + +tmux can use the utempter library to update utmp(5), if it is installed - run +configure with `--enable-utempter` to enable this. + +### From version control + +To get and build the latest from version control: + +~~~bash +git clone https://github.com/tmux/tmux.git +cd tmux +sh autogen.sh +./configure && make +~~~ + +(Note that this requires at least a working C compiler, make, autoconf, +automake, pkg-config as well as libevent and ncurses libraries and headers.) + +## Contributing + +Bug reports, feature suggestions and especially code contributions are most +welcome. Please send by email to: + +tmux-users@googlegroups.com + +Or open a GitHub issue or pull request. + +Please read the CONTRIBUTING file before opening an issue. + +## Documentation + +For documentation on using tmux, see the tmux.1 manpage. View it from the +source tree with: + +~~~bash +nroff -mdoc tmux.1|less +~~~ + +A small example configuration is in `example_tmux.conf`. + +And a bash(1) completion file at: + +https://github.com/imomaliev/tmux-bash-completion + +For debugging, run tmux with -v or -vv to generate server and client log files +in the current directory. + +## Support + +The tmux mailing list for general discussion and bug reports is: + +https://groups.google.com/forum/#!forum/tmux-users + +Subscribe by sending an email to: + +tmux-users+subscribe@googlegroups.com From 3a9c199ae7ddaae21682f6c1292ee923e618321e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 08:23:14 +0100 Subject: [PATCH 511/836] New ISSUE_TEMPLATE from Nicolas CARPi. --- .github/ISSUE_TEMPLATE.md | 16 ++++++++++++++++ ISSUE_TEMPLATE | 1 - 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE.md delete mode 100644 ISSUE_TEMPLATE diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..864ec12b3c --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,16 @@ +# Issue description + +Please describe the problem and the steps to reproduce. Add a minimal tmux +config if necessary. Screenshots can be helpful, but no more than one or two. + +Please do not report bugs (crashes, incorrect behaviour) without reproducing on +a tmux built from the latest code in Git. + +# Information + +Please provide the following information: + +* tmux version (`tmux -V`). +* Platform (`uname -sp`). +* $TERM inside and outside of tmux (`echo $TERM`). +* Logs from tmux. diff --git a/ISSUE_TEMPLATE b/ISSUE_TEMPLATE deleted file mode 100644 index d786f923c9..0000000000 --- a/ISSUE_TEMPLATE +++ /dev/null @@ -1 +0,0 @@ -Please read https://raw.githubusercontent.com/tmux/tmux/master/CONTRIBUTING From 67e2f5869af633631ef089d82682a3805dbba94f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 11 May 2019 08:34:08 +0100 Subject: [PATCH 512/836] Mention -vv. --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 864ec12b3c..68c295303b 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -13,4 +13,4 @@ Please provide the following information: * tmux version (`tmux -V`). * Platform (`uname -sp`). * $TERM inside and outside of tmux (`echo $TERM`). -* Logs from tmux. +* Logs from tmux (`tmux -vv new`). From c91323e4d6a4bd5f2c646e315d57ead1a7c568ea Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 12 May 2019 07:27:08 +0000 Subject: [PATCH 513/836] Remove menu_create_from_items, I thought I would use it for some later work but I don't need it. --- cmd-display-menu.c | 2 +- menu.c | 20 ++------------------ tmux.h | 4 +--- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/cmd-display-menu.c b/cmd-display-menu.c index 27bf454d77..15b750ee1a 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -79,7 +79,7 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) title = format_single(NULL, args_get(args, 'T'), c, s, wl, wp); else title = xstrdup(""); - menu = menu_create_from_string(string, c, fs, title); + menu = menu_create(string, c, fs, title); free(title); if (menu == NULL) { cmdq_error(item, "invalid menu %s", string); diff --git a/menu.c b/menu.c index 0443d22f46..bd5996da1f 100644 --- a/menu.c +++ b/menu.c @@ -103,24 +103,8 @@ menu_parse_item(struct menu *menu, const char *s, struct client *c, } struct menu * -menu_create_from_items(struct menu_item *items, u_int count, struct client *c, - struct cmd_find_state *fs, const char *title) -{ - struct menu *menu; - u_int i; - - menu = xcalloc(1, sizeof *menu); - menu->title = xstrdup(title); - - for (i = 0; i < count; i++) - menu_add_item(menu, &items[i], c, fs); - - return (menu); -} - -struct menu * -menu_create_from_string(const char *s, struct client *c, - struct cmd_find_state *fs, const char *title) +menu_create(const char *s, struct client *c, struct cmd_find_state *fs, + const char *title) { struct menu *menu; char *copy, *string, *next; diff --git a/tmux.h b/tmux.h index 757e7673e1..c00a468c08 100644 --- a/tmux.h +++ b/tmux.h @@ -2551,9 +2551,7 @@ __dead void printflike(1, 2) fatal(const char *, ...); __dead void printflike(1, 2) fatalx(const char *, ...); /* menu.c */ -struct menu *menu_create_from_items(struct menu_item *, u_int, - struct client *, struct cmd_find_state *, const char *); -struct menu *menu_create_from_string(const char *, struct client *, +struct menu *menu_create(const char *, struct client *, struct cmd_find_state *, const char *); void menu_free(struct menu *); int menu_display(struct menu *, int, struct cmdq_item *, u_int, From a13165523598fa7670ebc95f3cfb5c892d08745a Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 12 May 2019 08:58:09 +0000 Subject: [PATCH 514/836] Add simple menus to tree, client, buffer modes. --- cmd-send-keys.c | 4 +- key-bindings.c | 4 +- menu.c | 14 +++++-- mode-tree.c | 105 +++++++++++++++++++++++++++++++++++++++++++++--- tmux.h | 6 ++- window-buffer.c | 34 +++++++++++++++- window-client.c | 29 ++++++++++++- window-tree.c | 37 ++++++++++++++--- 8 files changed, 209 insertions(+), 24 deletions(-) diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 814755f307..fd1c1ab9b3 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -67,7 +67,7 @@ cmd_send_keys_inject(struct client *c, struct cmd_find_state *fs, if (wme == NULL || wme->mode->key_table == NULL) { if (options_get_number(fs->wp->window->options, "xterm-keys")) key |= KEYC_XTERM; - window_pane_key(fs->wp, NULL, fs->s, fs->wl, key, NULL); + window_pane_key(fs->wp, item->client, fs->s, fs->wl, key, NULL); return (item); } table = key_bindings_get_table(wme->mode->key_table(wme), 1); @@ -132,7 +132,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "no mouse target"); return (CMD_RETURN_ERROR); } - window_pane_key(wp, NULL, s, wl, m->key, m); + window_pane_key(wp, item->client, s, wl, m->key, m); return (CMD_RETURN_NORMAL); } diff --git a/key-bindings.c b/key-bindings.c index ca4fdc5250..c4874b50b7 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -278,8 +278,8 @@ key_bindings_init(void) "bind -n WheelDownStatus next-window", "bind -n WheelUpStatus previous-window", "bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'", - "bind -n MouseDown3Pane if-shell -Ft= '#{mouse_any_flag}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", - "bind -n WheelUpPane if-shell -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", + "bind -n MouseDown3Pane if -Ft= '#{||:mouse_any_flag,pane_in_mode}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", + "bind -n WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -F -M \"#{client_menu}\" -T \"#[align=centre]#{client_name}\"", "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -F -M \"#{session_menu}\" -T \"#[align=centre]#{session_name}\"", "bind -n MouseDown3Status display-menu -t= -xW -yS -F -M \"#{window_menu}\" -T \"#[align=centre]#{window_index}:#{window_name}\"", diff --git a/menu.c b/menu.c index bd5996da1f..945b62c4df 100644 --- a/menu.c +++ b/menu.c @@ -56,7 +56,11 @@ menu_add_item(struct menu *menu, struct menu_item *item, struct client *c, if (item == NULL || *item->name == '\0') /* horizontal line */ return; - name = format_single(NULL, item->name, c, fs->s, fs->wl, fs->wp); + if (fs != NULL) { + name = format_single(NULL, item->name, c, fs->s, fs->wl, + fs->wp); + } else + name = xstrdup(item->name); if (*name == '\0') { /* no item if empty after format expanded */ menu->count--; return; @@ -118,7 +122,6 @@ menu_create(const char *s, struct client *c, struct cmd_find_state *fs, copy = string = xstrdup(s); do { next = (char *)format_skip(string, "|"); - log_debug("XXX %s -- %s", next, string); if (next != NULL) *next++ = '\0'; if (*string == '\0') @@ -180,6 +183,9 @@ menu_free_cb(struct client *c) if (md->item != NULL) md->item->flags &= ~CMDQ_WAITING; + if (md->cb != NULL) + md->cb(md->menu, UINT_MAX, KEYC_NONE, md->data); + screen_free(&md->s); menu_free(md->menu); free(md); @@ -274,6 +280,7 @@ menu_key_cb(struct client *c, struct key_event *event) return (1); if (md->cb != NULL) { md->cb(md->menu, md->choice, item->key, md->data); + md->cb = NULL; return (1); } cmdlist = cmd_string_parse(item->command, NULL, 0, &cause); @@ -308,7 +315,8 @@ menu_display(struct menu *menu, int flags, struct cmdq_item *item, u_int px, md->item = item; md->flags = flags; - cmd_find_copy_state(&md->fs, fs); + if (fs != NULL) + cmd_find_copy_state(&md->fs, fs); screen_init(&md->s, menu->width + 4, menu->count + 2, 0); md->px = px; diff --git a/mode-tree.c b/mode-tree.c index 60e2353461..eb6428260f 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -35,6 +35,7 @@ struct mode_tree_data { struct window_pane *wp; void *modedata; + const char *menu; const char **sort_list; u_int sort_size; @@ -43,6 +44,7 @@ struct mode_tree_data { mode_tree_build_cb buildcb; mode_tree_draw_cb drawcb; mode_tree_search_cb searchcb; + mode_tree_menu_cb menucb; struct mode_tree_list children; struct mode_tree_list saved; @@ -89,8 +91,21 @@ struct mode_tree_line { int flat; }; +struct mode_tree_menu { + struct mode_tree_data *data; + struct client *c; + u_int line; + void *itemdata; +}; + static void mode_tree_free_items(struct mode_tree_list *); +#define MODE_TREE_MENU \ + "Scroll Left,<,|" \ + "Scroll Right,>,|" \ + "|" \ + "Cancel,q," + static struct mode_tree_item * mode_tree_find_item(struct mode_tree_list *mtl, uint64_t tag) { @@ -299,8 +314,9 @@ mode_tree_each_tagged(struct mode_tree_data *mtd, mode_tree_each_cb cb, struct mode_tree_data * mode_tree_start(struct window_pane *wp, struct args *args, mode_tree_build_cb buildcb, mode_tree_draw_cb drawcb, - mode_tree_search_cb searchcb, void *modedata, const char **sort_list, - u_int sort_size, struct screen **s) + mode_tree_search_cb searchcb, mode_tree_menu_cb menucb, void *modedata, + const char *menu, const char **sort_list, u_int sort_size, + struct screen **s) { struct mode_tree_data *mtd; const char *sort; @@ -311,6 +327,7 @@ mode_tree_start(struct window_pane *wp, struct args *args, mtd->wp = wp; mtd->modedata = modedata; + mtd->menu = menu; mtd->sort_list = sort_list; mtd->sort_size = sort_size; @@ -334,6 +351,7 @@ mode_tree_start(struct window_pane *wp, struct args *args, mtd->buildcb = buildcb; mtd->drawcb = drawcb; mtd->searchcb = searchcb; + mtd->menucb = menucb; TAILQ_INIT(&mtd->children); @@ -762,6 +780,71 @@ mode_tree_filter_free(void *data) mode_tree_remove_ref(data); } +static void +mode_tree_menu_callback(__unused struct menu *menu, __unused u_int idx, + key_code key, void *data) +{ + struct mode_tree_menu *mtm = data; + struct mode_tree_data *mtd = mtm->data; + struct mode_tree_item *mti; + + if (mtd->dead || key == KEYC_NONE) + goto out; + + if (mtm->line >= mtd->line_size) + goto out; + mti = mtd->line_list[mtm->line].item; + if (mti->itemdata != mtm->itemdata) + goto out; + mtd->current = mtm->line; + mtd->menucb (mtd->modedata, mtm->c, key); + +out: + mode_tree_remove_ref(mtd); + free(mtm); +} + +static void +mode_tree_display_menu(struct mode_tree_data *mtd, struct client *c, u_int x, + u_int y, int outside) +{ + struct mode_tree_item *mti; + struct menu *menu; + struct mode_tree_menu *mtm; + const char *s; + char *title; + u_int line; + + if (mtd->offset + y > mtd->line_size - 1) + line = mtd->current; + else + line = mtd->offset + y; + mti = mtd->line_list[line].item; + + if (!outside) { + s = mtd->menu; + xasprintf(&title, "#[align=centre]%s", mti->name); + } else { + s = MODE_TREE_MENU; + title = xstrdup(""); + } + menu = menu_create(s, c, NULL, title); + free(title); + if (menu == NULL) + return; + + mtm = xmalloc(sizeof *mtm); + mtm->data = mtd; + mtm->c = c; + mtm->line = line; + mtm->itemdata = mti->itemdata; + mtd->references++; + + if (menu_display(menu, 0, NULL, x, y, c, NULL, mode_tree_menu_callback, + mtm) != 0) + menu_free(menu); +} + int mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, struct mouse_event *m, u_int *xp, u_int *yp) @@ -772,7 +855,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, int choice; key_code tmp; - if (KEYC_IS_MOUSE(*key)) { + if (KEYC_IS_MOUSE(*key) && m != NULL) { if (cmd_mouse_at(mtd->wp, m, &x, &y, 0) != 0) { *key = KEYC_NONE; return (0); @@ -782,20 +865,29 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, if (yp != NULL) *yp = y; if (x > mtd->width || y > mtd->height) { + if (*key == KEYC_MOUSEDOWN3_PANE) + mode_tree_display_menu(mtd, c, x, y, 1); if (!mtd->preview) *key = KEYC_NONE; return (0); } if (mtd->offset + y < mtd->line_size) { if (*key == KEYC_MOUSEDOWN1_PANE || + *key == KEYC_MOUSEDOWN3_PANE || *key == KEYC_DOUBLECLICK1_PANE) mtd->current = mtd->offset + y; if (*key == KEYC_DOUBLECLICK1_PANE) *key = '\r'; - else + else { + if (*key == KEYC_MOUSEDOWN3_PANE) + mode_tree_display_menu(mtd, c, x, y, 0); *key = KEYC_NONE; - } else + } + } else { + if (*key == KEYC_MOUSEDOWN3_PANE) + mode_tree_display_menu(mtd, c, x, y, 0); *key = KEYC_NONE; + } return (0); } @@ -879,7 +971,8 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, current->tagged = 1; } else current->tagged = 0; - mode_tree_down(mtd, 0); + if (m != NULL) + mode_tree_down(mtd, 0); break; case 'T': for (i = 0; i < mtd->line_size; i++) diff --git a/tmux.h b/tmux.h index c00a468c08..09e7ec9ce4 100644 --- a/tmux.h +++ b/tmux.h @@ -2408,8 +2408,9 @@ u_int layout_set_previous(struct window *); /* mode-tree.c */ typedef void (*mode_tree_build_cb)(void *, u_int, uint64_t *, const char *); typedef void (*mode_tree_draw_cb)(void *, void *, struct screen_write_ctx *, - u_int, u_int); + u_int, u_int); typedef int (*mode_tree_search_cb)(void *, void *, const char *); +typedef void (*mode_tree_menu_cb)(void *, struct client *, key_code); typedef void (*mode_tree_each_cb)(void *, void *, struct client *, key_code); u_int mode_tree_count_tagged(struct mode_tree_data *); void *mode_tree_get_current(struct mode_tree_data *); @@ -2420,7 +2421,8 @@ void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, - void *, const char **, u_int, struct screen **); + mode_tree_menu_cb, void *, const char *, const char **, u_int, + struct screen **); void mode_tree_zoom(struct mode_tree_data *, struct args *); void mode_tree_build(struct mode_tree_data *); void mode_tree_free(struct mode_tree_data *); diff --git a/window-buffer.c b/window-buffer.c index c7e345c08e..3597fbf20f 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -39,6 +39,19 @@ static void window_buffer_key(struct window_mode_entry *, #define WINDOW_BUFFER_DEFAULT_FORMAT \ "#{buffer_size} bytes (#{t:buffer_created})" +#define WINDOW_BUFFER_MENU \ + "Paste,p,|" \ + "Paste Tagged,P,|" \ + "|" \ + "Tag,t,|" \ + "Tag All,C-t,|" \ + "Tag None,T,|" \ + "|" \ + "Delete,d,|" \ + "Delete Tagged,D,|" \ + "|" \ + "Cancel,q," + const struct window_mode window_buffer_mode = { .name = "buffer-mode", .default_format = WINDOW_BUFFER_DEFAULT_FORMAT, @@ -67,7 +80,9 @@ struct window_buffer_itemdata { }; struct window_buffer_modedata { + struct window_pane *wp; struct cmd_find_state fs; + struct mode_tree_data *data; char *command; char *format; @@ -264,6 +279,19 @@ window_buffer_search(__unused void *modedata, void *itemdata, const char *ss) return (memmem(bufdata, bufsize, ss, strlen(ss)) != NULL); } +static void +window_buffer_menu(void *modedata, struct client *c, key_code key) +{ + struct window_buffer_modedata *data = modedata; + struct window_pane *wp = data->wp; + struct window_mode_entry *wme; + + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->data != modedata) + return; + window_buffer_key(wme, c, NULL, NULL, key, NULL); +} + static struct screen * window_buffer_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct args *args) @@ -273,6 +301,7 @@ window_buffer_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct screen *s; wme->data = data = xcalloc(1, sizeof *data); + data->wp = wp; cmd_find_copy_state(&data->fs, fs); if (args == NULL || !args_has(args, 'F')) @@ -285,8 +314,9 @@ window_buffer_init(struct window_mode_entry *wme, struct cmd_find_state *fs, data->command = xstrdup(args->argv[0]); data->data = mode_tree_start(wp, args, window_buffer_build, - window_buffer_draw, window_buffer_search, data, - window_buffer_sort_list, nitems(window_buffer_sort_list), &s); + window_buffer_draw, window_buffer_search, window_buffer_menu, data, + WINDOW_BUFFER_MENU, window_buffer_sort_list, + nitems(window_buffer_sort_list), &s); mode_tree_zoom(data->data, args); mode_tree_build(data->data); diff --git a/window-client.c b/window-client.c index e0637a066e..e172b584b7 100644 --- a/window-client.c +++ b/window-client.c @@ -40,6 +40,16 @@ static void window_client_key(struct window_mode_entry *, "session #{session_name} " \ "(#{client_width}x#{client_height}, #{t:client_activity})" +#define WINDOW_CLIENT_MENU \ + "Detach,d,|" \ + "Detach Tagged,D,|" \ + "|" \ + "Tag,t,|" \ + "Tag All,C-t,|" \ + "Tag None,T,|" \ + "|" \ + "Cancel,q," + const struct window_mode window_client_mode = { .name = "client-mode", .default_format = WINDOW_CLIENT_DEFAULT_FORMAT, @@ -68,6 +78,8 @@ struct window_client_itemdata { }; struct window_client_modedata { + struct window_pane *wp; + struct mode_tree_data *data; char *format; char *command; @@ -249,6 +261,19 @@ window_client_draw(__unused void *modedata, void *itemdata, screen_write_fast_copy(ctx, &c->status.screen, 0, 0, sx, lines); } +static void +window_client_menu(void *modedata, struct client *c, key_code key) +{ + struct window_client_modedata *data = modedata; + struct window_pane *wp = data->wp; + struct window_mode_entry *wme; + + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->data != modedata) + return; + window_client_key(wme, c, NULL, NULL, key, NULL); +} + static struct screen * window_client_init(struct window_mode_entry *wme, __unused struct cmd_find_state *fs, struct args *args) @@ -258,6 +283,7 @@ window_client_init(struct window_mode_entry *wme, struct screen *s; wme->data = data = xcalloc(1, sizeof *data); + data->wp = wp; if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_CLIENT_DEFAULT_FORMAT); @@ -269,7 +295,8 @@ window_client_init(struct window_mode_entry *wme, data->command = xstrdup(args->argv[0]); data->data = mode_tree_start(wp, args, window_client_build, - window_client_draw, NULL, data, window_client_sort_list, + window_client_draw, NULL, window_client_menu, data, + WINDOW_CLIENT_MENU, window_client_sort_list, nitems(window_client_sort_list), &s); mode_tree_zoom(data->data, args); diff --git a/window-tree.c b/window-tree.c index 32dc0251b6..ce740cebf5 100644 --- a/window-tree.c +++ b/window-tree.c @@ -53,6 +53,19 @@ static void window_tree_key(struct window_mode_entry *, "}" \ "}" +#define WINDOW_TREE_MENU \ + "Select,Enter,|" \ + "Expand,Right,|" \ + "|" \ + "Tag,t,|" \ + "Tag All,C-t,|" \ + "Tag None,T,|" \ + "|" \ + "Kill,x,|" \ + "Kill Tagged,X,|" \ + "|" \ + "Cancel,q," + const struct window_mode window_tree_mode = { .name = "tree-mode", .default_format = WINDOW_TREE_DEFAULT_FORMAT, @@ -814,6 +827,19 @@ window_tree_search(__unused void *modedata, void *itemdata, const char *ss) return (0); } +static void +window_tree_menu(void *modedata, struct client *c, key_code key) +{ + struct window_tree_modedata *data = modedata; + struct window_pane *wp = data->wp; + struct window_mode_entry *wme; + + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->data != modedata) + return; + window_tree_key(wme, c, NULL, NULL, key, NULL); +} + static struct screen * window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct args *args) @@ -823,6 +849,8 @@ window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct screen *s; wme->data = data = xcalloc(1, sizeof *data); + data->wp = wp; + data->references = 1; if (args_has(args, 's')) data->type = WINDOW_TREE_SESSION; @@ -832,9 +860,6 @@ window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, data->type = WINDOW_TREE_PANE; memcpy(&data->fs, fs, sizeof data->fs); - data->wp = wp; - data->references = 1; - if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_TREE_DEFAULT_FORMAT); else @@ -846,7 +871,8 @@ window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, data->squash_groups = !args_has(args, 'G'); data->data = mode_tree_start(wp, args, window_tree_build, - window_tree_draw, window_tree_search, data, window_tree_sort_list, + window_tree_draw, window_tree_search, window_tree_menu, data, + WINDOW_TREE_MENU, window_tree_sort_list, nitems(window_tree_sort_list), &s); mode_tree_zoom(data->data, args); @@ -1146,7 +1172,7 @@ window_tree_key(struct window_mode_entry *wme, struct client *c, item = new_item; data->offset = 0; } - if (KEYC_IS_MOUSE(key)) + if (KEYC_IS_MOUSE(key) && m != NULL) key = window_tree_mouse(data, key, x, item); switch (key) { case '<': @@ -1207,7 +1233,6 @@ window_tree_key(struct window_mode_entry *wme, struct client *c, free(prompt); break; case '\r': - item = mode_tree_get_current(data->data); name = window_tree_get_target(item, &fs); if (name != NULL) mode_tree_run_command(c, NULL, data->command, name); From 99c1853792e092b621b836d8adb47d74c1a31cef Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 12 May 2019 10:00:11 +0100 Subject: [PATCH 515/836] Scatter some `. --- .github/CONTRIBUTING.md | 16 ++++++++-------- .github/README.md | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9f585db8fd..58438d8db7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,8 +2,8 @@ Before opening an issue, please ensure that: -- TERM inside tmux is screen, screen-256color, tmux or tmux-256color. Check - by running echo $TERM inside tmux. +- `$TERM` inside tmux is screen, screen-256color, tmux or tmux-256color. Check + by running `echo $TERM` inside tmux. - You can reproduce the problem with the latest tmux release, or a build from Git master. @@ -28,7 +28,7 @@ Also include: - A minimal tmux config, if you can't reproduce without a config. -- Your terminal, and $TERM inside and outside of tmux. +- Your terminal, and `$TERM` inside and outside of tmux. - Logs from tmux (see below). @@ -36,7 +36,7 @@ Also include: ## How do I test without a .tmux.conf? -Run a separate tmux server with -f/dev/null to skip loading .tmux.conf: +Run a separate tmux server with `-f/dev/null` to skip loading `.tmux.conf`: ~~~bash tmux -Ltest kill-server @@ -45,7 +45,7 @@ tmux -Ltest -f/dev/null new ## How do I get logs from tmux? -Add -vv to tmux to create three log files in the current directory. If you can +Add `-vv` to tmux to create three log files in the current directory. If you can reproduce without a configuration file: ~~~bash @@ -62,10 +62,10 @@ tmux -vv new The log files are: -- tmux-server*.log: server log file. +- `tmux-server*.log`: server log file. -- tmux-client*.log: client log file. +- `tmux-client*.log`: client log file. -- tmux-out*.log: output log file. +- `tmux-out*.log`: output log file. Please attach the log files to your issue. diff --git a/.github/README.md b/.github/README.md index bd2eb2eaeb..560f92c2dd 100644 --- a/.github/README.md +++ b/.github/README.md @@ -11,7 +11,8 @@ This release runs on OpenBSD, FreeBSD, NetBSD, Linux, OS X and Solaris. tmux depends on [libevent](https://libevent.org) 2.x, avaailable from [this page](https://github.com/libevent/libevent/releases/latest). -It also depends on [ncurses](https://www.gnu.org/software/ncurses/), available from [this page](https://invisible-mirror.net/archives/ncurses/). +It also depends on [ncurses](https://www.gnu.org/software/ncurses/), available +from [this page](https://invisible-mirror.net/archives/ncurses/). ## Installation From 19370631eac06598656598a7c34652af6b2a5420 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 12 May 2019 10:05:10 +0100 Subject: [PATCH 516/836] Tweak text of menu CHANGES entry. --- CHANGES | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 36a29c39b0..b43440db88 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,10 @@ CHANGES FROM 2.9 to X.X +* Add the ability to create simple menus. Introduces new command display-menu + and a few new formats (client_menu, session_menu, window_menu, + pane_menu). Default menus are bound to MouseDown3 on the status line, + M-MouseDown3 on panes and in tree, client and buffer modes. + * Allow panes to be empty (no command). They can be created either by piping to split-window -I, or by passing an empty command ('') to split-window. Output can be sent to an existing empty window with display-message -I. @@ -33,10 +38,6 @@ CHANGES FROM 2.9 to X.X * Add the ability to infer an option type (server, session, window) from its name to show-options (it was already present in set-option). -* Add the ability to create simple menus using mouse or keyboard. Introduces - new command 'display-menu', and a few new formats: client_menu, - session_menu, window_menu, pane_menu. - CHANGES FROM 2.9 to 2.9a * Fix bugs in select-pane and the main-horizontal and main-vertical layouts. From 69c59c52b6b7b188738e1a7e7ec215c0fa9c0e05 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 12 May 2019 10:06:42 +0100 Subject: [PATCH 517/836] Spelling error. --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 58438d8db7..49e2b90bc5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,7 +12,7 @@ Before opening an issue, please ensure that: - Nobody else has opened the same issue recently. -## What should I include in an isue? +## What should I include in an issue? Please include the output of: From 42da951edfc1fadee0e9e7f08deedb24ffe482b8 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Sun, 12 May 2019 18:37:32 +0100 Subject: [PATCH 518/836] README.md: avaailable -> available Correct typo. --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 560f92c2dd..b586c5a295 100644 --- a/.github/README.md +++ b/.github/README.md @@ -8,7 +8,7 @@ This release runs on OpenBSD, FreeBSD, NetBSD, Linux, OS X and Solaris. ## Dependencies -tmux depends on [libevent](https://libevent.org) 2.x, avaailable from [this +tmux depends on [libevent](https://libevent.org) 2.x, available from [this page](https://github.com/libevent/libevent/releases/latest). It also depends on [ncurses](https://www.gnu.org/software/ncurses/), available From 00f19b7f9160f32b3736da08116e5ea4f2409bb1 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 12 May 2019 18:16:33 +0000 Subject: [PATCH 519/836] Fix some indentation and dead assignments. --- cmd-show-options.c | 4 +--- mode-tree.c | 2 +- options.c | 13 ++++++++++--- server-client.c | 16 +++++++++------- style.c | 4 +--- window-copy.c | 3 --- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 80e9cd4278..8211e8daaa 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -90,10 +90,8 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); - if (args->argc == 0) { - scope = options_scope_from_flags(args, window, fs, &oo, &cause); + if (args->argc == 0) return (cmd_show_options_all(self, item, oo)); - } argument = format_single(item, args->argv[0], c, s, wl, NULL); name = options_match(argument, &idx, &ambiguous); diff --git a/mode-tree.c b/mode-tree.c index eb6428260f..fb186c1a89 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -819,7 +819,7 @@ mode_tree_display_menu(struct mode_tree_data *mtd, struct client *c, u_int x, line = mtd->current; else line = mtd->offset + y; - mti = mtd->line_list[line].item; + mti = mtd->line_list[line].item; if (!outside) { s = mtd->menu; diff --git a/options.c b/options.c index c5a776e5c8..488f6cf972 100644 --- a/options.c +++ b/options.c @@ -354,16 +354,23 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, struct options_array_item *a; char *new; struct cmd_list *cmdlist; + char *error; if (!OPTIONS_IS_ARRAY(o)) { - *cause = xstrdup("not an array"); + if (cause != NULL) + *cause = xstrdup("not an array"); return (-1); } if (OPTIONS_IS_COMMAND(o)) { - cmdlist = cmd_string_parse(value, NULL, 0, cause); - if (cmdlist == NULL && *cause != NULL) + cmdlist = cmd_string_parse(value, NULL, 0, &error); + if (cmdlist == NULL && error != NULL) { + if (cause != NULL) + *cause = error; + else + free(error); return (-1); + } } a = options_array_item(o, idx); diff --git a/server-client.c b/server-client.c index dc1f39396e..c7a0acc942 100644 --- a/server-client.c +++ b/server-client.c @@ -426,17 +426,21 @@ server_client_check_mouse(struct client *c, struct key_event *event) key_code key; struct timeval tv; struct style_range *sr; - enum { NOTYPE, MOVE, DOWN, UP, DRAG, WHEEL, DOUBLE, TRIPLE } type; + enum { NOTYPE, + MOVE, + DOWN, + UP, + DRAG, + WHEEL, + DOUBLE, + TRIPLE } type = NOTYPE; enum { NOWHERE, PANE, STATUS, STATUS_LEFT, STATUS_RIGHT, STATUS_DEFAULT, - BORDER } where; - - type = NOTYPE; - where = NOWHERE; + BORDER } where = NOWHERE; log_debug("%s mouse %02x at %u,%u (last %u,%u) (%d)", c->name, m->b, m->x, m->y, m->lx, m->ly, c->tty.mouse_drag_flag); @@ -1003,7 +1007,6 @@ server_client_key_callback(struct cmdq_item *item, void *data) struct mouse_event *m = &event->m; struct session *s = c->session; struct winlink *wl; - struct window *w; struct window_pane *wp; struct window_mode_entry *wme; struct timeval tv; @@ -1017,7 +1020,6 @@ server_client_key_callback(struct cmdq_item *item, void *data) if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0) goto out; wl = s->curw; - w = wl->window; /* Update the activity timer. */ if (gettimeofday(&c->activity_time, NULL) != 0) diff --git a/style.c b/style.c index 92941dbd73..ce78175ae4 100644 --- a/style.c +++ b/style.c @@ -57,10 +57,8 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) style_copy(&saved, sy); do { - while (*in != '\0' && strchr(delimiters, *in) != NULL) { + while (*in != '\0' && strchr(delimiters, *in) != NULL) in++; - end--; - } if (*in == '\0') break; diff --git a/window-copy.c b/window-copy.c index 9531995951..84bef8e438 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1046,8 +1046,6 @@ window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) goto retry; } window_copy_cursor_previous_word(wme, "}]) "); - px = data->cx; - continue; } continue; } @@ -1161,7 +1159,6 @@ window_copy_cmd_next_matching_bracket(struct window_copy_cmd_state *cs) goto retry; } window_copy_cursor_next_word_end(wme, "{[( "); - px = data->cx; continue; } /* For vi, continue searching for bracket until EOL. */ From c3c3927c2bf90f10623374edb579eb19fb192ab7 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 12 May 2019 18:18:30 +0000 Subject: [PATCH 520/836] Oops, removed too much in last change. --- cmd-show-options.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 8211e8daaa..1e1518f696 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -90,8 +90,10 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); - if (args->argc == 0) + if (args->argc == 0) { + options_scope_from_flags(args, window, fs, &oo, &cause); return (cmd_show_options_all(self, item, oo)); + } argument = format_single(item, args->argv[0], c, s, wl, NULL); name = options_match(argument, &idx, &ambiguous); From e1e520d741f0b6d128638ac01074bd2e81ad67a2 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 12 May 2019 11:25:39 +0100 Subject: [PATCH 521/836] Clarify a little. --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index b43440db88..a2d9d5e632 100644 --- a/CHANGES +++ b/CHANGES @@ -3,7 +3,7 @@ CHANGES FROM 2.9 to X.X * Add the ability to create simple menus. Introduces new command display-menu and a few new formats (client_menu, session_menu, window_menu, pane_menu). Default menus are bound to MouseDown3 on the status line, - M-MouseDown3 on panes and in tree, client and buffer modes. + M-MouseDown3 on panes and MouseDown3 in tree, client and buffer modes. * Allow panes to be empty (no command). They can be created either by piping to split-window -I, or by passing an empty command ('') to split-window. Output From c5f660e33ae2e7e304ec8a2cb53df743f83e4ec4 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 13 May 2019 08:56:07 +0000 Subject: [PATCH 522/836] Fix column width for copy mode commands. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index f0af27cb6a..968d31f4e4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1158,7 +1158,7 @@ Key tables may be viewed with the command. .Pp The following commands are supported in copy mode: -.Bl -column "CommandXXXXXXXXXXXXXXXXXXXXXXXXXX" "viXXXXXXXXXX" "emacs" -offset indent +.Bl -column "CommandXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" "viXXXXXXXXXX" "emacs" -offset indent .It Sy "Command" Ta Sy "vi" Ta Sy "emacs" .It Li "append-selection" Ta "" Ta "" .It Li "append-selection-and-cancel" Ta "A" Ta "" From 1b0512aa7e942e0a641ece7d86e92cf943eb62be Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 13 May 2019 20:07:02 +0000 Subject: [PATCH 523/836] Always include Lock in the menu. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index 79e7a94b26..a99db16b4a 100644 --- a/format.c +++ b/format.c @@ -60,7 +60,7 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "Detach & Kill,X,detach-client -P|" \ "Detach Others,o,detach-client -a|" \ "|" \ - "#{?#{lock-command},Lock,},l,lock-client" + "Lock,l,lock-client" #define DEFAULT_SESSION_MENU \ "Next,n,switch-client -n|" \ "Previous,p,switch-client -p|" \ From 1ee944a19def82cb62abf6ab92c17eb30df77a41 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 13 May 2019 20:10:23 +0000 Subject: [PATCH 524/836] Add support for overline (SGR 53), from Ricardo Banffy. --- attributes.c | 8 +++++--- grid.c | 1 + input.c | 6 ++++++ tmux.1 | 3 +++ tmux.h | 2 ++ tty-term.c | 1 + tty.c | 2 ++ 7 files changed, 20 insertions(+), 3 deletions(-) diff --git a/attributes.c b/attributes.c index 1b8317332a..5849af2b17 100644 --- a/attributes.c +++ b/attributes.c @@ -31,7 +31,7 @@ attributes_tostring(int attr) if (attr == 0) return ("none"); - len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s", + len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s%s", (attr & GRID_ATTR_BRIGHT) ? "bright," : "", (attr & GRID_ATTR_DIM) ? "dim," : "", (attr & GRID_ATTR_UNDERSCORE) ? "underscore," : "", @@ -43,7 +43,8 @@ attributes_tostring(int attr) (attr & GRID_ATTR_UNDERSCORE_2) ? "double-underscore," : "", (attr & GRID_ATTR_UNDERSCORE_3) ? "curly-underscore," : "", (attr & GRID_ATTR_UNDERSCORE_4) ? "dotted-underscore," : "", - (attr & GRID_ATTR_UNDERSCORE_5) ? "dashed-underscore," : ""); + (attr & GRID_ATTR_UNDERSCORE_5) ? "dashed-underscore," : "", + (attr & GRID_ATTR_OVERLINE) ? "overline," : ""); if (len > 0) buf[len - 1] = '\0'; @@ -73,7 +74,8 @@ attributes_fromstring(const char *str) { "double-underscore", GRID_ATTR_UNDERSCORE_2 }, { "curly-underscore", GRID_ATTR_UNDERSCORE_3 }, { "dotted-underscore", GRID_ATTR_UNDERSCORE_4 }, - { "dashed-underscore", GRID_ATTR_UNDERSCORE_5 } + { "dashed-underscore", GRID_ATTR_UNDERSCORE_5 }, + { "overline", GRID_ATTR_OVERLINE } }; if (*str == '\0' || strcspn(str, delimiters) == 0) diff --git a/grid.c b/grid.c index 53751c0363..aa4ae80408 100644 --- a/grid.c +++ b/grid.c @@ -790,6 +790,7 @@ grid_string_cells_code(const struct grid_cell *lastgc, { GRID_ATTR_UNDERSCORE_3, 43 }, { GRID_ATTR_UNDERSCORE_4, 44 }, { GRID_ATTR_UNDERSCORE_5, 45 }, + { GRID_ATTR_OVERLINE, 53 }, }; n = 0; diff --git a/input.c b/input.c index 285de2d2c1..a9f0acc9de 100644 --- a/input.c +++ b/input.c @@ -2070,6 +2070,12 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) case 49: gc->bg = 8; break; + case 53: + gc->attr |= GRID_ATTR_OVERLINE; + break; + case 55: + gc->attr &= ~GRID_ATTR_OVERLINE; + break; case 90: case 91: case 92: diff --git a/tmux.1 b/tmux.1 index 968d31f4e4..71cd1fda13 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4091,6 +4091,7 @@ Set no attributes (turn off any active attributes). .Ic reverse , .Ic hidden , .Ic italics , +.Ic overline , .Ic strikethrough , .Ic double-underscore , .Ic curly-underscore , @@ -4820,6 +4821,8 @@ to change the cursor colour from inside .Bd -literal -offset indent $ printf '\e033]12;red\e033\e\e' .Ed +.It Em \&Smol +Enable the overline attribute. .It Em \&Smulx Set a styled underline. The single parameter is one of: 0 for no underline, 1 for normal diff --git a/tmux.h b/tmux.h index 09e7ec9ce4..afecd5b6dd 100644 --- a/tmux.h +++ b/tmux.h @@ -431,6 +431,7 @@ enum tty_code_code { TTYC_SITM, TTYC_SMACS, TTYC_SMCUP, + TTYC_SMOL, TTYC_SMKX, TTYC_SMSO, TTYC_SMULX, @@ -568,6 +569,7 @@ enum utf8_state { #define GRID_ATTR_UNDERSCORE_3 0x400 #define GRID_ATTR_UNDERSCORE_4 0x800 #define GRID_ATTR_UNDERSCORE_5 0x1000 +#define GRID_ATTR_OVERLINE 0x2000 /* All underscore attributes. */ #define GRID_ATTR_ALL_UNDERSCORE \ diff --git a/tty-term.c b/tty-term.c index b692a6cc52..45934afaba 100644 --- a/tty-term.c +++ b/tty-term.c @@ -252,6 +252,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_SMACS] = { TTYCODE_STRING, "smacs" }, [TTYC_SMCUP] = { TTYCODE_STRING, "smcup" }, [TTYC_SMKX] = { TTYCODE_STRING, "smkx" }, + [TTYC_SMOL] = { TTYCODE_STRING, "Smol" }, [TTYC_SMSO] = { TTYCODE_STRING, "smso" }, [TTYC_SMULX] = { TTYCODE_STRING, "Smulx" }, [TTYC_SMUL] = { TTYCODE_STRING, "smul" }, diff --git a/tty.c b/tty.c index cc528e8ecf..34403a1faa 100644 --- a/tty.c +++ b/tty.c @@ -2199,6 +2199,8 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, tty_putcode(tty, TTYC_INVIS); if (changed & GRID_ATTR_STRIKETHROUGH) tty_putcode(tty, TTYC_SMXX); + if (changed & GRID_ATTR_OVERLINE) + tty_putcode(tty, TTYC_SMOL); if ((changed & GRID_ATTR_CHARSET) && tty_acs_needed(tty)) tty_putcode(tty, TTYC_SMACS); } From 38b8a198bac62c16d351c54ed83ead29a2e0ecc8 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 14 May 2019 07:37:50 +0000 Subject: [PATCH 525/836] Fix sizing of main-vertical and main-horizontal layouts, GitHub issue 1736. --- layout-set.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/layout-set.c b/layout-set.c index 3a088a4c56..12b4780fe5 100644 --- a/layout-set.c +++ b/layout-set.c @@ -185,7 +185,7 @@ layout_set_main_h(struct window *w) { struct window_pane *wp; struct layout_cell *lc, *lcmain, *lcother, *lcchild; - u_int n, mainh, otherh, sx; + u_int n, mainh, otherh, sx, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -195,22 +195,25 @@ layout_set_main_h(struct window *w) return; n--; /* take off main pane */ + /* Find available height - take off one line for the border. */ + sy = w->sy - 1; + /* Get the main pane height and work out the other pane height. */ mainh = options_get_number(w->options, "main-pane-height"); - if (mainh + PANE_MINIMUM + 1 >= w->sy) { - if (w->sy <= PANE_MINIMUM + 1 + PANE_MINIMUM) + if (mainh + PANE_MINIMUM >= sy) { + if (sy <= PANE_MINIMUM + PANE_MINIMUM) mainh = PANE_MINIMUM; else - mainh = w->sy - (PANE_MINIMUM + 1); + mainh = sy - PANE_MINIMUM; otherh = PANE_MINIMUM; } else { otherh = options_get_number(w->options, "other-pane-height"); if (otherh == 0) - otherh = w->sy - mainh; - else if (otherh > w->sy || w->sy - otherh < mainh) - otherh = w->sy - mainh; + otherh = sy - mainh; + else if (otherh > sy || sy - otherh < mainh) + otherh = sy - mainh; else - mainh = w->sy - otherh; + mainh = sy - otherh; } /* Work out what width is needed. */ @@ -221,7 +224,7 @@ layout_set_main_h(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, sx, mainh + otherh, 0, 0); + layout_set_size(lc, sx, mainh + otherh + 1, 0, 0); layout_make_node(lc, LAYOUT_TOPBOTTOM); /* Create the main pane. */ @@ -269,7 +272,7 @@ layout_set_main_v(struct window *w) { struct window_pane *wp; struct layout_cell *lc, *lcmain, *lcother, *lcchild; - u_int n, mainw, otherw, sy; + u_int n, mainw, otherw, sx, sy; layout_print_cell(w->layout_root, __func__, 1); @@ -279,22 +282,25 @@ layout_set_main_v(struct window *w) return; n--; /* take off main pane */ + /* Find available width - take off one line for the border. */ + sx = w->sx - 1; + /* Get the main pane width and work out the other pane width. */ mainw = options_get_number(w->options, "main-pane-width"); - if (mainw + PANE_MINIMUM + 1 >= w->sx) { - if (w->sx <= PANE_MINIMUM + 1 + PANE_MINIMUM) + if (mainw + PANE_MINIMUM >= sx) { + if (sx <= PANE_MINIMUM + PANE_MINIMUM) mainw = PANE_MINIMUM; else - mainw = w->sx - (PANE_MINIMUM + 1); + mainw = sx - PANE_MINIMUM; otherw = PANE_MINIMUM; } else { otherw = options_get_number(w->options, "other-pane-width"); if (otherw == 0) - otherw = w->sx - mainw; - else if (otherw > w->sx || w->sx - otherw < mainw) - otherw = w->sx - mainw; + otherw = sx - mainw; + else if (otherw > sx || sx - otherw < mainw) + otherw = sx - mainw; else - mainw = w->sx - otherw; + mainw = sx - otherw; } /* Work out what height is needed. */ @@ -305,7 +311,7 @@ layout_set_main_v(struct window *w) /* Free old tree and create a new root. */ layout_free(w); lc = w->layout_root = layout_create_cell(NULL); - layout_set_size(lc, mainw + otherw, sy, 0, 0); + layout_set_size(lc, mainw + otherw + 1, sy, 0, 0); layout_make_node(lc, LAYOUT_LEFTRIGHT); /* Create the main pane. */ From cd4e467751e732d6008d752de2ee104b80ce4014 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 15 May 2019 20:20:52 +0100 Subject: [PATCH 526/836] Kill tmux for logs. --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 68c295303b..8d2b9d29cc 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -13,4 +13,4 @@ Please provide the following information: * tmux version (`tmux -V`). * Platform (`uname -sp`). * $TERM inside and outside of tmux (`echo $TERM`). -* Logs from tmux (`tmux -vv new`). +* Logs from tmux (`tmux kill-server; tmux -vv new`). From 50e77536fe4a2a5d2ed7c47157adff5f7cfbc0b9 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 15 May 2019 20:21:38 +0100 Subject: [PATCH 527/836] Less headings. --- .github/ISSUE_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 8d2b9d29cc..7dfadfa46c 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,4 +1,4 @@ -# Issue description +### Issue description Please describe the problem and the steps to reproduce. Add a minimal tmux config if necessary. Screenshots can be helpful, but no more than one or two. @@ -6,7 +6,7 @@ config if necessary. Screenshots can be helpful, but no more than one or two. Please do not report bugs (crashes, incorrect behaviour) without reproducing on a tmux built from the latest code in Git. -# Information +### Information Please provide the following information: From cf4566b47b184abbb28e1cf4a05df6ce0ce2da96 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 15 May 2019 19:25:53 +0000 Subject: [PATCH 528/836] Fix dragging when in view mode rather than copy mode, GitHub issue 1740 from Brad Town. --- window-copy.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/window-copy.c b/window-copy.c index 84bef8e438..d4985062e3 100644 --- a/window-copy.c +++ b/window-copy.c @@ -3477,7 +3477,9 @@ window_copy_move_mouse(struct mouse_event *m) if (wp == NULL) return; wme = TAILQ_FIRST(&wp->modes); - if (wme == NULL || wme->mode != &window_copy_mode) + if (wme == NULL) + return; + if (wme->mode != &window_copy_mode && wme->mode != &window_view_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 0) != 0) @@ -3500,7 +3502,9 @@ window_copy_start_drag(struct client *c, struct mouse_event *m) if (wp == NULL) return; wme = TAILQ_FIRST(&wp->modes); - if (wme == NULL || wme->mode != &window_copy_mode) + if (wme == NULL) + return; + if (wme->mode != &window_copy_mode && wme->mode != &window_view_mode) return; if (cmd_mouse_at(wp, m, &x, &y, 1) != 0) @@ -3534,7 +3538,9 @@ window_copy_drag_update(struct client *c, struct mouse_event *m) if (wp == NULL) return; wme = TAILQ_FIRST(&wp->modes); - if (wme == NULL || wme->mode != &window_copy_mode) + if (wme == NULL) + return; + if (wme->mode != &window_copy_mode && wme->mode != &window_view_mode) return; data = wme->data; @@ -3573,7 +3579,9 @@ window_copy_drag_release(struct client *c, struct mouse_event *m) if (wp == NULL) return; wme = TAILQ_FIRST(&wp->modes); - if (wme == NULL || wme->mode != &window_copy_mode) + if (wme == NULL) + return; + if (wme->mode != &window_copy_mode && wme->mode != &window_view_mode) return; data = wme->data; From dcf0bc2cc9293ba625fb421c32a906b47fae8e29 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 15 May 2019 21:42:43 +0100 Subject: [PATCH 529/836] Mention CONTRIBUTING. --- .github/ISSUE_TEMPLATE.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7dfadfa46c..ee45723753 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,12 +1,15 @@ ### Issue description -Please describe the problem and the steps to reproduce. Add a minimal tmux -config if necessary. Screenshots can be helpful, but no more than one or two. +Please read https://github.com/tmux/tmux/blob/master/.github/CONTRIBUTING.md +before opening an issue. -Please do not report bugs (crashes, incorrect behaviour) without reproducing on -a tmux built from the latest code in Git. +Describe the problem and the steps to reproduce. Add a minimal tmux config if +necessary. Screenshots can be helpful, but no more than one or two. -### Information +Do not report bugs (crashes, incorrect behaviour) without reproducing on a tmux +built from the latest code in Git. + +### Required information Please provide the following information: From 4acd345c6a232837b48e15994402f49ab5f53016 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 17 May 2019 05:47:31 +0000 Subject: [PATCH 530/836] Initialize default size variables, from Thomas Adam. --- cmd-new-session.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd-new-session.c b/cmd-new-session.c index 6818ce9cb9..2fd1342027 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -192,6 +192,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (strcmp(tmp, "-") == 0) { if (c != NULL) dsx = c->tty.sx; + else + dsx = 80; } else { dsx = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { @@ -205,6 +207,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (strcmp(tmp, "-") == 0) { if (c != NULL) dsy = c->tty.sy; + else + dsy = 24; } else { dsy = strtonum(tmp, 1, USHRT_MAX, &errstr); if (errstr != NULL) { From 9b83b1daa6caee4d2c665c26da37866712c555a8 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 17 May 2019 05:48:25 +0000 Subject: [PATCH 531/836] Change a couple of ACS characters to be more sensible and add a few missing ones, reported by Ricardo Banffy. --- tty-acs.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tty-acs.c b/tty-acs.c index 1f7a2b11b2..14634120a8 100644 --- a/tty-acs.c +++ b/tty-acs.c @@ -37,10 +37,14 @@ static const struct tty_acs_entry tty_acs_table[] = { { '0', "\342\226\256" }, /* solid square block */ { '`', "\342\227\206" }, /* diamond */ { 'a', "\342\226\222" }, /* checker board (stipple) */ + { 'b', "\342\220\211" }, + { 'c', "\342\220\214" }, + { 'd', "\342\220\215" }, + { 'e', "\342\220\212" }, { 'f', "\302\260" }, /* degree symbol */ { 'g', "\302\261" }, /* plus/minus */ - { 'h', "\342\226\222" }, /* board of squares */ - { 'i', "\342\230\203" }, /* lantern symbol */ + { 'h', "\342\220\244" }, + { 'i', "\342\220\213" }, { 'j', "\342\224\230" }, /* lower right corner */ { 'k', "\342\224\220" }, /* upper right corner */ { 'l', "\342\224\214" }, /* upper left corner */ From d6f7be63458d54d65140ee8a82d2fc9b9089d7a8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 18 May 2019 13:29:21 +0100 Subject: [PATCH 532/836] Add to CHANGES. --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index a2d9d5e632..1c37c5ecf7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ CHANGES FROM 2.9 to X.X +* Add support for the overline attribute (SGR 53). The Smol capability is + needed in terminal-overrides. + * Add the ability to create simple menus. Introduces new command display-menu and a few new formats (client_menu, session_menu, window_menu, pane_menu). Default menus are bound to MouseDown3 on the status line, From 831c67c2d8d18817f93d973ee9ab3b4f174f9dcd Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 18 May 2019 14:44:31 +0100 Subject: [PATCH 533/836] Remove TODO, moving onto website. --- README | 4 +- TODO | 154 --------------------------------------------------------- 2 files changed, 2 insertions(+), 156 deletions(-) delete mode 100644 TODO diff --git a/README b/README index ecae0de740..8a9070b80c 100644 --- a/README +++ b/README @@ -73,5 +73,5 @@ Subscribe by sending an email to: * License -This file and the CHANGES, FAQ, SYNCING and TODO files are licensed under the -ISC license. All other files have a license and copyright notice at their start. +This file and the CHANGES files are licensed under the ISC license. All other +files have a license and copyright notice at their start. diff --git a/TODO b/TODO deleted file mode 100644 index 655f869c51..0000000000 --- a/TODO +++ /dev/null @@ -1,154 +0,0 @@ -- command bits and pieces: - * allow multiple targets: fnmatch for -t/-c, for example detach all - clients with -t* - * ' and " should be parsed the same (eg "\e" vs '\e') in config - and command prompt - * last-pane across sessions - * resize-pane -p to match split-window -p - * flag to wait-for to have a timeout and/or to stop waiting when the - client gets a signal - -- make command sequences more usable - * don't require space after ; - * options for error handling: && and ||? - -- options bits and pieces: - * way to set socket path from config file - -- format improvements: - * some way to pad # stuff with spaces - * formats to show if a window is linked into multiple sessions, into - multiple attached sessions, and is the active window in multiple - attached sessions? - * comparison operators like < and > (for #{version}?) - -- improve monitor-*: - * straighten out rules for multiple clients - * think about what happens across sessions - * monitor changes within a region - * perhaps monitor /all/ panes in the window not just one - -- improve mouse support: - * bind commands to mouse in different areas? - * commands executed when clicking on a pattern (URL) - -- warts on current naming: - * display-time but message-fg/bg/attr - * list-* vs show-* - -- copy/paste improvements: - * paste w/o trailing whitespace - * command to toggle selection not to move it in copy-mode - * regex searching - * searching in copy mode should unwrap lines, so if you search for "foobar" - then it should be found even if it is now "foo\nbar" (if the WRAP flag - is set on the line) - * capture-pane option to preserve spaces but not join lines - * improve word and line selection in copy mode (for example when - dragging it should select by word. compare how xterm works. GitHub - issue 682) - * key to search for word under cursor (GitHub issue 1240) - * when entering copy mode, should copy grid so that input does not - need to be suspended - * allow the prefix for automatic buffers to be specified as part of the - key binding to allow session buffers or similar (GitHub issue 1501) - -- layout stuff - * way to tag a layout as a number/name - * maybe keep last layout + size around and if size reverts just put it - back - * revamp layouts: they are too complicated, should be more closely - integrated, should support hints, layout sets should just be a - special case of custom layouts, and we should support panes that are - not attached to a cell at all. this could be the time to introduce - panelink to replace layout_cell - * way to set hints/limits about pane size for resizing - * a mode where one application can cross two panes (ie x|y, width = - COLUMNS/2 but height = ROWS * 2) - * separate active panes for different clients - * way to choose where the freed space goes when a pane is killed: - option to kill-pane? GitHub issue 918 - -- code cleanup - * instead of separate window and session options, just one master - options list with each option having a type (window or session), then - options on window, on session, and global. for window options we look - window->session->global, and for session we look session->global. - problem: what about windows in multiple sessions? there are contexts - where we do not know which session, or where multiple choices makes - no sense... could at least have one global list for all types of - global options and keep separate window,session lists - * the way pane, window, session destroy is handled is too complicated - and the distinction between session.c, window.c and server-fn.c - functions is not clear. could we just have kill_pane(), - kill_window(), unlink_window(), kill_session() that fix up all data - structures (flagging sessions as dead) and return a value to say - whether clients need to be checked for dead sessions? sort of like - session_detach now but more so. or some other scheme to make it - simpler and clearer? also would be nice to remove/rename server-fn.c - * more readable way to work out the various things commands need to - know about the client, notably: - - is this the config file? (cmdq->c == NULL) - - is this a command client? (cmdq->c != NULL && - cmdq->c->session == NULL) - - is this a control client? - - can i do stdin or stdout to this client? - or even guarantee that cmdq->c != NULL and provide a better way to - tell when in the config file - then we use cmdq->c if we need a - client w/o a session else cmd_current_client - -- miscellaneous - * link panes into multiple windows - * live update: server started with -U connects to server, requests - sessions and windows, receives file descriptors - * there are inconsistencies in what we get from old shell and what - comes from config for new sessions and windows. likewise, panes and - jobs and run-shell and lock command all start with slightly different - environments - * multiline status line? separate command prompt and status line? - * automatic pane logging - * marks in history, automatically add (move?) one when pane is changed - * this doesn't work, need pane reference count probably: - bind -n DoubleClick3Status confirm-before -p "kill-window #I? (y/n)" kill-window - * marker lines in history (GitHub issue 1042) - * tree mode stuff: make command prompt (:) common code so all modes get it, - predefined filters, tag-all key, ... - * drag panes and windows around to move/swap them in choose mode - * flag to specify environment to new-window, split-window, - new-session (issue 1498) - * multiple column panes (issue 1503) - * support for ZERO WIDTH JOINER U+200D - * individual pane synchronize-panes (with pane options?); issue 1638 - -- hooks - * more hooks for various things - * finish after hooks for special commands. these do not have a hook at - the moment: - attach-session detach-client kill-server respawn-window - swap-window break-pane find-window kill-session rotate-window - switch-client choose-tree if-shell kill-window run-shell - wait-for command-prompt join-pane move-window source-file - confirm-before kill-pane respawn-pane swap-pane - at the moment AFTERHOOK uses current only if target is not valid, - but target is ALWAYS valid - it should use current if no -t flag? - then select-* could use AFTERHOOK - * multiple hooks with the same name? - * finish hooks for notifys - * for session_closed, if no sessions at all, perhaps fake up a - temporary one - -- pan - * tty_window_offset should try to keep as much off active pane - visible as possible - * rather than centering cursor it might be better if only - moved offset when it gets close to an edge? - ----- - -TODO soonish maybe: - -- Copy mode searching is slow when there is a big history, issue 1545. -- Grid "block" stuff, issue 1269. Can be used potentially for compression of - history (bit silly really though), reflow performance (can reflow blocks on - demand). It would possibly be good if history-limit could be global and - collected LRU. From 82ebd98c5f874cd10365d9563feccfbb8da188f4 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 18 May 2019 21:14:10 +0000 Subject: [PATCH 534/836] Move the single command flag (CMD_CONTROL) into the shared flags. --- cmd-queue.c | 3 ++- control.c | 4 +--- tmux.h | 4 +--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/cmd-queue.c b/cmd-queue.c index fb2c7fac91..93b9788e9b 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -266,13 +266,14 @@ static enum cmd_retval cmdq_fire_command(struct cmdq_item *item) { struct client *c = item->client; + struct cmdq_shared *shared = item->shared; struct cmd *cmd = item->cmd; const struct cmd_entry *entry = cmd->entry; enum cmd_retval retval; struct cmd_find_state *fsp, fs; int flags; - flags = !!(cmd->flags & CMD_CONTROL); + flags = !!(shared->flags & CMDQ_SHARED_CONTROL); cmdq_guard(item, "begin", flags); if (item->client == NULL) diff --git a/control.c b/control.c index 64e9fec165..41c50df7d6 100644 --- a/control.c +++ b/control.c @@ -70,7 +70,6 @@ control_callback(struct client *c, int closed, __unused void *data) { char *line, *cause; struct cmd_list *cmdlist; - struct cmd *cmd; struct cmdq_item *item; if (closed) @@ -90,9 +89,8 @@ control_callback(struct client *c, int closed, __unused void *data) item = cmdq_get_callback(control_error, cause); cmdq_append(c, item); } else { - TAILQ_FOREACH(cmd, &cmdlist->list, qentry) - cmd->flags |= CMD_CONTROL; item = cmdq_get_command(cmdlist, NULL, NULL, 0); + item->shared->flags |= CMDQ_SHARED_CONTROL; cmdq_append(c, item); cmd_list_free(cmdlist); } diff --git a/tmux.h b/tmux.h index afecd5b6dd..4317bf0be2 100644 --- a/tmux.h +++ b/tmux.h @@ -1285,9 +1285,6 @@ struct cmd { char *file; u_int line; -#define CMD_CONTROL 0x1 - int flags; - TAILQ_ENTRY(cmd) qentry; }; @@ -1316,6 +1313,7 @@ struct cmdq_shared { int flags; #define CMDQ_SHARED_REPEAT 0x1 +#define CMDQ_SHARED_CONTROL 0x2 struct format_tree *formats; From 56246c29364f25b89de32e73dd8a527b83d2806a Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Sun, 19 May 2019 13:31:09 +0100 Subject: [PATCH 535/836] README.md: mention TODO list on the tmux wiki --- .github/README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/README.md b/.github/README.md index b586c5a295..6e262ef530 100644 --- a/.github/README.md +++ b/.github/README.md @@ -39,8 +39,9 @@ sh autogen.sh ./configure && make ~~~ -(Note that this requires at least a working C compiler, make, autoconf, -automake, pkg-config as well as libevent and ncurses libraries and headers.) +(Note that this requires at least a working C compiler, `make`, `autoconf`, +`automake`, `pkg-config` as well as `libevent` and `ncurses` libraries and +headers.) ## Contributing @@ -51,6 +52,11 @@ tmux-users@googlegroups.com Or open a GitHub issue or pull request. +There is [a TODO list](https://github.com/tmux/tmux/wiki/Contributing) which +explains some ideas for tmux not yet developed. Please feel free to ask for +clarifications on the mailing list if you're thinking of working on these or +need further information. + Please read the CONTRIBUTING file before opening an issue. ## Documentation @@ -68,8 +74,8 @@ And a bash(1) completion file at: https://github.com/imomaliev/tmux-bash-completion -For debugging, run tmux with -v or -vv to generate server and client log files -in the current directory. +For debugging, run tmux with `-v` or `-vv` to generate server and client log +files in the current directory. ## Support From 6e0c663a895fc4d24b9745675cd45f3d8b457680 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 May 2019 05:35:46 +0000 Subject: [PATCH 536/836] Fix the color space parameter in RGB SGR, from Brad Town. --- input.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/input.c b/input.c index a9f0acc9de..4095c05d18 100644 --- a/input.c +++ b/input.c @@ -1938,23 +1938,25 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) } return; } - if (p[0] != 38 && p[0] != 48) + if (n < 2 || (p[0] != 38 && p[0] != 48)) return; - if (p[1] == -1) - i = 2; - else - i = 1; - switch (p[i]) { + switch (p[1]) { case 2: - if (n < i + 4) + if (n < 3) + break; + if (n == 5) + i = 2; + else + i = 3; + if (n < i + 3) break; - input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[i + 1], p[i + 2], - p[i + 3]); + input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[i], p[i + 1], + p[i + 2]); break; case 5: - if (n < i + 2) + if (n < 3) break; - input_csi_dispatch_sgr_256_do(ictx, p[0], p[i + 1]); + input_csi_dispatch_sgr_256_do(ictx, p[0], p[2]); break; } } From 8db89f8efba007bab51dd8b8979a828730892f56 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 May 2019 11:34:37 +0000 Subject: [PATCH 537/836] Add a helper to allocate a cmd_list. --- cmd-list.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/cmd-list.c b/cmd-list.c index e999c37049..282533cf62 100644 --- a/cmd-list.c +++ b/cmd-list.c @@ -23,6 +23,17 @@ #include "tmux.h" +static struct cmd_list * +cmd_list_new(void) +{ + struct cmd_list *cmdlist; + + cmdlist = xcalloc(1, sizeof *cmdlist); + cmdlist->references = 1; + TAILQ_INIT(&cmdlist->list); + return (cmdlist); +} + struct cmd_list * cmd_list_parse(int argc, char **argv, const char *file, u_int line, char **cause) @@ -35,9 +46,7 @@ cmd_list_parse(int argc, char **argv, const char *file, u_int line, copy_argv = cmd_copy_argv(argc, argv); - cmdlist = xcalloc(1, sizeof *cmdlist); - cmdlist->references = 1; - TAILQ_INIT(&cmdlist->list); + cmdlist = cmd_list_new(); lastsplit = 0; for (i = 0; i < argc; i++) { From e128c7fcd8441f3fa885eafc9328f0937cc7384c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 May 2019 11:46:06 +0000 Subject: [PATCH 538/836] Replace the various identical error callbacks with a single one in cmd-queue.c. --- cmd-command-prompt.c | 19 ++++--------------- cmd-confirm-before.c | 19 ++++--------------- cmd-display-panes.c | 23 +++++++---------------- cmd-queue.c | 19 +++++++++++++++++++ menu.c | 25 ++++++++----------------- server-client.c | 15 ++------------- server.c | 15 ++------------- tmux.h | 1 + 8 files changed, 47 insertions(+), 89 deletions(-) diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index d7159ad0e9..a3cc22c8d3 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -129,17 +129,6 @@ cmd_command_prompt_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } -static enum cmd_retval -cmd_command_prompt_error(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - static int cmd_command_prompt_callback(struct client *c, void *data, const char *s, int done) @@ -177,11 +166,11 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s, cmdlist = cmd_string_parse(new_template, NULL, 0, &cause); if (cmdlist == NULL) { - if (cause != NULL) { - new_item = cmdq_get_callback(cmd_command_prompt_error, - cause); - } else + if (cause != NULL) + new_item = cmdq_get_error(cause); + else new_item = NULL; + free(cause); } else { new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); diff --git a/cmd-confirm-before.c b/cmd-confirm-before.c index 7036d34b21..4017a6f9ec 100644 --- a/cmd-confirm-before.c +++ b/cmd-confirm-before.c @@ -82,17 +82,6 @@ cmd_confirm_before_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); } -static enum cmd_retval -cmd_confirm_before_error(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - static int cmd_confirm_before_callback(struct client *c, void *data, const char *s, __unused int done) @@ -112,11 +101,11 @@ cmd_confirm_before_callback(struct client *c, void *data, const char *s, cmdlist = cmd_string_parse(cdata->cmd, NULL, 0, &cause); if (cmdlist == NULL) { - if (cause != NULL) { - new_item = cmdq_get_callback(cmd_confirm_before_error, - cause); - } else + if (cause != NULL) + new_item = cmdq_get_error(cause); + else new_item = NULL; + free(cause); } else { new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); diff --git a/cmd-display-panes.c b/cmd-display-panes.c index 8940b4293d..6e331ae100 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -182,17 +182,6 @@ cmd_display_panes_draw(struct client *c, struct screen_redraw_ctx *ctx) } } -static enum cmd_retval -cmd_display_panes_error(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - static void cmd_display_panes_free(struct client *c) { @@ -226,11 +215,13 @@ cmd_display_panes_key(struct client *c, struct key_event *event) cmd = cmd_template_replace(cdata->command, expanded, 1); cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); - if (cmdlist == NULL && cause != NULL) - new_item = cmdq_get_callback(cmd_display_panes_error, cause); - else if (cmdlist == NULL) - new_item = NULL; - else { + if (cmdlist == NULL) { + if (cause != NULL) + new_item = cmdq_get_error(cause); + else + new_item = NULL; + free(cause); + } else { new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); } diff --git a/cmd-queue.c b/cmd-queue.c index 93b9788e9b..68bedae841 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -329,6 +329,25 @@ cmdq_get_callback1(const char *name, cmdq_cb cb, void *data) return (item); } +/* Generic error callback. */ +static enum cmd_retval +cmdq_error_callback(struct cmdq_item *item, void *data) +{ + char *error = data; + + cmdq_error(item, "%s", error); + free(error); + + return (CMD_RETURN_NORMAL); +} + +/* Get an error callback for the command queue. */ +struct cmdq_item * +cmdq_get_error(const char *error) +{ + return (cmdq_get_callback(cmdq_error_callback, xstrdup(error))); +} + /* Fire callback on callback queue. */ static enum cmd_retval cmdq_fire_callback(struct cmdq_item *item) diff --git a/menu.c b/menu.c index 945b62c4df..395e14552c 100644 --- a/menu.c +++ b/menu.c @@ -191,17 +191,6 @@ menu_free_cb(struct client *c) free(md); } -static enum cmd_retval -menu_error_cb(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - static int menu_key_cb(struct client *c, struct key_event *event) { @@ -284,12 +273,14 @@ menu_key_cb(struct client *c, struct key_event *event) return (1); } cmdlist = cmd_string_parse(item->command, NULL, 0, &cause); - if (cmdlist == NULL && cause != NULL) - new_item = cmdq_get_callback(menu_error_cb, cause); - else if (cmdlist == NULL) - new_item = NULL; - else { - new_item = cmdq_get_command(cmdlist, &md->fs, NULL, 0); + if (cmdlist == NULL) { + if (cause != NULL) + new_item = cmdq_get_error(cause); + else + new_item = NULL; + free(cause); + } else { + new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); cmd_list_free(cmdlist); } if (new_item != NULL) { diff --git a/server-client.c b/server-client.c index c7a0acc942..e71cce15d5 100644 --- a/server-client.c +++ b/server-client.c @@ -1768,18 +1768,6 @@ server_client_command_done(struct cmdq_item *item, __unused void *data) return (CMD_RETURN_NORMAL); } -/* Show an error message. */ -static enum cmd_retval -server_client_command_error(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - /* Handle command message. */ static void server_client_dispatch_command(struct client *c, struct imsg *imsg) @@ -1827,7 +1815,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg) return; error: - cmdq_append(c, cmdq_get_callback(server_client_command_error, cause)); + cmdq_append(c, cmdq_get_error(cause)); + free(cause); if (cmdlist != NULL) cmd_list_free(cmdlist); diff --git a/server.c b/server.c index 3c54f45318..18818c38b6 100644 --- a/server.c +++ b/server.c @@ -144,18 +144,6 @@ server_create_socket(char **cause) return (-1); } -/* Server error callback. */ -static enum cmd_retval -server_start_error(struct cmdq_item *item, void *data) -{ - char *error = data; - - cmdq_error(item, "%s", error); - free(error); - - return (CMD_RETURN_NORMAL); -} - /* Fork new server. */ int server_start(struct tmuxproc *client, struct event_base *base, int lockfd, @@ -217,7 +205,8 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, } if (cause != NULL) { - cmdq_append(c, cmdq_get_callback(server_start_error, cause)); + cmdq_append(c, cmdq_get_error(cause)); + free(cause); c->flags |= CLIENT_EXIT; } diff --git a/tmux.h b/tmux.h index 4317bf0be2..c87c797c88 100644 --- a/tmux.h +++ b/tmux.h @@ -1983,6 +1983,7 @@ struct cmdq_item *cmdq_get_command(struct cmd_list *, struct cmd_find_state *, struct mouse_event *, int); #define cmdq_get_callback(cb, data) cmdq_get_callback1(#cb, cb, data) struct cmdq_item *cmdq_get_callback1(const char *, cmdq_cb, void *); +struct cmdq_item *cmdq_get_error(const char *); void cmdq_insert_after(struct cmdq_item *, struct cmdq_item *); void cmdq_append(struct client *, struct cmdq_item *); void cmdq_insert_hook(struct session *, struct cmdq_item *, From 87d82170a615007bbd2f880765f222dd5c263000 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 20 May 2019 13:23:32 +0000 Subject: [PATCH 539/836] Fix ordering of source-file with multiple files and add flags to load_cfg. --- cfg.c | 25 ++++++++++++++----------- cmd-source-file.c | 14 ++++++++++---- tmux.h | 4 +++- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/cfg.c b/cfg.c index 1b85ac95c4..0b74ec35da 100644 --- a/cfg.c +++ b/cfg.c @@ -82,7 +82,7 @@ void start_cfg(void) { const char *home; - int quiet = 0; + int flags = 0; struct client *c; /* @@ -103,14 +103,14 @@ start_cfg(void) } if (cfg_file == NULL) - load_cfg(TMUX_CONF, NULL, NULL, 1); + load_cfg(TMUX_CONF, NULL, NULL, CFG_QUIET, NULL); if (cfg_file == NULL && (home = find_home()) != NULL) { xasprintf(&cfg_file, "%s/.tmux.conf", home); - quiet = 1; + flags = CFG_QUIET; } if (cfg_file != NULL) - load_cfg(cfg_file, NULL, NULL, quiet); + load_cfg(cfg_file, NULL, NULL, flags, NULL); cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL)); } @@ -239,7 +239,8 @@ cfg_handle_directive(const char *p, const char *path, size_t line, } int -load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) +load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, + struct cmdq_item **new_item) { FILE *f; const char delim[3] = { '\\', '\\', '\0' }; @@ -247,7 +248,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) size_t line = 0; char *buf, *cause1, *p, *q; struct cmd_list *cmdlist; - struct cmdq_item *new_item; + struct cmdq_item *new_item0; struct cfg_cond *cond, *cond1; struct cfg_conds conds; struct cmd_find_state *fs = NULL; @@ -262,7 +263,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) log_debug("loading %s", path); if ((f = fopen(path, "rb")) == NULL) { - if (errno == ENOENT && quiet) + if (errno == ENOENT && (flags & CFG_QUIET)) return (0); cfg_add_cause("%s: %s", path, strerror(errno)); return (-1); @@ -301,12 +302,12 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) } free(buf); - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); + new_item0 = cmdq_get_command(cmdlist, NULL, NULL, 0); if (item != NULL) { - cmdq_insert_after(item, new_item); - item = new_item; + cmdq_insert_after(item, new_item0); + item = new_item0; } else - cmdq_append(c, new_item); + cmdq_append(c, new_item0); cmd_list_free(cmdlist); found++; @@ -319,6 +320,8 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int quiet) free(cond); } + if (new_item != NULL) + *new_item = item; return (found); } diff --git a/cmd-source-file.c b/cmd-source-file.c index ffb7f42387..fbe01c21c6 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -49,15 +49,18 @@ static enum cmd_retval cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - int quiet = args_has(args, 'q'); + int flags = 0; struct client *c = item->client; - struct cmdq_item *new_item; + struct cmdq_item *new_item, *after; enum cmd_retval retval; char *pattern, *tmp; const char *path = args->argv[0]; glob_t g; u_int i; + if (args_has(args, 'q')) + flags |= CFG_QUIET; + if (*path == '/') pattern = xstrdup(path); else { @@ -69,7 +72,7 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) retval = CMD_RETURN_NORMAL; if (glob(pattern, 0, NULL, &g) != 0) { - if (!quiet || errno != ENOENT) { + if (errno != ENOENT || (~flags & CFG_QUIET)) { cmdq_error(item, "%s: %s", path, strerror(errno)); retval = CMD_RETURN_ERROR; } @@ -78,9 +81,12 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) } free(pattern); + after = item; for (i = 0; i < (u_int)g.gl_pathc; i++) { - if (load_cfg(g.gl_pathv[i], c, item, quiet) < 0) + if (load_cfg(g.gl_pathv[i], c, after, flags, &new_item) < 0) retval = CMD_RETURN_ERROR; + else if (new_item != NULL) + after = new_item; } if (cfg_finished) { new_item = cmdq_get_callback(cmd_source_file_done, NULL); diff --git a/tmux.h b/tmux.h index c87c797c88..2979a6e30a 100644 --- a/tmux.h +++ b/tmux.h @@ -1671,8 +1671,10 @@ void proc_toggle_log(struct tmuxproc *); /* cfg.c */ extern int cfg_finished; extern struct client *cfg_client; +#define CFG_QUIET 0x1 void start_cfg(void); -int load_cfg(const char *, struct client *, struct cmdq_item *, int); +int load_cfg(const char *, struct client *, struct cmdq_item *, int, + struct cmdq_item **); void set_cfg_file(const char *); void printflike(1, 2) cfg_add_cause(const char *, ...); void cfg_print_causes(struct cmdq_item *); From ae4cccb4f1c758c717e276fb705e705f24a7ca36 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 21 May 2019 07:01:14 +0000 Subject: [PATCH 540/836] Fix a couple of Ta from Alphonse Mariya. --- tmux.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index 71cd1fda13..e5238b35ad 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3970,8 +3970,8 @@ The following variables are available, where appropriate: .It Li "pane_index" Ta "#P" Ta "Index of pane" .It Li "pane_input_off" Ta "" Ta "If input to pane is disabled" .It Li "pane_left" Ta "" Ta "Left of pane" -.It Li "pane_marked" Ta " Ta "1 if this is the marked pane" -.It Li "pane_marked_set" Ta " Ta "1 if a market pane is set" +.It Li "pane_marked" Ta "" Ta "1 if this is the marked pane" +.It Li "pane_marked_set" Ta "" Ta "1 if a marked pane is set" .It Li "pane_menu" Ta "" Ta "The default pane menu" .It Li "pane_mode" Ta "" Ta "Name of pane mode, if any." .It Li "pane_pid" Ta "" Ta "PID of first process in pane" From afe231c94cc4cc013f74d0c5511987f70b697875 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 May 2019 08:01:57 +0100 Subject: [PATCH 541/836] Add a few test configs thanks to various people. --- .../91378fd400b0444eb8cac471e30642b3.conf | 30 + .../a4789a6782859c66aa8c9614ee6fabfa.conf | 80 +++ .../ad21dbb0893240563ddfdd954b9903a1.conf | 580 ++++++++++++++++++ .../d2e576f947e108eb9903679b65c81fbc.conf | 198 ++++++ .../e2661d67d0d45a8647fb95de76ec8174.conf | 78 +++ .../ed08995f38b5a3079262a88d2563abe4.conf | 283 +++++++++ 6 files changed, 1249 insertions(+) create mode 100644 regress/conf/91378fd400b0444eb8cac471e30642b3.conf create mode 100644 regress/conf/a4789a6782859c66aa8c9614ee6fabfa.conf create mode 100644 regress/conf/ad21dbb0893240563ddfdd954b9903a1.conf create mode 100644 regress/conf/d2e576f947e108eb9903679b65c81fbc.conf create mode 100644 regress/conf/e2661d67d0d45a8647fb95de76ec8174.conf create mode 100644 regress/conf/ed08995f38b5a3079262a88d2563abe4.conf diff --git a/regress/conf/91378fd400b0444eb8cac471e30642b3.conf b/regress/conf/91378fd400b0444eb8cac471e30642b3.conf new file mode 100644 index 0000000000..4081007657 --- /dev/null +++ b/regress/conf/91378fd400b0444eb8cac471e30642b3.conf @@ -0,0 +1,30 @@ +### + +if-shell " \ + tmux -V \ + | awk '{print $2}' \ + | awk -F - '{print $1}' \ + | awk '{ \ + if ($1 ~ /^[[:digit:].]+$/) { \ + exit !($1 >= 2.6) \ + } else { \ + exit !($1 == \"master\" || $1 == \"next\") \ + } \ + }'" \ + "source-file ~/.tmux/v2rc" \ + "source-file ~/.tmux/v1rc" \ + ; + +### + +set-option -qg status-left \ + "[#[fg=yellow]#{session_name}#[default]] #[fg=colour060]#{host_short}#[default]:#[fg=colour151]#{b:pane_current_path} #[fg=colour099]#(git -C #{pane_current_path} symbolic-ref --short HEAD) #[fg=green]#(git -C #{pane_current_path} status --porcelain --untracked-files=no | cut -b 1-1 | sort | uniq | awk '/^[^[:space:]]/ {printf\(\"%%s\", $0\)}')#[fg=red]#(git -C #{pane_current_path} status --porcelain --untracked-files=no | cut -b 2-2 | sort | uniq | awk '/^[^[:space:]]/ {printf\(\"%%s\", $0\)}')#[fg=colour113]#(git -C #{pane_current_path} stash list 2>/dev/null | wc -l | tr -d '\n' | sed s,^0\$,,) #[default]" + +set-option -qg status-right \ + "#[default] ┊ #[fg=colour065]#(grep ^MemFree /proc/meminfo | awk '{print rshift\($2, 10\)}')#[fg=colour071]m #[default]┊ #[fg=colour101]#(echo \"\(`awk '{print \$1}' /proc/loadavg` / `grep ^processor /proc/cpuinfo | wc -l`\) \* 100\" | bc -ql | sed 's,\\..*,,' | awk '{printf\(\"%%2u\", $0\)}')#[fg=colour102]%% " + +set-option -qwg window-status-current-format \ + "#[fg=colour208]»#[fg=colour190]#{window_name}#[fg=colour037]·#{?window_flags,#[fg=colour058]#{window_flags}#[default], #[default]}" + +set-option -qwg window-status-format \ + "#[default]»#[fg=colour066]#{window_name}#[fg=colour037]·#{?window_flags,#[fg=colour058]#{window_flags}#[default], #[default]}" diff --git a/regress/conf/a4789a6782859c66aa8c9614ee6fabfa.conf b/regress/conf/a4789a6782859c66aa8c9614ee6fabfa.conf new file mode 100644 index 0000000000..7f4a8cd19d --- /dev/null +++ b/regress/conf/a4789a6782859c66aa8c9614ee6fabfa.conf @@ -0,0 +1,80 @@ +set -g default-command "if [ \"$(uname)\" = 'Darwin' ]; then exec reattach-to-user-namespace $SHELL; else exec $SHELL; fi" +set -g history-limit 32000 +set -g update-environment "DISPLAY WINDOWID SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION SSH_CLIENT SSH_TTY KRB5CCNAME Apple_PubSub_Socket_Render Apple_Ubiquity_Message" + +# Reset SHLVL (otherwise it is 2 inside tmux) +setenv -g SHLVL 0 + +# Send esc faster so that neovim won't get so laggy +# https://github.com/neovim/neovim/issues/2093 +set -g escape-time 100 + +# Disable paste detection +set -g assume-paste-time 0 + +# Titles and window names +set -g set-titles on +set -g set-titles-string "#T" + +# Make it not so annoying/sticky to switch windows +set -g repeat-time 170 + +# Don't deattach me when a session ends +set -g detach-on-destroy off + +# Make shift+keys work +setw -g xterm-keys on + +# Prefix +set -g prefix ^A +unbind ^B +bind ^A send-prefix +bind a send-prefix + +# Last window +bind ^a last + +# Next & prev +bind ' ' next +bind '^ ' next +bind ^p prev + +# Status +set -g status off +# Need more (cow)bells! +set -g bell-action any +set -g bell-on-alert on + +# Detach +bind ^d detach + +# Control the a tmux in a tmux +bind A send-prefix \; send-prefix +bind C send-prefix \; send-keys c +bind n send-prefix \; send-keys ' ' +bind bspace send-prefix \; send-keys p +bind '#' send-prefix \; send-keys '"' + +# Other key bindings. +bind ^r command-prompt "find-window '%%'" +bind '"' choose-tree -w +bind w split-window +bind W split-window -c "#{pane_current_path}" +bind ^w split-window +bind I list-windows +bind i list-windows +bind D neww 'if who | grep -q "$USER.* via mosh"; then tmux lsc -F "#{client_activity} #{client_tty}" | sort | head -n -1 | awk "{print \$2}" | xargs -n1 tmux detach -t; else for i in $(tmux lsc | cut -d: -f1 | grep -v "^$SSH_TTY$"); do tmux detach -t $i; done; fi' +bind S neww -t 999 'window=`tmux display -p "#{pane_title}"`; i=0; tmux list-windows | cut -d: -f1 | while read j; do if [ $j != $i ]; then tmux move-window -s $j -t $i; fi; i=$(($i+1)); done' # ; tmux find-window -T "$window" +bind ^s command-prompt "rename-session '%%'" +# Make the default HOME always ~ +bind c neww -c ~ +bind ^c new -c ~ +bind escape copy-mode +# Copy to the OS clipboard +bind -T copy-mode-vi y send -X copy-pipe-and-cancel "if [ \"$(uname)\" = 'Darwin' ]; then reattach-to-user-namespace pbcopy; else xclip; fi" +bind j command-prompt "join-pane -s '%%'" +bind ! break-pane -d +bind - command-prompt "move-pane -t '%%'" + +# Makes `tmux a` work even when there isn't a session going on +new-session -A -c ~ diff --git a/regress/conf/ad21dbb0893240563ddfdd954b9903a1.conf b/regress/conf/ad21dbb0893240563ddfdd954b9903a1.conf new file mode 100644 index 0000000000..27d8f31090 --- /dev/null +++ b/regress/conf/ad21dbb0893240563ddfdd954b9903a1.conf @@ -0,0 +1,580 @@ +# Time-stamp: <2018-05-31 17:10:05 kmodi> +# https://github.com/tmux/tmux +# Hi-lock: (("\\(^\\s< \\**\\)\\(\\* *.*\\)" (1 'org-hide prepend) (2 '(:inherit org-level-1 :height 1.3 :weight bold :overline t :underline t) prepend))) +# Hi-Lock: end + +# Running tmux built from master branch on tcsh in uxterm +# tmux version 2.5-RC+ dev + +# Contents: +# +# PREFIX +# Source config +# Pane Management +# Window <-join/split-> Pane +# Select Panes +# Resize Panes +# Dynamic Split +# Window Management +# Window Navigation +# Swap Windows +# Split Window +# Layout +# Session Management +# Mouse +# Drag pane border to resize +# Left click on pane +# Middle click on pane +# Right click on pane +# Wheel scroll in pane +# Wheel scroll in pane WHILE in copy-mode +# Left click on status +# Middle click on status +# Other mouse settings +# Window Title +# Status Bar +# Left Status +# Right Status +# Pane Status +# Colors +# Status Bar Colors +# Message Colors +# Window Status Colors +# Pane Colors +# Mode Info Colors +# Activity +# Command Prompt +# Audible and Visual Bells +# Copy & Paste +# Synchronize commands to panes/windows/sessions +# Terminal Setting +# Other Options +# Server Options +# Session Options +# Window Options +# Notes + +# * PREFIX +set -g prefix C-z +unbind C-b # unbind the default binding to send prefix key to the application +# Often you'll run a tmux inside another tmux and need a command sequence to +# send things to the inner session. With below binding that can be accomplished +# using "PREFIX Z " +bind Z send-prefix + +# * Source config +unbind r # unbind default binding to force redraw of attached client +bind r source-file ~/.tmux.conf \; display "Finished sourcing ~/.tmux.conf ." + +# * Pane Management + +set -g pane-base-index 1 # start pane indices at 1 +set -g main-pane-width 100 # used by selectl main-vertical +bind z resize-pane -Z # zoom/unzoom the current pane +# If the window has >1 panes kill them without confirming. But confirm before kill +# the last pane (along with its window) in a window +bind x if "tmux display -p \"#{window_panes}\" | grep ^1\$" \ + "confirm-before -p \"Kill the only pane in window? It will kill this window too! (y/n)\" kill-pane" \ + "kill-pane" +bind C clear-history \; display "Cleared history of the current pane." +unbind C-p +bind C-p run -b "tmux display -p -F '#{pane_current_path}' | xclip -i -sel pri" \; display "Copied current path '#{pane_current_path}' to the primary selection." + +# Hooks need tmux 2.3+ +# set-hook -g -u after-kill-pane # Remove after hook for kill-pane +set-hook -g after-kill-pane "selectl main-vertical" +# If -g options is used when setting the hook, it has to be used when +# removing (-u option) the hook too. + +# ** Window <-join/split-> Pane +# Join a pane *from* a different window (of same or different session) into the CURRENT window +# Binding mnemonic: F for (F)etch/pull (as in git) from a different window +bind F command-prompt -p "Join pane from [sess:]win#[.pane#] (ex: kmodi:3.1) into current window:" "join-pane -s '%%'" +# Join CURRENT pane *to* a different window +# Binding mnemonic: P for (P)ush (as in git) to a different window +bind P command-prompt -p "Send CURRENT pane to [sess:]win# (ex: kmodi:3):" "join-pane -t '%%'" +# PREFIX ! : break-pane, convert the current pane to a window + +# ** Select Panes +bind o select-pane -t :.+ # cycle to the next pane number +bind O select-pane -t :.- # cycle to the previous pane number +# PREFIX ; : last-pane or select-pane -l, switch to the last active pane +# PREFIX ← : select-pane -L, switch to the pane on the left +# PREFIX → : select-pane -R, switch to the pane on the right +# PREFIX ↑ : select-pane -U, switch to the pane on the top +# PREFIX ↓ : select-pane -D, switch to the pane on the bottom +# PREFIX { : swap-pane -U, swap current pane with the pane above (not literally above) +# PREFIX } : swap-pane -D, swap current pane with the pane below (not literally below) + +# ** Resize Panes +bind -r h resize-pane -L 2 +bind -r C-h resize-pane -L 2 +bind -r j resize-pane -D 2 +bind -r C-j resize-pane -D 2 +bind -r k resize-pane -U 2 +bind -r C-k resize-pane -U 2 +unbind l # unbind default binding for `last-window` +bind -r l resize-pane -R 2 +bind -r C-l resize-pane -R 2 + +# ** Dynamic Split +# Key-chaining example, analogous to prefix maps in emacs +bind / switch-client -Tlauncher +# Run below -Tlauncher commands using "PREFIX / " +# Open calendar in a split window "PREFIX / c" +# FIXME: Below does not work; cal pane quits as soon as it launches (before "&& sleep .." +# was added). To make better of the situation, I now auto-close that pane after 3 seconds. +# bind -Tlauncher c split-window -h 'cal && sleep 3' +bind -Tlauncher c run "/home/kmodi/scripts/tcsh/tmux/dynamic_split.csh 'cal && sleep 3'" +# Start emacsclient in terminal mode in a split window "PREFIX / e" +# Use the emacs binding "C-x 5 0" to quit from that pane gracefully. +bind -Tlauncher e run "/home/kmodi/scripts/tcsh/tmux/dynamic_split.csh 'emacsclient -a \"\" -t'" +# Open man page "PREFIX / m" +# PREFIX / m will bring up the tmux command prompt. Enter the command for which +# you want to see the man page, example: ls. That man page will open in a split +# pane. When you are done reviewing the man page, hit q and the split pane +# closes by itself. Beautiful! +bind -Tlauncher m command-prompt -p "man" "run \"/home/kmodi/scripts/tcsh/tmux/dynamic_split.csh 'man %1'\"" +# Open python interpreter in a split window for quick calculations "PREFIX / p" +# Ctrl-D in python quits python and thus closes the split window too. +bind -Tlauncher p run "/home/kmodi/scripts/tcsh/tmux/dynamic_split.csh 'ipython --profile=default --no-confirm-exit'" +# PREFIX Up, Down, Right, Left : Move cursor from one pane to another +# PREFIX Space : Cycle through different pane layouts +# PREFIX C-o : rotate-window, rotate panes in the current window + +# * Window Management +set -g base-index 1 # start window indices at 1 +# automatically renumber the windows +# http://unix.stackexchange.com/questions/21742/renumbering-windows-in-tmux +set -g renumber-windows on + +bind C-f command-prompt -p "New window:" "new-window -c '#{pane_current_path}' -n %1" +bind C-r command-prompt -p "New name for this window:" "rename-window '%%'" +unbind L # unbind default binding for `switch-client -l` +bind L list-windows -F '#{window_index}:#{window_name}: #{?pane_dead, (dead), (not dead)}' +unbind & # unbind default binding for `kill-window` +bind C-c confirm-before -p "Kill this window? (y/n)" kill-window +# Move the current window to another window index in the same or any other session +bind m command-prompt -p "Move window to sess or sess:win# or win# (ex: kmodi or kmodi:3 or 2(of current session)):" "move-window -t '%%'" +# Move or bring a window from a different session to the current one +bind M command-prompt -p "Move the window from sess:win# (ex: kmodi:3):" "move-window -s '%%'" + +# ** Window Navigation +bind C-z last-window # switch to last active window +# Allow repeats for next/previous-window +bind -r p previous-window +bind -r n next-window +# switch to another window by name +bind W split-window "tmux lsw | peco --initial-index `tmux lsw | awk '/active.$/ {print NR-1}'` | cut -d':' -f 1 | xargs tmux select-window -t" +# PREFIX : switches to window with index=N + +# ** Swap Windows +bind N move-window -r # renumber the windows +unbind , # unbind default binding for `rename-window` +bind -r , swap-window -t -1 # move window one position to the left +bind -r < swap-window -t -1 # move window one position to the left +unbind . # unbind default binding to move window to user provided index +bind -r . swap-window -t +1 # move window one position to the right +bind -r > swap-window -t +1 # move window one position to the right +unbind t # unbind default binding to show time +bind t swap-window -t 1 # swap the current window's position with window # 1, move it to the top + +# ** Split Window +unbind & # unbind default binding for `split-window -h` +bind - split-window -v -c '#{pane_current_path}' # vertical split +bind _ split-window -v -c '#{pane_current_path}' -f # full vertical split (v2.3+) +bind \ split-window -h -c '#{pane_current_path}' # horizontal split +bind | split-window -h -c '#{pane_current_path}' -f # full horizontal split (v2.3+) +# https://www.reddit.com/r/tmux/comments/3paqoi/tmux_21_has_been_released/cw5wy00 +bind w switch-client -Tsplit_wind +bind -Tsplit_wind v split-window -v -c '#{pane_current_path}' +bind -Tsplit_wind V split-window -v -c '#{pane_current_path}'\; swap-pane -U +bind -Tsplit_wind h split-window -h -c '#{pane_current_path}' +bind -Tsplit_wind H split-window -h -c '#{pane_current_path}'\; swap-pane -U + +# ** Layout +bind Space next-layout +bind C-Space select-layout -o # undo only the last layout change #v2.1 + +# * Session Management +bind C-t command-prompt -p "New name for this session:" "rename-session '%%'" +bind b switch-client -l # switch to previously selected session +# switch to another session by name +bind S split-window "tmux ls | peco --initial-index `tmux ls | awk '/attached.$/ {print NR-1}'` | cut -d':' -f 1 | xargs tmux switch-client -t" +# switch to ANY window in ANY session by name +bind s split-window "tmux ls | cut -d: -f1 | xargs -I SESSION tmux lsw -F 'SESSION:#{window_name}' -t SESSION | peco --initial-index `tmux ls | cut -d: -f1 | xargs -I SESSION tmux lsw -F '___#{session_attached}#{window_active}___' -t SESSION | awk '/___11___/ {print NR-1}'` | xargs tmux switch-client -t" +# tmux kill-session -t NAME/SESSIONNUMBER # Kill session + +# * Mouse +# setw -g mode-mouse on # incompatible in tmux 2.1+ +set -g mouse on + +# ** Drag pane border to resize +# set -g mouse-resize-pane off # incompatible in tmux 2.1+ +bind -T root MouseDrag1Border resize-pane -M # default +# unbind -T root MouseDrag1Border # disable drag pane border to resize + +bind -T root MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= "#{pane_in_mode}" "copy-mode -M" "send-keys -M"' 'copy-mode -M' # default + +# ** Left click on pane +# set -g mouse-select-pane on # incompatible in tmux 2.1+ +# Left click on a pane selects it +# bind -T root MouseDown1Pane select-pane -t=\; send-keys -M # default +bind -T root MouseDown1Pane select-pane -t= + +# Sun Feb 19 11:31:34 EST 2017 - kmodi +# Below break in tmux 2.4 +# # Fri Aug 26 18:35:21 EDT 2016 - kmodi +# # FIXME Need to remember why I unbound the below 2 bindings +# unbind -temacs-copy MouseDown1Pane +# unbind -temacs-copy MouseUp1Pane +# # + +# https://groups.google.com/forum/#!topic/tmux-users/mHhdx7Au0Ds +# Fri Aug 26 18:30:15 EDT 2016 - kmodi +# Do not do the below!! That will update the primary selection with the top-most +# tmux buffer each time you left click on a pane. +# bind -T root MouseUp1Pane run -b "tmux show-buffer | xclip -i -sel pri" +# + +# Left click in the pane *followed after a region selection* copies that to the +# secondary selection +bind -T root MouseUp1Pane run -b "tmux show-buffer | xclip -i -sel sec" +# Fri Aug 26 19:03:57 EDT 2016 - kmodi +# FIXME: As of today it needs to be figured out how to best paste the content +# from secondary selection + +# ** Middle click on pane +# Middle click in a pane to paste from the primary selection +bind -T root MouseDown2Pane run -b "xclip -o -sel pri | tmux load-buffer - && tmux paste-buffer -s ' '" + +# ** Right click on pane +# Right click on a pane selects and marks it *if not in copy-mode*; else +# passes on the mode keys +# bind -T root MouseDown3Pane select-pane -t= -m # default +bind -T root MouseDown3Pane if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t= -m' + +# Sun Feb 19 11:32:00 EST 2017 - kmodi +# Below breaks in tmux 2.4 +# # Right click *release* on a pane *in copy-mode* quits copy-mode +# bind -temacs-copy MouseUp3Pane cancel + +# ** Wheel scroll in pane +unbind -T root WheelUpPane +unbind -T root WheelDownPane +# Do mouse wheel-up to enter copy mode and do page-up +# https://groups.google.com/d/msg/tmux-users/XTrSVUR15Zk/3iyJLMyQ7PwJ +# Below binding did not work +# bind -T root WheelUpPane if -Ft= '#{mouse_any_flag}' 'if -Ft= "#{pane_in_mode}" "copy-mode -u" "send-keys -M"' 'copy-mode -u' +# Below works and allows the WheelUpPane binding in emacs-copy table to be effective +bind -T root WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= "#{pane_in_mode}" "send-keys -M" "copy-mode -u"' +# |---------------------+-----------------------------------------+--------------------------------| +# | using mouse? AND .. | #{pane_in_mode} (already in copy-mode?) | action | +# |---------------------+-----------------------------------------+--------------------------------| +# | Yes | Don't care | Send the mode keys | +# | No | Yes | Send the mode keys | +# | No | No | Enable copy-mode and do PageUp | +# |---------------------+-----------------------------------------+--------------------------------| + +# *** Wheel scroll in pane WHILE in copy-mode +# Sun Feb 19 11:32:16 EST 2017 - kmodi +# Below breaks in tmux 2.4 +# # Once in copy-mode, mouse wheel scrolls scrolls by half pages +# bind -temacs-copy WheelUpPane halfpage-up +# bind -temacs-copy WheelDownPane halfpage-down + +# ** Left click on status +# set -g mouse-select-window on # incompatible in tmux 2.1+ +# Left click on a window name in status bar to select it +bind -T root MouseDown1Status select-window -t= # default + +# ** Middle click on status +# Middle click on a window name in status bar to kill it +bind -T root MouseDown2Status kill-window + +# ** Other mouse settings +# The special token ‘{mouse}’ or ‘=’ may be used as target-window or target-pane in +# commands bound to mouse key bindings. Example: -t = + +# * Window Title +set -g set-titles on +set -g set-titles-string '#h :: #S:W#I(#W).P#P' + +# * Status Bar +set -g status-interval 5 # default = 15 seconds +set -g status-justify centre + +# ** Left Status +set -g status-left-length 20 +# Change the left status when prefix is pressed. +# https://www.reddit.com/r/tmux/comments/5cm2ca/post_you_favourite_tmux_tricks_here/d9ziuy9/ +set -g status-left "#{?client_prefix,#[fg=yellow]prefix pressed ..,[#S]}" + +# ** Right Status +set -g status-right-length 20 +set -g status-right "%l:%M %b %d %a " + +# ** Pane Status +setw -g pane-border-status "bottom" +setw -g pane-border-format " #P #T " + +# # tmux-powerline +# # https://github.com/erikw/tmux-powerline +# set -g status-left-length 30 +# set -g status-right-length 30 +# set -g status-left "#(~/usr_local/scripts/tmux-powerline/powerline.sh left)" +# set -g status-right "#(~/usr_local/scripts/tmux-powerline/powerline.sh right)" + +# * Colors + +# ** Status Bar Colors +set -g status-style fg=colour246,bg=colour233 # default for whole status line +set -g status-left-style fg=white,bold,bg=colour233 +set -g status-right-style fg=colour75,none,bg=colour233 + +# ** Message Colors +set -g message-style fg=colour2,bold,bg=default + +# ** Window Status Colors +setw -g window-status-style default # default for all window statuses +setw -g window-status-last-style fg=default,bg=colour235 +setw -g window-status-current-style fg=white,bold,bg=colour63 +setw -g window-status-bell-style default +setw -g window-status-activity-style fg=white,none,bg=colour196 +# setw -g window-status-content-style fg=black,none,bg=green # incompatible with tmux 2.0+ + +# ** Pane Colors +setw -g pane-active-border-style fg=colour63,bg=default +setw -g pane-border-style fg=colour235,bg=default +setw -g window-active-style 'bg=#330000' # bg color of active pane +setw -g window-style 'bg=black' # bg color of inactive pane(s) + +# ** Mode Info Colors +# Color of display shown on top-right in copy-mode, highlighting +setw -g mode-style fg=black,bg=colour244 + +# * Activity +# Notify when a window has activity +# This quick snippet will have tmux notify you in the status area when a +# window has activity: +setw -g monitor-activity on +set -g visual-activity off # Display message telling that an activity happened (on/off) +# It lets me know that there is activity in a non-active window +# To try this, enter `sleep 10 && echo “Hi”` in a window and switch to +# another window. + +# # Notify when a window has a content alert +# setw -g monitor-content "--[A-Za-z][A-Za-z]sim Done--" # This string appears when a sim finishes, alert then # incompatible with tmux 2.0+ +# # setw -g monitor-content "" # Disable monitor-content +# set -g visual-content on # Display message telling that a content alert was triggered (on/off) # incompatible with tmux 2.0+ + +# * Command Prompt +# Move focus to command prompt. tmux commands can be entered there directly +# without using the `tmux` prefix and it also supports auto-complete. +bind C-x command-prompt # default command-prompt binding "PREFIX :" also works + +# * Audible and Visual Bells +set -g bell-action any +set -g bell-on-alert off +set -g visual-bell on + +# * Copy & Paste +set -g set-clipboard off # default is on + +# Copy tmux buffer to primary and clipboard selections +# run -b runs a shell command in background +# http://grota.github.io/blog/2012/05/08/tmux-clipboard-integration/ +bind C-w run -b "tmux show-buffer | xclip -i -sel pri && tmux show-buffer | xclip -i -sel cli" +# Fri Aug 26 18:41:30 EDT 2016 - kmodi +# Below binding was suggested by Nicholas Marriott +# But the my older binding works fine so I am commenting out below for now. +# bind C-w run "tmux saveb - | xclip -i -sel pri; tmux saveb - | xclip -i -sel cli" +# Paste into tmux; also replace LF characters with +# space as separator characters (-s) when pasting. +# Yank from primary +bind C-y run -b "xclip -o -sel pri | tmux load-buffer - && tmux paste-buffer -s ' '" +# Yank from clipboard +bind M-y run -b "xclip -o -sel cli | tmux load-buffer - && tmux paste-buffer -s ' '" +# Open the file/dir path that was copied by selection in existing emacs client +# Usage: Highlight a file name in ls output and press "PREFIX e" +bind e run -b "tmux show-buffer | xclip -i -sel pri; (emacsclient -a '' `tmux display -p '#{pane_current_path}'`/`xclip -o -sel pri `&)" + +# * Synchronize commands to panes/windows/sessions +# Send the same command to all panes in the same window +bind C-a command-prompt -p "Command to all panes in this window:" \ + "run \"tmux list-panes -F '##{pane_index}' | xargs -I PANE \ + tmux send-keys -t PANE '%1' Enter\"" +# Alternative to using the above "C-a" binding is to enable pane synchronization, +# type the command you want to execute in all panes in the same window and disable +# pane synchronization +# Also turn the pane borders red while pane synchronization is enabled. +# - https://www.reddit.com/r/tmux/comments/5cm2ca/post_you_favourite_tmux_tricks_here/d9y6jzu/ +bind C-s if -F '#{pane_synchronized}' \ + 'setw synchronize-panes off; \ + setw pane-active-border-style fg=colour63,bg=default; \ + setw pane-border-format " #P #T "' \ + 'setw synchronize-panes on; \ + setw pane-active-border-style fg=red; \ + setw pane-border-format " #P - Pane Synchronization ON "' +# So it would be: C-s C-s + +# https://scripter.co/command-to-every-pane-window-session-in-tmux/ +# Send the same command to all panes/windows in the current session +bind C-e command-prompt -p "Command:" \ + "run \"tmux list-panes -s -F '##{session_name}:##{window_index}.##{pane_index}' \ + | xargs -I PANE tmux send-keys -t PANE '%1' Enter\"" + +# Send the same command to all panes/windows/sessions +bind E command-prompt -p "Command:" \ + "run \"tmux list-panes -a -F '##{session_name}:##{window_index}.##{pane_index}' \ + | xargs -I PANE tmux send-keys -t PANE '%1' Enter\"" + +# * Terminal Setting + +# From `man tmux', about `default-terminal' +# Set the default terminal for new windows created in this session - the default +# value of the TERM environment variable. For tmux to work correctly, this must +# be set to ‘screen’, ‘tmux’ or a derivative of them. +# set -g default-terminal "screen" +set -g default-terminal "screen-256color" +# Mon May 22 11:43:56 EDT 2017 - kmodi +# Blinking text (useful to show broken symlinks in ls) does not work when using tmux-24bits. +# set -g default-terminal "tmux-24bits" +# tmux-24bits is a custom terminfo profile created using the steps explained +# on https://github.com/ThomasAdam/tmux/blob/master/FAQ to support italics and +# 256 colors. + +# Enable 24-bit color +# https://sunaku.github.io/tmux-24bit-color.html +set -ga terminal-overrides ",screen-256color:Tc" +# set -ga terminal-overrides ",tmux-24bits:Tc" + +# Thu May 31 17:10:04 EDT 2018 - kmodi +# TODO: Try the 24-bit emacs+tmux config for ST +# https://www.reddit.com/r/emacs/comments/8ndm2x/gnu_emacs_261_24bit_colors_suckless_st_terminal/dzwh4vv/ +# set -g default-terminal "tmux-256color" +# set -ga terminal-overrides ",*256col*:Tc" +# + +setw -g xterm-keys on + +# Uncomment below when using st (by suckless.org) +# set -g default-terminal "st-256color" +# # https://sunaku.github.io/tmux-24bit-color.html +# # st supports 24-bit color, so enable support for that in tmux +# set -ga terminal-overrides ",st-256color:Tc" +# setw -g xterm-keys off + +bind R refresh-client +# bind R refresh-client \; display "Refreshed the client." + +# * Other Options + +# ** Server Options +set -s escape-time 0 # Allows for faster key repetition + +# ** Session Options +# Set the default shell to /bin/sh. If the default is tcsh, doing a split-window takes a long +# time as my tcsh init is loaded first (which takes really long). +set -g default-shell /bin/sh +# If I am doing a new-window or split-window without a specified command, start the tcsh +# shell by default. +set -g default-command tcsh +set -g history-limit 100000 +set -g display-time 1000 # Duration of tmux display messages in milliseconds + +# ** Window Options +# When a smaller terminal connects to a tmux client, it shrinks to fit it. The +# clients attached with bigger displays see this constrained view. +# aggressive-resize makes it such that the window is only resized if the smaller +# client is actively looking at it. +setw -g aggressive-resize on +setw -g mode-keys emacs # Use emacs keybindings in copy mode +setw -g status-keys emacs + +# * Notes + +# |-------------------+------------| +# | tmux command | short form | +# |-------------------+------------| +# | set-option | set | +# | set-window-option | setw | +# | bind-key | bind | +# | unbind-key | unbind | +# | display-message | display | +# | run-shell | run | +# | if-shell | if | +# |-------------------+------------| + +# Colo'u'r table +# http://guns.github.io/xterm-color-table.vim/images/xterm-color-table.png + +# CHARACTER PAIR REPLACED WITH +# #(command) First line of command’s output +# #[attributes] Colour or attribute change +# #H Hostname of local host +# #I Current window index +# #P Current pane index +# #S Session name +# #T Current window title +# #W Current window name +# ## A literal ‘#’ + +# Variables used in time format +# Source: http://docs.splunk.com/Documentation/Splunk/5.0.2/SearchReference/Commontimeformatvariables +# %y = year in numbers (2-digit) +# %Y = year in numbers (4-digit) +# %m = month in number (eg: 12) + # %B = full month name (eg: December)sho +# %b = short month name (eg: Dec) +# %d = day in numbers, with leading zeros (eg: 08) +# %e = day in numbers, no leading zeros (eg: 8) +# %A = full weekday name (eg: Sunday) +# %a = short weekday name (eg: Sun) +# %H = hours in 24-clock, with leading zeros +# %k = hours in 24-clock, no leading zeros +# %l = hours in 12-clock, with leading zeros +# %p = am/pm +# %T = time in 24-hour notation (%H:%M:%S) + +# PREFIX ? : list-keys, display key bindings + +# In command-prompt: show-options -g shows the global options +# In command-prompt: show-window-options -g shows the global windows options + +# How do I know which tmux version I am running? +# tmux -V + +# How to set bindings that don't need the prefix? +# bind -n .. or +# bind -T root .. + +# Changelog: https://github.com/tmux/tmux/blob/master/CHANGES + +# style colors: default, black, red, green, yellow, blue, magenta, cyan, white, +# colour0-colour255, hexdecimal RGB string '#ffffff' +# Use $SCRIPTS/bash/256-colors.sh to figure out the color number you want +# style attributes: none, bold/bright, dim, underscore, blink, reverse, hidden, +# or italics + +# https://www.reddit.com/r/tmux/comments/3paqoi/tmux_21_has_been_released/cw552qd + +# tmux buffers +# PREFIX # : List all paste buffers +# PREFIX - : Delete the most recently copied buffer of text +# PREFIX = : Choose which buffer to paste interactively from a list +# PREFIX ] : Paste the most recently copied buffer of text + +# How to start a temporary tmux server in addition to an existing running one? +# > tmux -L temp + +# In a shell environment in a terminal in tmux, the env var $TMUX will be +# defined to something like "/tmp/tmux-23273/default,31101,0". Outside tmux, +# $TMUX will be undefined. + +# Notation to address a specific pane +# SESSION_NAME:WINDOW_INDEX.PANE_NUMBER (Example: foo:2.1 i.e. Pane 1 in Window 2 of Session foo) + +# To print a message containing tmux variable values to stdout use '-p' option in display-message +# tmux display-message -p '#{session_name}:#{window_name}.#{pane_index}', or +# tmux display -p '#{session_name}:#{window_name}.#{pane_index}' diff --git a/regress/conf/d2e576f947e108eb9903679b65c81fbc.conf b/regress/conf/d2e576f947e108eb9903679b65c81fbc.conf new file mode 100644 index 0000000000..392a69f089 --- /dev/null +++ b/regress/conf/d2e576f947e108eb9903679b65c81fbc.conf @@ -0,0 +1,198 @@ +### GENERAL + +set-option -g prefix C-a # Set prefix to +bind a send-prefix # Send with a + +bind R source-file ~/.tmux.conf \; display "~/.tmux.conf reloaded" +bind -n M-R source-file ~/.tmux.conf \; display "~/.tmux.conf reloaded" + +set -g history-limit 10000 # lines to keep in hisoty +set-option -g display-panes-time 3000 # Timeout for pane-numbering in ms +bind -n M-q display-panes +set-option -sg escape-time 0 # speed up commands +set -g mouse on # enable mouse (tmux 2.1+) +set -g base-index 1 # start window numbering at 1 +set -g pane-base-index 1 # start pane numbering at 1 +set -g renumber-windows on # renumber windows automatically +setw -g automatic-rename on # rename window after process + +# Clear window name before renaming +bind , rename-window "" \; command-prompt "rename-window '%%'" + +#### APPEARANCE + +set -g default-terminal "screen-256color" # use 256 colors +setw -g aggressive-resize on # resize window to smallest client + +set -g pane-border-style fg=colour238 # border color for inactive panes +set -g pane-active-border-style fg=colour247 # border color for active panes + +# Status bar colors and format +setw -g window-status-format ' #[fg=#999999]#I #[fg=$666666]#W ' +setw -g window-status-current-format '#[fg=#ffffff] #I #W#[fg=#ffffff] ' +setw -g window-status-separator '#[fg=#292929]|#[fg=default]' +set -g status-bg default # background color for status bar +set -g status-position bottom # put status bar on top or bottom +set -g status-interval 2 # interval in s to update status +set -g status-justify left # horizontal alignment +set -g message-style fg=white,bg=black # appearance of status messages +set -g message-command-style fg=white # appearance of status message cmds + +# Left section of status bar +set -g status-left "" + +# Status bar visibility +set -g status off +bind -r -n M-t set status on +bind -r -n M-T set status off +bind t set status on +bind T set status off + +# Right section of status bar +if-shell 'uname | grep -qi Darwin' "set -g status-right \"#[fg=#81a2be]#(/usr/local/bin/mpc | head -n 1 | sed 's/volume.*$//') #[fg=cyan]#(~/bin/battery-osx) #(~/bin/mailstatus.sh) #[fg=yellow]#(uptime|sed 's/.* //') #[fg=#666666]%F #[fg=#bababa]%R\"" + +if-shell 'uname | grep -qi Linux' "set -g status-right \"#[fg=cyan]#(~/bin/battery-linux) #(~/bin/mailstatus.sh) #[fg=yellow]#(cat /proc/loadavg|awk '{print $1;}') #[fg=#666666]%F #[fg=#bababa]%R\"" + +# Scaling of status-bar sections +set -g status-right-length 40 + + +#### NAVIGATION + +# With C-a prefix +bind h select-pane -L # navigate left with h +bind j select-pane -D # navigate down with j +bind k select-pane -U # navigate up with k +bind l select-pane -R # navigate right with l +bind -r H resize-pane -L 5 # resize pane left with H +bind -r J resize-pane -D 5 # resize pane down with J +bind -r K resize-pane -U 5 # resize pane up with K +bind -r L resize-pane -R 5 # resize pane right with L + +# Navigate panes with Meta (alt) modifier + hjkl +bind -r -n M-h select-pane -L # navigate left with M-h +bind -r -n M-j select-pane -D # navigate down with M-j +bind -r -n M-k select-pane -U # navigate up with M-k +bind -r -n M-l select-pane -R # navigate right with M-l +bind -r -n M-H resize-pane -L 5 # resize pane left with M-H +bind -r -n M-J resize-pane -D 5 # resize pane down with M-J +bind -r -n M-K resize-pane -U 5 # resize pane up with M-K +bind -r -n M-L resize-pane -R 5 # resize pane right with M-L + +# Navigate windows with Meta (alt) modifier + number keys +bind -n M-1 select-window -t :=1 +bind -n M-2 select-window -t :=2 +bind -n M-3 select-window -t :=3 +bind -n M-4 select-window -t :=4 +bind -n M-5 select-window -t :=5 +bind -n M-6 select-window -t :=6 +bind -n M-7 select-window -t :=7 +bind -n M-8 select-window -t :=8 +bind -n M-9 select-window -t :=9 +bind -n M-0 select-window -t :=10 + +bind C-s last-window # go to last window with +bind C-a last-pane # go to last pane with +bind -n M-s last-window # go to last pane with M-s +bind -n M-a last-pane # go to last pane with M-a +bind -r n next-window # next window with n +bind -r b previous-window # next window with p + +bind -n -r M-n next-window # next window with +bind -n -r M-b previous-window # previous window with +#bind -n M-, run-shell "tmux list-panes -as -F \"##I.##P ##{pane_current_command} . #{pane_current_path} (#W)#F\" | fzf-tmux | cut -d \" \" -f 1 | xargs tmux select-pane -t" +bind -n M-, run-shell "tmux list-windows -F \"##I:##W\" | fzf-tmux | cut -d \":\" -f 1 | xargs tmux select-window -t" +bind -n M-. run-shell "tmux list-sessions -F \"##S\" | fzf-tmux | xargs tmux switch -t" + + +#### LAYOUT CHANGING BINDINGS + +# create panes in same directory +bind '"' split-window -c "#{pane_current_path}" +bind '%' split-window -h -c "#{pane_current_path}" + +bind -r z resize-pane -Z # toggle pane zoom with z +bind -r y next-layout # cycle to next pane layout with y +bind -r Y previous-layout # cycle to previous pane layout with Y +bind -r r rotate-window # rotate panes with r + +bind -n M-z resize-pane -Z # toggle pane zoom with +bind -n -r M-y next-layout # cycle to next pane layout with +bind -n -r M-Y previous-layout # cycle to previous pane layout with +bind -n -r M-r rotate-window # rotate panes with + +bind -r Left swap-window -t -1 # Swap window left +bind -r Right swap-window -t +1 # Swap window right + +bind -r B swap-window -t -1 # Swap window left +bind -r N swap-window -t +1 # Swap window right +bind -n -r M-B swap-window -t -1 # Swap window left +bind -n -r M-N swap-window -t +1 # Swap window right + +#### CLIPBOARD + +# enable reattach-to-user-namespace which fixes pasteboard access and launchctl +bind Space copy-mode # enter copy mode with +bind -n M-u copy-mode # enter copy mode with M-u +bind -T copy-mode-vi M-u send -X halfpage-up # scroll up with M-u +bind -T copy-mode-vi M-d send -X halfpage-down # scroll down with M-d +bind -T copy-mode-vi v send -X begin-selection # start "visual" with v + +# Copy (yank) with y +if-shell 'uname | grep -qi Linux && which xclip > /dev/null' 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "DISPLAY=:0 xclip -i -sel clipboard"' +if-shell 'uname | grep -qi Darwin' 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"' +if-shell 'uname | grep -qi Cygwin' 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "cat > /dev/clipboard"' + +# Paste with C-a p or M-p +if-shell 'uname | grep -qi Linux && which xclip > /dev/null' 'bind p run "DISPLAY=:0 xclip -o | tmux load-buffer - ; tmux paste-buffer"' +if-shell 'uname | grep -qi Darwin && which reattach-to-user-namespace > /dev/null' 'bind p run "pbpaste | tmux load-buffer - ; tmux paste-buffer"' +if-shell 'uname | grep -qi Darwin' 'bind -n M-p run "pbpaste | tmux load-buffer - ; tmux paste-buffer"' +if-shell 'uname | grep -qi Cygwin' 'bind p run "cat /dev/clipboard | tmux load-buffer - ; tmux paste-buffer"' +if-shell 'uname | grep -qi Cygwin' 'bind -n M-p run "cat /dev/clipboard | tmux load-buffer - ; tmux paste-buffer"' + + +#### LAUNCH PROCESSES + +# use urlview to follow URLs in current pane +bind u capture-pane -J \; \ + save-buffer "/tmp/active_tmux_buffer" \; \ + delete-buffer \; \ + split-window -l 10 "urlview '/tmp/active_tmux_buffer' && rm /tmp/active_tmux_buffer" + +# Launch offlineimap in inactive splits +bind o split-window -p 25 '$SHELL -c "offlineimap -qf INBOX"' \; select-pane -l +bind O split-window -p 25 '$SHELL -c "offlineimap"' \; select-pane -l + +# Use nested bindings (l) for grouping process launch bindings +bind -n C-M-v new-window -n vim "/usr/local/bin/vim" +bind -n C-M-w new-window -n weather \ + "curl 'wttr.in/?m'; echo -e '\nPress to quit'; read -n 1 -s" + +# Open new window and resize status accordingly (should be a hook instead) +bind Enter new-window -c "#{pane_current_path}" "$SHELL" +bind -n M-Enter new-window \ + "tmux set status-right-length `echo $(tput cols)/2|bc|tr -d '\n'`; zsh" + +# Use nested bindings (m) for grouping music-control bindings +bind m switchc -Tmpd +bind -n M-m switchc -Tmpd +bind -Tmpd v new-window -n vimpc "vimpc" +bind -Tmpd p display "#(mpc toggle | tr '\n' ' ')" +bind -Tmpd s display "#(mpc stop | tr '\n' ' ')" +bind -Tmpd n display "#(mpc next | tr '\n' ' ')" +bind -Tmpd b display "#(mpc prev | tr '\n' ' ')" +bind -Tmpd r display "#(mpc clear && mpc ls | mpc add && mpc random on && mpc play | tr '\n' ' ')" +#bind -Tmpd r new-window -n mpc "mpc clear && mpc ls | mpc add && mpc shuffle && mpc play" + +bind -n C-M-p display "#(mpc toggle | tr '\n' ' ')" +bind -n C-M-s display "#(mpc stop | tr '\n' ' ')" +bind -n C-M-n display "#(mpc next | tr '\n' ' ')" +bind -n C-M-b display "#(mpc prev | tr '\n' ' ')" +#bind -n C-M-r display "#(mpc clear && mpc ls | mpc add && mpc random on && mpc play | tr '\n' ' ')" +bind -n C-M-a split-window -p 50 "source ~/code/fzf-mpd/fzf-mpd.zsh && fm" + +# fzf-locate from entire file system and insert result in current pane (Alt-`) +bind -n 'M-`' run "tmux split-window -p 40 'tmux send-keys -t #{pane_id} \"$(locate / | fzf -m | paste -sd\\ -)\"'" + +# Change to the previous pane, repeat the last command, change back +bind -n M-! last-pane \; send-keys C-p C-m \; last-pane diff --git a/regress/conf/e2661d67d0d45a8647fb95de76ec8174.conf b/regress/conf/e2661d67d0d45a8647fb95de76ec8174.conf new file mode 100644 index 0000000000..79f46df157 --- /dev/null +++ b/regress/conf/e2661d67d0d45a8647fb95de76ec8174.conf @@ -0,0 +1,78 @@ +# Scott Rochford's tmux configuration +# +# change the prefix to the GNU screen default (avoids clash with page up in vi) +set -g prefix C-a +unbind-key C-b +bind-key C-a send-prefix +# toggle sending input to all panes +bind-key b set-window-option synchronize-panes +# alternative to ',' which doesn't pre-fill the prompt with the existing name +bind-key < command-prompt "rename-window '%%'" + +# Disabled all of these in favour of changing 'default-command' below. +#bind-key C-p pipe-pane -o 'cat >>~/tmux_logs/output.$(echo #I-#P-#W-#T | sed "s/[^[:alnum:].-]/_/g")' \; display-message 'Toggled logging' +# From http://unix.stackexchange.com/questions/5832/is-there-an-equivalent-of-gnu-screens-log-command-in-tmux +# bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log' +#bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log' +#bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log' + +#set -g utf8 on + +set-option -g history-limit 32768 + +# no longer available in 2.2 +#set-option -g mouse-select-pane on +#set-option -g mouse-select-window on +set-option -g mouse on + +# increase the amount of time status bar messages are displayed for (default 1000 I think) +set-option -g display-time 1500 +# unfortunately this seems to have no effect in putty :-( +set-option -g set-clipboard on +set-option -g default-command 'tmux pipe-pane -o "cat >>~/tmux_logs/output-`date +%Y%m%d-%H%M%S-$$`" ; /bin/ksh -l' +# +# allow yank into system clipboard +# from http://stackoverflow.com/questions/17255031/how-to-copy-from-tmux-running-in-putty-to-windows-clipbard +# +# for some reason this is wrapping at 80 cols, using save- instead of show- helps +# -b for background is needed because xclip continues to run to service the clipboard paste reqeusts until the +# clipboard buffer is replaced with some new contents +#bind C-y run-shell -b "tmux save-buffer - | DISPLAY=$(<~/.xdisplay) xclip -selection clipboard -in && tmux display-message 'xclipped successfully'" +bind C-y save-buffer ~/etc/clipboard.pipe +# +# this was just for testing, but interestingly for some reason tmux-show-buffer >/tmp/t never terminates, writing to a pipe works fine?? +#bind C-z run-shell "tmux show-buffer | cat >/tmp/t" +# move x clipboard into tmux paste buffer +#bind C-p run-shell -b "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer" +bind C-p run-shell "DISPLAY=$(<~/.xdisplay) xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer" + +# switch to last-but-one window (like prefix-l but last, last) +# only works on tmux-2.4 + with Nicholas Marriott's patch from my feature request, unless it reached mainline.... +#bind k run-shell "tmux select-window -t $(tmux list-windows -F '#{session_stack}' | awk -F, '{print $3;exit}END{print $1}')" +bind k run-shell "tmux select-window -t $(echo #{session_stack} | awk -F, '{w=$1}NF>=3{w=$3;exit}END{print w}')" + +# switch to oldest window (for clean-up), not sure why brackets are required around (NF) here... +bind K run-shell "tmux select-window -t $(echo #{session_stack} | awk -F, '{print $(NF)}')" + +# prompt for hosts to connect to, open a new synchronized window with horizontally split panes for each host, supports brace expansion +bind N command-prompt -p hosts: 'run-shell -b "bash -c \"~/lbin/nw %% >/dev/null\""' + +# seems to cause unexpected resizes when focussing on putty :-( +#set-option mouse-resize-pane on + +#05:59 < Celti> annihilannic: I believe the #{pane_in_mode} format does what you want +#05:59 < Celti> put it in your statusline +#05:59 < Celti> annihilannic: No, my mistake, I should have read farther down, you want #{pane_synchronized} +# only works in tmux 2.0?, higher than 1.6.3 anyawy +set-option -g window-status-format ' #I:#W#F#{?pane_synchronized,S,}' +#set-option -g window-status-current-format ' #I:#W#{?pane_synchronized,[sync],}#F' +# to highlight in red when sync is on... not sure why I did this with set-window-option instead of set-option, perhaps +# both work? +set-window-option -g window-status-current-format "#{?pane_synchronized,#[bg=red],}#{?window_zoomed_flag,#[bg=yellow],} #I:#W#F#{?pane_synchronized,S,}" +# +# also only in 2.0? if I use this, don't need #F in window-status-*-format? - actually, nah, +# still useful for showing [Z]oomed, or - last active, etc. +set-option -g window-status-current-style bg=blue + +# Toggle input on a pane (from Thomas Sattler) +bind-key R if -F '#{pane_input_off}' "select-pane -e; select-pane -P fg=default" "select-pane -d; select-pane -P fg=yellow" \ No newline at end of file diff --git a/regress/conf/ed08995f38b5a3079262a88d2563abe4.conf b/regress/conf/ed08995f38b5a3079262a88d2563abe4.conf new file mode 100644 index 0000000000..a0fd150069 --- /dev/null +++ b/regress/conf/ed08995f38b5a3079262a88d2563abe4.conf @@ -0,0 +1,283 @@ +#---------------------------------------------------------------------------# +# .tmux.conf +# Helmut K. C. Tessarek, Last update 2018-10-16 +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# set prefix key to ctrl+a / ctrl-b is used in vi for going back one page +#---------------------------------------------------------------------------# +unbind C-b +set -g prefix C-a + +#---------------------------------------------------------------------------# +# send the prefix to client inside window (nested sessions) +#---------------------------------------------------------------------------# +bind-key a send-prefix + +#---------------------------------------------------------------------------# +# toggle last window like screen +#---------------------------------------------------------------------------# +bind-key C-a last-window + +#---------------------------------------------------------------------------# +# start window indexing at one instead of zero +#---------------------------------------------------------------------------# +#set -g base-index 1 + +#---------------------------------------------------------------------------# +# default terminal - we want 256 colors !!! +#---------------------------------------------------------------------------# +set -g default-terminal "screen-256color" + +#---------------------------------------------------------------------------# +# on-screen time for status messages in ms +#---------------------------------------------------------------------------# +set -g display-time 2000 + +#---------------------------------------------------------------------------# +# on-screen time for display-panes in ms +#---------------------------------------------------------------------------# +set -g display-panes-time 2000 + +#---------------------------------------------------------------------------# +# color for display pane indicator +#---------------------------------------------------------------------------# +set -g display-panes-colour "cyan" +#set -g display-panes-active-colour "#0087ff" +#set -g display-panes-active-colour "red" + +#---------------------------------------------------------------------------# +# open a man page in new window +#---------------------------------------------------------------------------# +unbind m +bind m command-prompt "split-window 'exec man %%'" + +#---------------------------------------------------------------------------# +# quick view of processes +#---------------------------------------------------------------------------# +#bind '~' split-window "exec htop" + +#---------------------------------------------------------------------------# +# scrollback buffer n lines +#---------------------------------------------------------------------------# +set -g history-limit 5000 + +#---------------------------------------------------------------------------# +# toggle status bar +#---------------------------------------------------------------------------# +unbind b +bind-key b set-option status + +#---------------------------------------------------------------------------# +# resize panes like vim +# feel free to change the "1" to however many lines you want to resize by, +# only one at a time can be slow +#---------------------------------------------------------------------------# +unbind < +unbind > +unbind - +unbind + +bind -r < resize-pane -L 1 +bind -r > resize-pane -R 1 +bind -r - resize-pane -D 1 +bind -r + resize-pane -U 1 + +#---------------------------------------------------------------------------# +# toggle mouse helpers +#---------------------------------------------------------------------------# +unbind Enter +unbind C-m +bind C-m set-option mouse \; display-message 'mouse -> #{?mouse,on,off}' + +#---------------------------------------------------------------------------# +# Reload config file +#---------------------------------------------------------------------------# +unbind R +bind-key R source-file ~/.tmux.conf \; display-message "Reloading configuration done" + +#---------------------------------------------------------------------------# +# start ssh session in new window +#---------------------------------------------------------------------------# +unbind S +bind-key S command-prompt "new-window -n %1 'ssh %1'" + +#---------------------------------------------------------------------------# +# start new session +#---------------------------------------------------------------------------# +unbind C +bind-key C command-prompt "new-session -s %1" + +#---------------------------------------------------------------------------# +# Keys to switch session +#---------------------------------------------------------------------------# +bind Q switchc -t0 +bind W switchc -t compile +bind E switchc -t config + +#---------------------------------------------------------------------------# +# break pane in background +#---------------------------------------------------------------------------# +unbind '@' +bind '@' break-pane -d + +#---------------------------------------------------------------------------# +# join pane with target window +#---------------------------------------------------------------------------# +unbind ^ +bind ^ command-prompt "join-pane -t %1" + +#---------------------------------------------------------------------------# +# move around panes with hjkl, as one would in vim after pressing ctrl-w +#---------------------------------------------------------------------------# +#bind h select-pane -L +#bind j select-pane -D +#bind k select-pane -U +#bind l select-pane -R + +#---------------------------------------------------------------------------# +# bind : to command-prompt like vim +# this is the default in tmux already +#---------------------------------------------------------------------------# +bind : command-prompt + +#---------------------------------------------------------------------------# +# Remain on exit +#---------------------------------------------------------------------------# +#setw -g remain-on-exit on + +#---------------------------------------------------------------------------# +# vi-style controls for copy mode +#---------------------------------------------------------------------------# +setw -g mode-keys vi + +#---------------------------------------------------------------------------# +# Make mouse useful in copy mode +#---------------------------------------------------------------------------# +#setw -g mode-mouse on + +#---------------------------------------------------------------------------# +# More straight forward key bindings for splitting +#---------------------------------------------------------------------------# +unbind % +unbind v +#bind | split-window -h +bind v split-window -h +unbind '"' +unbind h +#bind - split-window -v +bind h split-window -v + +#---------------------------------------------------------------------------# +# Synchronize panes +#---------------------------------------------------------------------------# +unbind y +bind y set-window-option synchronize-panes \; display-message 'synchronize-panes -> #{?synchronize-panes,on,off}' + +#---------------------------------------------------------------------------# +# Other key codes: Tab, BTab, Escape +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# Clock +#---------------------------------------------------------------------------# +setw -g clock-mode-colour green +setw -g clock-mode-style 24 + +#---------------------------------------------------------------------------# +# Terminal emulator window title +#---------------------------------------------------------------------------# +set -g set-titles on +set -g set-titles-string '#S:#I.#P #W' + +#---------------------------------------------------------------------------# +# Status Bar +#---------------------------------------------------------------------------# +set -g status-bg black +set -g status-fg white +set -g status-interval 1 +set -g status-left-length 30 +set -g status-left '#[fg=green]#h#[default] ' +#set -g status-right '#[fg=yellow]#(cut -d " " -f 1-4 /proc/loadavg)#[default] #[fg=cyan,bold]%Y-%m-%d %H:%M:%S#[default]' +#set -g status-right '#[fg=yellow,bold]%Y-%m-%d %H:%M#[default]' +set -g status-right '#[fg=yellow]%Y-%m-%d %H:%M %Z#[default]' +#set -g status-justify center +#set -g status-keys vi + +set -g allow-rename off +setw -g automatic-rename on + +#---------------------------------------------------------------------------# +# Highlighting the active window in status bar +#---------------------------------------------------------------------------# +#setw -g window-status-current-bg red +set-option -g window-status-format "#I:#W#F#{?pane_synchronized,S,}" +set-window-option -g window-status-current-format "#{?pane_synchronized,#[bg=red],}#{?window_zoomed_flag,#[bg=colour130],}#I:#W#F#{?pane_synchronized,S,}" +set-option -g window-status-current-style bg=blue + +#---------------------------------------------------------------------------# +# global update environment +#---------------------------------------------------------------------------# +set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TZ" + +#---------------------------------------------------------------------------# +# settings for AIX +# terminal overrides to enable colors +# set default terminal to vt100 or xterm (screen does not exist on AIX) +#---------------------------------------------------------------------------# +if-shell "uname|grep AIX" 'set -g terminal-overrides "xterm*:XT,xterm*:setab=\\E[4%p1%dm,xterm*:setaf=\\E[3%p1%dm"' +#if-shell "uname|grep AIX" "set -g default-terminal vt100" +if-shell "uname|grep AIX" "set -g default-terminal xterm" + +#---------------------------------------------------------------------------# +# settings for macOS +#---------------------------------------------------------------------------# +if-shell "uname|grep Darwin" 'set -g default-command "/bin/bash -l"' + +#---------------------------------------------------------------------------# +# Pane coloring +# set inactive/active window styles +#---------------------------------------------------------------------------# +set -g window-style "fg=colour247,bg=colour234" +set -g window-active-style "fg=colour250,bg=black" +set -g @TPCS "1" + +#---------------------------------------------------------------------------# +# pane border - different style / use cyan +#---------------------------------------------------------------------------# +#set -g pane-border-bg colour235 +#set -g pane-border-fg colour238 +#set -g pane-active-border-bg colour234 +#set -g pane-active-border-fg colour51 + +#---------------------------------------------------------------------------# +# toggle pane coloring on/off +#---------------------------------------------------------------------------# +unbind C-b +bind C-b if -F '#{@TPCS}' \ + 'set -g window-style "fg=default,bg=default" ; set -g window-active-style "fg=default,bg=default" ; set -g @TPCS "0"; display-message "Pane coloring -> off"' \ + 'set -g window-style "fg=colour247,bg=colour234" ; set -g window-active-style "fg=colour250,bg=black" ; set -g @TPCS "1"; display-message "Pane coloring -> on"' + +#---------------------------------------------------------------------------# +# List of plugins +#---------------------------------------------------------------------------# +set -g @plugin 'tmux-plugins/tpm' +#set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-logging' + +set -g @resurrect-capture-pane-contents 'on' +set -g @resurrect-save-bash-history 'on' + +set -g @logging-path $HOME +set -g @screen-capture-path $HOME +set -g @save-complete-history-path $HOME + +# Other examples: +# set -g @plugin 'github_username/plugin_name' +# set -g @plugin 'git@github.com/user/plugin' +# set -g @plugin 'git@bitbucket.com/user/plugin' + +#---------------------------------------------------------------------------# +# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) +#---------------------------------------------------------------------------# +run '~/.tmux/plugins/tpm/tpm' From f1ce611345f5151f851aad69edaab3753113fcb9 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 May 2019 11:27:58 +0100 Subject: [PATCH 542/836] Add another one. --- .../327af72ad372255817b585a74da06eda.conf | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 regress/conf/327af72ad372255817b585a74da06eda.conf diff --git a/regress/conf/327af72ad372255817b585a74da06eda.conf b/regress/conf/327af72ad372255817b585a74da06eda.conf new file mode 100644 index 0000000000..2a719c8b31 --- /dev/null +++ b/regress/conf/327af72ad372255817b585a74da06eda.conf @@ -0,0 +1,30 @@ +set -sg escape-time 10 + +set -g default-terminal tmux-256color +set -g prefix ^X +set -g history-limit 10000 +setw -g mode-keys vi +setw -g xterm-keys off + +# black, red, green, yellow, blue, magenta, cyan, white, default. +setw -g message-command-style fg=yellow,bg=black +setw -g message-style fg=black,bg=yellow + +%if #{m:*mydomain*,#{host}} +set -g status-style fg=cyan,bg='#001040' +setw -g window-status-current-style fg='#f0f0f0',bg='#001040' +%elif #{||:#{m:*somedomain*,#{host}},#{m:*otherdomain*,#{host}}} +set -g status-style fg=white,bg='#400040' +setw -g window-status-current-style fg=yellow,bg='#400040',bright +%else +set -g status-style fg=white,bg='#800000' +setw -g window-status-current-style fg=brightwhite,bg='#800000' +%endif + +unbind ^B +bind ^X last-window +bind x send-prefix +bind ^C new-window +bind ^D detach-client +bind ^N next-window +bind ^P previous-window From d769fec8d670ce37d476da3e31d6e68f9d43408c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 May 2019 14:41:07 +0100 Subject: [PATCH 543/836] More configs. --- .../58304907c117cab9898ea0b070bccde3.conf | 118 ++++++++++++++++++ .../d0040b2e097f1e3d31d78eed6ce8d461.conf | 108 ++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 regress/conf/58304907c117cab9898ea0b070bccde3.conf create mode 100644 regress/conf/d0040b2e097f1e3d31d78eed6ce8d461.conf diff --git a/regress/conf/58304907c117cab9898ea0b070bccde3.conf b/regress/conf/58304907c117cab9898ea0b070bccde3.conf new file mode 100644 index 0000000000..c9ce3fa48c --- /dev/null +++ b/regress/conf/58304907c117cab9898ea0b070bccde3.conf @@ -0,0 +1,118 @@ +# +# Tureba's tmux.conf +# +# To use it, either: +# a) link ~/.tmux.conf to it; or +# b) create a ~/.tmux.conf that sources it. +# +# who: Arthur Nascimento +# where: github.com/tureba/myconfigfiles +# + +# defaults +set -g default-shell /bin/zsh +set -g default-command zsh +# tmux sets screen/screen-256, but has no codes for italics +set -g default-terminal tmux-256color +# linux terminal doesn't need this, but xterm does +set -g terminal-overrides 'xterm*:smcup@:rmcup@,*256col*:colors=256,xterm*:XT' +# xterm-style function key sequences +setw -g xterm-keys on + +# 1, 2 and 3 are closer together than 0, 1 and 2 +set -g base-index 1 +set -g pane-base-index 1 + +# easier to type than C-b +set -g prefix C-a +set -g prefix2 C-b +unbind C-b +bind C-a send-prefix + +# for repeatable keys +set -g repeat-time 170 + +# status bar +set -g status-style fg=green,bg=colour234 +set -g status-right-style bg=colour236 +set -g status-right "#[bold,fg=blue][#[fg=default]#T#[fg=blue]]#[nobold,fg=default] | #[fg=yellow]%F %R" +set -g status-right-length 120 +set -g status-left-style bg=colour236,bright +set -g status-left "#[fg=blue][#[fg=default]#h#[fg=cyan]:#[fg=default]#S#[fg=blue]]" +set -g status-left-length 30 +setw -g window-status-style fg=green +setw -g window-status-format " #I#[nobold]:#W " +setw -g window-status-current-style fg=green,bright +setw -g window-status-current-format "#[fg=red][#[fg=default]#I:#W#[fg=red]]" +setw -g window-status-separator "|" +setw -g window-status-activity-style blink +setw -g window-status-bell-style blink +setw -g window-status-last-style bright + +# enable wm window titles +set -g set-titles on + +# auto window rename +setw -g automatic-rename on +# auto window resize +setw -g aggressive-resize on + +# mouse settings +set -g mouse on + +# var|bind \ cmd | vim | less | copy | zsh +# pane_in_mode | 0 | 0 | 1 | 0 +# mouse_any_flag | 1 | 0 | 0 | 0 +# alternate_on | 1 | 1 | 0 | 0 +# WheelUpPane | send -M | send Up | * | send Up (** or copy-mode -e) +# WheelDownPane | send -M | send Down | * | send Down +# * panes in copy mode have scroll handled by different bindings + +# ** cycle over shell history +#bind -T root WheelUpPane if -Ft= '#{mouse_any_flag}' 'send -Mt=' 'send -t= Up' + +# ** enter copy mode +bind -T root WheelUpPane if -Ft= '#{mouse_any_flag}' 'send -Mt=' 'if -Ft= "#{alternate_on}" "send -t= Up" "copy-mode -et="' + +bind -T root WheelDownPane if -Ft= '#{mouse_any_flag}' 'send -Mt=' 'send -t= Down' + +# sensible v/h splits +unbind % +unbind '"' +bind | split-window -h +bind - split-window -v + +# hjkl pane traversal +bind -r h select-pane -L +bind -r j select-pane -D +bind -r k select-pane -U +bind -r l select-pane -R + +# window navigation +unbind p +bind -r [ previous-window +unbind n +bind -r ] next-window + +# Vi copypaste mode +setw -g mode-keys vi +bind C-c copy-mode +bind p paste-buffer +bind -T copy-mode-vi v send-keys -X begin-selection +bind -T copy-mode-vi y send-keys -X copy-selection +bind -T copy-mode-vi V send-keys -X rectangle-toggle + +# toggle window activity monitoring +bind m setw monitor-activity + +# reload the configuration +bind r source-file ~/.tmux.conf + +# toggle synchronize-panes +bind S setw synchronize-panes + +# create a new window with exactly this command +bind C command-prompt "new-window 'exec %%'" + +# (toggle) mark this pane for easier joins and swaps +bind . select-pane -m diff --git a/regress/conf/d0040b2e097f1e3d31d78eed6ce8d461.conf b/regress/conf/d0040b2e097f1e3d31d78eed6ce8d461.conf new file mode 100644 index 0000000000..3ae7444a6a --- /dev/null +++ b/regress/conf/d0040b2e097f1e3d31d78eed6ce8d461.conf @@ -0,0 +1,108 @@ +# Put the status bar on top +#set -g status-position "top" + +# Basic colours, safer for dumb terminals. +#set -g status-style "bg=white,fg=black" +#set -g status-right-style "bg=green,fg=black" +#set -g window-status-current-style "bg=yellow,fg=black" +#set -g message-style "bg=white,fg=black" +#set -g window-status-activity-style "fg=blue" +#set -g window-status-bell-style "fg=red" + +## Moar colours! Not recommended if attaching from dumber terminals with 8 or 16 colours. +#set -g default-terminal "tmux-256color" +# A more compatible XTERM var. +set -g default-terminal "screen-256color" +set -g message-style "bg=#485548 fg=#ffffff" +set -g pane-border-style "fg=#424954" +set -g pane-active-border-style "fg=#ffffff" +set -g status-style "bg=#424954 fg=#ffffff" +set -g status-right-style "bg=#303338 fg=colour87" +set -g window-status-current-style "bg=#303338" +set -g window-status-last-style "bg=#364146" +set -g window-status-format ' #I:#W#[fg=colour201]#F ' +set -g window-status-current-format ' #[fg=colour226]#I#[fg=#ffffff]:#[fg=colour119]#W#[fg=colour202]#F ' +set -g window-status-separator "" + +# Uncomment and reload settings for sanity in a console with 8 colours. +#set -g status-style "bg=white,fg=black" +#set -g window-status-last-style "bg=white" + +# Might help when graphical characters used for vertical and horizontal lines are drawn as x and q. +#set-option -ga terminal-overrides ',*:enacs@:smacs@:rmacs@:acsc@' + +# Count panes starting from 1. +set -g base-index 1 + +# With this you set the window name in the status line. +# Beware of outrageous prompts, such as the default one in RHEL 7. +set -g set-titles on +# Let status right consists of only the pane title (removes date and time). +# Usually shows current path. +set -g status-right ' #T ' +# Increase the default length of 40. +set -g status-right-length 80 + +# Scroll up with the mouse. +set -g mouse + +# Clipboard integration, use this in tandem with the recommended xterm settings. +set -g set-clipboard on +# Pass through modifier keys, xterm style. You'll want this in vim. +set -g xterm-keys on +# Reduce time to wait for Escape key. You'll want this for neovim. +set-option escape-time 40 +# Leave ESC alone... +#set-option -s escape-time 0 + +# New-style mouse scroll (>2.1) +bind -n WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M +bind -n WheelDownPane select-pane -t= \; send-keys -M + +# This is for scrolling up with the terminal using keys, but has issues... +#set -ga terminal-overrides ',xterm*:smcup@:rmcup@' + +# 10x more history. +set -g history-limit 20000 + +# Swap the default Control-b with Control-s which usually stops the output in a shell. +unbind C-b +set-option -g terminal-overrides "xterm-rightclick:krightclick=^[[29~" +set -g prefix C-s +bind C-s send-prefix + +# For renumbering windows when you get gaps in numbering. +bind R \ + move-window -r\; \ + display-message "Windows reordered..." + +# My shortcuts. +#bind-key -n C-S-t new-window # Doesn't work :-/ +bind-key -n C-t new-window +bind-key -n C-PgUp prev +bind-key -n C-PgDn next +#bind-key -n C-S-PgUp swap-window -t -1 # Doesn't work :-/ +#bind-key -n C-S-PgDn swap-window -t +1 # Doesn't work :-/ +bind-key -n C-S-Left swap-window -t -1 +bind-key -n C-S-Right swap-window -t +1 +bind-key -n M-` select-window -t 0 +bind-key -n M-1 select-window -t 1 +bind-key -n M-2 select-window -t 2 +bind-key -n M-3 select-window -t 3 +bind-key -n M-4 select-window -t 4 +bind-key -n M-5 select-window -t 5 +bind-key -n M-6 select-window -t 6 +bind-key -n M-7 select-window -t 7 +bind-key -n M-8 select-window -t 8 +bind-key -n M-9 select-window -t 9 +bind-key -n M-0 select-window -t 10 + +# switch panes without prefix using Alt-arrow +bind -n M-Left select-pane -L +bind -n M-Right select-pane -R +bind -n M-Up select-pane -U +bind -n M-Down select-pane -D + +# join pane from inputted window (horizontally or vertically) +#bind-key @ command-prompt -p "join pane from:" "join-pane -s ':%%' -h" +bind-key @ command-prompt -p "join pane from:" "join-pane -s ':%%' -v" From c4f4904f9b31addca1e62c53c039b28dc53b3fe5 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Tue, 21 May 2019 16:43:34 +0100 Subject: [PATCH 544/836] More configs --- .../d41d8cd98f00b204e9800998ecf8427e.conf | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 regress/conf/d41d8cd98f00b204e9800998ecf8427e.conf diff --git a/regress/conf/d41d8cd98f00b204e9800998ecf8427e.conf b/regress/conf/d41d8cd98f00b204e9800998ecf8427e.conf new file mode 100644 index 0000000000..79bcdb5d81 --- /dev/null +++ b/regress/conf/d41d8cd98f00b204e9800998ecf8427e.conf @@ -0,0 +1,148 @@ +set-option -g prefix C-a +unbind-key C-b +bind-key C-a send-prefix + +set-option -s set-clipboard on +set -sg escape-time 0 +set -g bell-action other +set -g lock-after-time 1800 +set -g lock-command 'tput civis && read -s -n1' +set -g history-limit 10000 +set -g default-terminal "screen-256color" +set -g pane-border-style fg=white,bg=default +set -g pane-active-border-style fg=red,bg=default +set -g repeat-time 100 +set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@:Tc" + +#set -g terminal-overrides '*88col*:colors=88,*256col*:colors=256,rxvt-uni*:Tc:XT:Ms=\E]52;%p1%s;%p2%s\007:Cc=\E]12;%p1%s\007:Cr=\E]12;green\007:Cs=\E]777;Cs;%p1%d\007' +set -g mouse on +set -g status-style bg=blue,fg=cyan + +set-hook -g alert-bell 'run -b "notify-send \"Bell in session #{session_name}:#{window_index}:#{window_name}\""' + +unbind-key / +unbind-key c +unbind-key d +unbind-key f +unbind-key i +unbind-key l +unbind-key n +unbind-key o +unbind-key p +unbind-key r +unbind-key s +unbind-key t +unbind-key w +unbind-key x +unbind-key | +unbind-key - +unbind-key A +unbind-key S +unbind-key . +unbind-key "'" +unbind-key '#' +unbind-key ' ' +unbind-key z +unbind-key ^z + +bind a send-prefix +bind c new-window -a -c '#{pane_current_path}' +bind d detach-client +bind "/" command-prompt "find-window '%%'" +bind i display-message +bind a last-window +bind n next-window +bind o select-pane -D +bind p previous-window +bind r respawn-window +bind s choose-tree -Z +bind t clock-mode +bind w choose-window +bind k confirm-before kill-pane +bind x set lock-command '/usr/bin/vlock' \; lock-client \; set lock-command 'tput civis && read -s -n1' +bind "|" split-window -v -c '#{pane_current_path}' +bind "-" split-window -h -c '#{pane_current_path}' +bind l command-prompt "rename-window '%%'" +bind S command-prompt "rename-session '%%'" +bind . display-panes +bind "'" command-prompt -p "SSH: " "new-window -n %1 'ssh %1'" +bind ' ' choose-window +bind z resize-pane -Z + +bind ^a last-window +bind ^c new-window -a -c '#{pane_current_path}' +bind ^d detach-client +bind ^i display-message +bind a last-window +bind ^n next-window +bind ^o select-pane -D +bind ^p previous-window +bind ^r respawn-window +bind ^s choose-session +bind ^t clock-mode +bind ^w choose-window +bind ^k confirm-before kill-pane +bind ^x lock-client +bind ^S command-prompt "rename-session '%%'" +bind ^z resize-pane -Z + +bind -n C-Left previous-window +bind -n C-Right next-window +bind -n C-s set status + +bind -r C-Left swapw -t:- +bind -r C-Right swapw -t:+ + +# Status stuff. +set -g status-left-style "fg=white, bg=magenta" +set -g status-left-length 30 +set -g status-left "#S " +set -g status-right-length 30 +set -g status-right-fg white +set -g status-right-bg blue +set -g status-right "#{?client_prefix,#[reverse][^a]#[noreverse],}[%a %d/%m %H:%M]" +set -g display-panes-time 4000 +set -g window-status-bell-style reverse + +#setw -g window-status-current-fg white +#setw -g window-status-current-bg colour34 +setw -g mode-keys vi + +setw -g window-status-separator "| " +#setw -g window-status-format "#[bg=blue]#I:#W:#{window_flags}#[bg=default]" +#setw -g window-status-current-format "#[fg=black,bg=green]#I:#W:#{window_flags}" + +setw -g window-status-format "#[bg=blue]#I:#W:#{?window_linked,+#{window_flags},#{window_flags} }#[bg=default]" +setw -g window-status-current-format "#[fg=black,bg=green]#I:#W:#{?window_linked,+#{window_flags},#{window_flags}}" + +set-window-option -g clock-mode-colour green + +# Sessions +new -d -sspecial +new -d -swork -d -nmutt 'exec neomutt' +neww -d +neww -d +neww -d +neww -d + +# FIXME -- the entire block below is required for taskwarrior. +#new -d -stask -ntask -x237 -y 79 +#selectl -ttask tiled +#set -ttask status off +#splitw -ttask:task +#splitw -ttask:task +#splitw -ttask:task +#splitw -ttask:task +#splitw -ttask:task +#selectl -ttask:task 4ada,237x79,0,0[237x67,0,0{156x67,0,0,5,80x67,157,0[80x27,157,0,19,80x22,157,28,20,80x16,157,51,21]},237x11,0,68,22] +#send -ttask:task.0 'cyclenext list' 'C-m' +#send -ttask:task.1 'clear ; tasksh' 'C-m' +#send -ttask:task.2 'cyclenext summary' 'C-m' +#send -ttask:task.3 'cyclenext burndown.daily' 'C-m' +#send -ttask:task.4 'cyclenext ghistory.monthly' 'C-m' +#selectp -ttask:task.1 +#linkw -stask:task -twork +#set -t task:task remain-on-exit on + +set -t work:irc remain-on-exit on +set -t work:mutt remain-on-exit on From 54dfe363406172d96ccea06c93232383a79abdeb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 21 May 2019 17:07:08 +0100 Subject: [PATCH 545/836] Another. --- .../ad0537c4e83d7a25d5dc4f3a3c571349.conf | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 regress/conf/ad0537c4e83d7a25d5dc4f3a3c571349.conf diff --git a/regress/conf/ad0537c4e83d7a25d5dc4f3a3c571349.conf b/regress/conf/ad0537c4e83d7a25d5dc4f3a3c571349.conf new file mode 100644 index 0000000000..ce68c4abe5 --- /dev/null +++ b/regress/conf/ad0537c4e83d7a25d5dc4f3a3c571349.conf @@ -0,0 +1,65 @@ +set-option -g allow-rename on +set-option -g automatic-rename off +set-option -g base-index 1 +set-option -g default-command "$SHELL" +set-option -g default-terminal "tmux-256color" +set-option -g history-limit 25000 +set-option -g mode-keys vi +set-option -g prefix C-f +set-option -g renumber-windows yes +set-option -g set-titles on +set-option -g set-titles-string "#T" +set-option -g xterm-keys on + +set-option -g status-interval 1 +set-option -g status-left "#(tmux-status-left)" +set-option -g status-left-length 40 +set-option -g status-right "" + +set-option -g window-status-current-attr bold +set-option -g window-status-current-format "[#I#F#{?window_zoomed_flag, ,}#{=40:pane_title}]" +set-option -g window-status-format "#I#{?window_zoomed_flag, ,}#F#{?window_flags,, }#{?window_zoomed_flag, ,}#{=20:pane_title}" + +set-option -g pane-active-border-fg colour247 +set-option -g pane-border-fg colour235 +set-option -g status-bg colour7 +set-option -g status-fg colour16 +set-option -g status-left-bg colour4 +set-option -g status-left-fg colour15 +set-option -g window-status-current-bg colour15 +set-option -g window-status-current-fg colour16 + +set-option -g update-environment "DBUS_SESSION_BUS_ADDRESS DISPLAY KRB5CCNAME \ + SESSION_MANAGER SSH_AGENT_PID SSH_ASKPASS SSH_AUTH_SOCK SSH_CONNECTION \ + WINDOWID XAUTHORITY SSH_TTY" + +bind-key w break-pane -d +bind-key l clear-history \; display "Pane history cleared." +bind-key C-f if-shell "test #{window_panes} -eq 1" last-window last-pane +bind-key N new-session +bind-key t new-window +bind-key z resize-pane -Z +bind-key C-r rotate-window -D +bind-key -n C-t run-shell "metamux new-shell-in-pane #{window_panes}" +bind-key n run-shell "metamux rotate-pane next" +bind-key p run-shell "metamux rotate-pane prev" +bind-key q run-shell "metamux pane-buster" +bind-key S run-shell "metamux join-hidden-pane -v" +bind-key u run-shell "metamux open-last-url-printed" +bind-key | run-shell "metamux join-hidden-pane -h" +bind-key f send-prefix +bind-key r source "$HOME/.tmux.conf" \; display "Configuration reloaded." + +# When the current window is split, Ctrl+Tab and Ctrl+Shift+Tab should rotate +# between the split windows. If there is only one pane in the current window, +# Ctrl+Tab and Ctrl+Shift+Tab will cycle between windows as though they were +# tabs in modern desktop UIs. +bind-key -n C-Tab if-shell "test #{window_panes} -eq 1" next-window "select-pane -t :.+" +bind-key -n C-S-Tab if-shell "test #{window_panes} -eq 1" previous-window "select-pane -t :.-" + +# Binding to mark and swap panes; if no pane is marked, the shortcut will mark +# the active pane, but if a pane is already marked, active pane will be swapped +# with the marked pane. +bind-key m if-shell 'test -z "$PANE_IS_MARKED"' \ + "select-pane -m; set-env PANE_IS_MARKED 1" \ + "swap-pane; select-pane -M; set-env -u PANE_IS_MARKED" From b68fc7f104e2e8884757bdc8e365f657c8258517 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 22 May 2019 07:12:38 +0100 Subject: [PATCH 546/836] Two more configs. --- .../2eae5d47049c1f6d0bef3db4e171aed7.conf | 56 +++++++++++++ .../b9f0ce1976ec62ec60dc5da7dd92c160.conf | 84 +++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 regress/conf/2eae5d47049c1f6d0bef3db4e171aed7.conf create mode 100644 regress/conf/b9f0ce1976ec62ec60dc5da7dd92c160.conf diff --git a/regress/conf/2eae5d47049c1f6d0bef3db4e171aed7.conf b/regress/conf/2eae5d47049c1f6d0bef3db4e171aed7.conf new file mode 100644 index 0000000000..c09adc24fe --- /dev/null +++ b/regress/conf/2eae5d47049c1f6d0bef3db4e171aed7.conf @@ -0,0 +1,56 @@ +# 256 colors for vim +set -g default-terminal "screen-256color" + +# Set default shell to zsh +set-option -g default-shell /bin/zsh + +# Start window numbering at 1 +set-option -g base-index 1 +set-window-option -g pane-base-index 1 + +# Cycle panes with C-b C-b +unbind ^B +bind ^B select-pane -t :.+ + +# Reload config wtih a key +bind-key r source-file ~/.tmux.conf \; display "Config reloaded!" + +# Mouse works as expected +# set -g mode-mouse on +# set -g mouse-select-pane on +# set -g mouse-resize-pane on +# set -g mouse-select-window on + +# Scrolling works as expected +set -g terminal-overrides 'xterm*:smcup@:rmcup@' + +# Use the system clipboard +# set-option -g default-command "reattach-to-user-namespace -l zsh" + +# Clear the pane and its history +bind -n C-k send-keys C-l \; clear-history + +# smart pane switching with awareness of vim splits +bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-h) || tmux select-pane -L" +bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-j) || tmux select-pane -D" +bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-k) || tmux select-pane -U" +bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-l) || tmux select-pane -R" +bind -n C-\ run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys 'C-\\') || tmux select-pane -l" + +# C-l is taken oer by vim style pane navigation +bind C-l send-keys 'C-l' + +# Use vim keybindings in copy mode +setw -g mode-keys vi + +# Setup 'v' to begin selection as in Vim +# bind-key -t vi-copy v begin-selection +# bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy" + +# Update default binding of `Enter` to also use copy-pipe +# unbind -t vi-copy Enter +# bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy" + +# Powerline +run-shell "powerline-daemon -q" +source "/Users/adamcooper/Library/Python/3.7/lib/python/site-packages/powerline/bindings/tmux/powerline.conf" \ No newline at end of file diff --git a/regress/conf/b9f0ce1976ec62ec60dc5da7dd92c160.conf b/regress/conf/b9f0ce1976ec62ec60dc5da7dd92c160.conf new file mode 100644 index 0000000000..0a878369cb --- /dev/null +++ b/regress/conf/b9f0ce1976ec62ec60dc5da7dd92c160.conf @@ -0,0 +1,84 @@ +# none of these attempts worked, to bind keys, except sometimes during the sesssion. Oh well. +# I thought maybe that was because F1 is handled differently in a console than in X, but +# even just C-1 didnt work. Using just "a" or "x" as the key did, but not yet sure why not "C-". +#bind-key -T root C-1 attach-session -t$0 +#But this one works now, only picks the wrong one? Mbe need2understand what "$1" or $0 mean, better, +#but with the stub maybe this doesn't matter: +bind-key "`" switch-client -t$1 + +new-session #$0, stub, for keystroke convenience + +#$1 for root +new-session #a stub I guess, where keyboard convenience is concerned +new-window +send-keys -l pgup +send-keys Enter +send-keys -l "less /root/.tmux.conf &" +send-keys -l "echo; echo; echo Put something here for ssa or just run manly?" +send-keys Enter +new-window +new-window +new-window sul #for lcall, like man pages +send-keys -l "man tmux&" +send-keys Enter +select-window -t :=1 + +#$2 for om, so, can do C-b C-s 2 to get to the session, then C-b <#s> to get ~"tabs" +new-session sula ; send-keys -l q #0 +send-keys Enter Escape Escape +new-window sula ; send-keys -l q #1 +send-keys Enter Escape Escape +new-window sula ; send-keys -l q #2 +send-keys Enter Escape Enter Enter +new-window sula ; send-keys q #3, to start: +send-keys Enter Escape +# %%need a sleep here & .. ? +send-keys Enter Enter Enter Enter +new-window sula ; send-keys -l q #4 +send-keys Enter Escape Escape +new-window sula +new-window sula +new-window sula +new-window sula +new-window sula +select-window -t :=2 +select-window -t :=3 + +#$3 for email (mutt) +new-session sula +new-window sula ; send-keys mutt Enter +#nah, probly betr not?: +#send-keys -l z +#send-keys -l "thepassifdecide" +#send-keys Enter +new-window sula ; send-keys mutt Enter +send-keys -l "c!=sent" +send-keys Enter +new-window sula ; send-keys -l "cd mail/config; less mailsig.txt&" +send-keys Enter +send-keys "less macros&" +send-keys Enter +select-window -t :=1 + +#$4 for lacall-net: links etc +new-session suln +new-window suln +#send-keys -l "lkslfx" #; et; links ksl.com" +#send-keys asdafdfadfadfadfadf +#%%does opening links break subsequent cmds? With this Enter, the switch-client etc dont work: +#send-keys Enter +#send-keys Space Space Space +new-window suln +new-window suln +select-window -t :=1 +#send-keys Space Space Space + +#$5 for lacall-secnet, links?: +#new-session sulsn + +# then, where to start: +#%%need a sleep here, or ck a debug thing? +switch-client -t"$0" +send-keys -l "sleep 2" +send-keys Enter +switch-client -t$2 From 282f7fbd37a3684f8444be7bca29b159d439bd88 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 22 May 2019 13:31:20 +0100 Subject: [PATCH 547/836] Add a test config. --- .../dfd579a114a8366b5a665c264e29c084.conf | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 regress/conf/dfd579a114a8366b5a665c264e29c084.conf diff --git a/regress/conf/dfd579a114a8366b5a665c264e29c084.conf b/regress/conf/dfd579a114a8366b5a665c264e29c084.conf new file mode 100644 index 0000000000..7ad12c953a --- /dev/null +++ b/regress/conf/dfd579a114a8366b5a665c264e29c084.conf @@ -0,0 +1,52 @@ +set -as terminal-overrides '\e\r\n\t\u12ab\U000012ab' +set -as terminal-overrides "\e\r\n\t\u12ab\U000012ab" + +# format #{abc #{def}} +# abc + +set -g status-left \ +"\u007c \ +abc" + +%if #{TMUX} +set -g status-bg red +%endif + +X=1 +Y=2 set -g status-bg blue; Z=3 set -g status-bg magenta + +set -g status-left "~/abcdef"$HOME # abcdef + +%if #{l:1} set -g status-bg red %endif + +%if #{l:0} +X=1 +%elif #{l:1} +Y=1 +%if #{l:0} +Y=2 +%else +Y=3 +%endif +%endif + +bind x display-message \"hello\" + +bind c neww -c ~ +bind ';' lsk + +set -g status-left "a""b" +set -g status-left ~ + +set -g status-left 'a $HOME b ~ c \e\e\e' +set -g status-left "a $HOME b ~ c \e\e\e" + +set -s command-alias[99] "foo=lsk;neww" +bind-key -n C-s if-shell 'true' 'display-message hello' + +set -g status-left-style \ +bg=red +set -g status-left \\\ +abc + +set -g status-left 'xyz' ; %if #{l:1} set -g status-bg red %endif ; bind x lsk From e353d0cab33461614987a5642bfe10d519a76184 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 22 May 2019 19:49:48 +0100 Subject: [PATCH 548/836] Another config. --- .../a46e6e84cd1071105aa807256dbc158d.conf | 432 ++++++++++++++++++ 1 file changed, 432 insertions(+) create mode 100644 regress/conf/a46e6e84cd1071105aa807256dbc158d.conf diff --git a/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf b/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf new file mode 100644 index 0000000000..bfbb2d3e78 --- /dev/null +++ b/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf @@ -0,0 +1,432 @@ +# Dynamic configuration file generated by ~/Makefile from /home/sunny/.tmux.conf.erb +# +# DO NOT EDIT THIS FILE BY HAND -- +# YOUR CHANGES WILL BE OVERWRITTEN +# + + + +bind-key R source ~/.tmux.conf \; display-message 'config reloaded!' + +#----------------------------------------------------------------------------- +# terminal +#----------------------------------------------------------------------------- + +# enable mouse support for general selection and control +set-option -g mouse on + +# auto-set terminal title to current window pane's title +set-option -g set-titles on + +# enable 256-color support for pretty colorschemes in Vim +set-option -g default-terminal 'screen-256color' + +# allow Vim to receive focus events from terminal window +set-option -g focus-events on + +# allow Vim to recieve modifier keys: Shift, Control, Alt +set-window-option -g xterm-keys on + +# prevent tmux from catching modifier keys meant for Vim +set-option -s escape-time 0 + +# enable 24-bit true color RGB escape sequences under st +# https://sunaku.github.io/tmux-24bit-color.html +set-option -ga terminal-overrides ',st-256color:Tc' +set-option -ga terminal-overrides ',xterm-256color:Tc' # hterm (ChromeOS) + +# allow set-titles to change the window title under XTerm +# http://opennomad.com/content/goodbye-screen-hello-tmux +set-option -ga terminal-overrides ',xterm*:XT' + +# allow set-titles to change the window title under XTerm +# http://opennomad.com/content/goodbye-screen-hello-tmux +# http://stackoverflow.com/questions/15195624 +set-option -ga terminal-overrides ',st-256color:smkx=\E=' + +# yank to system clipboard rather than primary selection +# http://invisible-island.net/xterm/terminfo-contents.html#tic-xterm_tmux +set-option -ga terminal-overrides ',xterm*:Ms=\E]52;c;%p2%s\007' + +# KiTTY always appends to clipboard; must clear it first +# https://sw.kovidgoyal.net/kitty/protocol-extensions.html#pasting-to-clipboard +set-option -ga terminal-overrides ',xterm-kitty:Ms=\E]52;c;!\007\E]52;c;%p2%s\007' + +# prevent standout from appearing as italics under URxvt +# http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/1927 +set-option -ga terminal-overrides ',rxvt-unicode*:sitm@' + +#----------------------------------------------------------------------------- +# appearance +#----------------------------------------------------------------------------- + +# Colors from the "lucius" and "gruvbox" themes in the vim-airline plugin: +# https://github.com/bling/vim-airline/blob/master/autoload/airline/themes/lucius.vim +# https://github.com/morhetz/gruvbox/blob/master/autoload/airline/themes/gruvbox.vim + +set-option -g status-style fg=colour246,bg=colour237 +set-window-option -g window-status-current-style fg=colour214,bg=colour239 +set-option -g pane-border-style fg=colour239 +set-option -g pane-active-border-style fg=colour208 +set-option -g message-style fg=colour214,bg=colour239 +set-window-option -g mode-style fg=colour214,bg=colour239,bold,reverse + +# Common UI interaction cues from Blueprint CSS: +# http://blueprintcss.org/tests/parts/forms.html +set-window-option -g window-status-bell-style 'bg=#205791,fg=#d5edf8' # info (blue) +set-window-option -g window-status-activity-style 'bg=#8a1f11,fg=#fbe3e4' # error (red) + +#----------------------------------------------------------------------------- +# status bar +#----------------------------------------------------------------------------- + +# toggle status bar visibility +bind-key -n M-` set-option -g status + +# toggle status bar position +bind-key -n M-~ \ + if-shell 'tmux show-option -g status-position | grep -q top$' \ + 'set-option -g status-position bottom' \ + 'set-option -g status-position top' + +# put status bar at the top of the screen +set-option -g status-position top + +# list windows on left side of status bar +set-option -g status-left-length 0 + +# make window list easier to scan +set-window-option -g window-status-format ' #[bold]#I#F#[nobold]#W ' +set-window-option -g window-status-current-format ' #[bold]#I#F#[nobold]#W ' +set-window-option -g window-status-separator '' + +# show pane title, pane identifier, and hostname on right side of status bar +set-option -g status-right-length 64 +set-option -g status-right '#{=32:pane_title} \ +#[fg=colour214,bg=colour239] #S:#I.#P \ +#(test -n "$SSH_TTY" && echo "#[fg=colour214,bg=colour239,bold,reverse] #H ")' + +#----------------------------------------------------------------------------- +# windows +#----------------------------------------------------------------------------- + +# create window +bind-key -n M-e new-window + +# rename window +bind-key -n M-E command-prompt -I '#W' 'rename-window "%%%"' + +set-window-option -g automatic-rename off + + +# break off pane to a new window +bind-key -n M-x \ + command-prompt -p 'break-pane:' -I '#W' \ + 'break-pane ; rename-window "%%%"' +bind-key -n M-X break-pane + +# focus window +bind-key -n M-, previous-window +bind-key -n M-. next-window +bind-key -n M-o last-window + +# focus by number +set-option -g base-index 1 +set-window-option -g pane-base-index 1 +set-option -g renumber-windows on +bind-key -n M-0 choose-window +bind-key -n M-1 select-window -t :1 +bind-key -n M-2 select-window -t :2 +bind-key -n M-3 select-window -t :3 +bind-key -n M-4 select-window -t :4 +bind-key -n M-5 select-window -t :5 +bind-key -n M-6 select-window -t :6 +bind-key -n M-7 select-window -t :7 +bind-key -n M-8 select-window -t :8 +bind-key -n M-9 select-window -t :1 \; select-window -t :-1 + +# swap window +bind-key -n M-< swap-window -t :-1 +bind-key -n M-> swap-window -t :+1 + +# monitor window +set-option -g visual-activity on +set-option -g visual-silence on + + +bind-key -n M-k \ + set-window-option monitor-activity \;\ + display-message 'monitor-activity #{?monitor-activity,on,off}' + +bind-key -n M-K \ + if-shell 'tmux show-window-option -g monitor-activity | grep -q off$' \ + 'set-window-option -g monitor-activity on' \ + 'set-window-option -g monitor-activity off' \;\ + display-message 'monitor-activity #{?monitor-activity,on,off} (global)' + +bind-key -n M-j \ + command-prompt -p 'monitor-silence (seconds):' -I '#{monitor-silence}' \ + 'set-window-option monitor-silence %% ;\ + display-message "monitor-silence #{?monitor-silence,on,off}"' + +#----------------------------------------------------------------------------- +# panes +#----------------------------------------------------------------------------- + +# send input to all panes in window (toggle) +bind-key C-a \ + set-option synchronize-panes \;\ + display-message 'synchronize-panes #{?synchronize-panes,on,off}' + +# clear the screen in all panes in window +bind-key C-l \ + set-option synchronize-panes on \;\ + send-keys C-l \;\ + set-option synchronize-panes off + +# create pane (below, above, left, right) +bind-key -n M-c split-window -c '#{pane_current_path}' +bind-key -n M-C split-window -c '#{pane_current_path}' -b +bind-key -n M-R split-window -c '#{pane_current_path}' -b -h +bind-key -n M-r split-window -c '#{pane_current_path}' -h + +# join pane (above, left, below, right) +bind-key -n M-g move-pane -t .-1 -s . # join pane at bottom of prev pane +bind-key -n M-l move-pane -t .-1 -s . -h # join pane at right of prev pane +bind-key -n M-G move-pane -d -s .+1 -t . # join next pane at bottom +bind-key -n M-L move-pane -d -s .+1 -t . -h # join next pane at right + +# Intelligently navigate tmux panes and Vim splits using the same keys. +# See https://sunaku.github.io/tmux-select-pane.html for documentation. +# +# +-------------+------------+-----------------------------+ +# | inside Vim? | is Zoomed? | Action taken by key binding | +# +-------------+------------+-----------------------------+ +# | No | No | Focus directional tmux pane | +# | No | Yes | Nothing: ignore key binding | +# | Yes | No | Seamlessly focus Vim / tmux | +# | Yes | Yes | Focus directional Vim split | +# +-------------+------------+-----------------------------+ +# +vim_navigation_timeout=0.05 # number of seconds we give Vim to navigate +navigate=' \ + pane_is_zoomed() { \ + test #{window_zoomed_flag} -eq 1; \ + }; \ + pane_title_changed() { \ + test "#{pane_title}" != "$(tmux display -p "##{pane_title}")"; \ + }; \ + command_is_vim() { \ + case "${1%% *}" in \ + (vi|?vi|vim*|?vim*|view|?view|vi??*) true ;; \ + (*) false ;; \ + esac; \ + }; \ + pane_contains_vim() { \ + case "#{=3:pane_current_command}" in \ + (git|ssh|sh) command_is_vim "#{=5:pane_title}" ;; \ + (*) command_is_vim "#{=5:pane_current_command}" ;; \ + esac; \ + }; \ + pane_contains_neovim_terminal() { \ + test "#{=12:pane_title}" = "nvim term://"; \ + }; \ + navigate() { \ + tmux_navigation_command=$1; \ + vim_navigation_command=$2; \ + vim_navigation_only_if=${3:-true}; \ + if pane_contains_vim && eval "$vim_navigation_only_if"; then \ + if pane_contains_neovim_terminal; then \ + tmux send-keys C-\\ C-n; \ + fi; \ + eval "$vim_navigation_command"; \ + if ! pane_is_zoomed; then \ + sleep $vim_navigation_timeout; : wait for Vim to change title; \ + if ! pane_title_changed; then \ + eval "$tmux_navigation_command"; \ + fi; \ + fi; \ + elif ! pane_is_zoomed; then \ + eval "$tmux_navigation_command"; \ + fi; \ + }; \ +navigate ' +navigate_left=" $navigate 'tmux select-pane -L' 'tmux send-keys C-w h'" +navigate_down=" $navigate 'tmux select-pane -D' 'tmux send-keys C-w j'" +navigate_up=" $navigate 'tmux select-pane -U' 'tmux send-keys C-w k'" +navigate_right="$navigate 'tmux select-pane -R' 'tmux send-keys C-w l'" +navigate_back=" $navigate 'tmux select-pane -l || tmux select-pane -t1'\ + 'tmux send-keys C-w p' \ + 'pane_is_zoomed' " + +## QWERTY keys - comment these out if you don't use QWERTY layout! +#bind-key -n M-h run-shell -b "$navigate_left" +#bind-key -n M-j run-shell -b "$navigate_down" +#bind-key -n M-k run-shell -b "$navigate_up" +#bind-key -n M-l run-shell -b "$navigate_right" +#bind-key -n M-\ run-shell -b "$navigate_back" + +# Dvorak keys - comment these out if you don't use Dvorak layout! +bind-key -n M-d run-shell -b "$navigate_back" +bind-key -n M-h run-shell -b "$navigate_left" +bind-key -n M-t run-shell -b "$navigate_up" +bind-key -n M-n run-shell -b "$navigate_down" +bind-key -n M-s run-shell -b "$navigate_right" + +# resize pane +bind-key -r H resize-pane -L 5 +bind-key -r T resize-pane -U 5 +bind-key -r N resize-pane -D 5 +bind-key -r S resize-pane -R 5 + +# zoom pane +bind-key -n M-m resize-pane -Z + +# swap pane +bind-key -n M-- swap-pane -D +bind-key -n M-_ swap-pane -U +bind-key -n M-D run-shell 'tmux select-pane -l \; swap-pane -d -s #D' +bind-key -n M-H run-shell 'tmux select-pane -L \; swap-pane -d -s #D' +bind-key -n M-T run-shell 'tmux select-pane -U \; swap-pane -d -s #D' +bind-key -n M-N run-shell 'tmux select-pane -D \; swap-pane -d -s #D' +bind-key -n M-S run-shell 'tmux select-pane -R \; swap-pane -d -s #D' + +# attach by number +bind-key -n 'M-!' join-pane -t :1 +bind-key -n 'M-@' join-pane -t :2 +bind-key -n 'M-#' join-pane -t :3 +bind-key -n 'M-$' join-pane -t :4 +bind-key -n 'M-%' join-pane -t :5 +bind-key -n 'M-^' join-pane -t :6 +bind-key -n 'M-&' join-pane -t :7 +bind-key -n 'M-*' join-pane -t :8 +bind-key -n 'M-(' run-shell 'tmux select-window -t :1 \;\ + select-window -t :-1 \;\ + join-pane -s "#{pane_id}"' +bind-key -n 'M-)' choose-window 'join-pane -t "%%%"' + +# promote pane (toggle) +bind-key -n M-Enter \ + if-shell 'test #P -ne 1' \ + 'select-pane -t 1' \ + 'last-pane; swap-pane -s 1' + +# rotate panes +bind-key -n M-a rotate-window -D +bind-key -n M-A rotate-window -U + +#----------------------------------------------------------------------------- +# layouts +#----------------------------------------------------------------------------- + +bind-key M-w select-layout main-horizontal +bind-key M-W select-layout even-vertical +bind-key M-v select-layout main-vertical +bind-key M-V select-layout even-horizontal +bind-key M-z select-layout tiled + +# half-screen tiling layouts (horizontal, vertical) +# https://sunaku.github.io/tmux-half-screen-tiling-layouts.html +bind-key -n M-w select-layout main-horizontal \;\ + run-shell 'tmux resize-pane -t 1 -y $(( #{window_height} / 2 ))' +bind-key -n M-v select-layout main-vertical \;\ + run-shell 'tmux resize-pane -t 1 -x $(( #{window_width} / 2 ))' + +# binary space partitioned layouts (dwindle, spiral) +# https://sunaku.github.io/tmux-layout-dwindle.html +bind-key -n M-w run-shell 'tmux-layout-dwindle brhc && tmux-redraw-vim' +bind-key -n M-W run-shell 'tmux-layout-dwindle trhc && tmux-redraw-vim' +bind-key -n M-v run-shell 'tmux-layout-dwindle brvc && tmux-redraw-vim' +bind-key -n M-V run-shell 'tmux-layout-dwindle blvc && tmux-redraw-vim' +bind-key -n M-z select-layout tiled + +#----------------------------------------------------------------------------- +# scrollback buffer +#----------------------------------------------------------------------------- + +# buffer length +set-option -g history-limit 32767 + +# search buffer using copy mode +bind-key -n M-/ copy-mode \;\ + command-prompt -p 'search-backward (press up):' \ + -i 'send-keys -X search-backward-incremental "%%%"' + +# search buffer using Vim or less +bind-key -n M-| \ + capture-pane -J -S - \; \ + new-window -n '#S:#I.#P' -a ' \ + tmux save-buffer - \; delete-buffer | { \ + if command -v vim; \ + then vim -R -c "set nofen is hls ic" -; \ + else less; \ + fi; \ + }; \ + ' \; \ + run-shell 'tmux send-keys G \?' + +# search colored buffer using less +bind-key -n M-? \ + capture-pane -e -J -S - \; \ + new-window -n '#S:#I.#P' -a ' \ + tmux save-buffer - \; delete-buffer | \ + less -R \ + ' \; \ + run-shell 'tmux send-keys G \?' + +# scroll buffer +# NOTE: set "URxvt.saveLines: 0" in ~/.Xdefaults to make Shift+PageUp bindable +# NOTE: see http://aperiodic.net/screen/interface for doing the same in XTerm +bind-key -n S-PPage copy-mode -u + +# copy text from buffer +bind-key -n M-u copy-mode +set-window-option -g mode-keys vi +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi y send-keys -X copy-selection +bind-key -T copy-mode-vi - send-keys -X jump-again +bind-key -T copy-mode-vi _ send-keys -X jump-reverse +bind-key -T copy-mode-vi ? command-prompt -p 'search-backward:' -I '#{pane_search_string}' -i 'send-keys -X search-backward-incremental "%%%"' +bind-key -T copy-mode-vi / command-prompt -p 'search-forward:' -I '#{pane_search_string}' -i 'send-keys -X search-forward-incremental "%%%"' + +# transfer copied text to attached terminal with yank: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -T copy-mode-vi Y send-keys -X copy-pipe 'yank > #{pane_tty}' +# open the visual selection with xdg-open(1) +bind-key -T copy-mode-vi O send-keys -X copy-pipe 'xargs -r xdg-open' + +# paste most-recently copied text +bind-key -n M-i paste-buffer + +# paste previously copied text (chosen from a menu) +bind-key -n M-I choose-buffer + +# transfer most-recently copied text to attached terminal with yank: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -n M-y run-shell 'tmux save-buffer - | yank > #{pane_tty}' + +# transfer previously copied text (chosen from a menu) to attached terminal: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -n M-Y choose-buffer 'run-shell "tmux save-buffer -b \"%%%\" - | yank > #{pane_tty}"' + +#----------------------------------------------------------------------------- +# TMUX plugin manager https://github.com/tmux-plugins/tpm +#----------------------------------------------------------------------------- + +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @resurrect-capture-pane-contents on + +set -g @plugin 'Morantron/tmux-fingers' +set -g @fingers-key '-n M-U' +set -g @fingers-compact-hints 1 +set -g @fingers-hint-format '#[fg=yellow,bold,reverse]%s' +set -g @fingers-hint-labels ' \ + a o e u i d h t n s \ + p y f g c r l \ + q j k x b m w v z \ + A O E U I D H T N S \ + P Y F G C R L \ + Q J K X B M W V Z \ +' + +run-shell ~/.tmux/plugins/tpm/tpm From 5571d7a21c5dc920eb9d25336b5bb7b04d72fc9d Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 22 May 2019 18:58:31 +0000 Subject: [PATCH 549/836] Fix crash if window doesn't exist, GitHub issue 1751. --- cmd-show-options.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 1e1518f696..2b4651b92f 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -91,7 +91,14 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) window = (self->entry == &cmd_show_window_options_entry); if (args->argc == 0) { - options_scope_from_flags(args, window, fs, &oo, &cause); + scope = options_scope_from_flags(args, window, fs, &oo, &cause); + if (scope == OPTIONS_TABLE_NONE) { + if (args_has(args, 'q')) + return (CMD_RETURN_NORMAL); + cmdq_error(item, "%s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } return (cmd_show_options_all(self, item, oo)); } argument = format_single(item, args->argv[0], c, s, wl, NULL); From 7ca2e2fe88cd282d3e8faea3f2000ad15972f71d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 11:20:24 +0100 Subject: [PATCH 550/836] Add a config. --- .../29813ff35544434e2e64dc879a8dd274.conf | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 regress/conf/29813ff35544434e2e64dc879a8dd274.conf diff --git a/regress/conf/29813ff35544434e2e64dc879a8dd274.conf b/regress/conf/29813ff35544434e2e64dc879a8dd274.conf new file mode 100644 index 0000000000..d0bda4a2ce --- /dev/null +++ b/regress/conf/29813ff35544434e2e64dc879a8dd274.conf @@ -0,0 +1,58 @@ +set -g prefix C-g +# needed for e.g. mutt +bind C-g send-prefix + +set -g set-titles on +set -g status-position top +set -g status-keys vi +set -g mode-keys vi +set -g base-index 1 +set -g pane-base-index 1 +set -g focus-events on + +set history-file ~/.tmux_SSH_history +set focus-events on +set -g history-limit 100000 +set -s set-clipboard on +set -g display-time 3000 +set -g display-panes-time 3000 + +set -g pane-border-status top + +setw -g window-status-current-style bg=colour240,fg=colour250 +setw -g window-status-separator "|" +set -g status-bg colour235 +set -g status-fg colour245 + +set -g window-status-format " #I #{=+15:pane_title} #{=-2:?window_flags, #{window_flags}, }" +set -g window-status-current-format " #I #{=+15:pane_title} #{=-2:?window_flags, #{window_flags}, }" +set -g pane-border-format " #P: #{s/ //:pane_title} " + +set -g renumber-windows on +set -g status-right-length 0 +############################################################## + +# I prefer not to have a status for my tabbed term +set -g status-right "" +set -g status-right-length 0 +set -g status-left-length 0 +set -g status-left "" + +# some settings for "navigation" +bind -n C-PageUp copy-mode -u +unbind -n C-Left +unbind -n C-Right +bind -n C-Left select-window -t :- +bind -n C-Right select-window -t :+ + +# I prefer a tiled layout and easy joining of current active pane via windows' +# index +bind F1 join-pane -s 1.\; select-layout tiled +bind F2 join-pane -s 2.\; select-layout tiled +bind F3 join-pane -s 3.\; select-layout tiled +bind F4 join-pane -s 4.\; select-layout tiled +bind F5 join-pane -s 5.\; select-layout tiled +bind F6 join-pane -s 6.\; select-layout tiled +bind F7 join-pane -s 7.\; select-layout tiled +bind F8 join-pane -s 8.\; select-layout tiled +bind F9 join-pane -s 9.\; select-layout tiled From 723010ba72e337832402f8e44981c02caa30b476 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 11:13:30 +0000 Subject: [PATCH 551/836] Replace the split parser code (cfg.c and cmd-string.c) with a single parser using yacc(1). This is a major change but is clearer and simpler and allows some edge cases to be made more consistent, as well as tidying up how aliases are handled. It will also allow some further improvements later. Entirely the same parser is now used for parsing the configuration file and for string commands. This means that constructs previously only available in .tmux.conf, such as %if, can now be used in string commands (for example, those given to if-shell - not commands invoked from the shell, they are still parsed by the shell itself). The only syntax change I am aware of is that #{} outside quotes or a comment is now considered a format and not a comment, so #{ is now a syntax error (notably, if it is at the start of a line). This also adds two new sections to the man page documenting the syntax and outlining how parsing and command execution works. Thanks to everyone who sent me test configs (they still all parse without errors - but this doesn't mean they still work as intended!). Thanks to Avi Halachmi for testing and man page improvements, also to jmc@ for reviewing the man page changes. --- Makefile | 2 +- cfg.c | 238 ++------- cmd-command-prompt.c | 32 +- cmd-confirm-before.c | 33 +- cmd-display-panes.c | 35 +- cmd-if-shell.c | 91 ++-- cmd-list.c | 28 +- cmd-parse.y | 1207 ++++++++++++++++++++++++++++++++++++++++++ cmd-queue.c | 14 +- cmd-source-file.c | 10 +- cmd-string.c | 393 -------------- cmd.c | 188 ++++--- control.c | 22 +- key-bindings.c | 13 +- menu.c | 35 +- mode-tree.c | 27 +- options.c | 19 +- tmux.1 | 268 ++++++++-- tmux.h | 64 ++- 19 files changed, 1820 insertions(+), 899 deletions(-) create mode 100644 cmd-parse.y delete mode 100644 cmd-string.c diff --git a/Makefile b/Makefile index 90ecbd848c..b15da7bebb 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,7 @@ SRCS= alerts.c \ cmd-move-window.c \ cmd-new-session.c \ cmd-new-window.c \ + cmd-parse.y \ cmd-paste-buffer.c \ cmd-pipe-pane.c \ cmd-queue.c \ @@ -63,7 +64,6 @@ SRCS= alerts.c \ cmd-show-options.c \ cmd-source-file.c \ cmd-split-window.c \ - cmd-string.c \ cmd-swap-pane.c \ cmd-swap-window.c \ cmd-switch-client.c \ diff --git a/cfg.c b/cfg.c index 0b74ec35da..aa5c13b72f 100644 --- a/cfg.c +++ b/cfg.c @@ -27,17 +27,6 @@ #include "tmux.h" -/* Condition for %if, %elif, %else and %endif. */ -struct cfg_cond { - size_t line; /* line number of %if */ - int met; /* condition was met */ - int skip; /* skip later %elif/%else */ - int saw_else; /* saw a %else */ - - TAILQ_ENTRY(cfg_cond) entry; -}; -TAILQ_HEAD(cfg_conds, cfg_cond); - struct client *cfg_client; static char *cfg_file; int cfg_finished; @@ -86,9 +75,8 @@ start_cfg(void) struct client *c; /* - * Configuration files are loaded without a client, so NULL is passed - * into load_cfg() and commands run in the global queue with - * item->client NULL. + * Configuration files are loaded without a client, so commands are run + * in the global queue with item->client NULL. * * However, we must block the initial client (but just the initial * client) so that its command runs after the configuration is loaded. @@ -103,11 +91,11 @@ start_cfg(void) } if (cfg_file == NULL) - load_cfg(TMUX_CONF, NULL, NULL, CFG_QUIET, NULL); + load_cfg(TMUX_CONF, NULL, NULL, CMD_PARSE_QUIET, NULL); if (cfg_file == NULL && (home = find_home()) != NULL) { xasprintf(&cfg_file, "%s/.tmux.conf", home); - flags = CFG_QUIET; + flags = CMD_PARSE_QUIET; } if (cfg_file != NULL) load_cfg(cfg_file, NULL, NULL, flags, NULL); @@ -115,214 +103,54 @@ start_cfg(void) cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL)); } -static int -cfg_check_cond(const char *path, size_t line, const char *p, int *skip, - struct client *c, struct cmd_find_state *fs) -{ - struct format_tree *ft; - char *s; - int result; - - while (isspace((u_char)*p)) - p++; - if (p[0] == '\0') { - cfg_add_cause("%s:%zu: invalid condition", path, line); - *skip = 1; - return (0); - } - - ft = format_create(NULL, NULL, FORMAT_NONE, FORMAT_NOJOBS); - if (fs != NULL) - format_defaults(ft, c, fs->s, fs->wl, fs->wp); - else - format_defaults(ft, c, NULL, NULL, NULL); - s = format_expand(ft, p); - result = format_true(s); - free(s); - format_free(ft); - - *skip = result; - return (result); -} - -static void -cfg_handle_if(const char *path, size_t line, struct cfg_conds *conds, - const char *p, struct client *c, struct cmd_find_state *fs) -{ - struct cfg_cond *cond; - struct cfg_cond *parent = TAILQ_FIRST(conds); - - /* - * Add a new condition. If a previous condition exists and isn't - * currently met, this new one also can't be met. - */ - cond = xcalloc(1, sizeof *cond); - cond->line = line; - if (parent == NULL || parent->met) - cond->met = cfg_check_cond(path, line, p, &cond->skip, c, fs); - else - cond->skip = 1; - cond->saw_else = 0; - TAILQ_INSERT_HEAD(conds, cond, entry); -} - -static void -cfg_handle_elif(const char *path, size_t line, struct cfg_conds *conds, - const char *p, struct client *c, struct cmd_find_state *fs) -{ - struct cfg_cond *cond = TAILQ_FIRST(conds); - - /* - * If a previous condition exists and wasn't met, check this - * one instead and change the state. - */ - if (cond == NULL || cond->saw_else) - cfg_add_cause("%s:%zu: unexpected %%elif", path, line); - else if (!cond->skip) - cond->met = cfg_check_cond(path, line, p, &cond->skip, c, fs); - else - cond->met = 0; -} - -static void -cfg_handle_else(const char *path, size_t line, struct cfg_conds *conds) -{ - struct cfg_cond *cond = TAILQ_FIRST(conds); - - /* - * If a previous condition exists and wasn't met and wasn't already - * %else, use this one instead. - */ - if (cond == NULL || cond->saw_else) { - cfg_add_cause("%s:%zu: unexpected %%else", path, line); - return; - } - cond->saw_else = 1; - cond->met = !cond->skip; - cond->skip = 1; -} - -static void -cfg_handle_endif(const char *path, size_t line, struct cfg_conds *conds) -{ - struct cfg_cond *cond = TAILQ_FIRST(conds); - - /* - * Remove previous condition if one exists. - */ - if (cond == NULL) { - cfg_add_cause("%s:%zu: unexpected %%endif", path, line); - return; - } - TAILQ_REMOVE(conds, cond, entry); - free(cond); -} - -static void -cfg_handle_directive(const char *p, const char *path, size_t line, - struct cfg_conds *conds, struct client *c, struct cmd_find_state *fs) -{ - int n = 0; - - while (p[n] != '\0' && !isspace((u_char)p[n])) - n++; - if (strncmp(p, "%if", n) == 0) - cfg_handle_if(path, line, conds, p + n, c, fs); - else if (strncmp(p, "%elif", n) == 0) - cfg_handle_elif(path, line, conds, p + n, c, fs); - else if (strcmp(p, "%else") == 0) - cfg_handle_else(path, line, conds); - else if (strcmp(p, "%endif") == 0) - cfg_handle_endif(path, line, conds); - else - cfg_add_cause("%s:%zu: invalid directive: %s", path, line, p); -} - int load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, struct cmdq_item **new_item) { FILE *f; - const char delim[3] = { '\\', '\\', '\0' }; - u_int found = 0; - size_t line = 0; - char *buf, *cause1, *p, *q; - struct cmd_list *cmdlist; + struct cmd_parse_input pi; + struct cmd_parse_result *pr; struct cmdq_item *new_item0; - struct cfg_cond *cond, *cond1; - struct cfg_conds conds; - struct cmd_find_state *fs = NULL; - struct client *fc = NULL; - - if (item != NULL) { - fs = &item->target; - fc = cmd_find_client(item, NULL, 1); - } - TAILQ_INIT(&conds); + if (new_item != NULL) + *new_item = NULL; log_debug("loading %s", path); if ((f = fopen(path, "rb")) == NULL) { - if (errno == ENOENT && (flags & CFG_QUIET)) + if (errno == ENOENT && (flags & CMD_PARSE_QUIET)) return (0); cfg_add_cause("%s: %s", path, strerror(errno)); return (-1); } - while ((buf = fparseln(f, NULL, &line, delim, 0)) != NULL) { - log_debug("%s: %s", path, buf); - - p = buf; - while (isspace((u_char)*p)) - p++; - if (*p == '\0') { - free(buf); - continue; - } - q = p + strlen(p) - 1; - while (q != p && isspace((u_char)*q)) - *q-- = '\0'; - - if (*p == '%') { - cfg_handle_directive(p, path, line, &conds, fc, fs); - continue; - } - cond = TAILQ_FIRST(&conds); - if (cond != NULL && !cond->met) - continue; - - cmdlist = cmd_string_parse(p, path, line, &cause1); - if (cmdlist == NULL) { - free(buf); - if (cause1 == NULL) - continue; - cfg_add_cause("%s:%zu: %s", path, line, cause1); - free(cause1); - continue; - } - free(buf); - - new_item0 = cmdq_get_command(cmdlist, NULL, NULL, 0); - if (item != NULL) { - cmdq_insert_after(item, new_item0); - item = new_item0; - } else - cmdq_append(c, new_item0); - cmd_list_free(cmdlist); - - found++; - } - fclose(f); + memset(&pi, 0, sizeof pi); + pi.flags = flags; + pi.file = path; - TAILQ_FOREACH_REVERSE_SAFE(cond, &conds, cfg_conds, entry, cond1) { - cfg_add_cause("%s:%zu: unterminated %%if", path, cond->line); - TAILQ_REMOVE(&conds, cond, entry); - free(cond); + pr = cmd_parse_from_file(f, &pi); + fclose(f); + if (pr->status == CMD_PARSE_EMPTY) + return (0); + if (pr->status == CMD_PARSE_ERROR) { + cfg_add_cause("%s", pr->error); + free(pr->error); + return (-1); + } + if (flags & CMD_PARSE_PARSEONLY) { + cmd_list_free(pr->cmdlist); + return (0); } + new_item0 = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + if (item != NULL) + cmdq_insert_after(item, new_item0); + else + cmdq_append(c, new_item0); + cmd_list_free(pr->cmdlist); + if (new_item != NULL) - *new_item = item; - return (found); + *new_item = new_item0; + return (0); } void diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index a3cc22c8d3..603ddb0a0e 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -134,10 +134,10 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s, int done) { struct cmd_command_prompt_cdata *cdata = data; - struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *cause, *new_template, *prompt, *ptr; + char *new_template, *prompt, *ptr; char *input = NULL; + struct cmd_parse_result *pr; if (s == NULL) return (0); @@ -164,20 +164,22 @@ cmd_command_prompt_callback(struct client *c, void *data, const char *s, return (1); } - cmdlist = cmd_string_parse(new_template, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) - new_item = cmdq_get_error(cause); - else - new_item = NULL; - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - cmd_list_free(cmdlist); - } - - if (new_item != NULL) + pr = cmd_parse_from_string(new_template, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + new_item = NULL; + break; + case CMD_PARSE_ERROR: + new_item = cmdq_get_error(pr->error); + free(pr->error); cmdq_append(c, new_item); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + cmd_list_free(pr->cmdlist); + cmdq_append(c, new_item); + break; + } if (!done) free(new_template); diff --git a/cmd-confirm-before.c b/cmd-confirm-before.c index 4017a6f9ec..be21a78bf7 100644 --- a/cmd-confirm-before.c +++ b/cmd-confirm-before.c @@ -87,32 +87,33 @@ cmd_confirm_before_callback(struct client *c, void *data, const char *s, __unused int done) { struct cmd_confirm_before_data *cdata = data; - struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *cause; + struct cmd_parse_result *pr; if (c->flags & CLIENT_DEAD) return (0); if (s == NULL || *s == '\0') return (0); - if (tolower((u_char) s[0]) != 'y' || s[1] != '\0') + if (tolower((u_char)s[0]) != 'y' || s[1] != '\0') return (0); - cmdlist = cmd_string_parse(cdata->cmd, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) - new_item = cmdq_get_error(cause); - else - new_item = NULL; - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - cmd_list_free(cmdlist); - } - - if (new_item != NULL) + pr = cmd_parse_from_string(cdata->cmd, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + new_item = NULL; + break; + case CMD_PARSE_ERROR: + new_item = cmdq_get_error(pr->error); + free(pr->error); cmdq_append(c, new_item); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + cmd_list_free(pr->cmdlist); + cmdq_append(c, new_item); + break; + } return (0); } diff --git a/cmd-display-panes.c b/cmd-display-panes.c index 6e331ae100..aeeb6936bc 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -197,11 +197,11 @@ static int cmd_display_panes_key(struct client *c, struct key_event *event) { struct cmd_display_panes_data *cdata = c->overlay_data; - struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *cmd, *expanded, *cause; + char *cmd, *expanded; struct window *w = c->session->curw->window; struct window_pane *wp; + struct cmd_parse_result *pr; if (event->key < '0' || event->key > '9') return (1); @@ -214,22 +214,21 @@ cmd_display_panes_key(struct client *c, struct key_event *event) xasprintf(&expanded, "%%%u", wp->id); cmd = cmd_template_replace(cdata->command, expanded, 1); - cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) - new_item = cmdq_get_error(cause); - else - new_item = NULL; - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - cmd_list_free(cmdlist); - } - if (new_item != NULL) { - if (cdata->item != NULL) - cmdq_insert_after(cdata->item, new_item); - else - cmdq_append(c, new_item); + pr = cmd_parse_from_string(cmd, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + new_item = NULL; + break; + case CMD_PARSE_ERROR: + new_item = cmdq_get_error(pr->error); + free(pr->error); + cmdq_append(c, new_item); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + cmd_list_free(pr->cmdlist); + cmdq_append(c, new_item); + break; } free(cmd); diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 480912dfb6..40e2b1c3a9 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -49,8 +49,7 @@ const struct cmd_entry cmd_if_shell_entry = { }; struct cmd_if_shell_data { - char *file; - u_int line; + struct cmd_parse_input input; char *cmd_if; char *cmd_else; @@ -64,51 +63,62 @@ static enum cmd_retval cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; - struct cmdq_shared *shared = item->shared; + struct mouse_event *m = &item->shared->mouse; struct cmd_if_shell_data *cdata; - char *shellcmd, *cmd, *cause; - struct cmd_list *cmdlist; + char *shellcmd, *cmd; struct cmdq_item *new_item; struct client *c = cmd_find_client(item, NULL, 1); struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct window_pane *wp = item->target.wp; + struct cmd_parse_input pi; + struct cmd_parse_result *pr; shellcmd = format_single(item, args->argv[0], c, s, wl, wp); if (args_has(args, 'F')) { - cmd = NULL; if (*shellcmd != '0' && *shellcmd != '\0') cmd = args->argv[1]; else if (args->argc == 3) cmd = args->argv[2]; + else + cmd = NULL; free(shellcmd); if (cmd == NULL) return (CMD_RETURN_NORMAL); - cmdlist = cmd_string_parse(cmd, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) { - cmdq_error(item, "%s", cause); - free(cause); - } + + memset(&pi, 0, sizeof pi); + if (self->file != NULL) + pi.file = self->file; + pi.line = self->line; + pi.item = item; + pi.c = c; + cmd_find_copy_state(&pi.fs, &item->target); + + pr = cmd_parse_from_string(cmd, &pi); + switch (pr->status) { + case CMD_PARSE_EMPTY: + break; + case CMD_PARSE_ERROR: + cmdq_error(item, "%s", pr->error); + free(pr->error); return (CMD_RETURN_ERROR); + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, m, 0); + cmdq_insert_after(item, new_item); + cmd_list_free(pr->cmdlist); + break; } - new_item = cmdq_get_command(cmdlist, NULL, &shared->mouse, 0); - cmdq_insert_after(item, new_item); - cmd_list_free(cmdlist); return (CMD_RETURN_NORMAL); } cdata = xcalloc(1, sizeof *cdata); - if (self->file != NULL) { - cdata->file = xstrdup(self->file); - cdata->line = self->line; - } cdata->cmd_if = xstrdup(args->argv[1]); if (args->argc == 3) cdata->cmd_else = xstrdup(args->argv[2]); else cdata->cmd_else = NULL; + memcpy(&cdata->mouse, m, sizeof cdata->mouse); cdata->client = item->client; if (cdata->client != NULL) @@ -118,7 +128,16 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->item = item; else cdata->item = NULL; - memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse); + + memset(&cdata->input, 0, sizeof cdata->input); + if (self->file != NULL) + cdata->input.file = xstrdup(self->file); + cdata->input.line = self->line; + cdata->input.item = cdata->item; + cdata->input.c = c; + if (cdata->input.c != NULL) + cdata->input.c->references++; + cmd_find_copy_state(&cdata->input.fs, &item->target); if (job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, cmd_if_shell_callback, cmd_if_shell_free, cdata, 0) == NULL) { @@ -139,11 +158,11 @@ cmd_if_shell_callback(struct job *job) { struct cmd_if_shell_data *cdata = job_get_data(job); struct client *c = cdata->client; - struct cmd_list *cmdlist; + struct mouse_event *m = &cdata->mouse; struct cmdq_item *new_item; - char *cause, *cmd, *file = cdata->file; - u_int line = cdata->line; + char *cmd; int status; + struct cmd_parse_result *pr; status = job_get_status(job); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) @@ -153,17 +172,20 @@ cmd_if_shell_callback(struct job *job) if (cmd == NULL) goto out; - cmdlist = cmd_string_parse(cmd, file, line, &cause); - if (cmdlist == NULL) { - if (cause != NULL && cdata->item != NULL) - cmdq_error(cdata->item, "%s", cause); - free(cause); + pr = cmd_parse_from_string(cmd, &cdata->input); + switch (pr->status) { + case CMD_PARSE_EMPTY: new_item = NULL; - } else { - new_item = cmdq_get_command(cmdlist, NULL, &cdata->mouse, 0); - cmd_list_free(cmdlist); + break; + case CMD_PARSE_ERROR: + new_item = cmdq_get_error(pr->error); + free(pr->error); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, m, 0); + cmd_list_free(pr->cmdlist); + break; } - if (new_item != NULL) { if (cdata->item == NULL) cmdq_append(c, new_item); @@ -187,6 +209,9 @@ cmd_if_shell_free(void *data) free(cdata->cmd_else); free(cdata->cmd_if); - free(cdata->file); + if (cdata->input.c != NULL) + server_client_unref(cdata->input.c); + free((void *)cdata->input.file); + free(cdata); } diff --git a/cmd-list.c b/cmd-list.c index 282533cf62..ead0fb6164 100644 --- a/cmd-list.c +++ b/cmd-list.c @@ -23,17 +23,39 @@ #include "tmux.h" -static struct cmd_list * +static u_int cmd_list_next_group = 1; + +struct cmd_list * cmd_list_new(void) { struct cmd_list *cmdlist; cmdlist = xcalloc(1, sizeof *cmdlist); cmdlist->references = 1; + cmdlist->group = cmd_list_next_group++; TAILQ_INIT(&cmdlist->list); return (cmdlist); } +void +cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) +{ + cmd->group = cmdlist->group; + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); +} + +void +cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) +{ + struct cmd *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { + TAILQ_REMOVE(&from->list, cmd, qentry); + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); + } + cmdlist->group = cmd_list_next_group++; +} + struct cmd_list * cmd_list_parse(int argc, char **argv, const char *file, u_int line, char **cause) @@ -100,9 +122,7 @@ cmd_list_free(struct cmd_list *cmdlist) TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { TAILQ_REMOVE(&cmdlist->list, cmd, qentry); - args_free(cmd->args); - free(cmd->file); - free(cmd); + cmd_free(cmd); } free(cmdlist); diff --git a/cmd-parse.y b/cmd-parse.y new file mode 100644 index 0000000000..8b8f33ab31 --- /dev/null +++ b/cmd-parse.y @@ -0,0 +1,1207 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +%{ + +#include + +#include +#include +#include +#include +#include + +#include "tmux.h" + +static int yylex(void); +static int yyparse(void); +static int printflike(1,2) yyerror(const char *, ...); + +static char *yylex_token(int); +static char *yylex_format(void); + +struct cmd_parse_scope { + int flag; + TAILQ_ENTRY (cmd_parse_scope) entry; +}; + +struct cmd_parse_command { + char *name; + u_int line; + + int argc; + char **argv; + + TAILQ_ENTRY(cmd_parse_command) entry; +}; +TAILQ_HEAD(cmd_parse_commands, cmd_parse_command); + +struct cmd_parse_state { + FILE *f; + int eof; + struct cmd_parse_input *input; + u_int escapes; + + char *error; + struct cmd_parse_commands commands; + + struct cmd_parse_scope *scope; + TAILQ_HEAD(, cmd_parse_scope) stack; +}; +static struct cmd_parse_state parse_state; + +static char *cmd_parse_get_error(const char *, u_int, const char *); +static char *cmd_parse_get_strerror(const char *, u_int); +static void cmd_parse_free_command(struct cmd_parse_command *); +static void cmd_parse_free_commands(struct cmd_parse_commands *); + +%} + +%union +{ + char *token; + struct { + int argc; + char **argv; + } arguments; + int flag; + struct { + int flag; + struct cmd_parse_commands commands; + } elif; + struct cmd_parse_commands commands; + struct cmd_parse_command *command; +} + +%token ERROR +%token IF +%token ELSE +%token ELIF +%token ENDIF +%token FORMAT TOKEN EQUALS + +%type argument expanded +%type arguments +%type if_open if_elif +%type elif elif1 +%type statements statement commands condition condition1 +%type command + +%% + +lines : /* empty */ + | statements + { + struct cmd_parse_state *ps = &parse_state; + + TAILQ_CONCAT(&ps->commands, &$1, entry); + } + +statements : statement '\n' + { + TAILQ_INIT(&$$); + TAILQ_CONCAT(&$$, &$1, entry); + } + | statements statement '\n' + { + TAILQ_INIT(&$$); + TAILQ_CONCAT(&$$, &$1, entry); + TAILQ_CONCAT(&$$, &$2, entry); + } + + +statement : condition + { + struct cmd_parse_state *ps = &parse_state; + + TAILQ_INIT(&$$); + if (ps->scope == NULL || ps->scope->flag) + TAILQ_CONCAT(&$$, &$1, entry); + else + cmd_parse_free_commands(&$1); + } + | assignment + { + TAILQ_INIT(&$$); + } + | commands + { + struct cmd_parse_state *ps = &parse_state; + + TAILQ_INIT(&$$); + if (ps->scope == NULL || ps->scope->flag) + TAILQ_CONCAT(&$$, &$1, entry); + else + cmd_parse_free_commands(&$1); + } + +expanded : FORMAT + { + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_input *pi = ps->input; + struct format_tree *ft; + struct client *c = pi->c; + struct cmd_find_state *fs; + int flags = FORMAT_NOJOBS; + + if (cmd_find_valid_state(&pi->fs)) + fs = &pi->fs; + else + fs = NULL; + ft = format_create(NULL, pi->item, FORMAT_NONE, flags); + if (fs != NULL) + format_defaults(ft, c, fs->s, fs->wl, fs->wp); + else + format_defaults(ft, c, NULL, NULL, NULL); + + $$ = format_expand(ft, $1); + format_free(ft); + free($1); + } + +assignment : /* empty */ + | EQUALS + { + struct cmd_parse_state *ps = &parse_state; + int flags = ps->input->flags; + + if ((~flags & CMD_PARSE_PARSEONLY) && + (ps->scope == NULL || ps->scope->flag)) + environ_put(global_environ, $1); + free($1); + } + +if_open : IF expanded + { + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_scope *scope; + + scope = xmalloc(sizeof *scope); + $$ = scope->flag = format_true($2); + free($2); + + if (ps->scope != NULL) + TAILQ_INSERT_HEAD(&ps->stack, ps->scope, entry); + ps->scope = scope; + } + +if_else : ELSE + { + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_scope *scope; + + scope = xmalloc(sizeof *scope); + scope->flag = !ps->scope->flag; + + free(ps->scope); + ps->scope = scope; + } + +if_elif : ELIF expanded + { + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_scope *scope; + + scope = xmalloc(sizeof *scope); + $$ = scope->flag = format_true($2); + free($2); + + free(ps->scope); + ps->scope = scope; + } + +if_close : ENDIF + { + struct cmd_parse_state *ps = &parse_state; + + free(ps->scope); + ps->scope = TAILQ_FIRST(&ps->stack); + if (ps->scope != NULL) + TAILQ_REMOVE(&ps->stack, ps->scope, entry); + } + +condition : if_open '\n' statements if_close + { + TAILQ_INIT(&$$); + if ($1) + TAILQ_CONCAT(&$$, &$3, entry); + else + cmd_parse_free_commands(&$3); + } + | if_open '\n' statements if_else '\n' statements if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$3, entry); + cmd_parse_free_commands(&$6); + } else { + TAILQ_CONCAT(&$$, &$6, entry); + cmd_parse_free_commands(&$3); + } + } + | if_open '\n' statements elif if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$3, entry); + cmd_parse_free_commands(&$4.commands); + } else if ($4.flag) { + TAILQ_CONCAT(&$$, &$4.commands, entry); + cmd_parse_free_commands(&$3); + } else { + cmd_parse_free_commands(&$3); + cmd_parse_free_commands(&$4.commands); + } + } + | if_open '\n' statements elif if_else '\n' statements if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$3, entry); + cmd_parse_free_commands(&$4.commands); + cmd_parse_free_commands(&$7); + } else if ($4.flag) { + TAILQ_CONCAT(&$$, &$4.commands, entry); + cmd_parse_free_commands(&$3); + cmd_parse_free_commands(&$7); + } else { + TAILQ_CONCAT(&$$, &$7, entry); + cmd_parse_free_commands(&$3); + cmd_parse_free_commands(&$4.commands); + } + } + +elif : if_elif '\n' statements + { + TAILQ_INIT(&$$.commands); + if ($1) + TAILQ_CONCAT(&$$.commands, &$3, entry); + else + cmd_parse_free_commands(&$3); + $$.flag = $1; + } + | if_elif '\n' statements elif + { + TAILQ_INIT(&$$.commands); + if ($1) { + $$.flag = 1; + TAILQ_CONCAT(&$$.commands, &$3, entry); + cmd_parse_free_commands(&$4.commands); + } else { + $$.flag = $4.flag; + TAILQ_CONCAT(&$$.commands, &$4.commands, entry); + cmd_parse_free_commands(&$3); + } + } + + +commands : command + { + struct cmd_parse_state *ps = &parse_state; + + TAILQ_INIT(&$$); + if (ps->scope == NULL || ps->scope->flag) + TAILQ_INSERT_TAIL(&$$, $1, entry); + else + cmd_parse_free_command($1); + } + | commands ';' + { + TAILQ_INIT(&$$); + TAILQ_CONCAT(&$$, &$1, entry); + } + | commands ';' condition1 + { + TAILQ_INIT(&$$); + TAILQ_CONCAT(&$$, &$1, entry); + TAILQ_CONCAT(&$$, &$3, entry); + } + | commands ';' command + { + struct cmd_parse_state *ps = &parse_state; + + TAILQ_INIT(&$$); + if (ps->scope == NULL || ps->scope->flag) { + TAILQ_CONCAT(&$$, &$1, entry); + TAILQ_INSERT_TAIL(&$$, $3, entry); + } else { + cmd_parse_free_commands(&$1); + cmd_parse_free_command($3); + } + } + | condition1 + { + TAILQ_INIT(&$$); + TAILQ_CONCAT(&$$, &$1, entry); + } + +command : assignment TOKEN + { + struct cmd_parse_state *ps = &parse_state; + + $$ = xcalloc(1, sizeof *$$); + $$->name = $2; + $$->line = ps->input->line; + + } + | assignment TOKEN arguments + { + struct cmd_parse_state *ps = &parse_state; + + $$ = xcalloc(1, sizeof *$$); + $$->name = $2; + $$->line = ps->input->line; + + $$->argc = $3.argc; + $$->argv = $3.argv; + } + +condition1 : if_open commands if_close + { + TAILQ_INIT(&$$); + if ($1) + TAILQ_CONCAT(&$$, &$2, entry); + else + cmd_parse_free_commands(&$2); + } + | if_open commands if_else commands if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$2, entry); + cmd_parse_free_commands(&$4); + } else { + TAILQ_CONCAT(&$$, &$4, entry); + cmd_parse_free_commands(&$2); + } + } + | if_open commands elif1 if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$2, entry); + cmd_parse_free_commands(&$3.commands); + } else if ($3.flag) { + TAILQ_CONCAT(&$$, &$3.commands, entry); + cmd_parse_free_commands(&$2); + } else { + cmd_parse_free_commands(&$2); + cmd_parse_free_commands(&$3.commands); + } + } + | if_open commands elif1 if_else commands if_close + { + TAILQ_INIT(&$$); + if ($1) { + TAILQ_CONCAT(&$$, &$2, entry); + cmd_parse_free_commands(&$3.commands); + cmd_parse_free_commands(&$5); + } else if ($3.flag) { + TAILQ_CONCAT(&$$, &$3.commands, entry); + cmd_parse_free_commands(&$2); + cmd_parse_free_commands(&$5); + } else { + TAILQ_CONCAT(&$$, &$5, entry); + cmd_parse_free_commands(&$2); + cmd_parse_free_commands(&$3.commands); + } + + } + +elif1 : if_elif commands + { + TAILQ_INIT(&$$.commands); + if ($1) + TAILQ_CONCAT(&$$.commands, &$2, entry); + else + cmd_parse_free_commands(&$2); + $$.flag = $1; + } + | if_elif commands elif1 + { + TAILQ_INIT(&$$.commands); + if ($1) { + $$.flag = 1; + TAILQ_CONCAT(&$$.commands, &$2, entry); + cmd_parse_free_commands(&$3.commands); + } else { + $$.flag = $3.flag; + TAILQ_CONCAT(&$$.commands, &$3.commands, entry); + cmd_parse_free_commands(&$2); + } + } + +arguments : argument + { + $$.argc = 1; + $$.argv = xreallocarray(NULL, 1, sizeof *$$.argv); + + $$.argv[0] = $1; + } + | argument arguments + { + cmd_prepend_argv(&$2.argc, &$2.argv, $1); + free($1); + $$ = $2; + } + +argument : TOKEN + { + $$ = $1; + } + | EQUALS + { + $$ = $1; + } + +%% + +static char * +cmd_parse_get_error(const char *file, u_int line, const char *error) +{ + char *s; + + if (file == NULL) + s = xstrdup(error); + else + xasprintf (&s, "%s:%u: %s", file, line, error); + return (s); +} + +static char * +cmd_parse_get_strerror(const char *file, u_int line) +{ + return (cmd_parse_get_error(file, line, strerror(errno))); +} + +static void +cmd_parse_free_command(struct cmd_parse_command *cmd) +{ + free(cmd->name); + cmd_free_argv(cmd->argc, cmd->argv); + free(cmd); +} + +static void +cmd_parse_free_commands(struct cmd_parse_commands *cmds) +{ + struct cmd_parse_command *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, cmds, entry, cmd1) { + TAILQ_REMOVE(cmds, cmd, entry); + cmd_parse_free_command(cmd); + } +} + +static struct cmd_parse_commands * +cmd_parse_run_parser(FILE *f, struct cmd_parse_input *pi, char **cause) +{ + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_commands *cmds; + struct cmd_parse_scope *scope, *scope1; + int retval; + + memset(ps, 0, sizeof *ps); + + ps->f = f; + ps->eof = 0; + ps->input = pi; + + TAILQ_INIT(&ps->commands); + TAILQ_INIT(&ps->stack); + + retval = yyparse(); + TAILQ_FOREACH_SAFE(scope, &ps->stack, entry, scope1) { + TAILQ_REMOVE(&ps->stack, scope, entry); + free(scope); + } + if (retval != 0) { + *cause = ps->error; + return (NULL); + } + + cmds = xmalloc(sizeof *cmds); + TAILQ_INIT(cmds); + TAILQ_CONCAT(cmds, &ps->commands, entry); + return (cmds); +} + +struct cmd_parse_result * +cmd_parse_from_file(FILE *f, struct cmd_parse_input *pi) +{ + static struct cmd_parse_result pr; + struct cmd_parse_input input; + struct cmd_parse_commands *cmds, *cmds2; + struct cmd_parse_command *cmd, *cmd2, *next, *next2, *after; + u_int line = UINT_MAX; + int i; + struct cmd_list *cmdlist = NULL, *result; + struct cmd *add; + char *alias, *cause, *s; + + if (pi == NULL) { + memset(&input, 0, sizeof input); + pi = &input; + } + memset(&pr, 0, sizeof pr); + + /* + * Parse the file into a list of commands. + */ + cmds = cmd_parse_run_parser(f, pi, &cause); + if (cmds == NULL) { + pr.status = CMD_PARSE_ERROR; + pr.error = cause; + return (&pr); + } + if (TAILQ_EMPTY(cmds)) { + free(cmds); + pr.status = CMD_PARSE_EMPTY; + return (&pr); + } + + /* + * Walk the commands and expand any aliases. Each alias is parsed + * individually to a new command list, any trailing arguments appended + * to the last command, and all commands inserted into the original + * command list. + */ + TAILQ_FOREACH_SAFE(cmd, cmds, entry, next) { + alias = cmd_get_alias(cmd->name); + if (alias == NULL) + continue; + + line = cmd->line; + log_debug("%s: %u %s = %s", __func__, line, cmd->name, alias); + + f = fmemopen(alias, strlen(alias), "r"); + if (f == NULL) { + free(alias); + pr.status = CMD_PARSE_ERROR; + pr.error = cmd_parse_get_strerror(pi->file, line); + goto out; + } + pi->line = line; + cmds2 = cmd_parse_run_parser(f, pi, &cause); + fclose(f); + free(alias); + if (cmds2 == NULL) { + pr.status = CMD_PARSE_ERROR; + pr.error = cause; + goto out; + } + + cmd2 = TAILQ_LAST(cmds2, cmd_parse_commands); + if (cmd2 == NULL) { + TAILQ_REMOVE(cmds, cmd, entry); + cmd_parse_free_command(cmd); + continue; + } + for (i = 0; i < cmd->argc; i++) + cmd_append_argv(&cmd2->argc, &cmd2->argv, cmd->argv[i]); + + after = cmd; + TAILQ_FOREACH_SAFE(cmd2, cmds2, entry, next2) { + cmd2->line = line; + TAILQ_REMOVE(cmds2, cmd2, entry); + TAILQ_INSERT_AFTER(cmds, after, cmd2, entry); + after = cmd2; + } + cmd_parse_free_commands(cmds2); + + TAILQ_REMOVE(cmds, cmd, entry); + cmd_parse_free_command(cmd); + } + + /* + * Parse each command into a command list. Create a new command list + * for each line so they get a new group (so the queue knows which ones + * to remove if a command fails when executed). + */ + result = cmd_list_new(); + TAILQ_FOREACH(cmd, cmds, entry) { + log_debug("%s: %u %s", __func__, cmd->line, cmd->name); + cmd_log_argv(cmd->argc, cmd->argv, __func__); + + if (cmdlist == NULL || cmd->line != line) { + if (cmdlist != NULL) { + cmd_list_move(result, cmdlist); + cmd_list_free(cmdlist); + } + cmdlist = cmd_list_new(); + } + line = cmd->line; + + cmd_prepend_argv(&cmd->argc, &cmd->argv, cmd->name); + add = cmd_parse(cmd->argc, cmd->argv, pi->file, line, &cause); + if (add == NULL) { + cmd_list_free(result); + pr.status = CMD_PARSE_ERROR; + pr.error = cmd_parse_get_error(pi->file, line, cause); + free(cause); + goto out; + } + cmd_list_append(cmdlist, add); + } + if (cmdlist != NULL) { + cmd_list_move(result, cmdlist); + cmd_list_free(cmdlist); + } + + s = cmd_list_print(result); + log_debug("%s: %s", __func__, s); + free(s); + + pr.status = CMD_PARSE_SUCCESS; + pr.cmdlist = result; + +out: + cmd_parse_free_commands(cmds); + free(cmds); + + return (&pr); +} + +struct cmd_parse_result * +cmd_parse_from_string(const char *s, struct cmd_parse_input *pi) +{ + static struct cmd_parse_result pr; + struct cmd_parse_result *prp; + FILE *f; + + if (*s == '\0') { + pr.status = CMD_PARSE_EMPTY; + pr.cmdlist = NULL; + pr.error = NULL; + return (&pr); + } + + f = fmemopen((void *)s, strlen(s), "r"); + if (f == NULL) { + pr.status = CMD_PARSE_ERROR; + pr.cmdlist = NULL; + pr.error = cmd_parse_get_strerror(pi->file, pi->line); + return (NULL); + } + prp = cmd_parse_from_file(f, pi); + fclose(f); + return (prp); +} + +static int printflike(1, 2) +yyerror(const char *fmt, ...) +{ + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_input *pi = ps->input; + va_list ap; + char *error; + + if (ps->error != NULL) + return (0); + + va_start(ap, fmt); + xvasprintf(&error, fmt, ap); + va_end(ap); + + ps->error = cmd_parse_get_error(pi->file, pi->line, error); + free(error); + return (0); +} + +static int +yylex_is_var(char ch, int first) +{ + if (ch == '=') + return (0); + if (first && isdigit((u_char)ch)) + return (0); + return (isalnum((u_char)ch) || ch == '_'); +} + +static void +yylex_append(char **buf, size_t *len, const char *add, size_t addlen) +{ + if (addlen > SIZE_MAX - 1 || *len > SIZE_MAX - 1 - addlen) + fatalx("buffer is too big"); + *buf = xrealloc(*buf, (*len) + 1 + addlen); + memcpy((*buf) + *len, add, addlen); + (*len) += addlen; +} + +static void +yylex_append1(char **buf, size_t *len, char add) +{ + yylex_append(buf, len, &add, 1); +} + +static int +yylex_getc(void) +{ + struct cmd_parse_state *ps = &parse_state; + int ch; + + if (ps->escapes != 0) { + ps->escapes--; + return ('\\'); + } + for (;;) { + ch = getc(ps->f); + if (ch == '\\') { + ps->escapes++; + continue; + } + if (ch == '\n' && (ps->escapes % 2) == 1) { + ps->input->line++; + ps->escapes--; + continue; + } + + if (ps->escapes != 0) { + ungetc(ch, ps->f); + ps->escapes--; + return ('\\'); + } + return (ch); + } +} + +static char * +yylex_get_word(int ch) +{ + struct cmd_parse_state *ps = &parse_state; + char *buf; + size_t len; + + len = 0; + buf = xmalloc(1); + + do + yylex_append1(&buf, &len, ch); + while ((ch = yylex_getc()) != EOF && strchr(" \t\n", ch) == NULL); + ungetc(ch, ps->f); + + buf[len] = '\0'; + log_debug("%s: %s", __func__, buf); + return (buf); +} + +static int +yylex(void) +{ + struct cmd_parse_state *ps = &parse_state; + char *token, *cp; + int ch, next; + + for (;;) { + ch = yylex_getc(); + + if (ch == EOF) { + /* + * Ensure every file or string is terminated by a + * newline. This keeps the parser simpler and avoids + * having to add a newline to each string. + */ + if (ps->eof) + break; + ps->eof = 1; + return ('\n'); + } + + if (ch == ' ' || ch == '\t') { + /* + * Ignore whitespace. + */ + continue; + } + + if (ch == '\n') { + /* + * End of line. Update the line number. + */ + ps->input->line++; + return ('\n'); + } + + if (ch == ';') { + /* + * A semicolon is itself. + */ + return (';'); + } + + if (ch == '#') { + /* + * #{ opens a format; anything else is a comment, + * ignore up to the end of the line. + */ + next = yylex_getc(); + if (next == '{') { + yylval.token = yylex_format(); + if (yylval.token == NULL) + return (ERROR); + return (FORMAT); + } + while (next != '\n' && next != EOF) + next = yylex_getc(); + if (next == '\n') { + ps->input->line++; + return ('\n'); + } + continue; + } + + if (ch == '%') { + /* + * % is a condition unless it is alone, then it is a + * token. + */ + yylval.token = yylex_get_word('%'); + if (strcmp(yylval.token, "%") == 0) + return (TOKEN); + if (strcmp(yylval.token, "%if") == 0) { + free(yylval.token); + return (IF); + } + if (strcmp(yylval.token, "%else") == 0) { + free(yylval.token); + return (ELSE); + } + if (strcmp(yylval.token, "%elif") == 0) { + free(yylval.token); + return (ELIF); + } + if (strcmp(yylval.token, "%endif") == 0) { + free(yylval.token); + return (ENDIF); + } + free(yylval.token); + return (ERROR); + } + + /* + * Otherwise this is a token. + */ + token = yylex_token(ch); + if (token == NULL) + return (ERROR); + yylval.token = token; + + if (strchr(token, '=') != NULL && yylex_is_var(*token, 1)) { + for (cp = token + 1; *cp != '='; cp++) { + if (!yylex_is_var(*cp, 0)) + break; + } + if (*cp == '=') + return (EQUALS); + } + return (TOKEN); + } + return (0); +} + +static char * +yylex_format(void) +{ + char *buf; + size_t len; + int ch, brackets = 1; + + len = 0; + buf = xmalloc(1); + + yylex_append(&buf, &len, "#{", 2); + for (;;) { + if ((ch = yylex_getc()) == EOF || ch == '\n') + goto error; + if (ch == '#') { + if ((ch = yylex_getc()) == EOF || ch == '\n') + goto error; + if (ch == '{') + brackets++; + yylex_append1(&buf, &len, '#'); + } else if (ch == '}') { + if (brackets != 0 && --brackets == 0) { + yylex_append1(&buf, &len, ch); + break; + } + } + yylex_append1(&buf, &len, ch); + } + if (brackets != 0) + goto error; + + buf[len] = '\0'; + log_debug("%s: %s", __func__, buf); + return (buf); + +error: + free(buf); + return (NULL); +} + +static int +yylex_token_escape(char **buf, size_t *len) +{ + int ch, type; + u_int size, i, tmp; + char s[9]; + struct utf8_data ud; + + switch (ch = yylex_getc()) { + case EOF: + return (0); + case 'e': + ch = '\033'; + break; + case 'r': + ch = '\r'; + break; + case 'n': + ch = '\n'; + break; + case 't': + ch = '\t'; + break; + case 'u': + type = 'u'; + size = 4; + goto unicode; + case 'U': + type = 'U'; + size = 8; + goto unicode; + } + + yylex_append1(buf, len, ch); + return (1); + +unicode: + for (i = 0; i < size; i++) { + ch = yylex_getc(); + if (ch == EOF || ch == '\n') + return (0); + if (!isxdigit((u_char)ch)) { + yyerror("invalid \\%c argument", type); + return (0); + } + s[i] = ch; + } + s[i] = '\0'; + + if ((size == 4 && sscanf(s, "%4x", &tmp) != 1) || + (size == 8 && sscanf(s, "%8x", &tmp) != 1)) { + yyerror("invalid \\%c argument", type); + return (0); + } + if (utf8_split(tmp, &ud) != UTF8_DONE) { + yyerror("invalid \\%c argument", type); + return (0); + } + yylex_append(buf, len, ud.data, ud.size); + return (1); +} + +static int +yylex_token_variable(char **buf, size_t *len) +{ + struct cmd_parse_state *ps = &parse_state; + struct environ_entry *envent; + int ch, brackets = 0; + char name[BUFSIZ]; + size_t namelen = 0; + const char *value; + + ch = yylex_getc(); + if (ch == EOF) + return (0); + if (ch == '{') + brackets = 1; + else { + if (!yylex_is_var(ch, 1)) { + yylex_append1(buf, len, '$'); + ungetc(ch, ps->f); + return (1); + } + name[namelen++] = ch; + } + + for (;;) { + ch = yylex_getc(); + if (brackets && ch == '}') + break; + if (ch == EOF || !yylex_is_var(ch, 0)) { + if (!brackets) { + ungetc(ch, ps->f); + break; + } + yyerror("invalid environment variable"); + return (0); + } + if (namelen == (sizeof name) - 2) { + yyerror("environment variable is too long"); + return (0); + } + name[namelen++] = ch; + } + name[namelen] = '\0'; + + envent = environ_find(global_environ, name); + if (envent != NULL) { + value = envent->value; + log_debug("%s: %s -> %s", __func__, name, value); + yylex_append(buf, len, value, strlen(value)); + } + return (1); +} + +static int +yylex_token_tilde(char **buf, size_t *len) +{ + struct cmd_parse_state *ps = &parse_state; + struct environ_entry *envent; + int ch; + char name[BUFSIZ]; + size_t namelen = 0; + struct passwd *pw; + const char *home = NULL; + + for (;;) { + ch = yylex_getc(); + if (ch == EOF || strchr("/ \t\n\"'", ch) != NULL) { + ungetc(ch, ps->f); + break; + } + if (namelen == (sizeof name) - 2) { + yyerror("user name is too long"); + return (0); + } + name[namelen++] = ch; + } + name[namelen] = '\0'; + + if (*name == '\0') { + envent = environ_find(global_environ, "HOME"); + if (envent != NULL && *envent->value != '\0') + home = envent->value; + else if ((pw = getpwuid(getuid())) != NULL) + home = pw->pw_dir; + } else { + if ((pw = getpwnam(name)) != NULL) + home = pw->pw_dir; + } + if (home == NULL) + return (0); + + log_debug("%s: ~%s -> %s", __func__, name, home); + yylex_append(buf, len, home, strlen(home)); + return (1); +} + +static char * +yylex_token(int ch) +{ + struct cmd_parse_state *ps = &parse_state; + char *buf; + size_t len; + enum { START, + NONE, + DOUBLE_QUOTES, + SINGLE_QUOTES } state = NONE, last = START; + + len = 0; + buf = xmalloc(1); + + for (;;) { + /* + * EOF or \n are always the end of the token. If inside quotes + * they are an error. + */ + if (ch == EOF || ch == '\n') { + if (state != NONE) + goto error; + break; + } + + /* Whitespace or ; ends a token unless inside quotes. */ + if ((ch == ' ' || ch == '\t' || ch == ';') && state == NONE) + break; + + /* + * \ ~ and $ are expanded except in single quotes. + */ + if (ch == '\\' && state != SINGLE_QUOTES) { + if (!yylex_token_escape(&buf, &len)) + goto error; + goto skip; + } + if (ch == '~' && last != state && state != SINGLE_QUOTES) { + if (!yylex_token_tilde(&buf, &len)) + goto error; + goto skip; + } + if (ch == '$' && state != SINGLE_QUOTES) { + if (!yylex_token_variable(&buf, &len)) + goto error; + goto skip; + } + + /* + * ' and " starts or end quotes (and is consumed). + */ + if (ch == '\'') { + if (state == NONE) { + state = SINGLE_QUOTES; + goto next; + } + if (state == SINGLE_QUOTES) { + state = NONE; + goto next; + } + } + if (ch == '"') { + if (state == NONE) { + state = DOUBLE_QUOTES; + goto next; + } + if (state == DOUBLE_QUOTES) { + state = NONE; + goto next; + } + } + + /* + * Otherwise add the character to the buffer. + */ + yylex_append1(&buf, &len, ch); + + skip: + last = state; + + next: + ch = yylex_getc(); + } + ungetc(ch, ps->f); + + buf[len] = '\0'; + log_debug("%s: %s", __func__, buf); + return (buf); + +error: + free(buf); + return (NULL); +} diff --git a/cmd-queue.c b/cmd-queue.c index 68bedae841..c343a21264 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -175,15 +175,6 @@ cmdq_remove(struct cmdq_item *item) free(item); } -/* Set command group. */ -static u_int -cmdq_next_group(void) -{ - static u_int group; - - return (++group); -} - /* Remove all subsequent items that match this item's group. */ static void cmdq_remove_group(struct cmdq_item *item) @@ -206,7 +197,6 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, { struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; - u_int group = cmdq_next_group(); struct cmdq_shared *shared; shared = xcalloc(1, sizeof *shared); @@ -222,13 +212,15 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item); item->type = CMDQ_COMMAND; - item->group = group; + item->group = cmd->group; item->flags = flags; item->shared = shared; item->cmdlist = cmdlist; item->cmd = cmd; + log_debug("%s: %s group %u", __func__, item->name, item->group); + shared->references++; cmdlist->references++; diff --git a/cmd-source-file.c b/cmd-source-file.c index fbe01c21c6..bfb530b772 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -38,8 +38,8 @@ const struct cmd_entry cmd_source_file_entry = { .name = "source-file", .alias = "source", - .args = { "q", 1, 1 }, - .usage = "[-q] path", + .args = { "nq", 1, 1 }, + .usage = "[-nq] path", .flags = 0, .exec = cmd_source_file_exec @@ -59,7 +59,9 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) u_int i; if (args_has(args, 'q')) - flags |= CFG_QUIET; + flags |= CMD_PARSE_QUIET; + if (args_has(args, 'n')) + flags |= CMD_PARSE_PARSEONLY; if (*path == '/') pattern = xstrdup(path); @@ -72,7 +74,7 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) retval = CMD_RETURN_NORMAL; if (glob(pattern, 0, NULL, &g) != 0) { - if (errno != ENOENT || (~flags & CFG_QUIET)) { + if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) { cmdq_error(item, "%s: %s", path, strerror(errno)); retval = CMD_RETURN_ERROR; } diff --git a/cmd-string.c b/cmd-string.c deleted file mode 100644 index 058f997ca8..0000000000 --- a/cmd-string.c +++ /dev/null @@ -1,393 +0,0 @@ -/* $OpenBSD$ */ - -/* - * Copyright (c) 2008 Nicholas Marriott - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "tmux.h" - -/* - * Parse a command from a string. - */ - -static int cmd_string_getc(const char *, size_t *); -static void cmd_string_ungetc(size_t *); -static void cmd_string_copy(char **, char *, size_t *); -static char *cmd_string_string(const char *, size_t *, char, int); -static char *cmd_string_variable(const char *, size_t *); -static char *cmd_string_expand_tilde(const char *, size_t *); - -static int -cmd_string_getc(const char *s, size_t *p) -{ - const u_char *ucs = s; - - if (ucs[*p] == '\0') - return (EOF); - return (ucs[(*p)++]); -} - -static void -cmd_string_ungetc(size_t *p) -{ - (*p)--; -} - -static int -cmd_string_unicode(wchar_t *wc, const char *s, size_t *p, char ch) -{ - int size = (ch == 'u') ? 4 : 8; - u_int tmp; - - if (size == 4 && sscanf(s + *p, "%4x", &tmp) != 1) - return (-1); - if (size == 8 && sscanf(s + *p, "%8x", &tmp) != 1) - return (-1); - *p += size; - - *wc = (wchar_t)tmp; - return (0); -} - -int -cmd_string_split(const char *s, int *rargc, char ***rargv) -{ - size_t p = 0; - int ch, argc = 0, append = 0; - char **argv = NULL, *buf = NULL, *t; - const char *whitespace, *equals; - size_t len = 0; - - for (;;) { - ch = cmd_string_getc(s, &p); - switch (ch) { - case '\'': - if ((t = cmd_string_string(s, &p, '\'', 0)) == NULL) - goto error; - cmd_string_copy(&buf, t, &len); - break; - case '"': - if ((t = cmd_string_string(s, &p, '"', 1)) == NULL) - goto error; - cmd_string_copy(&buf, t, &len); - break; - case '$': - if ((t = cmd_string_variable(s, &p)) == NULL) - goto error; - cmd_string_copy(&buf, t, &len); - break; - case '#': - /* Comment: discard rest of line. */ - while ((ch = cmd_string_getc(s, &p)) != EOF) - ; - /* FALLTHROUGH */ - case EOF: - case ' ': - case '\t': - if (buf != NULL) { - buf = xrealloc(buf, len + 1); - buf[len] = '\0'; - - argv = xreallocarray(argv, argc + 1, - sizeof *argv); - argv[argc++] = buf; - - buf = NULL; - len = 0; - } - - if (ch != EOF) - break; - - while (argc != 0) { - equals = strchr(argv[0], '='); - whitespace = argv[0] + strcspn(argv[0], " \t"); - if (equals == NULL || equals > whitespace) - break; - environ_put(global_environ, argv[0]); - argc--; - memmove(argv, argv + 1, argc * (sizeof *argv)); - } - goto done; - case '~': - if (buf != NULL) { - append = 1; - break; - } - t = cmd_string_expand_tilde(s, &p); - if (t == NULL) - goto error; - cmd_string_copy(&buf, t, &len); - break; - default: - append = 1; - break; - } - if (append) { - if (len >= SIZE_MAX - 2) - goto error; - buf = xrealloc(buf, len + 1); - buf[len++] = ch; - } - append = 0; - } - -done: - *rargc = argc; - *rargv = argv; - - free(buf); - return (0); - -error: - if (argv != NULL) - cmd_free_argv(argc, argv); - free(buf); - return (-1); -} - -struct cmd_list * -cmd_string_parse(const char *s, const char *file, u_int line, char **cause) -{ - struct cmd_list *cmdlist = NULL; - int argc; - char **argv; - - if (cause != NULL) - *cause = NULL; - log_debug ("%s: %s", __func__, s); - - if (cmd_string_split(s, &argc, &argv) != 0) { - xasprintf(cause, "invalid or unknown command: %s", s); - return (NULL); - } - if (argc != 0) { - cmdlist = cmd_list_parse(argc, argv, file, line, cause); - if (cmdlist == NULL) { - cmd_free_argv(argc, argv); - return (NULL); - } - } - cmd_free_argv(argc, argv); - return (cmdlist); -} - -static void -cmd_string_copy(char **dst, char *src, size_t *len) -{ - size_t srclen; - - srclen = strlen(src); - - *dst = xrealloc(*dst, *len + srclen + 1); - strlcpy(*dst + *len, src, srclen + 1); - - *len += srclen; - free(src); -} - -static char * -cmd_string_string(const char *s, size_t *p, char endch, int esc) -{ - int ch; - wchar_t wc; - struct utf8_data ud; - char *buf = NULL, *t; - size_t len = 0; - - while ((ch = cmd_string_getc(s, p)) != endch) { - switch (ch) { - case EOF: - goto error; - case '\\': - if (!esc) - break; - switch (ch = cmd_string_getc(s, p)) { - case EOF: - goto error; - case 'e': - ch = '\033'; - break; - case 'r': - ch = '\r'; - break; - case 'n': - ch = '\n'; - break; - case 't': - ch = '\t'; - break; - case 'u': - case 'U': - if (cmd_string_unicode(&wc, s, p, ch) != 0) - goto error; - if (utf8_split(wc, &ud) != UTF8_DONE) - goto error; - if (len >= SIZE_MAX - ud.size - 1) - goto error; - buf = xrealloc(buf, len + ud.size); - memcpy(buf + len, ud.data, ud.size); - len += ud.size; - continue; - } - break; - case '$': - if (!esc) - break; - if ((t = cmd_string_variable(s, p)) == NULL) - goto error; - cmd_string_copy(&buf, t, &len); - continue; - } - - if (len >= SIZE_MAX - 2) - goto error; - buf = xrealloc(buf, len + 1); - buf[len++] = ch; - } - - buf = xrealloc(buf, len + 1); - buf[len] = '\0'; - return (buf); - -error: - free(buf); - return (NULL); -} - -static char * -cmd_string_variable(const char *s, size_t *p) -{ - int ch, fch; - char *buf, *t; - size_t len; - struct environ_entry *envent; - -#define cmd_string_first(ch) ((ch) == '_' || \ - ((ch) >= 'a' && (ch) <= 'z') || ((ch) >= 'A' && (ch) <= 'Z')) -#define cmd_string_other(ch) ((ch) == '_' || \ - ((ch) >= 'a' && (ch) <= 'z') || ((ch) >= 'A' && (ch) <= 'Z') || \ - ((ch) >= '0' && (ch) <= '9')) - - buf = NULL; - len = 0; - - fch = EOF; - switch (ch = cmd_string_getc(s, p)) { - case EOF: - goto error; - case '{': - fch = '{'; - - ch = cmd_string_getc(s, p); - if (!cmd_string_first(ch)) - goto error; - /* FALLTHROUGH */ - default: - if (!cmd_string_first(ch)) { - xasprintf(&t, "$%c", ch); - return (t); - } - - buf = xrealloc(buf, len + 1); - buf[len++] = ch; - - for (;;) { - ch = cmd_string_getc(s, p); - if (ch == EOF || !cmd_string_other(ch)) - break; - else { - if (len >= SIZE_MAX - 3) - goto error; - buf = xrealloc(buf, len + 1); - buf[len++] = ch; - } - } - } - - if (fch == '{' && ch != '}') - goto error; - if (ch != EOF && fch != '{') - cmd_string_ungetc(p); /* ch */ - - buf = xrealloc(buf, len + 1); - buf[len] = '\0'; - - envent = environ_find(global_environ, buf); - free(buf); - if (envent == NULL) - return (xstrdup("")); - return (xstrdup(envent->value)); - -error: - free(buf); - return (NULL); -} - -static char * -cmd_string_expand_tilde(const char *s, size_t *p) -{ - struct passwd *pw; - struct environ_entry *envent; - char *home, *path, *user, *cp; - int last; - - home = NULL; - - last = cmd_string_getc(s, p); - if (last == EOF || last == '/' || last == ' '|| last == '\t') { - envent = environ_find(global_environ, "HOME"); - if (envent != NULL && *envent->value != '\0') - home = envent->value; - else if ((pw = getpwuid(getuid())) != NULL) - home = pw->pw_dir; - } else { - cmd_string_ungetc(p); - - cp = user = xmalloc(strlen(s)); - for (;;) { - last = cmd_string_getc(s, p); - if (last == EOF || - last == '/' || - last == ' '|| - last == '\t') - break; - *cp++ = last; - } - *cp = '\0'; - - if ((pw = getpwnam(user)) != NULL) - home = pw->pw_dir; - free(user); - } - - if (home == NULL) - return (NULL); - - if (last != EOF) - xasprintf(&path, "%s%c", home, last); - else - xasprintf(&path, "%s", home); - return (path); -} diff --git a/cmd.c b/cmd.c index 59f2d4e9e4..8736a6c75e 100644 --- a/cmd.c +++ b/cmd.c @@ -214,6 +214,29 @@ cmd_log_argv(int argc, char **argv, const char *prefix) log_debug("%s: argv[%d]=%s", prefix, i, argv[i]); } +void +cmd_prepend_argv(int *argc, char ***argv, char *arg) +{ + char **new_argv; + int i; + + new_argv = xreallocarray(NULL, (*argc) + 1, sizeof *new_argv); + new_argv[0] = xstrdup(arg); + for (i = 0; i < *argc; i++) + new_argv[1 + i] = (*argv)[i]; + + free(*argv); + *argv = new_argv; + (*argc)++; +} + +void +cmd_append_argv(int *argc, char ***argv, char *arg) +{ + *argv = xreallocarray(*argv, (*argc) + 1, sizeof **argv); + (*argv)[(*argc)++] = xstrdup(arg); +} + int cmd_pack_argv(int argc, char **argv, char *buf, size_t len) { @@ -318,105 +341,102 @@ cmd_stringify_argv(int argc, char **argv) return (buf); } -static int -cmd_try_alias(int *argc, char ***argv) +char * +cmd_get_alias(const char *name) { - struct options_entry *o; - struct options_array_item *a; - union options_value *ov; - int old_argc = *argc, new_argc, i; - char **old_argv = *argv, **new_argv; - size_t wanted; - const char *cp = NULL; + struct options_entry *o; + struct options_array_item *a; + union options_value *ov; + size_t wanted, n; + const char *equals; o = options_get_only(global_options, "command-alias"); if (o == NULL) - return (-1); - wanted = strlen(old_argv[0]); + return (NULL); + wanted = strlen(name); a = options_array_first(o); while (a != NULL) { ov = options_array_item_value(a); - cp = strchr(ov->string, '='); - if (cp != NULL && - (size_t)(cp - ov->string) == wanted && - strncmp(old_argv[0], ov->string, wanted) == 0) - break; + + equals = strchr(ov->string, '='); + if (equals != NULL) { + n = equals - ov->string; + if (n == wanted && strncmp(name, ov->string, n) == 0) + return (xstrdup(equals + 1)); + } + a = options_array_next(a); } - if (a == NULL) - return (-1); + return (NULL); +} - if (cmd_string_split(cp + 1, &new_argc, &new_argv) != 0) - return (-1); +static const struct cmd_entry * +cmd_find(const char *name, char **cause) +{ + const struct cmd_entry **loop, *entry, *found = NULL; + int ambiguous; + char s[BUFSIZ]; - *argc = new_argc + old_argc - 1; - *argv = xcalloc((*argc) + 1, sizeof **argv); + ambiguous = 0; + for (loop = cmd_table; *loop != NULL; loop++) { + entry = *loop; + if (entry->alias != NULL && strcmp(entry->alias, name) == 0) { + ambiguous = 0; + found = entry; + break; + } - for (i = 0; i < new_argc; i++) - (*argv)[i] = xstrdup(new_argv[i]); - for (i = 1; i < old_argc; i++) - (*argv)[new_argc + i - 1] = xstrdup(old_argv[i]); + if (strncmp(entry->name, name, strlen(name)) != 0) + continue; + if (found != NULL) + ambiguous = 1; + found = entry; - log_debug("alias: %s=%s", old_argv[0], cp + 1); - for (i = 0; i < *argc; i++) - log_debug("alias: argv[%d] = %s", i, (*argv)[i]); + if (strcmp(entry->name, name) == 0) + break; + } + if (ambiguous) + goto ambiguous; + if (found == NULL) { + xasprintf(cause, "unknown command: %s", name); + return (NULL); + } + return (found); - cmd_free_argv(new_argc, new_argv); - return (0); +ambiguous: + *s = '\0'; + for (loop = cmd_table; *loop != NULL; loop++) { + entry = *loop; + if (strncmp(entry->name, name, strlen(name)) != 0) + continue; + if (strlcat(s, entry->name, sizeof s) >= sizeof s) + break; + if (strlcat(s, ", ", sizeof s) >= sizeof s) + break; + } + s[strlen(s) - 2] = '\0'; + xasprintf(cause, "ambiguous command: %s, could be: %s", name, s); + return (NULL); } struct cmd * cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) { + const struct cmd_entry *entry; const char *name; - const struct cmd_entry **entryp, *entry; struct cmd *cmd; struct args *args; - char s[BUFSIZ]; - int ambiguous, allocated = 0; - *cause = NULL; if (argc == 0) { xasprintf(cause, "no command"); return (NULL); } name = argv[0]; -retry: - ambiguous = 0; - entry = NULL; - for (entryp = cmd_table; *entryp != NULL; entryp++) { - if ((*entryp)->alias != NULL && - strcmp((*entryp)->alias, argv[0]) == 0) { - ambiguous = 0; - entry = *entryp; - break; - } - - if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0) - continue; - if (entry != NULL) - ambiguous = 1; - entry = *entryp; - - /* Bail now if an exact match. */ - if (strcmp(entry->name, argv[0]) == 0) - break; - } - if ((ambiguous || entry == NULL) && - server_proc != NULL && - !allocated && - cmd_try_alias(&argc, &argv) == 0) { - allocated = 1; - goto retry; - } - if (ambiguous) - goto ambiguous; - if (entry == NULL) { - xasprintf(cause, "unknown command: %s", name); + entry = cmd_find(name, cause); + if (entry == NULL) return (NULL); - } cmd_log_argv(argc, argv, entry->name); args = args_parse(entry->args.template, argc, argv); @@ -435,23 +455,11 @@ cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) cmd->file = xstrdup(file); cmd->line = line; - if (allocated) - cmd_free_argv(argc, argv); - return (cmd); + cmd->alias = NULL; + cmd->argc = argc; + cmd->argv = cmd_copy_argv(argc, argv); -ambiguous: - *s = '\0'; - for (entryp = cmd_table; *entryp != NULL; entryp++) { - if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0) - continue; - if (strlcat(s, (*entryp)->name, sizeof s) >= sizeof s) - break; - if (strlcat(s, ", ", sizeof s) >= sizeof s) - break; - } - s[strlen(s) - 2] = '\0'; - xasprintf(cause, "ambiguous command: %s, could be: %s", name, s); - return (NULL); + return (cmd); usage: if (args != NULL) @@ -460,6 +468,18 @@ cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) return (NULL); } +void +cmd_free(struct cmd *cmd) +{ + free(cmd->alias); + cmd_free_argv(cmd->argc, cmd->argv); + + free(cmd->file); + + args_free(cmd->args); + free(cmd); +} + char * cmd_print(struct cmd *cmd) { diff --git a/control.c b/control.c index 41c50df7d6..b7ac3f6295 100644 --- a/control.c +++ b/control.c @@ -68,9 +68,9 @@ control_error(struct cmdq_item *item, void *data) void control_callback(struct client *c, int closed, __unused void *data) { - char *line, *cause; - struct cmd_list *cmdlist; + char *line; struct cmdq_item *item; + struct cmd_parse_result *pr; if (closed) c->flags |= CLIENT_EXIT; @@ -84,15 +84,21 @@ control_callback(struct client *c, int closed, __unused void *data) break; } - cmdlist = cmd_string_parse(line, NULL, 0, &cause); - if (cmdlist == NULL) { - item = cmdq_get_callback(control_error, cause); + pr = cmd_parse_from_string(line, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + break; + case CMD_PARSE_ERROR: + item = cmdq_get_callback(control_error, pr->error); cmdq_append(c, item); - } else { - item = cmdq_get_command(cmdlist, NULL, NULL, 0); + free(pr->error); + break; + case CMD_PARSE_SUCCESS: + item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); item->shared->flags |= CMDQ_SHARED_CONTROL; cmdq_append(c, item); - cmd_list_free(cmdlist); + cmd_list_free(pr->cmdlist); + break; } free(line); diff --git a/key-bindings.c b/key-bindings.c index c4874b50b7..2bc659aa31 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -433,16 +433,15 @@ key_bindings_init(void) "bind -Tcopy-mode-vi C-Up send -X scroll-up", "bind -Tcopy-mode-vi C-Down send -X scroll-down", }; - u_int i; - struct cmd_list *cmdlist; - char *cause; + u_int i; + struct cmd_parse_result *pr; for (i = 0; i < nitems(defaults); i++) { - cmdlist = cmd_string_parse(defaults[i], "", i, &cause); - if (cmdlist == NULL) + pr = cmd_parse_from_string(defaults[i], NULL); + if (pr->status != CMD_PARSE_SUCCESS) fatalx("bad default key: %s", defaults[i]); - cmdq_append(NULL, cmdq_get_command(cmdlist, NULL, NULL, 0)); - cmd_list_free(cmdlist); + cmdq_append(NULL, cmdq_get_command(pr->cmdlist, NULL, NULL, 0)); + cmd_list_free(pr->cmdlist); } } diff --git a/menu.c b/menu.c index 395e14552c..9de6c5fc1d 100644 --- a/menu.c +++ b/menu.c @@ -200,9 +200,8 @@ menu_key_cb(struct client *c, struct key_event *event) u_int i; int count = menu->count, old = md->choice; const struct menu_item *item; - struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *cause; + struct cmd_parse_result *pr; if (KEYC_IS_MOUSE(event->key)) { if (md->flags & MENU_NOMOUSE) @@ -272,22 +271,22 @@ menu_key_cb(struct client *c, struct key_event *event) md->cb = NULL; return (1); } - cmdlist = cmd_string_parse(item->command, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) - new_item = cmdq_get_error(cause); - else - new_item = NULL; - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - cmd_list_free(cmdlist); - } - if (new_item != NULL) { - if (md->item != NULL) - cmdq_insert_after(md->item, new_item); - else - cmdq_append(c, new_item); + + pr = cmd_parse_from_string(item->command, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + new_item = NULL; + break; + case CMD_PARSE_ERROR: + new_item = cmdq_get_error(pr->error); + free(pr->error); + cmdq_append(c, new_item); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + cmd_list_free(pr->cmdlist); + cmdq_append(c, new_item); + break; } return (1); } diff --git a/mode-tree.c b/mode-tree.c index fb186c1a89..9dd96190ae 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -1045,8 +1045,8 @@ mode_tree_run_command(struct client *c, struct cmd_find_state *fs, const char *template, const char *name) { struct cmdq_item *new_item; - struct cmd_list *cmdlist; - char *command, *cause; + char *command; + struct cmd_parse_result *pr; command = cmd_template_replace(template, name, 1); if (command == NULL || *command == '\0') { @@ -1054,17 +1054,22 @@ mode_tree_run_command(struct client *c, struct cmd_find_state *fs, return; } - cmdlist = cmd_string_parse(command, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL && c != NULL) { - *cause = toupper((u_char)*cause); - status_message_set(c, "%s", cause); + pr = cmd_parse_from_string(command, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + break; + case CMD_PARSE_ERROR: + if (c != NULL) { + *pr->error = toupper((u_char)*pr->error); + status_message_set(c, "%s", pr->error); } - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, fs, NULL, 0); + free(pr->error); + break; + case CMD_PARSE_SUCCESS: + new_item = cmdq_get_command(pr->cmdlist, fs, NULL, 0); cmdq_append(c, new_item); - cmd_list_free(cmdlist); + cmd_list_free(pr->cmdlist); + break; } free(command); diff --git a/options.c b/options.c index 488f6cf972..fa8752b058 100644 --- a/options.c +++ b/options.c @@ -353,8 +353,7 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, { struct options_array_item *a; char *new; - struct cmd_list *cmdlist; - char *error; + struct cmd_parse_result *pr; if (!OPTIONS_IS_ARRAY(o)) { if (cause != NULL) @@ -363,13 +362,19 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, } if (OPTIONS_IS_COMMAND(o)) { - cmdlist = cmd_string_parse(value, NULL, 0, &error); - if (cmdlist == NULL && error != NULL) { + pr = cmd_parse_from_string(value, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + *cause = xstrdup("empty command"); + return (-1); + case CMD_PARSE_ERROR: if (cause != NULL) - *cause = error; + *cause = pr->error; else - free(error); + free(pr->error); return (-1); + case CMD_PARSE_SUCCESS: + break; } } @@ -397,7 +402,7 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, if (OPTIONS_IS_STRING(o)) a->value.string = new; else if (OPTIONS_IS_COMMAND(o)) - a->value.cmdlist = cmdlist; + a->value.cmdlist = pr->cmdlist; return (0); } diff --git a/tmux.1 b/tmux.1 index e5238b35ad..4c86ac950b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -355,8 +355,217 @@ Key bindings may be changed with the and .Ic unbind-key commands. +.Sh COMMAND PARSING AND EXECUTION +.Nm +supports a large number of commands which can be used to control its +behaviour. +Each command is named and can accept zero or more flags and arguments. +They may be bound to a key with the +.Ic bind-key +command or run from the shell prompt, a shell script, a configuration file or +the command prompt. +For example, the same +.Ic set-option +command run from the shell prompt, from +.Pa ~/.tmux.conf +and bound to a key may look like: +.Bd -literal -offset indent +$ tmux set-option -g status-style bg=cyan + +set-option -g status-style bg=cyan + +bind-key C set-option -g status-style bg=cyan +.Ed +.Pp +Here, the command name is +.Ql set-option , +.Ql Fl g +is a flag and +.Ql status-style +and +.Ql bg=cyan +are arguments. +.Pp +.Nm +distinguishes between command parsing and execution. +In order to execute a command, +.Nm +needs it to be split up into its name and arguments. +This is command parsing. +If a command is run from the shell, the shell parses it; from inside +.Nm +or from a configuration file, +.Nm +does. +Examples of when +.Nm +parses commands are: +.Bl -dash -offset indent +.It +in a configuration file; +.It +typed at the command prompt (see +.Ic command-prompt ) ; +.It +given to +.Ic bind-key ; +.It +passed as arguments to +.Ic if-shell +or +.Ic confirm-before . +.El +.Pp +To execute commands, each client has a +.Ql command queue . +A global command queue not attached to any client is used on startup +for configuration files like +.Pa ~/.tmux.conf . +Parsed commands added to the queue are executed in order. +Some commands, like +.Ic if-shell +and +.Ic confirm-before , +parse their argument to create a new command which is inserted immediately +after themselves. +This means that arguments can be parsed twice or more - once when the parent command (such as +.Ic if-shell ) +is parsed and again when it parses and executes its command. +Commands like +.Ic if-shell , +.Ic run-shell +and +.Ic display-panes +stop execution of subsequent commands on the queue until something happens - +.Ic if-shell +and +.Ic run-shell +until a shell command finishes and +.Ic display-panes +until a key is pressed. +For example, the following commands: +.Bd -literal -offset indent +new-session; new-window +if-shell "true" "split-window" +kill-session +.Ed +.Pp +Will execute +.Ic new-session , +.Ic new-window , +.Ic if-shell , +the shell command +.Xr true 1 , +.Ic new-window +and +.Ic kill-session +in that order. +.Pp +The +.Sx COMMANDS +section lists the +.Nm +commands and their arguments. +.Sh PARSING SYNTAX +This section describes the syntax of commands parsed by +.Nm , +for example in a configuration file or at the command prompt. +Note the when commands are entered into the shell, they are parsed by the shell +- see for example +.Xr ksh 1 +or +.Xr csh 1 . +.Pp +Each command is terminated by a newline or a semicolon (;). +Commands separated by semicolons together form a +.Ql command sequence +- if a command in the sequence encounters an error, no subsequent commands are +executed. +.Pp +Comments are marked by the unquoted # character - any remaining text after a +comment is ignored until the end of the line. +.Pp +If the last character of a line is \e, the line is joined with the following +line (the \e and the newline are completely removed). +This is called line continuation and applies both inside and outside quoted +strings and in comments. +.Pp +Command arguments may be specified as strings surrounded by either single (') +or double quotes ("). +.\" " +This is required when the argument contains any special character. +Strings cannot span multiple lines except with line continuation. +.Pp +Outside of quotes and inside double quotes, these replacements are performed: +.Bl -dash -offset indent +.It +Environment variables preceded by $ are replaced with their value from the +global environment (see the +.Sx GLOBAL AND SESSION ENVIRONMENT +section). +.It +A leading ~ or ~user is expanded to the home directory of the current or +specified user. +.It +\euXXXX or \euXXXXXXXX is replaced by the Unicode codepoint corresponding to +the given four or eight digit hexadecimal number. +.It +When preceded (escaped) by a \e, the following characters are replaced: \ee by +the escape character; \er by a carriage return; \en by a newline; and \et by a +tab. +.Pp +Any other characters preceded by \e are replaced by themselves (that is, the \e +is removed) and are not treated as having any special meaning - so for example +\e; will not mark a command sequence and \e$ will not expand an environment +variable. +.El +.Pp +Environment variables may be set by using the syntax +.Ql name=value , +for example +.Ql HOME=/home/user . +Variables set during parsing are added to the global environment. +.Pp +Commands may be parsed conditionally by surrounding them with +.Ql %if , +.Ql %elif , +.Ql %else +and +.Ql %endif . +The argument to +.Ql %if +and +.Ql %elif +is expanded as a format (see +.Sx FORMATS ) +and if it evaluates to false (zero or empty), subsequent text is ignored until +the closing +.Ql %elif , +.Ql %else +or +.Ql %endif . +For example: +.Bd -literal -offset indent +%if #{==:#{host},myhost} +set -g status-style bg=red +%elif #{==:#{host},myotherhost} +set -g status-style bg=green +%else +set -g status-style bg=blue +%endif +.Ed +.Pp +Will change the status line to red if running on +.Ql myhost , +green if running on +.Ql myotherhost , +or blue if running on another host. +Conditionals may be given on one line, for example: +.Bd -literal -offset indent +%if #{==:#{host},myhost} set -g status-style bg=red %endif +.Ed .Sh COMMANDS -This section contains a list of the commands supported by +This section describes the commands supported by .Nm . Most commands accept the optional .Fl t @@ -622,16 +831,6 @@ Or if using $ tmux bind-key F1 set-option status off .Ed .Pp -Multiple commands may be specified together as part of a -.Em command sequence . -Each command should be separated by spaces and a semicolon; -commands are executed sequentially from left to right and -lines ending with a backslash continue on to the next line, -except when escaped by another backslash. -A literal semicolon may be included by escaping it with a backslash (for -example, when specifying a command sequence to -.Ic bind-key ) . -.Pp Example .Nm commands include: @@ -1005,7 +1204,7 @@ and .Fl T show debugging information about jobs and terminals. .It Xo Ic source-file -.Op Fl q +.Op Fl nq .Ar path .Xc .D1 (alias: Ic source ) @@ -1019,44 +1218,9 @@ If is given, no error will be returned if .Ar path does not exist. -.Pp -Within a configuration file, commands may be made conditional by surrounding -them with -.Em %if -and -.Em %endif -lines. -Additional -.Em %elif -and -.Em %else -lines may also be used. -The argument to -.Em %if -and -.Em %elif -is expanded as a format and if it evaluates to false (zero or empty), -subsequent lines are ignored until the next -.Em %elif , -.Em %else -or -.Em %endif . -For example: -.Bd -literal -offset indent -%if #{==:#{host},myhost} -set -g status-style bg=red -%elif #{==:#{host},myotherhost} -set -g status-style bg=green -%else -set -g status-style bg=blue -%endif -.Ed -.Pp -Will change the status line to red if running on -.Ql myhost , -green if running on -.Ql myotherhost , -or blue if running on another host. +With +.Fl n , +the file is parsed but no commands are executed. .It Ic start-server .D1 (alias: Ic start ) Start the @@ -4134,7 +4298,7 @@ right of the list if there is not enough space. .Ic norange .Xc Mark a range in the -. Ic status-format +.Ic status-format option. .Ic range=left and @@ -4450,7 +4614,7 @@ This command works only from inside .Op Fl x Ar position .Op Fl y Ar position .Xc -.D1 (alias: Ic menu) +.D1 (alias: Ic menu ) Display a menu on .Ar target-client . .Ar target-pane diff --git a/tmux.h b/tmux.h index 2979a6e30a..f996b1f43d 100644 --- a/tmux.h +++ b/tmux.h @@ -1279,18 +1279,25 @@ struct cmd_find_state { /* Command and list of commands. */ struct cmd { - const struct cmd_entry *entry; - struct args *args; + const struct cmd_entry *entry; + struct args *args; + u_int group; - char *file; - u_int line; + char *file; + u_int line; + + char *alias; + int argc; + char **argv; - TAILQ_ENTRY(cmd) qentry; + TAILQ_ENTRY(cmd) qentry; }; +TAILQ_HEAD(cmds, cmd); struct cmd_list { - int references; - TAILQ_HEAD(, cmd) list; + int references; + u_int group; + struct cmds list; }; /* Command return values. */ @@ -1301,6 +1308,31 @@ enum cmd_retval { CMD_RETURN_STOP }; +/* Command parse result. */ +enum cmd_parse_status { + CMD_PARSE_EMPTY, + CMD_PARSE_ERROR, + CMD_PARSE_SUCCESS +}; +struct cmd_parse_result { + enum cmd_parse_status status; + struct cmd_list *cmdlist; + char *error; +}; +struct cmd_parse_input { + int flags; +#define CMD_PARSE_QUIET 0x1 +#define CMD_PARSE_PARSEONLY 0x2 +#define CMD_PARSE_NOALIAS 0x4 + + const char *file; + u_int line; + + struct cmdq_item *item; + struct client *c; + struct cmd_find_state fs; +}; + /* Command queue item type. */ enum cmdq_type { CMDQ_COMMAND, @@ -1671,7 +1703,6 @@ void proc_toggle_log(struct tmuxproc *); /* cfg.c */ extern int cfg_finished; extern struct client *cfg_client; -#define CFG_QUIET 0x1 void start_cfg(void); int load_cfg(const char *, struct client *, struct cmdq_item *, int, struct cmdq_item **); @@ -1956,12 +1987,16 @@ int cmd_find_from_nothing(struct cmd_find_state *, int); /* cmd.c */ void cmd_log_argv(int, char **, const char *); +void cmd_prepend_argv(int *, char ***, char *); +void cmd_append_argv(int *, char ***, char *); int cmd_pack_argv(int, char **, char *, size_t); int cmd_unpack_argv(char *, size_t, int, char ***); char **cmd_copy_argv(int, char **); void cmd_free_argv(int, char **); char *cmd_stringify_argv(int, char **); +char *cmd_get_alias(const char *); struct cmd *cmd_parse(int, char **, const char *, u_int, char **); +void cmd_free(struct cmd *); char *cmd_print(struct cmd *); int cmd_mouse_at(struct window_pane *, struct mouse_event *, u_int *, u_int *, int); @@ -1975,7 +2010,16 @@ extern const struct cmd_entry *cmd_table[]; enum cmd_retval cmd_attach_session(struct cmdq_item *, const char *, int, int, const char *, int); +/* cmd-parse.c */ +void cmd_parse_empty(struct cmd_parse_input *); +struct cmd_parse_result *cmd_parse_from_file(FILE *, struct cmd_parse_input *); +struct cmd_parse_result *cmd_parse_from_string(const char *, + struct cmd_parse_input *); + /* cmd-list.c */ +struct cmd_list *cmd_list_new(void); +void cmd_list_append(struct cmd_list *, struct cmd *); +void cmd_list_move(struct cmd_list *, struct cmd_list *); struct cmd_list *cmd_list_parse(int, char **, const char *, u_int, char **); void cmd_list_free(struct cmd_list *); char *cmd_list_print(struct cmd_list *); @@ -1997,10 +2041,6 @@ void cmdq_guard(struct cmdq_item *, const char *, int); void printflike(2, 3) cmdq_print(struct cmdq_item *, const char *, ...); void printflike(2, 3) cmdq_error(struct cmdq_item *, const char *, ...); -/* cmd-string.c */ -int cmd_string_split(const char *, int *, char ***); -struct cmd_list *cmd_string_parse(const char *, const char *, u_int, char **); - /* cmd-wait-for.c */ void cmd_wait_for_flush(void); From bf2cf33fc633dd6f28d0d57e669cbd0b109a5f2d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 13:04:41 +0100 Subject: [PATCH 552/836] Add yacc(1) bits. --- .gitignore | 1 + Makefile.am | 2 +- configure.ac | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ad18d1de71..d01a0166a6 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ Makefile.in configure tmux.1.* *.dSYM +cmd-parse.c diff --git a/Makefile.am b/Makefile.am index 9db08a02c6..ceaae6adc0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ # Obvious program stuff. bin_PROGRAMS = tmux -CLEANFILES = tmux.1.mdoc tmux.1.man +CLEANFILES = tmux.1.mdoc tmux.1.man cmd-parse.c # Distribution tarball options. EXTRA_DIST = \ diff --git a/configure.ac b/configure.ac index 1e7578ee21..d09fec9d53 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,7 @@ AC_PROG_CC_C99 AC_PROG_CPP AC_PROG_EGREP AC_PROG_INSTALL +AC_PROG_YACC PKG_PROG_PKG_CONFIG AC_USE_SYSTEM_EXTENSIONS From 092c7bfeb85adffddf3cc24c4096e508c537a1ba Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 13:06:47 +0100 Subject: [PATCH 553/836] TRAVIS: add bison to build deps --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a1d7e427cd..2188eec0d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,5 +6,5 @@ matrix: env: CFLAGS="-g -O2" before_install: - sudo apt-get update -qq - - sudo apt-get -y install debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential + - sudo apt-get -y install bison debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential script: (CFLAGS= ./autogen.sh) && ./configure --enable-debug && make From d67b99c7e4b3e16adc5dbc637ad67e5795064bdd Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 13:09:34 +0100 Subject: [PATCH 554/836] configure.ac: add AC_PROC_YACC --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac index 1e7578ee21..514548b566 100644 --- a/configure.ac +++ b/configure.ac @@ -658,5 +658,7 @@ CFLAGS="$SAVED_CFLAGS" AC_SUBST(AM_LDFLAGS) LDFLAGS="$SAVED_LDFLAGS" +AC_PROG_YACC + # autoconf should create a Makefile. AC_OUTPUT(Makefile) From 8590ee65e64b6d4e5a6b4410ee64edeb19dffd13 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 13:06:47 +0100 Subject: [PATCH 555/836] TRAVIS: add bison to build deps --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a1d7e427cd..2188eec0d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,5 +6,5 @@ matrix: env: CFLAGS="-g -O2" before_install: - sudo apt-get update -qq - - sudo apt-get -y install debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential + - sudo apt-get -y install bison debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential script: (CFLAGS= ./autogen.sh) && ./configure --enable-debug && make From 82bf0f4d488f2f5d1676de7a4b86302e73f34bab Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 13:09:34 +0100 Subject: [PATCH 556/836] configure.ac: add AC_PROC_YACC --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac index d09fec9d53..355cf0b4db 100644 --- a/configure.ac +++ b/configure.ac @@ -659,5 +659,7 @@ CFLAGS="$SAVED_CFLAGS" AC_SUBST(AM_LDFLAGS) LDFLAGS="$SAVED_LDFLAGS" +AC_PROG_YACC + # autoconf should create a Makefile. AC_OUTPUT(Makefile) From 4ce26b039386caac51abdf1bf78541a500423c18 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 13:32:18 +0100 Subject: [PATCH 557/836] Remove duplicate. --- configure.ac | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure.ac b/configure.ac index 355cf0b4db..d09fec9d53 100644 --- a/configure.ac +++ b/configure.ac @@ -659,7 +659,5 @@ CFLAGS="$SAVED_CFLAGS" AC_SUBST(AM_LDFLAGS) LDFLAGS="$SAVED_LDFLAGS" -AC_PROG_YACC - # autoconf should create a Makefile. AC_OUTPUT(Makefile) From a4fe7e81c8aa674c93d48f4ac8eff842203c1d3e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 12:47:52 +0000 Subject: [PATCH 558/836] Fix length calculation for pasting UTF-8 characters in the status line, GitHub issue 1753. --- status.c | 111 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 41 deletions(-) diff --git a/status.c b/status.c index ef8cf14df4..ce36cc3c7e 100644 --- a/status.c +++ b/status.c @@ -846,16 +846,79 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) return (0); } +/* Paste into prompt. */ +static int +status_prompt_paste(struct client *c) +{ + struct paste_buffer *pb; + const char *bufdata; + size_t size, n, bufsize; + u_int i; + struct utf8_data *ud, *udp; + enum utf8_state more; + + size = utf8_strlen(c->prompt_buffer); + if (c->prompt_saved != NULL) { + ud = c->prompt_saved; + n = utf8_strlen(c->prompt_saved); + } else { + if ((pb = paste_get_top(NULL)) == NULL) + return (0); + bufdata = paste_buffer_data(pb, &bufsize); + ud = xreallocarray(NULL, bufsize, sizeof *ud); + udp = ud; + for (i = 0; i != bufsize; /* nothing */) { + more = utf8_open(udp, bufdata[i]); + if (more == UTF8_MORE) { + while (++i != bufsize && more == UTF8_MORE) + more = utf8_append(udp, bufdata[i]); + if (more == UTF8_DONE) { + udp++; + continue; + } + i -= udp->have; + } + if (bufdata[i] <= 31 || bufdata[i] >= 127) + break; + utf8_set(udp, bufdata[i]); + udp++; + i++; + } + udp->size = 0; + n = udp - ud; + } + if (n == 0) + return (0); + + c->prompt_buffer = xreallocarray(c->prompt_buffer, size + n + 1, + sizeof *c->prompt_buffer); + if (c->prompt_index == size) { + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); + c->prompt_index += n; + c->prompt_buffer[c->prompt_index].size = 0; + } else { + memmove(c->prompt_buffer + c->prompt_index + n, + c->prompt_buffer + c->prompt_index, + (size + 1 - c->prompt_index) * sizeof *c->prompt_buffer); + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); + c->prompt_index += n; + } + + if (ud != c->prompt_saved) + free(ud); + return (1); +} + /* Handle keys in prompt. */ int status_prompt_key(struct client *c, key_code key) { struct options *oo = c->session->options; - struct paste_buffer *pb; char *s, *cp, word[64], prefix = '='; - const char *histstr, *bufdata, *ws = NULL; - u_char ch; - size_t size, n, off, idx, bufsize, used; + const char *histstr, *ws = NULL; + size_t size, n, off, idx, used; struct utf8_data tmp, *first, *last, *ud; int keys; @@ -1107,43 +1170,9 @@ status_prompt_key(struct client *c, key_code key) c->prompt_index = utf8_strlen(c->prompt_buffer); goto changed; case '\031': /* C-y */ - if (c->prompt_saved != NULL) { - ud = c->prompt_saved; - n = utf8_strlen(c->prompt_saved); - } else { - if ((pb = paste_get_top(NULL)) == NULL) - break; - bufdata = paste_buffer_data(pb, &bufsize); - for (n = 0; n < bufsize; n++) { - ch = (u_char)bufdata[n]; - if (ch < 32 || ch >= 127) - break; - } - ud = xreallocarray(NULL, n, sizeof *ud); - for (idx = 0; idx < n; idx++) - utf8_set(&ud[idx], bufdata[idx]); - } - - c->prompt_buffer = xreallocarray(c->prompt_buffer, size + n + 1, - sizeof *c->prompt_buffer); - if (c->prompt_index == size) { - memcpy(c->prompt_buffer + c->prompt_index, ud, - n * sizeof *c->prompt_buffer); - c->prompt_index += n; - c->prompt_buffer[c->prompt_index].size = 0; - } else { - memmove(c->prompt_buffer + c->prompt_index + n, - c->prompt_buffer + c->prompt_index, - (size + 1 - c->prompt_index) * - sizeof *c->prompt_buffer); - memcpy(c->prompt_buffer + c->prompt_index, ud, - n * sizeof *c->prompt_buffer); - c->prompt_index += n; - } - - if (ud != c->prompt_saved) - free(ud); - goto changed; + if (status_prompt_paste(c)) + goto changed; + break; case '\024': /* C-t */ idx = c->prompt_index; if (idx < size) From 3e3eb1dd0faa707fa6bdfd12d455ad711d775241 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 13:08:43 +0000 Subject: [PATCH 559/836] Don't remove group items for group 0 (no group). --- cmd-queue.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd-queue.c b/cmd-queue.c index c343a21264..0cfa57fe43 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -181,6 +181,8 @@ cmdq_remove_group(struct cmdq_item *item) { struct cmdq_item *this, *next; + if (item->group == 0) + return; this = TAILQ_NEXT(item, entry); while (this != NULL) { next = TAILQ_NEXT(this, entry); From 27bfb56ad5e19afa686ed6a99bf8b205fac98aef Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 14:03:44 +0000 Subject: [PATCH 560/836] Break the argument escaping code into a separate function and use it to escape key bindings in list-keys. Also escape ~ and ; and $ properly. --- arguments.c | 61 +++++++++++++++++++++++++++++++------------------ cmd-list-keys.c | 13 +++++++---- cmd-list.c | 12 ++++++---- cmd-parse.y | 2 +- options.c | 2 +- tmux.h | 3 ++- utf8.c | 7 +++++- 7 files changed, 65 insertions(+), 35 deletions(-) diff --git a/arguments.c b/arguments.c index f7288e81a7..eebb79ffbc 100644 --- a/arguments.c +++ b/arguments.c @@ -141,23 +141,15 @@ static void args_print_add_value(char **buf, size_t *len, struct args_entry *entry, struct args_value *value) { - static const char quoted[] = " #\"';$"; - char *escaped; - int flags; + char *escaped; if (**buf != '\0') args_print_add(buf, len, " -%c ", entry->flag); else args_print_add(buf, len, "-%c ", entry->flag); - flags = VIS_OCTAL|VIS_TAB|VIS_NL; - if (value->value[strcspn(value->value, quoted)] != '\0') - flags |= VIS_DQ; - utf8_stravis(&escaped, value->value, flags); - if (flags & VIS_DQ) - args_print_add(buf, len, "\"%s\"", escaped); - else - args_print_add(buf, len, "%s", escaped); + escaped = args_escape(value->value); + args_print_add(buf, len, "%s", escaped); free(escaped); } @@ -165,21 +157,13 @@ args_print_add_value(char **buf, size_t *len, struct args_entry *entry, static void args_print_add_argument(char **buf, size_t *len, const char *argument) { - static const char quoted[] = " #\"';$"; - char *escaped; - int flags; + char *escaped; if (**buf != '\0') args_print_add(buf, len, " "); - flags = VIS_OCTAL|VIS_TAB|VIS_NL; - if (argument[strcspn(argument, quoted)] != '\0') - flags |= VIS_DQ; - utf8_stravis(&escaped, argument, flags); - if (flags & VIS_DQ) - args_print_add(buf, len, "\"%s\"", escaped); - else - args_print_add(buf, len, "%s", escaped); + escaped = args_escape(argument); + args_print_add(buf, len, "%s", escaped); free(escaped); } @@ -219,6 +203,39 @@ args_print(struct args *args) return (buf); } +/* Escape an argument. */ +char * +args_escape(const char *s) +{ + static const char quoted[] = " #\"';$"; + char *escaped, *result; + int flags; + + if ((strchr(quoted, s[0]) != NULL || s[0] == '~') && s[1] == '\0') { + xasprintf(&escaped, "\\%c", s[0]); + return (escaped); + } + + flags = VIS_OCTAL|VIS_TAB|VIS_NL; + if (s[strcspn(s, quoted)] != '\0') + flags |= VIS_DQ; + utf8_stravis(&escaped, s, flags); + + if (flags & VIS_DQ) { + if (*escaped == '~') + xasprintf(&result, "\"\\%s\"", escaped); + else + xasprintf(&result, "\"%s\"", escaped); + } else { + if (*escaped == '~') + xasprintf(&result, "\\%s", escaped); + else + result = xstrdup(escaped); + } + free(escaped); + return (result); +} + /* Return if an argument is present. */ int args_has(struct args *args, u_char ch) diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 5efb0cd232..57f65c8e14 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -60,8 +60,8 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) struct args *args = self->args; struct key_table *table; struct key_binding *bd; - const char *key, *tablename, *r; - char *cp, tmp[BUFSIZ]; + const char *tablename, *r; + char *key, *cp, tmp[BUFSIZ]; int repeat, width, tablewidth, keywidth; if (self->entry == &cmd_list_commands_entry) @@ -83,7 +83,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) } bd = key_bindings_first(table); while (bd != NULL) { - key = key_string_lookup_key(bd->key); + key = args_escape(key_string_lookup_key(bd->key)); if (bd->flags & KEY_BINDING_REPEAT) repeat = 1; @@ -95,6 +95,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) if (width > keywidth) keywidth = width; + free(key); bd = key_bindings_next(table, bd); } table = key_bindings_next_table(table); @@ -108,7 +109,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) } bd = key_bindings_first(table); while (bd != NULL) { - key = key_string_lookup_key(bd->key); + key = args_escape(key_string_lookup_key(bd->key)); if (!repeat) r = ""; @@ -128,11 +129,13 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) strlcat(tmp, " ", sizeof tmp); free(cp); - cp = cmd_list_print(bd->cmdlist); + cp = cmd_list_print(bd->cmdlist, 1); strlcat(tmp, cp, sizeof tmp); free(cp); cmdq_print(item, "bind-key %s", tmp); + + free(key); bd = key_bindings_next(table, bd); } table = key_bindings_next_table(table); diff --git a/cmd-list.c b/cmd-list.c index ead0fb6164..fdf2095d39 100644 --- a/cmd-list.c +++ b/cmd-list.c @@ -129,7 +129,7 @@ cmd_list_free(struct cmd_list *cmdlist) } char * -cmd_list_print(struct cmd_list *cmdlist) +cmd_list_print(struct cmd_list *cmdlist, int escaped) { struct cmd *cmd; char *buf, *this; @@ -141,12 +141,16 @@ cmd_list_print(struct cmd_list *cmdlist) TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { this = cmd_print(cmd); - len += strlen(this) + 3; + len += strlen(this) + 4; buf = xrealloc(buf, len); strlcat(buf, this, len); - if (TAILQ_NEXT(cmd, qentry) != NULL) - strlcat(buf, " ; ", len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } free(this); } diff --git a/cmd-parse.y b/cmd-parse.y index 8b8f33ab31..e576d7768c 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -663,7 +663,7 @@ cmd_parse_from_file(FILE *f, struct cmd_parse_input *pi) cmd_list_free(cmdlist); } - s = cmd_list_print(result); + s = cmd_list_print(result, 0); log_debug("%s: %s", __func__, s); free(s); diff --git a/options.c b/options.c index fa8752b058..7d79cf3009 100644 --- a/options.c +++ b/options.c @@ -122,7 +122,7 @@ options_value_tostring(struct options_entry *o, union options_value *ov, char *s; if (OPTIONS_IS_COMMAND(o)) - return (cmd_list_print(ov->cmdlist)); + return (cmd_list_print(ov->cmdlist, 0)); if (OPTIONS_IS_STYLE(o)) return (xstrdup(style_tostring(&ov->style))); if (OPTIONS_IS_NUMBER(o)) { diff --git a/tmux.h b/tmux.h index f996b1f43d..8f8bd902e7 100644 --- a/tmux.h +++ b/tmux.h @@ -1950,6 +1950,7 @@ void args_set(struct args *, u_char, const char *); struct args *args_parse(const char *, int, char **); void args_free(struct args *); char *args_print(struct args *); +char *args_escape(const char *); int args_has(struct args *, u_char); const char *args_get(struct args *, u_char); const char *args_first_value(struct args *, u_char, struct args_value **); @@ -2022,7 +2023,7 @@ void cmd_list_append(struct cmd_list *, struct cmd *); void cmd_list_move(struct cmd_list *, struct cmd_list *); struct cmd_list *cmd_list_parse(int, char **, const char *, u_int, char **); void cmd_list_free(struct cmd_list *); -char *cmd_list_print(struct cmd_list *); +char *cmd_list_print(struct cmd_list *, int); /* cmd-queue.c */ struct cmdq_item *cmdq_get_command(struct cmd_list *, struct cmd_find_state *, diff --git a/utf8.c b/utf8.c index 08990634b2..29bbfa9e7c 100644 --- a/utf8.c +++ b/utf8.c @@ -18,6 +18,7 @@ #include +#include #include #include #include @@ -182,7 +183,11 @@ utf8_strvis(char *dst, const char *src, size_t len, int flag) /* Not a complete, valid UTF-8 character. */ src -= ud.have; } - if (src < end - 1) + if (src[0] == '$' && src < end - 1) { + if (isalpha((u_char)src[1]) || src[1] == '_') + *dst++ = '\\'; + *dst++ = '$'; + } else if (src < end - 1) dst = vis(dst, src[0], flag, src[1]); else if (src < end) dst = vis(dst, src[0], flag, '\0'); From 3e6e533779fd6fb1540333a7910f71a4b799da1a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 13:04:41 +0100 Subject: [PATCH 561/836] Add yacc(1) bits. --- .gitignore | 1 + Makefile.am | 2 +- configure.ac | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ad18d1de71..d01a0166a6 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ Makefile.in configure tmux.1.* *.dSYM +cmd-parse.c diff --git a/Makefile.am b/Makefile.am index 9db08a02c6..ceaae6adc0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ # Obvious program stuff. bin_PROGRAMS = tmux -CLEANFILES = tmux.1.mdoc tmux.1.man +CLEANFILES = tmux.1.mdoc tmux.1.man cmd-parse.c # Distribution tarball options. EXTRA_DIST = \ diff --git a/configure.ac b/configure.ac index 514548b566..355cf0b4db 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,7 @@ AC_PROG_CC_C99 AC_PROG_CPP AC_PROG_EGREP AC_PROG_INSTALL +AC_PROG_YACC PKG_PROG_PKG_CONFIG AC_USE_SYSTEM_EXTENSIONS From 83b9807370bcba7d37795767da477a3215f1c2a8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 13:32:18 +0100 Subject: [PATCH 562/836] Remove duplicate. --- configure.ac | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure.ac b/configure.ac index 355cf0b4db..d09fec9d53 100644 --- a/configure.ac +++ b/configure.ac @@ -659,7 +659,5 @@ CFLAGS="$SAVED_CFLAGS" AC_SUBST(AM_LDFLAGS) LDFLAGS="$SAVED_LDFLAGS" -AC_PROG_YACC - # autoconf should create a Makefile. AC_OUTPUT(Makefile) From 6bb505eb7379b82f2d3da1ce31bf1657670124ed Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 15:11:13 +0100 Subject: [PATCH 563/836] CHANGES: mention yacc --- CHANGES | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGES b/CHANGES index 1c37c5ecf7..3caa97964e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,22 @@ CHANGES FROM 2.9 to X.X +* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1) + instead. Most configuration files shouldn't need changing, however, the + following will need quoting: + + #{} + + That is, formats, since it would otherwise be consisdered a comment. + + Entirely the same parser is now used for parsing the configuration file + and for string commands. This means that constructs previously only + available in .tmux.conf, such as %if, can now be used in string commands + (for example, those given to if-shell - not commands invoked from the + shell, they are still parsed by the shell itself). + + DOWNSTREAM PACKAGERS: please make your tmux builds depend on yacc/bison or + similar. + * Add support for the overline attribute (SGR 53). The Smol capability is needed in terminal-overrides. From 238d2aa870fd851259d64d816832a0117dddf09b Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 15:11:13 +0100 Subject: [PATCH 564/836] CHANGES: mention yacc --- CHANGES | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGES b/CHANGES index 1c37c5ecf7..3caa97964e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,22 @@ CHANGES FROM 2.9 to X.X +* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1) + instead. Most configuration files shouldn't need changing, however, the + following will need quoting: + + #{} + + That is, formats, since it would otherwise be consisdered a comment. + + Entirely the same parser is now used for parsing the configuration file + and for string commands. This means that constructs previously only + available in .tmux.conf, such as %if, can now be used in string commands + (for example, those given to if-shell - not commands invoked from the + shell, they are still parsed by the shell itself). + + DOWNSTREAM PACKAGERS: please make your tmux builds depend on yacc/bison or + similar. + * Add support for the overline attribute (SGR 53). The Smol capability is needed in terminal-overrides. From d0c462f718f4769140da73328cdcd1cbd2048ab7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 12:47:52 +0000 Subject: [PATCH 565/836] Fix length calculation for pasting UTF-8 characters in the status line, GitHub issue 1753. --- status.c | 111 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 41 deletions(-) diff --git a/status.c b/status.c index ef8cf14df4..ce36cc3c7e 100644 --- a/status.c +++ b/status.c @@ -846,16 +846,79 @@ status_prompt_translate_key(struct client *c, key_code key, key_code *new_key) return (0); } +/* Paste into prompt. */ +static int +status_prompt_paste(struct client *c) +{ + struct paste_buffer *pb; + const char *bufdata; + size_t size, n, bufsize; + u_int i; + struct utf8_data *ud, *udp; + enum utf8_state more; + + size = utf8_strlen(c->prompt_buffer); + if (c->prompt_saved != NULL) { + ud = c->prompt_saved; + n = utf8_strlen(c->prompt_saved); + } else { + if ((pb = paste_get_top(NULL)) == NULL) + return (0); + bufdata = paste_buffer_data(pb, &bufsize); + ud = xreallocarray(NULL, bufsize, sizeof *ud); + udp = ud; + for (i = 0; i != bufsize; /* nothing */) { + more = utf8_open(udp, bufdata[i]); + if (more == UTF8_MORE) { + while (++i != bufsize && more == UTF8_MORE) + more = utf8_append(udp, bufdata[i]); + if (more == UTF8_DONE) { + udp++; + continue; + } + i -= udp->have; + } + if (bufdata[i] <= 31 || bufdata[i] >= 127) + break; + utf8_set(udp, bufdata[i]); + udp++; + i++; + } + udp->size = 0; + n = udp - ud; + } + if (n == 0) + return (0); + + c->prompt_buffer = xreallocarray(c->prompt_buffer, size + n + 1, + sizeof *c->prompt_buffer); + if (c->prompt_index == size) { + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); + c->prompt_index += n; + c->prompt_buffer[c->prompt_index].size = 0; + } else { + memmove(c->prompt_buffer + c->prompt_index + n, + c->prompt_buffer + c->prompt_index, + (size + 1 - c->prompt_index) * sizeof *c->prompt_buffer); + memcpy(c->prompt_buffer + c->prompt_index, ud, + n * sizeof *c->prompt_buffer); + c->prompt_index += n; + } + + if (ud != c->prompt_saved) + free(ud); + return (1); +} + /* Handle keys in prompt. */ int status_prompt_key(struct client *c, key_code key) { struct options *oo = c->session->options; - struct paste_buffer *pb; char *s, *cp, word[64], prefix = '='; - const char *histstr, *bufdata, *ws = NULL; - u_char ch; - size_t size, n, off, idx, bufsize, used; + const char *histstr, *ws = NULL; + size_t size, n, off, idx, used; struct utf8_data tmp, *first, *last, *ud; int keys; @@ -1107,43 +1170,9 @@ status_prompt_key(struct client *c, key_code key) c->prompt_index = utf8_strlen(c->prompt_buffer); goto changed; case '\031': /* C-y */ - if (c->prompt_saved != NULL) { - ud = c->prompt_saved; - n = utf8_strlen(c->prompt_saved); - } else { - if ((pb = paste_get_top(NULL)) == NULL) - break; - bufdata = paste_buffer_data(pb, &bufsize); - for (n = 0; n < bufsize; n++) { - ch = (u_char)bufdata[n]; - if (ch < 32 || ch >= 127) - break; - } - ud = xreallocarray(NULL, n, sizeof *ud); - for (idx = 0; idx < n; idx++) - utf8_set(&ud[idx], bufdata[idx]); - } - - c->prompt_buffer = xreallocarray(c->prompt_buffer, size + n + 1, - sizeof *c->prompt_buffer); - if (c->prompt_index == size) { - memcpy(c->prompt_buffer + c->prompt_index, ud, - n * sizeof *c->prompt_buffer); - c->prompt_index += n; - c->prompt_buffer[c->prompt_index].size = 0; - } else { - memmove(c->prompt_buffer + c->prompt_index + n, - c->prompt_buffer + c->prompt_index, - (size + 1 - c->prompt_index) * - sizeof *c->prompt_buffer); - memcpy(c->prompt_buffer + c->prompt_index, ud, - n * sizeof *c->prompt_buffer); - c->prompt_index += n; - } - - if (ud != c->prompt_saved) - free(ud); - goto changed; + if (status_prompt_paste(c)) + goto changed; + break; case '\024': /* C-t */ idx = c->prompt_index; if (idx < size) From 7d702f3cef4c75130ad78ab2158fa1aac45b7ea1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 13:08:43 +0000 Subject: [PATCH 566/836] Don't remove group items for group 0 (no group). --- cmd-queue.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd-queue.c b/cmd-queue.c index c343a21264..0cfa57fe43 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -181,6 +181,8 @@ cmdq_remove_group(struct cmdq_item *item) { struct cmdq_item *this, *next; + if (item->group == 0) + return; this = TAILQ_NEXT(item, entry); while (this != NULL) { next = TAILQ_NEXT(this, entry); From 1a6540fea0285fd8eb10dd476b249c54e3f43d7a Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 15:15:34 +0100 Subject: [PATCH 567/836] CHANGES: remove note to packagers --- CHANGES | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES b/CHANGES index 3caa97964e..7423344a1f 100644 --- a/CHANGES +++ b/CHANGES @@ -14,9 +14,6 @@ CHANGES FROM 2.9 to X.X (for example, those given to if-shell - not commands invoked from the shell, they are still parsed by the shell itself). - DOWNSTREAM PACKAGERS: please make your tmux builds depend on yacc/bison or - similar. - * Add support for the overline attribute (SGR 53). The Smol capability is needed in terminal-overrides. From 2148fe33cd867c76b79c3af0c33050019813bbcf Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 23 May 2019 15:15:34 +0100 Subject: [PATCH 568/836] CHANGES: remove note to packagers --- CHANGES | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES b/CHANGES index 3caa97964e..7423344a1f 100644 --- a/CHANGES +++ b/CHANGES @@ -14,9 +14,6 @@ CHANGES FROM 2.9 to X.X (for example, those given to if-shell - not commands invoked from the shell, they are still parsed by the shell itself). - DOWNSTREAM PACKAGERS: please make your tmux builds depend on yacc/bison or - similar. - * Add support for the overline attribute (SGR 53). The Smol capability is needed in terminal-overrides. From 389cf63cbc027c995900bbdd6e68f4f5a96e5c08 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 15:18:09 +0100 Subject: [PATCH 569/836] Tweak text. --- CHANGES | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 7423344a1f..46a05ff199 100644 --- a/CHANGES +++ b/CHANGES @@ -1,12 +1,9 @@ CHANGES FROM 2.9 to X.X -* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1) - instead. Most configuration files shouldn't need changing, however, the - following will need quoting: - - #{} - - That is, formats, since it would otherwise be consisdered a comment. +* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most + configuration files shouldn't need to be changed but formats now need to be + quoted, so a bare #{...} becomes "#{...}". This includes #{ which may + previously have looked like a comment (for example at the start of a line). Entirely the same parser is now used for parsing the configuration file and for string commands. This means that constructs previously only From eb8b51effcd2dee7b95c811c894bf29387a272c9 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 14:44:33 +0000 Subject: [PATCH 570/836] Fix drawing of status-right when it is aligned to the centre, GitHub issue 1754. --- format-draw.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/format-draw.c b/format-draw.c index 514042543c..f8882ac2f7 100644 --- a/format-draw.c +++ b/format-draw.c @@ -345,12 +345,6 @@ format_draw_centre(struct screen_write_ctx *octx, u_int available, u_int ocx, /* Write left at 0. */ format_draw_put(octx, ocx, ocy, left, frs, 0, 0, width_left); - /* Write after at available - width_after. */ - format_draw_put(octx, ocx, ocy, after, frs, - available - width_after, - after->cx - width_after, - width_after); - /* Write right at available - width_right. */ format_draw_put(octx, ocx, ocy, right, frs, available - width_right, @@ -374,10 +368,10 @@ format_draw_centre(struct screen_write_ctx *octx, u_int available, u_int ocx, /* * Write after at - * middle + width_list / 2 - width_centre. + * middle - width_list / 2 + width_list */ format_draw_put(octx, ocx, ocy, after, frs, - middle + width_list / 2, + middle - width_list / 2 + width_list, 0, width_after); From f006116bac736b1b4500b05584056d572922155d Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 18:22:13 +0000 Subject: [PATCH 571/836] Environment variables can start with { also. --- utf8.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utf8.c b/utf8.c index 29bbfa9e7c..fc01cddb32 100644 --- a/utf8.c +++ b/utf8.c @@ -184,7 +184,9 @@ utf8_strvis(char *dst, const char *src, size_t len, int flag) src -= ud.have; } if (src[0] == '$' && src < end - 1) { - if (isalpha((u_char)src[1]) || src[1] == '_') + if (isalpha((u_char)src[1]) || + src[1] == '_' || + src[1] == '{') *dst++ = '\\'; *dst++ = '$'; } else if (src < end - 1) From e817821104b886de7afdf7c365aeced134d6d966 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 23 May 2019 19:27:41 +0100 Subject: [PATCH 572/836] Mention \. --- CHANGES | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 46a05ff199..66270be513 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,15 @@ CHANGES FROM 2.9 to X.X * INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most - configuration files shouldn't need to be changed but formats now need to be - quoted, so a bare #{...} becomes "#{...}". This includes #{ which may - previously have looked like a comment (for example at the start of a line). + configuration files shouldn't need to be changed but there are the following + differences: + + 1) Formats now need to be quoted, so a bare #{...} becomes "#{...}". This + includes #{ which may previously have looked like a comment (for example at + the start of a line). + + 2) A \ on its own must be escaped or quoted as either \\ or '\' (the latter + works on older tmux versions). Entirely the same parser is now used for parsing the configuration file and for string commands. This means that constructs previously only From 6c260af56db8a71747c1dc51fe6bba2f51c47f4d Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 18:33:53 +0000 Subject: [PATCH 573/836] Use the same argument escaping code for options as well. --- cmd-show-options.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-show-options.c b/cmd-show-options.c index 2b4651b92f..6e3eca0d0b 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -209,8 +209,8 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, if (args_has(self->args, 'v')) cmdq_print(item, "%s", value); else if (options_isstring(o)) { - utf8_stravis(&escaped, value, VIS_OCTAL|VIS_TAB|VIS_NL|VIS_DQ); - cmdq_print(item, "%s \"%s\"", name, escaped); + escaped = args_escape(value); + cmdq_print(item, "%s %s", name, escaped); free(escaped); } else cmdq_print(item, "%s %s", name, value); From f3e01ecc42e34a914ee390658625e920d321734a Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 23 May 2019 18:39:00 +0000 Subject: [PATCH 574/836] Fix line numbers - commands are added after the line ends so they need to get line - 1. --- cfg.c | 1 + cmd-parse.y | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cfg.c b/cfg.c index aa5c13b72f..d643598028 100644 --- a/cfg.c +++ b/cfg.c @@ -126,6 +126,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, memset(&pi, 0, sizeof pi); pi.flags = flags; pi.file = path; + pi.line = 1; pr = cmd_parse_from_file(f, &pi); fclose(f); diff --git a/cmd-parse.y b/cmd-parse.y index e576d7768c..e9ca376ca7 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -356,7 +356,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line; + $$->line = ps->input->line - 1; } | assignment TOKEN arguments @@ -365,7 +365,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line; + $$->line = ps->input->line - 1; $$->argc = $3.argc; $$->argv = $3.argv; From 0dc8b7d5d8a3607de11732f660aa64aaf2844d11 Mon Sep 17 00:00:00 2001 From: espie Date: Thu, 23 May 2019 21:36:42 +0000 Subject: [PATCH 575/836] unbreak build, okay nicm@ --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index b15da7bebb..07d0b450eb 100644 --- a/Makefile +++ b/Makefile @@ -127,6 +127,8 @@ CDIAGFLAGS+= -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations CDIAGFLAGS+= -Wwrite-strings -Wshadow -Wpointer-arith -Wsign-compare CDIAGFLAGS+= -Wundef -Wbad-function-cast -Winline -Wcast-align +CFLAGS += -I${.CURDIR} + LDADD= -lutil -lcurses -levent DPADD= ${LIBUTIL} ${LIBCURSES} ${LIBEVENT} From 930245d7ffde91464865122a82437209680458c8 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 06:58:10 +0000 Subject: [PATCH 576/836] Make cmd_log_argv take a printf-like format for the prefix. --- cmd.c | 19 +++++++++++++------ spawn.c | 2 +- tmux.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cmd.c b/cmd.c index 8736a6c75e..ee44361426 100644 --- a/cmd.c +++ b/cmd.c @@ -205,13 +205,20 @@ const struct cmd_entry *cmd_table[] = { NULL }; -void -cmd_log_argv(int argc, char **argv, const char *prefix) +void printflike(3, 4) +cmd_log_argv(int argc, char **argv, const char *fmt, ...) { - int i; + char *prefix; + va_list ap; + int i; + + va_start(ap, fmt); + xvasprintf(&prefix, fmt, ap); + va_end(ap); for (i = 0; i < argc; i++) log_debug("%s: argv[%d]=%s", prefix, i, argv[i]); + free(prefix); } void @@ -245,7 +252,7 @@ cmd_pack_argv(int argc, char **argv, char *buf, size_t len) if (argc == 0) return (0); - cmd_log_argv(argc, argv, __func__); + cmd_log_argv(argc, argv, "%s", __func__); *buf = '\0'; for (i = 0; i < argc; i++) { @@ -282,7 +289,7 @@ cmd_unpack_argv(char *buf, size_t len, int argc, char ***argv) buf += arglen; len -= arglen; } - cmd_log_argv(argc, *argv, __func__); + cmd_log_argv(argc, *argv, "%s", __func__); return (0); } @@ -437,7 +444,7 @@ cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) entry = cmd_find(name, cause); if (entry == NULL) return (NULL); - cmd_log_argv(argc, argv, entry->name); + cmd_log_argv(argc, argv, "%s: %s", __func__, entry->name); args = args_parse(entry->args.template, argc, argv); if (args == NULL) diff --git a/spawn.c b/spawn.c index 84f468e288..986a1e9dc5 100644 --- a/spawn.c +++ b/spawn.c @@ -329,7 +329,7 @@ spawn_pane(struct spawn_context *sc, char **cause) } if (cwd != NULL) log_debug("%s: cwd=%s", __func__, cwd); - cmd_log_argv(new_wp->argc, new_wp->argv, __func__); + cmd_log_argv(new_wp->argc, new_wp->argv, "%s", __func__); environ_log(child, "%s: environment ", __func__); /* If the command is empty, don't fork a child process. */ diff --git a/tmux.h b/tmux.h index 8f8bd902e7..fe4d5b9004 100644 --- a/tmux.h +++ b/tmux.h @@ -1987,7 +1987,7 @@ int cmd_find_from_mouse(struct cmd_find_state *, int cmd_find_from_nothing(struct cmd_find_state *, int); /* cmd.c */ -void cmd_log_argv(int, char **, const char *); +void printflike(3, 4) cmd_log_argv(int, char **, const char *, ...); void cmd_prepend_argv(int *, char ***, char *); void cmd_append_argv(int *, char ***, char *); int cmd_pack_argv(int, char **, char *, size_t); From a69211aff5968f2bf71f0471cc67124dbd4597dd Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 25 May 2019 08:09:23 +0100 Subject: [PATCH 577/836] Fix up regress test. --- regress/control-client-size.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/regress/control-client-size.sh b/regress/control-client-size.sh index dd1850c541..5847ede3e0 100644 --- a/regress/control-client-size.sh +++ b/regress/control-client-size.sh @@ -23,7 +23,7 @@ refresh -C 100,50 ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:100 49\n"|cmp -s $OUT - || exit 1 +printf ":80 24\n:100 50\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null $TMUX -f/dev/null new -d || exit 1 @@ -34,7 +34,7 @@ refresh -C 80,24 ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":80 24\n:80 23\n"|cmp -s $OUT - || exit 1 +printf ":80 24\n:80 24\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null cat <$TMP @@ -43,7 +43,7 @@ refresh -C 80,24 ls -F':#{window_width} #{window_height}' EOF grep ^: $TMP >$OUT -printf ":100 50\n:80 23\n"|cmp -s $OUT - || exit 1 +printf ":100 50\n:80 24\n"|cmp -s $OUT - || exit 1 $TMUX kill-server 2>/dev/null exit 0 From 6b0fa14470df848ae0735a3e0bab393c241acb86 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 07:15:53 +0000 Subject: [PATCH 578/836] Fix error handling in if-shell. --- cmd-if-shell.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 40e2b1c3a9..84f66657d5 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -159,7 +159,7 @@ cmd_if_shell_callback(struct job *job) struct cmd_if_shell_data *cdata = job_get_data(job); struct client *c = cdata->client; struct mouse_event *m = &cdata->mouse; - struct cmdq_item *new_item; + struct cmdq_item *new_item = NULL; char *cmd; int status; struct cmd_parse_result *pr; @@ -175,10 +175,10 @@ cmd_if_shell_callback(struct job *job) pr = cmd_parse_from_string(cmd, &cdata->input); switch (pr->status) { case CMD_PARSE_EMPTY: - new_item = NULL; break; case CMD_PARSE_ERROR: - new_item = cmdq_get_error(pr->error); + if (cdata->item != NULL) + cmdq_error(cdata->item, "%s", pr->error); free(pr->error); break; case CMD_PARSE_SUCCESS: From f8d3d247d884a9dc0b23f2799944c15630cab28f Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 07:18:20 +0000 Subject: [PATCH 579/836] Merge cmd_list_parse into cmd-parse.y so it can use the new alias processing code. --- client.c | 14 ++--- cmd-bind-key.c | 85 ++++++------------------------ cmd-list.c | 56 -------------------- cmd-parse.y | 136 +++++++++++++++++++++++++++++++++++++++++------- server-client.c | 23 +++++--- tmux.h | 3 +- 6 files changed, 158 insertions(+), 159 deletions(-) diff --git a/client.c b/client.c index 1054ccaef9..b376b03849 100644 --- a/client.c +++ b/client.c @@ -215,14 +215,13 @@ client_exit_message(void) int client_main(struct event_base *base, int argc, char **argv, int flags) { + struct cmd_parse_result *pr; struct cmd *cmd; - struct cmd_list *cmdlist; struct msg_command_data *data; int cmdflags, fd, i; const char *ttynam, *cwd; pid_t ppid; enum msgtype msg; - char *cause; struct termios tio, saved_tio; size_t size; @@ -248,14 +247,15 @@ client_main(struct event_base *base, int argc, char **argv, int flags) * later in server) but it is necessary to get the start server * flag. */ - cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause); - if (cmdlist != NULL) { - TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + pr = cmd_parse_from_arguments(argc, argv, NULL); + if (pr->status == CMD_PARSE_SUCCESS) { + TAILQ_FOREACH(cmd, &pr->cmdlist->list, qentry) { if (cmd->entry->flags & CMD_STARTSERVER) cmdflags |= CMD_STARTSERVER; } - cmd_list_free(cmdlist); - } + cmd_list_free(pr->cmdlist); + } else + free(pr->error); } /* Create client process structure (starts logging). */ diff --git a/cmd-bind-key.c b/cmd-bind-key.c index 4650afb1fe..ed2f69d15d 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -24,20 +24,17 @@ #include "tmux.h" /* - * Bind a key to a command, this recurses through cmd_*. + * Bind a key to a command. */ static enum cmd_retval cmd_bind_key_exec(struct cmd *, struct cmdq_item *); -static enum cmd_retval cmd_bind_key_mode_table(struct cmd *, - struct cmdq_item *, key_code); - const struct cmd_entry cmd_bind_key_entry = { .name = "bind-key", .alias = "bind", - .args = { "cnrt:T:", 1, -1 }, - .usage = "[-cnr] [-t mode-table] [-T key-table] key " + .args = { "cnrT:", 2, -1 }, + .usage = "[-cnr] [-T key-table] key " "command [arguments]", .flags = CMD_AFTERHOOK, @@ -47,23 +44,10 @@ const struct cmd_entry cmd_bind_key_entry = { static enum cmd_retval cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) { - struct args *args = self->args; - char *cause; - struct cmd_list *cmdlist; - key_code key; - const char *tablename; - - if (args_has(args, 't')) { - if (args->argc != 2 && args->argc != 3) { - cmdq_error(item, "not enough arguments"); - return (CMD_RETURN_ERROR); - } - } else { - if (args->argc < 2) { - cmdq_error(item, "not enough arguments"); - return (CMD_RETURN_ERROR); - } - } + struct args *args = self->args; + key_code key; + const char *tablename; + struct cmd_parse_result *pr; key = key_string_lookup_string(args->argv[0]); if (key == KEYC_NONE || key == KEYC_UNKNOWN) { @@ -71,9 +55,6 @@ cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - if (args_has(args, 't')) - return (cmd_bind_key_mode_table(self, item, key)); - if (args_has(args, 'T')) tablename = args_get(args, 'T'); else if (args_has(args, 'n')) @@ -81,50 +62,18 @@ cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) else tablename = "prefix"; - cmdlist = cmd_list_parse(args->argc - 1, args->argv + 1, NULL, 0, - &cause); - if (cmdlist == NULL) { - cmdq_error(item, "%s", cause); - free(cause); - return (CMD_RETURN_ERROR); - } - - key_bindings_add(tablename, key, args_has(args, 'r'), cmdlist); - return (CMD_RETURN_NORMAL); -} - -static enum cmd_retval -cmd_bind_key_mode_table(struct cmd *self, struct cmdq_item *item, key_code key) -{ - struct args *args = self->args; - const char *tablename; - const struct mode_key_table *mtab; - struct mode_key_binding *mbind, mtmp; - enum mode_key_cmd cmd; - - tablename = args_get(args, 't'); - if ((mtab = mode_key_findtable(tablename)) == NULL) { - cmdq_error(item, "unknown key table: %s", tablename); - return (CMD_RETURN_ERROR); - } - - cmd = mode_key_fromstring(mtab->cmdstr, args->argv[1]); - if (cmd == MODEKEY_NONE) { - cmdq_error(item, "unknown command: %s", args->argv[1]); + pr = cmd_parse_from_arguments(args->argc - 1, args->argv + 1, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + cmdq_error(item, "empty command"); return (CMD_RETURN_ERROR); - } - - if (args->argc != 2) { - cmdq_error(item, "no argument allowed"); + case CMD_PARSE_ERROR: + cmdq_error(item, "%s", pr->error); + free(pr->error); return (CMD_RETURN_ERROR); + case CMD_PARSE_SUCCESS: + break; } - - mtmp.key = key; - if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) == NULL) { - mbind = xmalloc(sizeof *mbind); - mbind->key = mtmp.key; - RB_INSERT(mode_key_tree, mtab->tree, mbind); - } - mbind->cmd = cmd; + key_bindings_add(tablename, key, args_has(args, 'r'), pr->cmdlist); return (CMD_RETURN_NORMAL); } diff --git a/cmd-list.c b/cmd-list.c index fdf2095d39..82ffe55c02 100644 --- a/cmd-list.c +++ b/cmd-list.c @@ -56,62 +56,6 @@ cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) cmdlist->group = cmd_list_next_group++; } -struct cmd_list * -cmd_list_parse(int argc, char **argv, const char *file, u_int line, - char **cause) -{ - struct cmd_list *cmdlist; - struct cmd *cmd; - int i, lastsplit; - size_t arglen, new_argc; - char **copy_argv, **new_argv; - - copy_argv = cmd_copy_argv(argc, argv); - - cmdlist = cmd_list_new(); - - lastsplit = 0; - for (i = 0; i < argc; i++) { - arglen = strlen(copy_argv[i]); - if (arglen == 0 || copy_argv[i][arglen - 1] != ';') - continue; - copy_argv[i][arglen - 1] = '\0'; - - if (arglen > 1 && copy_argv[i][arglen - 2] == '\\') { - copy_argv[i][arglen - 2] = ';'; - continue; - } - - new_argc = i - lastsplit; - new_argv = copy_argv + lastsplit; - if (arglen != 1) - new_argc++; - - cmd = cmd_parse(new_argc, new_argv, file, line, cause); - if (cmd == NULL) - goto bad; - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); - - lastsplit = i + 1; - } - - if (lastsplit != argc) { - cmd = cmd_parse(argc - lastsplit, copy_argv + lastsplit, - file, line, cause); - if (cmd == NULL) - goto bad; - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); - } - - cmd_free_argv(argc, copy_argv); - return (cmdlist); - -bad: - cmd_list_free(cmdlist); - cmd_free_argv(argc, copy_argv); - return (NULL); -} - void cmd_list_free(struct cmd_list *cmdlist) { diff --git a/cmd-parse.y b/cmd-parse.y index e9ca376ca7..be7c003988 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -541,34 +541,21 @@ cmd_parse_run_parser(FILE *f, struct cmd_parse_input *pi, char **cause) return (cmds); } -struct cmd_parse_result * -cmd_parse_from_file(FILE *f, struct cmd_parse_input *pi) +static struct cmd_parse_result * +cmd_parse_build_commands(struct cmd_parse_commands *cmds, + struct cmd_parse_input *pi) { static struct cmd_parse_result pr; - struct cmd_parse_input input; - struct cmd_parse_commands *cmds, *cmds2; + struct cmd_parse_commands *cmds2; struct cmd_parse_command *cmd, *cmd2, *next, *next2, *after; + FILE *f; u_int line = UINT_MAX; int i; struct cmd_list *cmdlist = NULL, *result; struct cmd *add; char *alias, *cause, *s; - if (pi == NULL) { - memset(&input, 0, sizeof input); - pi = &input; - } - memset(&pr, 0, sizeof pr); - - /* - * Parse the file into a list of commands. - */ - cmds = cmd_parse_run_parser(f, pi, &cause); - if (cmds == NULL) { - pr.status = CMD_PARSE_ERROR; - pr.error = cause; - return (&pr); - } + /* Check for an empty list. */ if (TAILQ_EMPTY(cmds)) { free(cmds); pr.status = CMD_PARSE_EMPTY; @@ -677,13 +664,46 @@ out: return (&pr); } +struct cmd_parse_result * +cmd_parse_from_file(FILE *f, struct cmd_parse_input *pi) +{ + static struct cmd_parse_result pr; + struct cmd_parse_input input; + struct cmd_parse_commands *cmds; + char *cause; + + if (pi == NULL) { + memset(&input, 0, sizeof input); + pi = &input; + } + memset(&pr, 0, sizeof pr); + + /* + * Parse the file into a list of commands. + */ + cmds = cmd_parse_run_parser(f, pi, &cause); + if (cmds == NULL) { + pr.status = CMD_PARSE_ERROR; + pr.error = cause; + return (&pr); + } + return (cmd_parse_build_commands(cmds, pi)); +} + struct cmd_parse_result * cmd_parse_from_string(const char *s, struct cmd_parse_input *pi) { static struct cmd_parse_result pr; struct cmd_parse_result *prp; + struct cmd_parse_input input; FILE *f; + if (pi == NULL) { + memset(&input, 0, sizeof input); + pi = &input; + } + memset(&pr, 0, sizeof pr); + if (*s == '\0') { pr.status = CMD_PARSE_EMPTY; pr.cmdlist = NULL; @@ -703,6 +723,84 @@ cmd_parse_from_string(const char *s, struct cmd_parse_input *pi) return (prp); } +struct cmd_parse_result * +cmd_parse_from_arguments(int argc, char **argv, struct cmd_parse_input *pi) +{ + struct cmd_parse_input input; + struct cmd_parse_commands *cmds; + struct cmd_parse_command *cmd; + char **copy, **new_argv; + size_t size; + int i, last, new_argc; + + /* + * The commands are already split up into arguments, so just separate + * into a set of commands by ';'. + */ + + if (pi == NULL) { + memset(&input, 0, sizeof input); + pi = &input; + } + cmd_log_argv(argc, argv, "%s", __func__); + + cmds = xmalloc(sizeof *cmds); + TAILQ_INIT(cmds); + copy = cmd_copy_argv(argc, argv); + + last = 0; + for (i = 0; i < argc; i++) { + size = strlen(copy[i]); + if (size == 0 || copy[i][size - 1] != ';') + continue; + copy[i][--size] = '\0'; + if (size > 0 && copy[i][size - 1] == '\\') { + copy[i][size - 1] = ';'; + continue; + } + + new_argc = i - last; + new_argv = copy + last; + if (size != 0) + new_argc++; + + if (new_argc != 0) { + cmd_log_argv(new_argc, new_argv, "%s: at %u", __func__, + i); + + cmd = xcalloc(1, sizeof *cmd); + cmd->name = xstrdup(new_argv[0]); + cmd->line = pi->line; + + cmd->argc = new_argc - 1; + cmd->argv = cmd_copy_argv(new_argc - 1, new_argv + 1); + + TAILQ_INSERT_TAIL(cmds, cmd, entry); + } + + last = i + 1; + } + if (last != argc) { + new_argv = copy + last; + new_argc = argc - last; + + if (new_argc != 0) { + cmd_log_argv(new_argc, new_argv, "%s: at %u", __func__, + last); + + cmd = xcalloc(1, sizeof *cmd); + cmd->name = xstrdup(new_argv[0]); + cmd->line = pi->line; + + cmd->argc = new_argc - 1; + cmd->argv = cmd_copy_argv(new_argc - 1, new_argv + 1); + + TAILQ_INSERT_TAIL(cmds, cmd, entry); + } + } + return (cmd_parse_build_commands(cmds, pi)); +} + static int printflike(1, 2) yyerror(const char *fmt, ...) { diff --git a/server-client.c b/server-client.c index e71cce15d5..52842e3855 100644 --- a/server-client.c +++ b/server-client.c @@ -1775,9 +1775,9 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg) struct msg_command_data data; char *buf; size_t len; - struct cmd_list *cmdlist = NULL; int argc; char **argv, *cause; + struct cmd_parse_result *pr; if (c->flags & CLIENT_EXIT) return; @@ -1803,24 +1803,31 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg) *argv = xstrdup("new-session"); } - if ((cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause)) == NULL) { - cmd_free_argv(argc, argv); + pr = cmd_parse_from_arguments(argc, argv, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + cause = xstrdup("empty command"); goto error; + case CMD_PARSE_ERROR: + cause = pr->error; + goto error; + case CMD_PARSE_SUCCESS: + break; } cmd_free_argv(argc, argv); - cmdq_append(c, cmdq_get_command(cmdlist, NULL, NULL, 0)); + cmdq_append(c, cmdq_get_command(pr->cmdlist, NULL, NULL, 0)); cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL)); - cmd_list_free(cmdlist); + + cmd_list_free(pr->cmdlist); return; error: + cmd_free_argv(argc, argv); + cmdq_append(c, cmdq_get_error(cause)); free(cause); - if (cmdlist != NULL) - cmd_list_free(cmdlist); - c->flags |= CLIENT_EXIT; } diff --git a/tmux.h b/tmux.h index fe4d5b9004..0c4024cc6c 100644 --- a/tmux.h +++ b/tmux.h @@ -2016,12 +2016,13 @@ void cmd_parse_empty(struct cmd_parse_input *); struct cmd_parse_result *cmd_parse_from_file(FILE *, struct cmd_parse_input *); struct cmd_parse_result *cmd_parse_from_string(const char *, struct cmd_parse_input *); +struct cmd_parse_result *cmd_parse_from_arguments(int, char **, + struct cmd_parse_input *); /* cmd-list.c */ struct cmd_list *cmd_list_new(void); void cmd_list_append(struct cmd_list *, struct cmd *); void cmd_list_move(struct cmd_list *, struct cmd_list *); -struct cmd_list *cmd_list_parse(int, char **, const char *, u_int, char **); void cmd_list_free(struct cmd_list *); char *cmd_list_print(struct cmd_list *, int); From d7586d3d65bb1361928205751ea7a69f69a4aa87 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 10:44:09 +0000 Subject: [PATCH 580/836] Use client name when logging command queue. --- cmd-queue.c | 4 +-- cmd.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 84 insertions(+), 5 deletions(-) diff --git a/cmd-queue.c b/cmd-queue.c index 0cfa57fe43..c707dd7b4f 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -32,11 +32,11 @@ static struct cmdq_list global_queue = TAILQ_HEAD_INITIALIZER(global_queue); static const char * cmdq_name(struct client *c) { - static char s[32]; + static char s[256]; if (c == NULL) return (""); - xsnprintf(s, sizeof s, "<%p>", c); + xsnprintf(s, sizeof s, "<%s>", c->name); return (s); } diff --git a/cmd.c b/cmd.c index ee44361426..a071dec533 100644 --- a/cmd.c +++ b/cmd.c @@ -205,6 +205,8 @@ const struct cmd_entry *cmd_table[] = { NULL }; +static u_int cmd_list_next_group = 1; + void printflike(3, 4) cmd_log_argv(int argc, char **argv, const char *fmt, ...) { @@ -381,9 +383,9 @@ cmd_get_alias(const char *name) static const struct cmd_entry * cmd_find(const char *name, char **cause) { - const struct cmd_entry **loop, *entry, *found = NULL; - int ambiguous; - char s[BUFSIZ]; + const struct cmd_entry **loop, *entry, *found = NULL; + int ambiguous; + char s[BUFSIZ]; ambiguous = 0; for (loop = cmd_table; *loop != NULL; loop++) { @@ -502,6 +504,83 @@ cmd_print(struct cmd *cmd) return (out); } +struct cmd_list * +cmd_list_new(void) +{ + struct cmd_list *cmdlist; + + cmdlist = xcalloc(1, sizeof *cmdlist); + cmdlist->references = 1; + cmdlist->group = cmd_list_next_group++; + TAILQ_INIT(&cmdlist->list); + return (cmdlist); +} + +void +cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) +{ + cmd->group = cmdlist->group; + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); +} + +void +cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) +{ + struct cmd *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { + TAILQ_REMOVE(&from->list, cmd, qentry); + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); + } + cmdlist->group = cmd_list_next_group++; +} + +void +cmd_list_free(struct cmd_list *cmdlist) +{ + struct cmd *cmd, *cmd1; + + if (--cmdlist->references != 0) + return; + + TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { + TAILQ_REMOVE(&cmdlist->list, cmd, qentry); + cmd_free(cmd); + } + + free(cmdlist); +} + +char * +cmd_list_print(struct cmd_list *cmdlist, int escaped) +{ + struct cmd *cmd; + char *buf, *this; + size_t len; + + len = 1; + buf = xcalloc(1, len); + + TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + this = cmd_print(cmd); + + len += strlen(this) + 4; + buf = xrealloc(buf, len); + + strlcat(buf, this, len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } + + free(this); + } + + return (buf); +} + /* Adjust current mouse position for a pane. */ int cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, From 207789dc2d02467a06df82ca9fd58a9ebd4279ba Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 10:46:55 +0000 Subject: [PATCH 581/836] Client name can actually be NULL, so use address in that case. --- cmd-queue.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd-queue.c b/cmd-queue.c index c707dd7b4f..f08d7c022b 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -36,7 +36,10 @@ cmdq_name(struct client *c) if (c == NULL) return (""); - xsnprintf(s, sizeof s, "<%s>", c->name); + if (c->name != NULL) + xsnprintf(s, sizeof s, "<%s>", c->name); + else + xsnprintf(s, sizeof s, "<%p>", c); return (s); } From a65a6d62d19136e20ce6e6ec72d676a334dcc914 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 25 May 2019 16:51:10 +0000 Subject: [PATCH 582/836] Add <, >, <=, >= for formats, GitHub issue 1747. --- format.c | 39 ++++++++++++++++++++++++++++++++------- tmux.1 | 8 ++++++-- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/format.c b/format.c index a99db16b4a..b1f82cc6ac 100644 --- a/format.c +++ b/format.c @@ -1136,13 +1136,13 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) /* * Modifiers are a ; separated list of the forms: - * l,m,C,b,d,t,q,E,T,S,W,P + * l,m,C,b,d,t,q,E,T,S,W,P,<,> * =a * =/a * =/a/ * s/a/b/ * s/a/b - * ||,&&,!=,== + * ||,&&,!=,==,<=,>= */ *count = 0; @@ -1153,7 +1153,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) cp++; /* Check single character modifiers with no arguments. */ - if (strchr("lmCbdtqETSWP", cp[0]) != NULL && + if (strchr("lmCbdtqETSWP<>", cp[0]) != NULL && format_is_end(cp[1])) { format_add_modifier(&list, count, cp, 1, NULL, 0); cp++; @@ -1164,7 +1164,9 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) if ((memcmp("||", cp, 2) == 0 || memcmp("&&", cp, 2) == 0 || memcmp("!=", cp, 2) == 0 || - memcmp("==", cp, 2) == 0) && + memcmp("==", cp, 2) == 0 || + memcmp("<=", cp, 2) == 0 || + memcmp(">=", cp, 2) == 0) && format_is_end(cp[2])) { format_add_modifier(&list, count, cp, 2, NULL, 0); cp += 2; @@ -1433,6 +1435,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, if (fm->size == 1) { switch (fm->modifier[0]) { case 'm': + case '<': + case '>': cmp = fm; break; case 'C': @@ -1486,7 +1490,9 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, if (strcmp(fm->modifier, "||") == 0 || strcmp(fm->modifier, "&&") == 0 || strcmp(fm->modifier, "==") == 0 || - strcmp(fm->modifier, "!=") == 0) + strcmp(fm->modifier, "!=") == 0 || + strcmp(fm->modifier, ">=") == 0 || + strcmp(fm->modifier, "<=") == 0) cmp = fm; } } @@ -1549,8 +1555,27 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = xstrdup("1"); else value = xstrdup("0"); - } - else if (strcmp(cmp->modifier, "m") == 0) { + } else if (strcmp(cmp->modifier, "<") == 0) { + if (strcmp(left, right) < 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, ">") == 0) { + if (strcmp(left, right) > 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, "<=") == 0) { + if (strcmp(left, right) <= 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, ">=") == 0) { + if (strcmp(left, right) >= 0) + value = xstrdup("1"); + else + value = xstrdup("0"); + } else if (strcmp(cmp->modifier, "m") == 0) { if (fnmatch(left, right, 0) == 0) value = xstrdup("1"); else diff --git a/tmux.1 b/tmux.1 index 4c86ac950b..5e1a223eae 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3946,9 +3946,13 @@ For example: .Pp Comparisons may be expressed by prefixing two comma-separated alternatives by -.Ql == +.Ql == , +.Ql != , +.Ql < , +.Ql > , +.Ql <= or -.Ql != +.Ql >= and a colon. For example .Ql #{==:#{host},myhost} From 6dee40998112d53b89c8e82f46701ee6a9ce62e6 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 10:08:50 +0000 Subject: [PATCH 583/836] Some other platforms doesn't support fmemopen(3) (not unexpectedly), so don't use it - since we only use getc/ungetc on the file anyway it is easy not to. --- cmd-parse.y | 127 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 51 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index be7c003988..43ec8a94cf 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -53,6 +53,11 @@ TAILQ_HEAD(cmd_parse_commands, cmd_parse_command); struct cmd_parse_state { FILE *f; + + const char *buf; + size_t len; + size_t off; + int eof; struct cmd_parse_input *input; u_int escapes; @@ -66,7 +71,6 @@ struct cmd_parse_state { static struct cmd_parse_state parse_state; static char *cmd_parse_get_error(const char *, u_int, const char *); -static char *cmd_parse_get_strerror(const char *, u_int); static void cmd_parse_free_command(struct cmd_parse_command *); static void cmd_parse_free_commands(struct cmd_parse_commands *); @@ -483,12 +487,6 @@ cmd_parse_get_error(const char *file, u_int line, const char *error) return (s); } -static char * -cmd_parse_get_strerror(const char *file, u_int line) -{ - return (cmd_parse_get_error(file, line, strerror(errno))); -} - static void cmd_parse_free_command(struct cmd_parse_command *cmd) { @@ -509,19 +507,13 @@ cmd_parse_free_commands(struct cmd_parse_commands *cmds) } static struct cmd_parse_commands * -cmd_parse_run_parser(FILE *f, struct cmd_parse_input *pi, char **cause) +cmd_parse_run_parser(char **cause) { struct cmd_parse_state *ps = &parse_state; struct cmd_parse_commands *cmds; struct cmd_parse_scope *scope, *scope1; int retval; - memset(ps, 0, sizeof *ps); - - ps->f = f; - ps->eof = 0; - ps->input = pi; - TAILQ_INIT(&ps->commands); TAILQ_INIT(&ps->stack); @@ -541,6 +533,30 @@ cmd_parse_run_parser(FILE *f, struct cmd_parse_input *pi, char **cause) return (cmds); } +static struct cmd_parse_commands * +cmd_parse_do_file(FILE *f, struct cmd_parse_input *pi, char **cause) +{ + struct cmd_parse_state *ps = &parse_state; + + memset(ps, 0, sizeof *ps); + ps->input = pi; + ps->f = f; + return (cmd_parse_run_parser(cause)); +} + +static struct cmd_parse_commands * +cmd_parse_do_buffer(const char *buf, size_t len, struct cmd_parse_input *pi, + char **cause) +{ + struct cmd_parse_state *ps = &parse_state; + + memset(ps, 0, sizeof *ps); + ps->input = pi; + ps->buf = buf; + ps->len = len; + return (cmd_parse_run_parser(cause)); +} + static struct cmd_parse_result * cmd_parse_build_commands(struct cmd_parse_commands *cmds, struct cmd_parse_input *pi) @@ -548,7 +564,6 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, static struct cmd_parse_result pr; struct cmd_parse_commands *cmds2; struct cmd_parse_command *cmd, *cmd2, *next, *next2, *after; - FILE *f; u_int line = UINT_MAX; int i; struct cmd_list *cmdlist = NULL, *result; @@ -576,16 +591,8 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, line = cmd->line; log_debug("%s: %u %s = %s", __func__, line, cmd->name, alias); - f = fmemopen(alias, strlen(alias), "r"); - if (f == NULL) { - free(alias); - pr.status = CMD_PARSE_ERROR; - pr.error = cmd_parse_get_strerror(pi->file, line); - goto out; - } pi->line = line; - cmds2 = cmd_parse_run_parser(f, pi, &cause); - fclose(f); + cmds2 = cmd_parse_do_buffer(alias, strlen(alias), pi, &cause); free(alias); if (cmds2 == NULL) { pr.status = CMD_PARSE_ERROR; @@ -678,10 +685,7 @@ cmd_parse_from_file(FILE *f, struct cmd_parse_input *pi) } memset(&pr, 0, sizeof pr); - /* - * Parse the file into a list of commands. - */ - cmds = cmd_parse_run_parser(f, pi, &cause); + cmds = cmd_parse_do_file(f, pi, &cause); if (cmds == NULL) { pr.status = CMD_PARSE_ERROR; pr.error = cause; @@ -694,9 +698,9 @@ struct cmd_parse_result * cmd_parse_from_string(const char *s, struct cmd_parse_input *pi) { static struct cmd_parse_result pr; - struct cmd_parse_result *prp; struct cmd_parse_input input; - FILE *f; + struct cmd_parse_commands *cmds; + char *cause; if (pi == NULL) { memset(&input, 0, sizeof input); @@ -711,16 +715,13 @@ cmd_parse_from_string(const char *s, struct cmd_parse_input *pi) return (&pr); } - f = fmemopen((void *)s, strlen(s), "r"); - if (f == NULL) { + cmds = cmd_parse_do_buffer(s, strlen(s), pi, &cause); + if (cmds == NULL) { pr.status = CMD_PARSE_ERROR; - pr.cmdlist = NULL; - pr.error = cmd_parse_get_strerror(pi->file, pi->line); - return (NULL); + pr.error = cause; + return (&pr); } - prp = cmd_parse_from_file(f, pi); - fclose(f); - return (prp); + return (cmd_parse_build_commands(cmds, pi)); } struct cmd_parse_result * @@ -847,6 +848,34 @@ yylex_append1(char **buf, size_t *len, char add) yylex_append(buf, len, &add, 1); } +static int +yylex_getc1(void) +{ + struct cmd_parse_state *ps = &parse_state; + int ch; + + if (ps->f != NULL) + ch = getc(ps->f); + else { + if (ps->off == ps->len) + ch = EOF; + else + ch = ps->buf[ps->off++]; + } + return (ch); +} + +static void +yylex_ungetc(int ch) +{ + struct cmd_parse_state *ps = &parse_state; + + if (ps->f != NULL) + ungetc(ch, ps->f); + else if (ps->off > 0 && ch != EOF) + ps->off--; +} + static int yylex_getc(void) { @@ -858,7 +887,7 @@ yylex_getc(void) return ('\\'); } for (;;) { - ch = getc(ps->f); + ch = yylex_getc1(); if (ch == '\\') { ps->escapes++; continue; @@ -870,7 +899,7 @@ yylex_getc(void) } if (ps->escapes != 0) { - ungetc(ch, ps->f); + yylex_ungetc(ch); ps->escapes--; return ('\\'); } @@ -881,9 +910,8 @@ yylex_getc(void) static char * yylex_get_word(int ch) { - struct cmd_parse_state *ps = &parse_state; - char *buf; - size_t len; + char *buf; + size_t len; len = 0; buf = xmalloc(1); @@ -891,7 +919,7 @@ yylex_get_word(int ch) do yylex_append1(&buf, &len, ch); while ((ch = yylex_getc()) != EOF && strchr(" \t\n", ch) == NULL); - ungetc(ch, ps->f); + yylex_ungetc(ch); buf[len] = '\0'; log_debug("%s: %s", __func__, buf); @@ -1117,7 +1145,6 @@ unicode: static int yylex_token_variable(char **buf, size_t *len) { - struct cmd_parse_state *ps = &parse_state; struct environ_entry *envent; int ch, brackets = 0; char name[BUFSIZ]; @@ -1132,7 +1159,7 @@ yylex_token_variable(char **buf, size_t *len) else { if (!yylex_is_var(ch, 1)) { yylex_append1(buf, len, '$'); - ungetc(ch, ps->f); + yylex_ungetc(ch); return (1); } name[namelen++] = ch; @@ -1144,7 +1171,7 @@ yylex_token_variable(char **buf, size_t *len) break; if (ch == EOF || !yylex_is_var(ch, 0)) { if (!brackets) { - ungetc(ch, ps->f); + yylex_ungetc(ch); break; } yyerror("invalid environment variable"); @@ -1170,7 +1197,6 @@ yylex_token_variable(char **buf, size_t *len) static int yylex_token_tilde(char **buf, size_t *len) { - struct cmd_parse_state *ps = &parse_state; struct environ_entry *envent; int ch; char name[BUFSIZ]; @@ -1181,7 +1207,7 @@ yylex_token_tilde(char **buf, size_t *len) for (;;) { ch = yylex_getc(); if (ch == EOF || strchr("/ \t\n\"'", ch) != NULL) { - ungetc(ch, ps->f); + yylex_ungetc(ch); break; } if (namelen == (sizeof name) - 2) { @@ -1213,7 +1239,6 @@ yylex_token_tilde(char **buf, size_t *len) static char * yylex_token(int ch) { - struct cmd_parse_state *ps = &parse_state; char *buf; size_t len; enum { START, @@ -1293,7 +1318,7 @@ yylex_token(int ch) next: ch = yylex_getc(); } - ungetc(ch, ps->f); + yylex_ungetc(ch); buf[len] = '\0'; log_debug("%s: %s", __func__, buf); From 64310051694fd5c82ccbcff9fda6488ea2dcfb96 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 12:02:42 +0000 Subject: [PATCH 584/836] Add a way to append or prepend to a format if the length has been limited. --- format.c | 48 ++++++++++++++++++++++++++++++++++-------------- tmux.1 | 11 +++++++++-- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/format.c b/format.c index b1f82cc6ac..c352d2533e 100644 --- a/format.c +++ b/format.c @@ -755,6 +755,16 @@ format_merge(struct format_tree *ft, struct format_tree *from) } } +/* Add item bits to tree. */ +static void +format_create_add_item(struct format_tree *ft, struct cmdq_item *item) +{ + if (item->cmd != NULL) + format_add(ft, "command", "%s", item->cmd->entry->name); + if (item->shared != NULL && item->shared->formats != NULL) + format_merge(ft, item->shared->formats); +} + /* Create a new tree. */ struct format_tree * format_create(struct client *c, struct cmdq_item *item, int tag, int flags) @@ -800,12 +810,8 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) format_add(ft, "window_menu", "%s", DEFAULT_WINDOW_MENU); format_add(ft, "pane_menu", "%s", DEFAULT_PANE_MENU); - if (item != NULL) { - if (item->cmd != NULL) - format_add(ft, "command", "%s", item->cmd->entry->name); - if (item->shared != NULL && item->shared->formats != NULL) - format_merge(ft, item->shared->formats); - } + if (item != NULL) + format_create_add_item(ft, item); return (ft); } @@ -1408,7 +1414,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { struct window_pane *wp = ft->wp; - const char *errptr, *copy, *cp; + const char *errptr, *copy, *cp, *marker; char *copy0, *condition, *found, *new; char *value, *left, *right; size_t valuelen; @@ -1448,12 +1454,16 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, sub = fm; break; case '=': - if (fm->argc != 1) + if (fm->argc != 1 && fm->argc != 2) break; limit = strtonum(fm->argv[0], INT_MIN, INT_MAX, &errptr); if (errptr != NULL) limit = 0; + if (fm->argc == 2 && fm->argv[1] != NULL) + marker = fm->argv[1]; + else + marker = NULL; break; case 'l': modifiers |= FORMAT_LITERAL; @@ -1668,14 +1678,24 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Truncate the value if needed. */ if (limit > 0) { new = format_trim_left(value, limit); - format_log(ft, "applied length limit %d: %s", limit, new); - free(value); - value = new; + if (marker != NULL && strcmp(new, value) != 0) { + free(value); + xasprintf(&value, "%s%s", new, marker); + } else { + free(value); + value = new; + } + format_log(ft, "applied length limit %d: %s", limit, value); } else if (limit < 0) { new = format_trim_right(value, -limit); - format_log(ft, "applied length limit %d: %s", limit, new); - free(value); - value = new; + if (marker != NULL && strcmp(new, value) != 0) { + free(value); + xasprintf(&value, "%s%s", marker, new); + } else { + free(value); + value = new; + } + format_log(ft, "applied length limit %d: %s", limit, value); } /* Expand the buffer and copy in the value. */ diff --git a/tmux.1 b/tmux.1 index 5e1a223eae..534f451ecf 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3989,9 +3989,16 @@ a number and a colon. Positive numbers count from the start of the string and negative from the end, so .Ql #{=5:pane_title} -will include at most the first 5 characters of the pane title, or +will include at most the first five characters of the pane title, or .Ql #{=-5:pane_title} -the last 5 characters. +the last five characters. +A suffix or prefix may be given as a second argument - if provided then it is +appended or prepended to the string if the length has been trimmed, for example +.Ql #{=/5/...:pane_title} +will append +.Ql ... +if the pane title is more than five characters. +.Pp Prefixing a time variable with .Ql t: will convert it to a string, so if From e90d4a6021a45e4f281c75e5513ede2d010ede32 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 17:34:45 +0000 Subject: [PATCH 585/836] Add formats for word and line under the mouse and use them to add some items to the pane menu. --- cmd-display-menu.c | 2 +- format.c | 144 ++++++++++++++++++++++++++++++++++++++++++++- grid.c | 19 ++++++ menu.c | 48 +++++++++------ mode-tree.c | 2 +- options-table.c | 2 +- tmux.1 | 4 ++ tmux.h | 4 +- utf8.c | 20 +++++++ window-copy.c | 39 +----------- 10 files changed, 224 insertions(+), 60 deletions(-) diff --git a/cmd-display-menu.c b/cmd-display-menu.c index 15b750ee1a..570eedf251 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -79,7 +79,7 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) title = format_single(NULL, args_get(args, 'T'), c, s, wl, wp); else title = xstrdup(""); - menu = menu_create(string, c, fs, title); + menu = menu_create(string, item, c, fs, title); free(title); if (menu == NULL) { cmdq_error(item, "invalid menu %s", string); diff --git a/format.c b/format.c index c352d2533e..bca4b194f4 100644 --- a/format.c +++ b/format.c @@ -84,6 +84,12 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "New After,w,new-window -a|" \ "New At End,W,new-window" #define DEFAULT_PANE_MENU \ + "#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},},,copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"|" \ + "#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},},,send-keys -l \"#{q:mouse_word}\"|" \ + "|" \ + "#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},},c,set-buffer \"#{q:mouse_word}\"|" \ + "#{?mouse_line,Copy Line,},l,set-buffer \"#{q:mouse_line}\"|" \ + "|" \ "Horizontal Split,h,split-window -h|" \ "Vertical Split,v,split-window -v|" \ "|" \ @@ -170,6 +176,8 @@ struct format_tree { time_t time; u_int loop; + struct mouse_event m; + RB_HEAD(format_entry_tree, format_entry) tree; }; static int format_entry_cmp(struct format_entry *, struct format_entry *); @@ -743,6 +751,121 @@ format_cb_cursor_character(struct format_tree *ft, struct format_entry *fe) xasprintf(&fe->value, "%.*s", (int)gc.data.size, gc.data.data); } +/* Callback for mouse_word. */ +static void +format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp; + u_int x, y, end; + struct grid *gd; + struct grid_line *gl; + struct grid_cell gc; + const char *ws; + struct utf8_data *ud = NULL; + size_t size = 0; + int found = 0; + + if (!ft->m.valid) + return; + wp = cmd_mouse_pane(&ft->m, NULL, NULL); + if (wp == NULL) + return; + if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) + return; + gd = wp->base.grid; + ws = options_get_string(global_s_options, "word-separators"); + + y = gd->hsize + y; + for (;;) { + grid_get_cell(gd, x, y, &gc); + if (gc.flags & GRID_FLAG_PADDING) + break; + if (utf8_cstrhas(ws, &gc.data)) { + found = 1; + break; + } + + if (x == 0) { + if (y == 0) + break; + gl = &gd->linedata[y - 1]; + if (~gl->flags & GRID_LINE_WRAPPED) + break; + y--; + x = grid_line_length(gd, y); + if (x == 0) + break; + } + x--; + } + for (;;) { + if (found) { + end = grid_line_length(gd, y); + if (end == 0 || x == end - 1) { + if (y == gd->hsize + gd->sy - 1) + break; + gl = &gd->linedata[y]; + if (~gl->flags & GRID_LINE_WRAPPED) + break; + y++; + x = 0; + } else + x++; + } + found = 1; + + grid_get_cell(gd, x, y, &gc); + if (gc.flags & GRID_FLAG_PADDING) + break; + if (utf8_cstrhas(ws, &gc.data)) + break; + + ud = xreallocarray(ud, size + 2, sizeof *ud); + memcpy(&ud[size++], &gc.data, sizeof *ud); + } + if (size != 0) { + ud[size].size = 0; + fe->value = utf8_tocstr(ud); + free(ud); + } +} + +/* Callback for mouse_line. */ +static void +format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp; + u_int x, y; + struct grid *gd; + struct grid_cell gc; + struct utf8_data *ud = NULL; + size_t size = 0; + + if (!ft->m.valid) + return; + wp = cmd_mouse_pane(&ft->m, NULL, NULL); + if (wp == NULL) + return; + if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) + return; + gd = wp->base.grid; + + y = gd->hsize + y; + for (x = 0; x < grid_line_length(gd, y); x++) { + grid_get_cell(gd, x, y, &gc); + if (gc.flags & GRID_FLAG_PADDING) + break; + + ud = xreallocarray(ud, size + 2, sizeof *ud); + memcpy(&ud[size++], &gc.data, sizeof *ud); + } + if (size != 0) { + ud[size].size = 0; + fe->value = utf8_tocstr(ud); + free(ud); + } +} + /* Merge a format tree. */ static void format_merge(struct format_tree *ft, struct format_tree *from) @@ -759,10 +882,29 @@ format_merge(struct format_tree *ft, struct format_tree *from) static void format_create_add_item(struct format_tree *ft, struct cmdq_item *item) { + struct mouse_event *m; + struct window_pane *wp; + u_int x, y; + if (item->cmd != NULL) format_add(ft, "command", "%s", item->cmd->entry->name); - if (item->shared != NULL && item->shared->formats != NULL) + + if (item->shared == NULL) + return; + if (item->shared->formats != NULL) format_merge(ft, item->shared->formats); + + m = &item->shared->mouse; + if (m->valid && ((wp = cmd_mouse_pane(m, NULL, NULL)) != NULL)) { + format_add(ft, "mouse_pane", "%%%u", wp->id); + if (cmd_mouse_at(wp, m, &x, &y, 0) == 0) { + format_add(ft, "mouse_x", "%u", x); + format_add(ft, "mouse_y", "%u", y); + format_add_cb(ft, "mouse_word", format_cb_mouse_word); + format_add_cb(ft, "mouse_line", format_cb_mouse_line); + } + } + memcpy(&ft->m, m, sizeof ft->m); } /* Create a new tree. */ diff --git a/grid.c b/grid.c index aa4ae80408..d185f3647a 100644 --- a/grid.c +++ b/grid.c @@ -1350,3 +1350,22 @@ grid_unwrap_position(struct grid *gd, u_int *px, u_int *py, u_int wx, u_int wy) *px = wx; *py = yy; } + +/* Get length of line. */ +u_int +grid_line_length(struct grid *gd, u_int py) +{ + struct grid_cell gc; + u_int px; + + px = grid_get_line(gd, py)->cellsize; + if (px > gd->sx) + px = gd->sx; + while (px > 0) { + grid_get_cell(gd, px - 1, py, &gc); + if (gc.data.size != 1 || *gc.data.data != ' ') + break; + px--; + } + return (px); +} diff --git a/menu.c b/menu.c index 9de6c5fc1d..97f8f79cc8 100644 --- a/menu.c +++ b/menu.c @@ -41,8 +41,8 @@ struct menu_data { }; static void -menu_add_item(struct menu *menu, struct menu_item *item, struct client *c, - struct cmd_find_state *fs) +menu_add_item(struct menu *menu, struct menu_item *item, + struct cmdq_item *qitem, struct client *c, struct cmd_find_state *fs) { struct menu_item *new_item; const char *key; @@ -57,24 +57,31 @@ menu_add_item(struct menu *menu, struct menu_item *item, struct client *c, if (item == NULL || *item->name == '\0') /* horizontal line */ return; if (fs != NULL) { - name = format_single(NULL, item->name, c, fs->s, fs->wl, + name = format_single(qitem, item->name, c, fs->s, fs->wl, fs->wp); } else - name = xstrdup(item->name); + name = format_single(qitem, item->name, c, NULL, NULL, NULL); if (*name == '\0') { /* no item if empty after format expanded */ menu->count--; return; } if (item->key != KEYC_UNKNOWN) { key = key_string_lookup_key(item->key); - xasprintf(&new_item->name, "%s #[align=right](%s)", name, key); + xasprintf(&new_item->name, "%s#[default] #[align=right](%s)", + name, key); } else xasprintf(&new_item->name, "%s", name); free(name); - if (item->command != NULL) - new_item->command = xstrdup(item->command); - else + if (item->command != NULL) { + if (fs != NULL) { + new_item->command = format_single(qitem, item->command, + c, fs->s, fs->wl, fs->wp); + } else { + new_item->command = format_single(qitem, item->command, + c, NULL, NULL, NULL); + } + } else new_item->command = NULL; new_item->key = item->key; @@ -84,8 +91,8 @@ menu_add_item(struct menu *menu, struct menu_item *item, struct client *c, } static void -menu_parse_item(struct menu *menu, const char *s, struct client *c, - struct cmd_find_state *fs) +menu_parse_item(struct menu *menu, const char *s, struct cmdq_item *qitem, + struct client *c, struct cmd_find_state *fs) { char *copy, *first; const char *second, *third; @@ -100,15 +107,15 @@ menu_parse_item(struct menu *menu, const char *s, struct client *c, item.name = first; item.command = (char *)third; item.key = key_string_lookup_string(second); - menu_add_item(menu, &item, c, fs); + menu_add_item(menu, &item, qitem, c, fs); } } free(copy); } struct menu * -menu_create(const char *s, struct client *c, struct cmd_find_state *fs, - const char *title) +menu_create(const char *s, struct cmdq_item *qitem, struct client *c, + struct cmd_find_state *fs, const char *title) { struct menu *menu; char *copy, *string, *next; @@ -124,10 +131,11 @@ menu_create(const char *s, struct client *c, struct cmd_find_state *fs, next = (char *)format_skip(string, "|"); if (next != NULL) *next++ = '\0'; - if (*string == '\0') - menu_add_item(menu, NULL, c, fs); - else - menu_parse_item(menu, string, c, fs); + if (*string == '\0') { + if (menu->count != 0) + menu_add_item(menu, NULL, qitem, c, fs); + } else + menu_parse_item(menu, string, qitem, c, fs); string = next; } while (next != NULL); free(copy); @@ -283,7 +291,11 @@ menu_key_cb(struct client *c, struct key_event *event) cmdq_append(c, new_item); break; case CMD_PARSE_SUCCESS: - new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + if (md->item != NULL) + m = &md->item->shared->mouse; + else + m = NULL; + new_item = cmdq_get_command(pr->cmdlist, &md->fs, m, 0); cmd_list_free(pr->cmdlist); cmdq_append(c, new_item); break; diff --git a/mode-tree.c b/mode-tree.c index 9dd96190ae..8cb556c59d 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -828,7 +828,7 @@ mode_tree_display_menu(struct mode_tree_data *mtd, struct client *c, u_int x, s = MODE_TREE_MENU; title = xstrdup(""); } - menu = menu_create(s, c, NULL, title); + menu = menu_create(s, NULL, c, NULL, title); free(title); if (menu == NULL) return; diff --git a/options-table.c b/options-table.c index 788e231f58..32032f8b7e 100644 --- a/options-table.c +++ b/options-table.c @@ -551,7 +551,7 @@ const struct options_table_entry options_table[] = { { .name = "word-separators", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_SESSION, - .default_str = " -_@" + .default_str = " " }, /* Window options. */ diff --git a/tmux.1 b/tmux.1 index 534f451ecf..34336fabdf 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4129,6 +4129,10 @@ The following variables are available, where appropriate: .It Li "mouse_any_flag" Ta "" Ta "Pane mouse any flag" .It Li "mouse_button_flag" Ta "" Ta "Pane mouse button flag" .It Li "mouse_standard_flag" Ta "" Ta "Pane mouse standard flag" +.It Li "mouse_x" Ta "" Ta "Mouse X position, if any" +.It Li "mouse_y" Ta "" Ta "Mouse Y position, if any" +.It Li "mouse_word" Ta "" Ta "Word under mouse, if any" +.It Li "mouse_line" Ta "" Ta "Line under mouse, if any" .It Li "pane_active" Ta "" Ta "1 if active pane" .It Li "pane_at_bottom" Ta "" Ta "1 if pane is at the bottom of window" .It Li "pane_at_left" Ta "" Ta "1 if pane is at the left of window" diff --git a/tmux.h b/tmux.h index 0c4024cc6c..1930587542 100644 --- a/tmux.h +++ b/tmux.h @@ -2219,6 +2219,7 @@ void grid_duplicate_lines(struct grid *, u_int, struct grid *, u_int, void grid_reflow(struct grid *, u_int); void grid_wrap_position(struct grid *, u_int, u_int, u_int *, u_int *); void grid_unwrap_position(struct grid *, u_int *, u_int *, u_int, u_int); +u_int grid_line_length(struct grid *, u_int); /* grid-view.c */ void grid_view_get_cell(struct grid *, u_int, u_int, struct grid_cell *); @@ -2583,6 +2584,7 @@ struct utf8_data *utf8_fromcstr(const char *); char *utf8_tocstr(struct utf8_data *); u_int utf8_cstrwidth(const char *); char *utf8_padcstr(const char *, u_int); +int utf8_cstrhas(const char *, const struct utf8_data *); /* procname.c */ char *get_proc_name(int, char *); @@ -2598,7 +2600,7 @@ __dead void printflike(1, 2) fatal(const char *, ...); __dead void printflike(1, 2) fatalx(const char *, ...); /* menu.c */ -struct menu *menu_create(const char *, struct client *, +struct menu *menu_create(const char *, struct cmdq_item *, struct client *, struct cmd_find_state *, const char *); void menu_free(struct menu *); int menu_display(struct menu *, int, struct cmdq_item *, u_int, diff --git a/utf8.c b/utf8.c index fc01cddb32..aa840b13b8 100644 --- a/utf8.c +++ b/utf8.c @@ -410,3 +410,23 @@ utf8_padcstr(const char *s, u_int width) out[slen] = '\0'; return (out); } + +int +utf8_cstrhas(const char *s, const struct utf8_data *ud) +{ + struct utf8_data *copy, *loop; + int found = 0; + + copy = utf8_fromcstr(s); + for (loop = copy; loop->size != 0; loop++) { + if (loop->size != ud->size) + continue; + if (memcmp(loop->data, ud->data, loop->size) == 0) { + found = 1; + break; + } + } + free(copy); + + return (found); +} diff --git a/window-copy.c b/window-copy.c index d4985062e3..36ad6a830a 100644 --- a/window-copy.c +++ b/window-copy.c @@ -2810,54 +2810,19 @@ window_copy_in_set(struct window_mode_entry *wme, u_int px, u_int py, { struct window_copy_mode_data *data = wme->data; struct grid_cell gc; - const struct utf8_data *ud; - struct utf8_data *copy; - struct utf8_data *loop; - int found = 0; grid_get_cell(data->backing->grid, px, py, &gc); if (gc.flags & GRID_FLAG_PADDING) return (0); - ud = &gc.data; - - copy = utf8_fromcstr(set); - for (loop = copy; loop->size != 0; loop++) { - if (loop->size != ud->size) - continue; - if (memcmp(loop->data, ud->data, loop->size) == 0) { - found = 1; - break; - } - } - free(copy); - - return (found); + return (utf8_cstrhas(set, &gc.data)); } static u_int window_copy_find_length(struct window_mode_entry *wme, u_int py) { struct window_copy_mode_data *data = wme->data; - struct screen *s = data->backing; - struct grid_cell gc; - u_int px; - /* - * If the pane has been resized, its grid can contain old overlong - * lines. grid_peek_cell does not allow accessing cells beyond the - * width of the grid, and screen_write_copy treats them as spaces, so - * ignore them here too. - */ - px = grid_get_line(s->grid, py)->cellsize; - if (px > screen_size_x(s)) - px = screen_size_x(s); - while (px > 0) { - grid_get_cell(s->grid, px - 1, py, &gc); - if (gc.data.size != 1 || *gc.data.data != ' ') - break; - px--; - } - return (px); + return (grid_line_length(data->backing->grid, py)); } static void From 023c2c53926b53918a1fa79e4f060b8d58fba717 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 18:19:52 +0000 Subject: [PATCH 586/836] Do not accept choice unless mouse has actually moved before. --- menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu.c b/menu.c index 97f8f79cc8..26ead507e6 100644 --- a/menu.c +++ b/menu.c @@ -226,9 +226,9 @@ menu_key_cb(struct client *c, struct key_event *event) } return (0); } - md->choice = m->y - (md->py + 1); if (MOUSE_RELEASE(m->b)) goto chosen; + md->choice = m->y - (md->py + 1); if (md->choice != old) c->flags |= CLIENT_REDRAWOVERLAY; return (0); From 5fef946df457156aaa4d8134312ed4967978fc76 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 18:27:52 +0000 Subject: [PATCH 587/836] Always redraw overlay if it is on (so status line doesn't redraw over it). --- screen-redraw.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/screen-redraw.c b/screen-redraw.c index dbae11b76a..65e890b6aa 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -383,6 +383,9 @@ screen_redraw_update(struct client *c, int flags) if (!redraw && (~flags & CLIENT_REDRAWSTATUSALWAYS)) flags &= ~CLIENT_REDRAWSTATUS; + if (c->overlay_draw != NULL) + flags |= CLIENT_REDRAWOVERLAY; + if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) { redraw = 0; TAILQ_FOREACH(wp, &w->panes, entry) { @@ -458,7 +461,7 @@ screen_redraw_pane(struct client *c, struct window_pane *wp) { struct screen_redraw_ctx ctx; - if (!window_pane_visible(wp)) + if (c->overlay_draw != NULL || !window_pane_visible(wp)) return; screen_redraw_set_context(c, &ctx); From 097973e3d50c831c020fb0b689c3a2d66ba83b7c Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 26 May 2019 18:43:43 +0000 Subject: [PATCH 588/836] Add keys for new menu items. --- format.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index bca4b194f4..60db4eeab2 100644 --- a/format.c +++ b/format.c @@ -84,8 +84,8 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "New After,w,new-window -a|" \ "New At End,W,new-window" #define DEFAULT_PANE_MENU \ - "#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},},,copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"|" \ - "#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},},,send-keys -l \"#{q:mouse_word}\"|" \ + "#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},},C-r,copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"|" \ + "#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},},C-y,send-keys -l \"#{q:mouse_word}\"|" \ "|" \ "#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},},c,set-buffer \"#{q:mouse_word}\"|" \ "#{?mouse_line,Copy Line,},l,set-buffer \"#{q:mouse_line}\"|" \ From 65e5e1456179d68f36602a5976184b38cc4b636c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 May 2019 06:50:04 +0000 Subject: [PATCH 589/836] Fix the intended ordering of items in buffer mode - it should not always be tag 0 when the tree is empty. GitHub issue 1759. --- mode-tree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mode-tree.c b/mode-tree.c index 8cb556c59d..add17c825c 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -384,7 +384,7 @@ mode_tree_build(struct mode_tree_data *mtd) if (mtd->line_list != NULL) tag = mtd->line_list[mtd->current].item->tag; else - tag = 0; + tag = UINT64_MAX; TAILQ_CONCAT(&mtd->saved, &mtd->children, entry); TAILQ_INIT(&mtd->children); @@ -400,6 +400,8 @@ mode_tree_build(struct mode_tree_data *mtd) mode_tree_clear_lines(mtd); mode_tree_build_lines(mtd, &mtd->children, 0); + if (tag == UINT64_MAX) + tag = mtd->line_list[mtd->current].item->tag; mode_tree_set_current(mtd, tag); mtd->width = screen_size_x(s); From 6b332127cae97914d34c39575881fbc87205f4e0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 May 2019 12:16:27 +0000 Subject: [PATCH 590/836] Add an additional {} syntax for defining strings in the configuration file, making it much tidier to define commands that contain other tmux or shell commands (like if-shell). Also tweak bind-key to expect a string if it is only given one argument, so {} can be used with it as well. From Avi Halachmi. --- arguments.c | 2 +- cmd-bind-key.c | 19 ++++++---- cmd-parse.y | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ key-bindings.c | 12 +++--- tmux.1 | 45 ++++++++++++++++++---- 5 files changed, 157 insertions(+), 21 deletions(-) diff --git a/arguments.c b/arguments.c index eebb79ffbc..68690deba2 100644 --- a/arguments.c +++ b/arguments.c @@ -207,7 +207,7 @@ args_print(struct args *args) char * args_escape(const char *s) { - static const char quoted[] = " #\"';$"; + static const char quoted[] = " #\"';${}"; char *escaped, *result; int flags; diff --git a/cmd-bind-key.c b/cmd-bind-key.c index ed2f69d15d..2af15d2928 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -44,14 +44,16 @@ const struct cmd_entry cmd_bind_key_entry = { static enum cmd_retval cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) { - struct args *args = self->args; - key_code key; - const char *tablename; - struct cmd_parse_result *pr; + struct args *args = self->args; + key_code key; + const char *tablename; + struct cmd_parse_result *pr; + char **argv = args->argv; + int argc = args->argc; - key = key_string_lookup_string(args->argv[0]); + key = key_string_lookup_string(argv[0]); if (key == KEYC_NONE || key == KEYC_UNKNOWN) { - cmdq_error(item, "unknown key: %s", args->argv[0]); + cmdq_error(item, "unknown key: %s", argv[0]); return (CMD_RETURN_ERROR); } @@ -62,7 +64,10 @@ cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) else tablename = "prefix"; - pr = cmd_parse_from_arguments(args->argc - 1, args->argv + 1, NULL); + if (argc == 2) + pr = cmd_parse_from_string(argv[1], NULL); + else + pr = cmd_parse_from_arguments(argc - 1, argv + 1, NULL); switch (pr->status) { case CMD_PARSE_EMPTY: cmdq_error(item, "empty command"); diff --git a/cmd-parse.y b/cmd-parse.y index 43ec8a94cf..f347280b35 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1236,6 +1236,99 @@ yylex_token_tilde(char **buf, size_t *len) return (1); } +static int +yylex_token_brace(char **buf, size_t *len) +{ + struct cmd_parse_state *ps = &parse_state; + int ch, nesting = 1, escape = 0, quote = '\0'; + int lines = 0; + + /* + * Extract a string up to the matching unquoted '}', including newlines + * and handling nested braces. + * + * To detect the final and intermediate braces which affect the nesting + * depth, we scan the input as if it was a tmux config file, and ignore + * braces which would be considered quoted, escaped, or in a comment. + * + * The result is verbatim copy of the input excluding the final brace. + */ + + for (ch = yylex_getc1(); ch != EOF; ch = yylex_getc1()) { + yylex_append1(buf, len, ch); + if (ch == '\n') + lines++; + + /* + * If the previous character was a backslash (escape is set), + * escape anything if unquoted or in double quotes, otherwise + * escape only '\n' and '\\'. + */ + if (escape && + (quote == '\0' || + quote == '"' || + ch == '\n' || + ch == '\\')) { + escape = 0; + continue; + } + + /* + * The character is not escaped. If it is a backslash, set the + * escape flag. + */ + if (ch == '\\') { + escape = 1; + continue; + } + escape = 0; + + /* A newline always resets to unquoted. */ + if (ch == '\n') { + quote = 0; + continue; + } + + if (quote) { + /* + * Inside quotes or comment. Check if this is the + * closing quote. + */ + if (ch == quote && quote != '#') + quote = 0; + } else { + /* Not inside quotes or comment. */ + switch (ch) { + case '"': + case '\'': + case '#': + /* Beginning of quote or comment. */ + quote = ch; + break; + case '{': + nesting++; + break; + case '}': + nesting--; + if (nesting == 0) { + (*len)--; /* remove closing } */ + ps->input->line += lines; + return (1); + } + break; + } + } + } + + /* + * Update line count after error as reporting the opening line + * is more useful than EOF. + */ + yyerror("unterminated brace string"); + ps->input->line += lines; + return (0); +} + static char * yylex_token(int ch) { @@ -1282,6 +1375,13 @@ yylex_token(int ch) goto error; goto skip; } + if (ch == '{' && state == NONE) { + if (!yylex_token_brace(&buf, &len)) + goto error; + goto skip; + } + if (ch == '}' && state == NONE) + goto error; /* unmatched (matched ones were handled) */ /* * ' and " starts or end quotes (and is consumed). diff --git a/key-bindings.c b/key-bindings.c index 2bc659aa31..b2055cf749 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -242,8 +242,8 @@ key_bindings_init(void) "bind w choose-tree -Zw", "bind x confirm-before -p\"kill-pane #P? (y/n)\" kill-pane", "bind z resize-pane -Z", - "bind { swap-pane -U", - "bind } swap-pane -D", + "bind '{' swap-pane -U", + "bind '}' swap-pane -D", "bind '~' show-messages", "bind PPage copy-mode -u", "bind -r Up select-pane -U", @@ -347,8 +347,8 @@ key_bindings_init(void) "bind -Tcopy-mode M-r send -X middle-line", "bind -Tcopy-mode M-v send -X page-up", "bind -Tcopy-mode M-w send -X copy-selection-and-cancel", - "bind -Tcopy-mode M-{ send -X previous-paragraph", - "bind -Tcopy-mode M-} send -X next-paragraph", + "bind -Tcopy-mode 'M-{' send -X previous-paragraph", + "bind -Tcopy-mode 'M-}' send -X next-paragraph", "bind -Tcopy-mode M-Up send -X halfpage-up", "bind -Tcopy-mode M-Down send -X halfpage-down", "bind -Tcopy-mode C-Up send -X scroll-up", @@ -413,8 +413,8 @@ key_bindings_init(void) "bind -Tcopy-mode-vi t command-prompt -1p'(jump to forward)' 'send -X jump-to-forward \"%%%\"'", "bind -Tcopy-mode-vi v send -X rectangle-toggle", "bind -Tcopy-mode-vi w send -X next-word", - "bind -Tcopy-mode-vi { send -X previous-paragraph", - "bind -Tcopy-mode-vi } send -X next-paragraph", + "bind -Tcopy-mode-vi '{' send -X previous-paragraph", + "bind -Tcopy-mode-vi '}' send -X next-paragraph", "bind -Tcopy-mode-vi % send -X next-matching-bracket", "bind -Tcopy-mode-vi MouseDown1Pane select-pane", "bind -Tcopy-mode-vi MouseDrag1Pane select-pane\\; send -X begin-selection", diff --git a/tmux.1 b/tmux.1 index 34336fabdf..77f509ed29 100644 --- a/tmux.1 +++ b/tmux.1 @@ -490,11 +490,13 @@ line (the \e and the newline are completely removed). This is called line continuation and applies both inside and outside quoted strings and in comments. .Pp -Command arguments may be specified as strings surrounded by either single (') -or double quotes ("). +Command arguments may be specified as strings surrounded by single (') quotes, +double quotes (") or braces ({}). .\" " This is required when the argument contains any special character. -Strings cannot span multiple lines except with line continuation. +Single and double quoted strings cannot span multiple lines except with line +continuation. +Braces can span multiple lines. .Pp Outside of quotes and inside double quotes, these replacements are performed: .Bl -dash -offset indent @@ -520,6 +522,34 @@ is removed) and are not treated as having any special meaning - so for example variable. .El .Pp +Braces are similar to single quotes in that the text inside is taken literally +without replacements, but they can span multiple lines. +They are designed to avoid the need for additional escaping when passing a group +of +.Nm +or shell commands as an argument (for example to +.Ic if-shell +or +.Ic pipe-pane ) . +These two examples produce an identical command - note that no escaping is +needed when using {}: +.Bd -literal -offset indent +if-shell true { + display -p 'brace-dollar-foo: }$foo' +} + +if-shell true "\en display -p 'brace-dollar-foo: }\e$foo'\en" +.Ed +.Pp +Braces may be enclosed inside braces, for example: +.Bd -literal -offset indent +bind x if-shell "true" { + if-shell "true" { + display "true!" + } +} +.Ed +.Pp Environment variables may be set by using the syntax .Ql name=value , for example @@ -820,15 +850,16 @@ directly without invoking the shell. .Op Ar arguments refers to a .Nm -command, passed with the command and arguments separately, for example: +command, either passed with the command and arguments separately, for example: .Bd -literal -offset indent bind-key F1 set-option status off .Ed .Pp -Or if using -.Xr sh 1 : +Or passed as a single string argument in +.Pa .tmux.conf , +for example: .Bd -literal -offset indent -$ tmux bind-key F1 set-option status off +bind-key F1 { set-option status off } .Ed .Pp Example From ae3eba6e08a8ff36a63b328880d4a97f21e1108b Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 May 2019 12:48:52 +0000 Subject: [PATCH 591/836] Fix crash when killing the current window, reported by Jesus Rafael Sanchez in GitHub issue 1760. --- spawn.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spawn.c b/spawn.c index 986a1e9dc5..bae220e1c3 100644 --- a/spawn.c +++ b/spawn.c @@ -161,6 +161,8 @@ spawn_window(struct spawn_context *sc, char **cause) xasprintf(cause, "couldn't create window %d", idx); return (NULL); } + if (s->curw == NULL) + s->curw = sc->wl; sc->wl->session = s; winlink_set_window(sc->wl, w); } else From 9f0904ce6f6da3b7d0b16f2b1bef8702a527bac4 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 27 May 2019 14:28:05 +0100 Subject: [PATCH 592/836] Remove unused fparseln compat code. --- compat.h | 4 - compat/fparseln.c | 221 ---------------------------------------------- configure.ac | 8 -- 3 files changed, 233 deletions(-) delete mode 100644 compat/fparseln.c diff --git a/compat.h b/compat.h index 402ffb9053..d3617413b2 100644 --- a/compat.h +++ b/compat.h @@ -313,10 +313,6 @@ int vasprintf(char **, const char *, va_list); char *fgetln(FILE *, size_t *); #endif -#ifndef HAVE_FPARSELN -char *fparseln(FILE *, size_t *, size_t *, const char *, int); -#endif - #ifndef HAVE_SETENV /* setenv.c */ int setenv(const char *, const char *, int); diff --git a/compat/fparseln.c b/compat/fparseln.c deleted file mode 100644 index 5c06f49192..0000000000 --- a/compat/fparseln.c +++ /dev/null @@ -1,221 +0,0 @@ -/* $OpenBSD: fparseln.c,v 1.6 2005/08/02 21:46:23 espie Exp $ */ -/* $NetBSD: fparseln.c,v 1.7 1999/07/02 15:49:12 simonb Exp $ */ - -/* - * Copyright (c) 1997 Christos Zoulas. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christos Zoulas. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* OPENBSD ORIGINAL: lib/libutil/fparseln.c */ - -#include - -#include -#include -#include - -#include "compat.h" - -/* - * fparseln() specific operation flags. - */ -#define FPARSELN_UNESCESC 0x01 -#define FPARSELN_UNESCCONT 0x02 -#define FPARSELN_UNESCCOMM 0x04 -#define FPARSELN_UNESCREST 0x08 -#define FPARSELN_UNESCALL 0x0f - -static int isescaped(const char *, const char *, int); - -/* isescaped(): - * Return true if the character in *p that belongs to a string - * that starts in *sp, is escaped by the escape character esc. - */ -static int -isescaped(const char *sp, const char *p, int esc) -{ - const char *cp; - size_t ne; - - /* No escape character */ - if (esc == '\0') - return 1; - - /* Count the number of escape characters that precede ours */ - for (ne = 0, cp = p; --cp >= sp && *cp == esc; ne++) - continue; - - /* Return true if odd number of escape characters */ - return (ne & 1) != 0; -} - - -/* fparseln(): - * Read a line from a file parsing continuations ending in \ - * and eliminating trailing newlines, or comments starting with - * the comment char. - */ -char * -fparseln(FILE *fp, size_t *size, size_t *lineno, const char str[3], - int flags) -{ - static const char dstr[3] = { '\\', '\\', '#' }; - char *buf = NULL, *ptr, *cp, esc, con, nl, com; - size_t s, len = 0; - int cnt = 1; - - if (str == NULL) - str = dstr; - - esc = str[0]; - con = str[1]; - com = str[2]; - - /* - * XXX: it would be cool to be able to specify the newline character, - * but unfortunately, fgetln does not let us - */ - nl = '\n'; - - while (cnt) { - cnt = 0; - - if (lineno) - (*lineno)++; - - if ((ptr = fgetln(fp, &s)) == NULL) - break; - - if (s && com) { /* Check and eliminate comments */ - for (cp = ptr; cp < ptr + s; cp++) - if (*cp == com && !isescaped(ptr, cp, esc)) { - s = cp - ptr; - cnt = s == 0 && buf == NULL; - break; - } - } - - if (s && nl) { /* Check and eliminate newlines */ - cp = &ptr[s - 1]; - - if (*cp == nl) - s--; /* forget newline */ - } - - if (s && con) { /* Check and eliminate continuations */ - cp = &ptr[s - 1]; - - if (*cp == con && !isescaped(ptr, cp, esc)) { - s--; /* forget escape */ - cnt = 1; - } - } - - if (s == 0 && buf != NULL) - continue; - - if ((cp = realloc(buf, len + s + 1)) == NULL) { - free(buf); - return NULL; - } - buf = cp; - - (void) memcpy(buf + len, ptr, s); - len += s; - buf[len] = '\0'; - } - - if ((flags & FPARSELN_UNESCALL) != 0 && esc && buf != NULL && - strchr(buf, esc) != NULL) { - ptr = cp = buf; - while (cp[0] != '\0') { - int skipesc; - - while (cp[0] != '\0' && cp[0] != esc) - *ptr++ = *cp++; - if (cp[0] == '\0' || cp[1] == '\0') - break; - - skipesc = 0; - if (cp[1] == com) - skipesc += (flags & FPARSELN_UNESCCOMM); - if (cp[1] == con) - skipesc += (flags & FPARSELN_UNESCCONT); - if (cp[1] == esc) - skipesc += (flags & FPARSELN_UNESCESC); - if (cp[1] != com && cp[1] != con && cp[1] != esc) - skipesc = (flags & FPARSELN_UNESCREST); - - if (skipesc) - cp++; - else - *ptr++ = *cp++; - *ptr++ = *cp++; - } - *ptr = '\0'; - len = strlen(buf); - } - - if (size) - *size = len; - return buf; -} - -#ifdef TEST - -int main(int, char **); - -int -main(argc, argv) - int argc; - char **argv; -{ - char *ptr; - size_t size, line; - - line = 0; - while ((ptr = fparseln(stdin, &size, &line, NULL, - FPARSELN_UNESCALL)) != NULL) - printf("line %d (%d) |%s|\n", line, size, ptr); - return 0; -} - -/* - -# This is a test -line 1 -line 2 \ -line 3 # Comment -line 4 \# Not comment \\\\ - -# And a comment \ -line 5 \\\ -line 6 - -*/ - -#endif /* TEST */ diff --git a/configure.ac b/configure.ac index d09fec9d53..0795bd6411 100644 --- a/configure.ac +++ b/configure.ac @@ -458,14 +458,6 @@ else AC_LIBOBJ(getopt) fi -# Look for fparseln in libutil. -AC_SEARCH_LIBS(fparseln, util, found_fparseln=yes, found_fparseln=no) -if test "x$found_fparseln" = xyes; then - AC_DEFINE(HAVE_FPARSELN) -else - AC_LIBOBJ(fparseln) -fi - # Look for fdforkpty and forkpty in libutil. AC_SEARCH_LIBS(fdforkpty, util, found_fdforkpty=yes, found_fdforkpty=no) if test "x$found_fdforkpty" = xyes; then From 714311a696014a8fca5a2e4247ee39bcc8124523 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 27 May 2019 14:37:47 +0100 Subject: [PATCH 593/836] Add {}. --- CHANGES | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES b/CHANGES index 66270be513..9f38b6f48d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,10 @@ CHANGES FROM 2.9 to X.X +* Add an addition form of string syntax in the configuration file - {}. This + means commands that take other commands as string arguments can be expressed + more clearly and without additional escaping. This means that a literal { and + } must now be escaped or quoted. + * INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most configuration files shouldn't need to be changed but there are the following differences: From a21de4c4832ca759208923d840e0a54b4d858956 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 27 May 2019 14:39:06 +0100 Subject: [PATCH 594/836] Mention <><=>=. --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 9f38b6f48d..4598059508 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,8 @@ CHANGES FROM 2.9 to X.X more clearly and without additional escaping. This means that a literal { and } must now be escaped or quoted. +* New <, >, <= and >= comparison operators for formats. + * INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most configuration files shouldn't need to be changed but there are the following differences: From 522d1bd3091aeb3094554ebd6ee28be124fc5393 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 27 May 2019 14:39:44 +0100 Subject: [PATCH 595/836] Add. --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 4598059508..e72be1b29d 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,8 @@ CHANGES FROM 2.9 to X.X * New <, >, <= and >= comparison operators for formats. +* Improve escaping of special characters in list-keys output. + * INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most configuration files shouldn't need to be changed but there are the following differences: From 94f6488f0ed043e844fb5ee74d8c77e0ce331f0a Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 May 2019 15:29:46 +0000 Subject: [PATCH 596/836] Go less crazy with horizontal separators on default menus. --- format.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/format.c b/format.c index 60db4eeab2..152e0b3b69 100644 --- a/format.c +++ b/format.c @@ -77,7 +77,6 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "|" \ "Kill,X,kill-window|" \ "Respawn,R,respawn-window -k|" \ - "|" \ "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ "Rename,n,command-prompt -I \"#W\" \"rename-window -- '%%'\"|" \ "|" \ @@ -86,7 +85,6 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); #define DEFAULT_PANE_MENU \ "#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},},C-r,copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"|" \ "#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},},C-y,send-keys -l \"#{q:mouse_word}\"|" \ - "|" \ "#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},},c,set-buffer \"#{q:mouse_word}\"|" \ "#{?mouse_line,Copy Line,},l,set-buffer \"#{q:mouse_line}\"|" \ "|" \ @@ -99,7 +97,6 @@ static void format_defaults_winlink(struct format_tree *, struct winlink *); "|" \ "Kill,X,kill-pane|" \ "Respawn,R,respawn-pane -k|" \ - "|" \ "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ "#{?window_zoomed_flag,Unzoom,Zoom},z,resize-pane -Z" From 90cd045cf354000cbf9c1f66e27366868a040588 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 May 2019 16:22:32 +0000 Subject: [PATCH 597/836] Clarify newlines inside {} a little. --- tmux.1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index 77f509ed29..014efe441d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -488,7 +488,7 @@ comment is ignored until the end of the line. If the last character of a line is \e, the line is joined with the following line (the \e and the newline are completely removed). This is called line continuation and applies both inside and outside quoted -strings and in comments. +strings and in comments, but not inside braces. .Pp Command arguments may be specified as strings surrounded by single (') quotes, double quotes (") or braces ({}). @@ -523,7 +523,9 @@ variable. .El .Pp Braces are similar to single quotes in that the text inside is taken literally -without replacements, but they can span multiple lines. +without any replacements but this also includes line continuation. +Braces can span multiple lines in which case a literal newline is included in the +string. They are designed to avoid the need for additional escaping when passing a group of .Nm From 799a154b91c6e6ff7dbe62b67272f09578c99914 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 07:18:42 +0000 Subject: [PATCH 598/836] Change display-menu from taking a single string to a set of arguments, which is much easier to work with. Based on a diff from Avi Halachmi. --- cmd-display-menu.c | 49 ++++++++++++------- format.c | 51 -------------------- key-bindings.c | 49 +++++++++++++++++-- menu.c | 116 +++++++++++++++++---------------------------- mode-tree.c | 28 ++++++----- tmux.1 | 33 ++++--------- tmux.h | 20 +++++--- window-buffer.c | 29 +++++++----- window-client.c | 23 +++++---- window-tree.c | 29 +++++++----- 10 files changed, 204 insertions(+), 223 deletions(-) diff --git a/cmd-display-menu.c b/cmd-display-menu.c index 570eedf251..ac7a4cfe33 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -34,9 +34,9 @@ const struct cmd_entry cmd_display_menu_entry = { .name = "display-menu", .alias = "menu", - .args = { "c:FM:t:T:x:y:", 0, 0 }, - .usage = "[-F] [-c target-client] [-M menu] " CMD_TARGET_PANE_USAGE " " - "[-T title] [-x position] [-y position]", + .args = { "c:t:T:x:y:", 1, -1 }, + .usage = "[-c target-client] " CMD_TARGET_PANE_USAGE " [-T title] " + "[-x position] [-y position] name key command ...", .target = { 't', CMD_FIND_PANE, 0 }, @@ -55,10 +55,11 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) struct cmd_find_state *fs = &item->target; struct menu *menu = NULL; struct style_range *sr; - const char *string, *xp, *yp; - int at, flags; + struct menu_item menu_item; + const char *xp, *yp, *key; + char *title, *name; + int at, flags, i; u_int px, py, ox, oy, sx, sy; - char *title; if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL) return (CMD_RETURN_ERROR); @@ -66,23 +67,37 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_NORMAL); at = status_at_line(c); - string = args_get(args, 'M'); - if (string == NULL) { - cmdq_error(item, "no menu specified"); - return (CMD_RETURN_ERROR); - } - if (args_has(args, 'F')) - string = format_single(NULL, string, c, s, wl, wp); - else - string = xstrdup(string); if (args_has(args, 'T')) title = format_single(NULL, args_get(args, 'T'), c, s, wl, wp); else title = xstrdup(""); - menu = menu_create(string, item, c, fs, title); + + menu = menu_create(title); + + for (i = 0; i != args->argc; /* nothing */) { + name = args->argv[i++]; + if (*name == '\0') { + menu_add_item(menu, NULL, item, c, fs); + continue; + } + + if (args->argc - i < 2) { + cmdq_error(item, "not enough arguments"); + free(title); + menu_free(menu); + return (CMD_RETURN_ERROR); + } + key = args->argv[i++]; + + menu_item.name = name; + menu_item.key = key_string_lookup_string(key); + menu_item.command = args->argv[i++]; + + menu_add_item(menu, &menu_item, item, c, fs); + } free(title); if (menu == NULL) { - cmdq_error(item, "invalid menu %s", string); + cmdq_error(item, "invalid menu arguments"); return (CMD_RETURN_ERROR); } if (menu->count == 0) { diff --git a/format.c b/format.c index 152e0b3b69..0cf7ee6419 100644 --- a/format.c +++ b/format.c @@ -54,52 +54,6 @@ static void format_defaults_session(struct format_tree *, static void format_defaults_client(struct format_tree *, struct client *); static void format_defaults_winlink(struct format_tree *, struct winlink *); -/* Default menus. */ -#define DEFAULT_CLIENT_MENU \ - "Detach,d,detach-client|" \ - "Detach & Kill,X,detach-client -P|" \ - "Detach Others,o,detach-client -a|" \ - "|" \ - "Lock,l,lock-client" -#define DEFAULT_SESSION_MENU \ - "Next,n,switch-client -n|" \ - "Previous,p,switch-client -p|" \ - "|" \ - "Renumber,N,move-window -r|" \ - "Rename,n,command-prompt -I \"#S\" \"rename-session -- '%%'\"|" \ - "|" \ - "New Session,s,new-session|" \ - "New Window,w,new-window" -#define DEFAULT_WINDOW_MENU \ - "Swap Left,l,swap-window -t:-1|" \ - "Swap Right,r,swap-window -t:+1|" \ - "#{?pane_marked_set,,#[dim]}Swap Marked,s,swap-window|" \ - "|" \ - "Kill,X,kill-window|" \ - "Respawn,R,respawn-window -k|" \ - "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ - "Rename,n,command-prompt -I \"#W\" \"rename-window -- '%%'\"|" \ - "|" \ - "New After,w,new-window -a|" \ - "New At End,W,new-window" -#define DEFAULT_PANE_MENU \ - "#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},},C-r,copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"|" \ - "#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},},C-y,send-keys -l \"#{q:mouse_word}\"|" \ - "#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},},c,set-buffer \"#{q:mouse_word}\"|" \ - "#{?mouse_line,Copy Line,},l,set-buffer \"#{q:mouse_line}\"|" \ - "|" \ - "Horizontal Split,h,split-window -h|" \ - "Vertical Split,v,split-window -v|" \ - "|" \ - "Swap Up,u,swap-pane -U|" \ - "Swap Down,d,swap-pane -D|" \ - "#{?pane_marked_set,,#[dim]}Swap Marked,s,swap-pane|" \ - "|" \ - "Kill,X,kill-pane|" \ - "Respawn,R,respawn-pane -k|" \ - "#{?pane_marked,Unmark,Mark},m,select-pane -m|" \ - "#{?window_zoomed_flag,Unzoom,Zoom},z,resize-pane -Z" - /* Entry in format job tree. */ struct format_job { struct client *client; @@ -944,11 +898,6 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags) } } - format_add(ft, "client_menu", "%s", DEFAULT_CLIENT_MENU); - format_add(ft, "session_menu", "%s", DEFAULT_SESSION_MENU); - format_add(ft, "window_menu", "%s", DEFAULT_WINDOW_MENU); - format_add(ft, "pane_menu", "%s", DEFAULT_PANE_MENU); - if (item != NULL) format_create_add_item(ft, item); diff --git a/key-bindings.c b/key-bindings.c index b2055cf749..d20eca4b4f 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -280,10 +280,51 @@ key_bindings_init(void) "bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'", "bind -n MouseDown3Pane if -Ft= '#{||:mouse_any_flag,pane_in_mode}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", "bind -n WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", - "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -F -M \"#{client_menu}\" -T \"#[align=centre]#{client_name}\"", - "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -F -M \"#{session_menu}\" -T \"#[align=centre]#{session_name}\"", - "bind -n MouseDown3Status display-menu -t= -xW -yS -F -M \"#{window_menu}\" -T \"#[align=centre]#{window_index}:#{window_name}\"", - "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -F -M \"#{pane_menu}\" -T \"#[align=centre]#{pane_index} (#{pane_id})\"", + + "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\"" + " 'Detach' 'd' {detach-client}" + " 'Detach & Kill' 'X' {detach-client -P}" + " 'Detach Others' 'o' {detach-client -a}" + " ''" + " 'Lock' 'l' {lock-client}", + "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\"" + " 'Next' 'n' {switch-client -n}" + " 'Previous' 'p' {switch-client -p}" + " ''" + " 'Renumber' 'N' {move-window -r}" + " 'Rename' 'n' {command-prompt -I \"#S\" \"rename-session -- '%%'\"}" + " ''" + " 'New Session' 's' {new-session}" + " 'New Window' 'w' {new-window}", + "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\"" + " 'Swap Left' 'l' {swap-window -t:-1}" + " 'Swap Right' 'r' {swap-window -t:+1}" + " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-window}" + " ''" + " 'Kill' 'X' {kill-window}" + " 'Respawn' 'R' {respawn-window -k}" + " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" + " 'Rename' 'n' {command-prompt -I \"#W\" \"rename-window -- '%%'\"}" + " ''" + " 'New After' 'w' {new-window -a}" + " 'New At End' 'W' {new-window}", + "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\"" + " '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"}" + " '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {send-keys -l -- \"#{q:mouse_word}\"}" + " '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {set-buffer -- \"#{q:mouse_word}\"}" + " '#{?mouse_line,Copy Line,}' 'l' {set-buffer -- \"#{q:mouse_line}\"}" + " ''" + " 'Horizontal Split' 'h' {split-window -h}" + " 'Vertical Split' 'v' {split-window -v}" + " ''" + " 'Swap Up' 'u' {swap-pane -U}" + " 'Swap Down' 'd' {swap-pane -D}" + " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-pane}" + " ''" + " 'Kill' 'X' {kill-pane}" + " 'Respawn' 'R' {respawn-pane -k}" + " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" + " '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}", "bind -Tcopy-mode C-Space send -X begin-selection", "bind -Tcopy-mode C-a send -X start-of-line", diff --git a/menu.c b/menu.c index 26ead507e6..9aedf6d912 100644 --- a/menu.c +++ b/menu.c @@ -40,49 +40,63 @@ struct menu_data { void *data; }; -static void -menu_add_item(struct menu *menu, struct menu_item *item, +void +menu_add_items(struct menu *menu, const struct menu_item *items, + struct cmdq_item *qitem, struct client *c, struct cmd_find_state *fs) +{ + const struct menu_item *loop; + + for (loop = items; loop->name != NULL; loop++) + menu_add_item(menu, loop, qitem, c, fs); +} + +void +menu_add_item(struct menu *menu, const struct menu_item *item, struct cmdq_item *qitem, struct client *c, struct cmd_find_state *fs) { struct menu_item *new_item; - const char *key; - char *name; + const char *key, *cmd; + char *s, *name; u_int width; + int line; + + line = (item == NULL || item->name == NULL || *item->name == '\0'); + if (line && menu->count == 0) + return; menu->items = xreallocarray(menu->items, menu->count + 1, sizeof *menu->items); new_item = &menu->items[menu->count++]; memset(new_item, 0, sizeof *new_item); - if (item == NULL || *item->name == '\0') /* horizontal line */ + if (line) return; - if (fs != NULL) { - name = format_single(qitem, item->name, c, fs->s, fs->wl, - fs->wp); - } else - name = format_single(qitem, item->name, c, NULL, NULL, NULL); - if (*name == '\0') { /* no item if empty after format expanded */ + + if (fs != NULL) + s = format_single(qitem, item->name, c, fs->s, fs->wl, fs->wp); + else + s = format_single(qitem, item->name, c, NULL, NULL, NULL); + if (*s == '\0') { /* no item if empty after format expanded */ menu->count--; return; } - if (item->key != KEYC_UNKNOWN) { + if (item->key != KEYC_UNKNOWN && item->key != KEYC_NONE) { key = key_string_lookup_key(item->key); - xasprintf(&new_item->name, "%s#[default] #[align=right](%s)", - name, key); + xasprintf(&name, "%s#[default] #[align=right](%s)", s, key); } else - xasprintf(&new_item->name, "%s", name); - free(name); - - if (item->command != NULL) { - if (fs != NULL) { - new_item->command = format_single(qitem, item->command, - c, fs->s, fs->wl, fs->wp); - } else { - new_item->command = format_single(qitem, item->command, - c, NULL, NULL, NULL); - } + xasprintf(&name, "%s", s); + new_item->name = name; + free(s); + + cmd = item->command; + if (cmd != NULL) { + if (fs != NULL) + s = format_single(qitem, cmd, c, fs->s, fs->wl, fs->wp); + else + s = format_single(qitem, cmd, c, NULL, NULL, NULL); } else - new_item->command = NULL; + s = NULL; + new_item->command = s; new_item->key = item->key; width = format_width(new_item->name); @@ -90,56 +104,14 @@ menu_add_item(struct menu *menu, struct menu_item *item, menu->width = width; } -static void -menu_parse_item(struct menu *menu, const char *s, struct cmdq_item *qitem, - struct client *c, struct cmd_find_state *fs) -{ - char *copy, *first; - const char *second, *third; - struct menu_item item; - - first = copy = xstrdup(s); - if ((second = format_skip(first, ",")) != NULL) { - *(char *)second++ = '\0'; - if ((third = format_skip(second, ",")) != NULL) { - *(char *)third++ = '\0'; - - item.name = first; - item.command = (char *)third; - item.key = key_string_lookup_string(second); - menu_add_item(menu, &item, qitem, c, fs); - } - } - free(copy); -} - struct menu * -menu_create(const char *s, struct cmdq_item *qitem, struct client *c, - struct cmd_find_state *fs, const char *title) +menu_create(const char *title) { struct menu *menu; - char *copy, *string, *next; - - if (*s == '\0') - return (NULL); menu = xcalloc(1, sizeof *menu); menu->title = xstrdup(title); - copy = string = xstrdup(s); - do { - next = (char *)format_skip(string, "|"); - if (next != NULL) - *next++ = '\0'; - if (*string == '\0') { - if (menu->count != 0) - menu_add_item(menu, NULL, qitem, c, fs); - } else - menu_parse_item(menu, string, qitem, c, fs); - string = next; - } while (next != NULL); - free(copy); - return (menu); } @@ -149,12 +121,12 @@ menu_free(struct menu *menu) u_int i; for (i = 0; i < menu->count; i++) { - free(menu->items[i].name); - free(menu->items[i].command); + free((void *)menu->items[i].name); + free((void *)menu->items[i].command); } free(menu->items); - free(menu->title); + free((void *)menu->title); free(menu); } diff --git a/mode-tree.c b/mode-tree.c index add17c825c..750346750c 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -35,7 +35,7 @@ struct mode_tree_data { struct window_pane *wp; void *modedata; - const char *menu; + const struct menu_item *menu; const char **sort_list; u_int sort_size; @@ -100,11 +100,14 @@ struct mode_tree_menu { static void mode_tree_free_items(struct mode_tree_list *); -#define MODE_TREE_MENU \ - "Scroll Left,<,|" \ - "Scroll Right,>,|" \ - "|" \ - "Cancel,q," +static const struct menu_item mode_tree_menu_items[] = { + { "Scroll Left", '<', NULL }, + { "Scroll Right", '>', NULL }, + { "", KEYC_NONE, NULL }, + { "Cancel", 'q', NULL }, + + { NULL, KEYC_NONE, NULL } +}; static struct mode_tree_item * mode_tree_find_item(struct mode_tree_list *mtl, uint64_t tag) @@ -315,7 +318,7 @@ struct mode_tree_data * mode_tree_start(struct window_pane *wp, struct args *args, mode_tree_build_cb buildcb, mode_tree_draw_cb drawcb, mode_tree_search_cb searchcb, mode_tree_menu_cb menucb, void *modedata, - const char *menu, const char **sort_list, u_int sort_size, + const struct menu_item *menu, const char **sort_list, u_int sort_size, struct screen **s) { struct mode_tree_data *mtd; @@ -812,8 +815,8 @@ mode_tree_display_menu(struct mode_tree_data *mtd, struct client *c, u_int x, { struct mode_tree_item *mti; struct menu *menu; + const struct menu_item *items; struct mode_tree_menu *mtm; - const char *s; char *title; u_int line; @@ -824,16 +827,15 @@ mode_tree_display_menu(struct mode_tree_data *mtd, struct client *c, u_int x, mti = mtd->line_list[line].item; if (!outside) { - s = mtd->menu; + items = mtd->menu; xasprintf(&title, "#[align=centre]%s", mti->name); } else { - s = MODE_TREE_MENU; + items = mode_tree_menu_items; title = xstrdup(""); } - menu = menu_create(s, NULL, c, NULL, title); + menu = menu_create(title); + menu_add_items(menu, items, NULL, NULL, NULL); free(title); - if (menu == NULL) - return; mtm = xmalloc(sizeof *mtm); mtm->data = mtd; diff --git a/tmux.1 b/tmux.1 index 014efe441d..735e932df6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4123,7 +4123,6 @@ The following variables are available, where appropriate: .It Li "client_height" Ta "" Ta "Height of client" .It Li "client_key_table" Ta "" Ta "Current key table" .It Li "client_last_session" Ta "" Ta "Name of the client's last session" -.It Li "client_menu" Ta "" Ta "The default client menu" .It Li "client_name" Ta "" Ta "Name of client" .It Li "client_pid" Ta "" Ta "PID of client process" .It Li "client_prefix" Ta "" Ta "1 if prefix key has been pressed" @@ -4184,7 +4183,6 @@ The following variables are available, where appropriate: .It Li "pane_left" Ta "" Ta "Left of pane" .It Li "pane_marked" Ta "" Ta "1 if this is the marked pane" .It Li "pane_marked_set" Ta "" Ta "1 if a marked pane is set" -.It Li "pane_menu" Ta "" Ta "The default pane menu" .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_pipe" Ta "" Ta "1 if pane is being piped" @@ -4215,7 +4213,6 @@ The following variables are available, where appropriate: .It Li "session_id" Ta "" Ta "Unique session ID" .It Li "session_last_attached" Ta "" Ta "Time session last attached" .It Li "session_many_attached" Ta "" Ta "1 if multiple clients attached" -.It Li "session_menu" Ta "" Ta "The default session menu" .It Li "session_name" Ta "#S" Ta "Name of session" .It Li "session_stack" Ta "" Ta "Window indexes in most recent order" .It Li "session_windows" Ta "" Ta "Number of windows in session" @@ -4235,7 +4232,6 @@ The following variables are available, where appropriate: .It Li "window_last_flag" Ta "" Ta "1 if window is the last used" .It Li "window_layout" Ta "" Ta "Window layout description, ignoring zoomed window panes" .It Li "window_linked" Ta "" Ta "1 if window is linked across sessions" -.It Li "window_menu" Ta "" Ta "The default window menu" .It Li "window_name" Ta "#W" Ta "Name of window" .It Li "window_offset_x" Ta "" Ta "X offset into window if larger than client" .It Li "window_offset_y" Ta "" Ta "Y offset into window if larger than client" @@ -4654,13 +4650,15 @@ option. This command works only from inside .Nm . .It Xo Ic display-menu -.Op Fl F .Op Fl c Ar target-client -.Op Fl M Ar menu .Op Fl t Ar target-pane .Op Fl T Ar title .Op Fl x Ar position .Op Fl y Ar position +.Ar name +.Ar key +.Ar command +.Ar ... .Xc .D1 (alias: Ic menu ) Display a menu on @@ -4668,27 +4666,16 @@ Display a menu on .Ar target-pane gives the target for any commands run from the menu. .Pp -A menu is passed to -.Fl M -as a list of menu items separated by -.Ql | . -Each menu item consists of three comma-separated parts: -.Bl -enum -width Ds -.It -The menu item name. -This is a format and may include embedded styles, see the +A menu is passed as a series of arguments: first the menu item name, +second the key shortcut (or empty for none) and third the command +to run when the menu item is chosen. +The name and command are formats, see the .Sx FORMATS and .Sx STYLES sections. -.It -The menu item shortcut key. -If this is empty the menu item has no key shortcut. -.It -The command run when the menu item is chosen. -.El -.Pp -An empty menu item is a separator line. +The name may be empty for a separator line, in which case both the key and +command should be omitted. .Pp .Fl T is a format for the menu title (see diff --git a/tmux.h b/tmux.h index 1930587542..8eb1e65a0d 100644 --- a/tmux.h +++ b/tmux.h @@ -752,12 +752,12 @@ struct screen_redraw_ctx { /* Menu. */ struct menu_item { - char *name; - char *command; + const char *name; key_code key; + const char *command; }; struct menu { - char *title; + const char *title; struct menu_item *items; u_int count; u_int width; @@ -2467,8 +2467,8 @@ void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, void mode_tree_down(struct mode_tree_data *, int); struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, - mode_tree_menu_cb, void *, const char *, const char **, u_int, - struct screen **); + mode_tree_menu_cb, void *, const struct menu_item *, const char **, + u_int, struct screen **); void mode_tree_zoom(struct mode_tree_data *, struct args *); void mode_tree_build(struct mode_tree_data *); void mode_tree_free(struct mode_tree_data *); @@ -2600,8 +2600,14 @@ __dead void printflike(1, 2) fatal(const char *, ...); __dead void printflike(1, 2) fatalx(const char *, ...); /* menu.c */ -struct menu *menu_create(const char *, struct cmdq_item *, struct client *, - struct cmd_find_state *, const char *); +struct menu *menu_create(const char *); +void menu_add_items(struct menu *, const struct menu_item *, + struct cmdq_item *, struct client *, + struct cmd_find_state *); +void menu_add_item(struct menu *, const struct menu_item *, + struct cmdq_item *, struct client *, + struct cmd_find_state *); + void menu_free(struct menu *); int menu_display(struct menu *, int, struct cmdq_item *, u_int, u_int, struct client *, struct cmd_find_state *, diff --git a/window-buffer.c b/window-buffer.c index 3597fbf20f..79dacf973c 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -39,18 +39,21 @@ static void window_buffer_key(struct window_mode_entry *, #define WINDOW_BUFFER_DEFAULT_FORMAT \ "#{buffer_size} bytes (#{t:buffer_created})" -#define WINDOW_BUFFER_MENU \ - "Paste,p,|" \ - "Paste Tagged,P,|" \ - "|" \ - "Tag,t,|" \ - "Tag All,C-t,|" \ - "Tag None,T,|" \ - "|" \ - "Delete,d,|" \ - "Delete Tagged,D,|" \ - "|" \ - "Cancel,q," +static const struct menu_item window_buffer_menu_items[] = { + { "Paste", 'p', NULL }, + { "Paste Tagged", 'P', NULL }, + { "", KEYC_NONE, NULL }, + { "Tag", 't', NULL }, + { "Tag All", '\024', NULL }, + { "Tag None", 'T', NULL }, + { "", KEYC_NONE, NULL }, + { "Delete", 'd', NULL }, + { "Delete Tagged", 'D', NULL }, + { "", KEYC_NONE, NULL }, + { "Cancel", 'q', NULL }, + + { NULL, KEYC_NONE, NULL } +}; const struct window_mode window_buffer_mode = { .name = "buffer-mode", @@ -315,7 +318,7 @@ window_buffer_init(struct window_mode_entry *wme, struct cmd_find_state *fs, data->data = mode_tree_start(wp, args, window_buffer_build, window_buffer_draw, window_buffer_search, window_buffer_menu, data, - WINDOW_BUFFER_MENU, window_buffer_sort_list, + window_buffer_menu_items, window_buffer_sort_list, nitems(window_buffer_sort_list), &s); mode_tree_zoom(data->data, args); diff --git a/window-client.c b/window-client.c index e172b584b7..d85414ead4 100644 --- a/window-client.c +++ b/window-client.c @@ -40,15 +40,18 @@ static void window_client_key(struct window_mode_entry *, "session #{session_name} " \ "(#{client_width}x#{client_height}, #{t:client_activity})" -#define WINDOW_CLIENT_MENU \ - "Detach,d,|" \ - "Detach Tagged,D,|" \ - "|" \ - "Tag,t,|" \ - "Tag All,C-t,|" \ - "Tag None,T,|" \ - "|" \ - "Cancel,q," +static const struct menu_item window_client_menu_items[] = { + { "Detach", 'd', NULL }, + { "Detach Tagged", 'D', NULL }, + { "", KEYC_NONE, NULL }, + { "Tag", 't', NULL }, + { "Tag All", '\024', NULL }, + { "Tag None", 'T', NULL }, + { "", KEYC_NONE, NULL }, + { "Cancel", 'q', NULL }, + + { NULL, KEYC_NONE, NULL } +}; const struct window_mode window_client_mode = { .name = "client-mode", @@ -296,7 +299,7 @@ window_client_init(struct window_mode_entry *wme, data->data = mode_tree_start(wp, args, window_client_build, window_client_draw, NULL, window_client_menu, data, - WINDOW_CLIENT_MENU, window_client_sort_list, + window_client_menu_items, window_client_sort_list, nitems(window_client_sort_list), &s); mode_tree_zoom(data->data, args); diff --git a/window-tree.c b/window-tree.c index ce740cebf5..b9fc4a6afe 100644 --- a/window-tree.c +++ b/window-tree.c @@ -53,18 +53,21 @@ static void window_tree_key(struct window_mode_entry *, "}" \ "}" -#define WINDOW_TREE_MENU \ - "Select,Enter,|" \ - "Expand,Right,|" \ - "|" \ - "Tag,t,|" \ - "Tag All,C-t,|" \ - "Tag None,T,|" \ - "|" \ - "Kill,x,|" \ - "Kill Tagged,X,|" \ - "|" \ - "Cancel,q," +static const struct menu_item window_tree_menu_items[] = { + { "Select", 'E', NULL }, + { "Expand", 'R', NULL }, + { "", KEYC_NONE, NULL }, + { "Tag", 't', NULL }, + { "Tag All", '\024', NULL }, + { "Tag None", 'T', NULL }, + { "", KEYC_NONE, NULL }, + { "Kill", 'x', NULL }, + { "Kill Tagged", 'X', NULL }, + { "", KEYC_NONE, NULL }, + { "Cancel", 'q', NULL }, + + { NULL, KEYC_NONE, NULL } +}; const struct window_mode window_tree_mode = { .name = "tree-mode", @@ -872,7 +875,7 @@ window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, data->data = mode_tree_start(wp, args, window_tree_build, window_tree_draw, window_tree_search, window_tree_menu, data, - WINDOW_TREE_MENU, window_tree_sort_list, + window_tree_menu_items, window_tree_sort_list, nitems(window_tree_sort_list), &s); mode_tree_zoom(data->data, args); From 12255411f27e2c937334b1d84671ae46d5ef3c0c Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 09:50:54 +0000 Subject: [PATCH 599/836] Allow menu items to be disabled by putting a - at the start of their name, rather than just including #[dim] which still allowed them to be chosen. --- key-bindings.c | 4 ++-- menu.c | 22 ++++++++++++++++------ screen-write.c | 15 +++++++++++---- tmux.1 | 2 ++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index d20eca4b4f..3f74cb3788 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -299,7 +299,7 @@ key_bindings_init(void) "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\"" " 'Swap Left' 'l' {swap-window -t:-1}" " 'Swap Right' 'r' {swap-window -t:+1}" - " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-window}" + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-window}" " ''" " 'Kill' 'X' {kill-window}" " 'Respawn' 'R' {respawn-window -k}" @@ -319,7 +319,7 @@ key_bindings_init(void) " ''" " 'Swap Up' 'u' {swap-pane -U}" " 'Swap Down' 'd' {swap-pane -D}" - " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-pane}" + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-pane}" " ''" " 'Kill' 'X' {kill-pane}" " 'Respawn' 'R' {respawn-pane -k}" diff --git a/menu.c b/menu.c index 9aedf6d912..fd35399bdb 100644 --- a/menu.c +++ b/menu.c @@ -80,7 +80,7 @@ menu_add_item(struct menu *menu, const struct menu_item *item, menu->count--; return; } - if (item->key != KEYC_UNKNOWN && item->key != KEYC_NONE) { + if (*s != '-' && item->key != KEYC_UNKNOWN && item->key != KEYC_NONE) { key = key_string_lookup_key(item->key); xasprintf(&name, "%s#[default] #[align=right](%s)", s, key); } else @@ -182,6 +182,7 @@ menu_key_cb(struct client *c, struct key_event *event) const struct menu_item *item; struct cmdq_item *new_item; struct cmd_parse_result *pr; + const char *name; if (KEYC_IS_MOUSE(event->key)) { if (md->flags & MENU_NOMOUSE) @@ -207,21 +208,27 @@ menu_key_cb(struct client *c, struct key_event *event) } switch (event->key) { case KEYC_UP: + if (old == -1) + old = 0; do { if (md->choice == -1 || md->choice == 0) md->choice = count - 1; else md->choice--; - } while (menu->items[md->choice].name == NULL); + name = menu->items[md->choice].name; + } while ((name == NULL || *name == '-') && md->choice != old); c->flags |= CLIENT_REDRAWOVERLAY; return (0); case KEYC_DOWN: + if (old == -1) + old = 0; do { if (md->choice == -1 || md->choice == count - 1) md->choice = 0; - else - md->choice++; - } while (menu->items[md->choice].name == NULL); + else + md->choice++; + name = menu->items[md->choice].name; + } while ((name == NULL || *name == '-') && md->choice != old); c->flags |= CLIENT_REDRAWOVERLAY; return (0); case '\r': @@ -233,6 +240,9 @@ menu_key_cb(struct client *c, struct key_event *event) return (1); } for (i = 0; i < (u_int)count; i++) { + name = menu->items[i].name; + if (name == NULL || *name == '-') + continue; if (event->key == menu->items[i].key) { md->choice = i; goto chosen; @@ -244,7 +254,7 @@ menu_key_cb(struct client *c, struct key_event *event) if (md->choice == -1) return (1); item = &menu->items[md->choice]; - if (item->name == NULL) + if (item->name == NULL || *item->name == '-') return (1); if (md->cb != NULL) { md->cb(md->menu, md->choice, item->key, md->data); diff --git a/screen-write.c b/screen-write.c index ad3808aeea..174c7a8274 100644 --- a/screen-write.c +++ b/screen-write.c @@ -410,6 +410,7 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu, int choice) struct screen *s = ctx->s; struct grid_cell gc; u_int cx, cy, i, j; + const char *name; cx = s->cx; cy = s->cy; @@ -421,18 +422,24 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu, int choice) format_draw(ctx, &gc, menu->width, menu->title, NULL); for (i = 0; i < menu->count; i++) { - if (menu->items[i].name == NULL) { + name = menu->items[i].name; + if (name == NULL) { screen_write_cursormove(ctx, cx, cy + 1 + i, 0); screen_write_hline(ctx, menu->width + 4, 1, 1); } else { - if (choice >= 0 && i == (u_int)choice) + if (choice >= 0 && i == (u_int)choice && *name != '-') gc.attr |= GRID_ATTR_REVERSE; screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); for (j = 0; j < menu->width; j++) screen_write_putc(ctx, &gc, ' '); screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); - format_draw(ctx, &gc, menu->width, menu->items[i].name, - NULL); + if (*name == '-') { + name++; + gc.attr |= GRID_ATTR_DIM; + format_draw(ctx, &gc, menu->width, name, NULL); + gc.attr &= ~GRID_ATTR_DIM; + } else + format_draw(ctx, &gc, menu->width, name, NULL); if (choice >= 0 && i == (u_int)choice) gc.attr &= ~GRID_ATTR_REVERSE; } diff --git a/tmux.1 b/tmux.1 index 735e932df6..fc51ec3025 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4674,6 +4674,8 @@ The name and command are formats, see the and .Sx STYLES sections. +If the name begins with a hyphen (-), then the item is disabled (shown dim) and +may not be chosen. The name may be empty for a separator line, in which case both the key and command should be omitted. .Pp From 99a8469ee4924be2b02aafc86f930426f15a3d55 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 10:05:24 +0000 Subject: [PATCH 600/836] Add key bindings to open the window and pane menus (C-m and M-m for now). --- key-bindings.c | 96 +++++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 44 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index 3f74cb3788..51b043a9ed 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -24,6 +24,52 @@ #include "tmux.h" +#define DEFAULT_CLIENT_MENU \ + " 'Detach' 'd' {detach-client}" \ + " 'Detach & Kill' 'X' {detach-client -P}" \ + " 'Detach Others' 'o' {detach-client -a}" \ + " ''" \ + " 'Lock' 'l' {lock-client}" +#define DEFAULT_SESSION_MENU \ + " 'Next' 'n' {switch-client -n}" \ + " 'Previous' 'p' {switch-client -p}" \ + " ''" \ + " 'Renumber' 'N' {move-window -r}" \ + " 'Rename' 'n' {command-prompt -I \"#S\" \"rename-session -- '%%'\"}" \ + " ''" \ + " 'New Session' 's' {new-session}" \ + " 'New Window' 'w' {new-window}" +#define DEFAULT_WINDOW_MENU \ + " 'Swap Left' 'l' {swap-window -t:-1}" \ + " 'Swap Right' 'r' {swap-window -t:+1}" \ + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-window}" \ + " ''" \ + " 'Kill' 'X' {kill-window}" \ + " 'Respawn' 'R' {respawn-window -k}" \ + " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" \ + " 'Rename' 'n' {command-prompt -I \"#W\" \"rename-window -- '%%'\"}" \ + " ''" \ + " 'New After' 'w' {new-window -a}" \ + " 'New At End' 'W' {new-window}" +#define DEFAULT_PANE_MENU \ + " '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"}" \ + " '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {send-keys -l -- \"#{q:mouse_word}\"}" \ + " '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {set-buffer -- \"#{q:mouse_word}\"}" \ + " '#{?mouse_line,Copy Line,}' 'l' {set-buffer -- \"#{q:mouse_line}\"}" \ + " ''" \ + " 'Horizontal Split' 'h' {split-window -h}" \ + " 'Vertical Split' 'v' {split-window -v}" \ + " ''" \ + " 'Swap Up' 'u' {swap-pane -U}" \ + " 'Swap Down' 'd' {swap-pane -D}" \ + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-pane}" \ + " ''" \ + " 'Kill' 'X' {kill-pane}" \ + " 'Respawn' 'R' {respawn-pane -k}" \ + " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" \ + " '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}" + + static int key_bindings_cmp(struct key_binding *, struct key_binding *); RB_GENERATE_STATIC(key_bindings, key_binding, entry, key_bindings_cmp); static int key_table_cmp(struct key_table *, struct key_table *); @@ -281,50 +327,12 @@ key_bindings_init(void) "bind -n MouseDown3Pane if -Ft= '#{||:mouse_any_flag,pane_in_mode}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", "bind -n WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", - "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\"" - " 'Detach' 'd' {detach-client}" - " 'Detach & Kill' 'X' {detach-client -P}" - " 'Detach Others' 'o' {detach-client -a}" - " ''" - " 'Lock' 'l' {lock-client}", - "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\"" - " 'Next' 'n' {switch-client -n}" - " 'Previous' 'p' {switch-client -p}" - " ''" - " 'Renumber' 'N' {move-window -r}" - " 'Rename' 'n' {command-prompt -I \"#S\" \"rename-session -- '%%'\"}" - " ''" - " 'New Session' 's' {new-session}" - " 'New Window' 'w' {new-window}", - "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\"" - " 'Swap Left' 'l' {swap-window -t:-1}" - " 'Swap Right' 'r' {swap-window -t:+1}" - " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-window}" - " ''" - " 'Kill' 'X' {kill-window}" - " 'Respawn' 'R' {respawn-window -k}" - " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" - " 'Rename' 'n' {command-prompt -I \"#W\" \"rename-window -- '%%'\"}" - " ''" - " 'New After' 'w' {new-window -a}" - " 'New At End' 'W' {new-window}", - "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\"" - " '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"}" - " '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {send-keys -l -- \"#{q:mouse_word}\"}" - " '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {set-buffer -- \"#{q:mouse_word}\"}" - " '#{?mouse_line,Copy Line,}' 'l' {set-buffer -- \"#{q:mouse_line}\"}" - " ''" - " 'Horizontal Split' 'h' {split-window -h}" - " 'Vertical Split' 'v' {split-window -v}" - " ''" - " 'Swap Up' 'u' {swap-pane -U}" - " 'Swap Down' 'd' {swap-pane -D}" - " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-pane}" - " ''" - " 'Kill' 'X' {kill-pane}" - " 'Respawn' 'R' {respawn-pane -k}" - " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" - " '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}", + "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\" " DEFAULT_CLIENT_MENU, + "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\" " DEFAULT_SESSION_MENU, + "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, + "bind C-m display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, + "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, + "bind M-m display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, "bind -Tcopy-mode C-Space send -X begin-selection", "bind -Tcopy-mode C-a send -X start-of-line", From e0fd2950548def0124733b43fb347e82878f47b3 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 10:27:11 +0000 Subject: [PATCH 601/836] Change the default right click pane to open the menu if not in a mode and no application mouse. --- key-bindings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/key-bindings.c b/key-bindings.c index 51b043a9ed..0c9ba67bbb 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -324,13 +324,13 @@ key_bindings_init(void) "bind -n WheelDownStatus next-window", "bind -n WheelUpStatus previous-window", "bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'", - "bind -n MouseDown3Pane if -Ft= '#{||:mouse_any_flag,pane_in_mode}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", "bind -n WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\" " DEFAULT_CLIENT_MENU, "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\" " DEFAULT_SESSION_MENU, "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, "bind C-m display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, + "bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{pane_in_mode}}' 'select-pane -t=; send-keys -M' {display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU "}", "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, "bind M-m display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, From 0ec410689c2ab265f7d9e94db3fcd09e8ff7ba60 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 11:46:30 +0000 Subject: [PATCH 602/836] Allow source-file to take multiple arguments. --- cmd-source-file.c | 63 +++++++++++++++++++++++++---------------------- tmux.1 | 7 +++--- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/cmd-source-file.c b/cmd-source-file.c index bfb530b772..a22c38e6be 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -38,8 +38,8 @@ const struct cmd_entry cmd_source_file_entry = { .name = "source-file", .alias = "source", - .args = { "nq", 1, 1 }, - .usage = "[-nq] path", + .args = { "nq", 1, -1 }, + .usage = "[-nq] path ...", .flags = 0, .exec = cmd_source_file_exec @@ -53,49 +53,54 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) struct client *c = item->client; struct cmdq_item *new_item, *after; enum cmd_retval retval; - char *pattern, *tmp; - const char *path = args->argv[0]; + char *pattern, *cwd; + const char *path, *error; glob_t g; - u_int i; + int i; + u_int j; if (args_has(args, 'q')) flags |= CMD_PARSE_QUIET; if (args_has(args, 'n')) flags |= CMD_PARSE_PARSEONLY; - - if (*path == '/') - pattern = xstrdup(path); - else { - utf8_stravis(&tmp, server_client_get_cwd(c, NULL), VIS_GLOB); - xasprintf(&pattern, "%s/%s", tmp, path); - free(tmp); - } - log_debug("%s: %s", __func__, pattern); + utf8_stravis(&cwd, server_client_get_cwd(c, NULL), VIS_GLOB); retval = CMD_RETURN_NORMAL; - if (glob(pattern, 0, NULL, &g) != 0) { - if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) { - cmdq_error(item, "%s: %s", path, strerror(errno)); - retval = CMD_RETURN_ERROR; + for (i = 0; i < args->argc; i++) { + path = args->argv[i]; + if (*path == '/') + pattern = xstrdup(path); + else + xasprintf(&pattern, "%s/%s", cwd, path); + log_debug("%s: %s", __func__, pattern); + + if (glob(pattern, 0, NULL, &g) != 0) { + error = strerror(errno); + if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) { + cmdq_error(item, "%s: %s", path, error); + retval = CMD_RETURN_ERROR; + } + free(pattern); + continue; } free(pattern); - return (retval); - } - free(pattern); - - after = item; - for (i = 0; i < (u_int)g.gl_pathc; i++) { - if (load_cfg(g.gl_pathv[i], c, after, flags, &new_item) < 0) - retval = CMD_RETURN_ERROR; - else if (new_item != NULL) - after = new_item; + + after = item; + for (j = 0; j < g.gl_pathc; j++) { + path = g.gl_pathv[j]; + if (load_cfg(path, c, after, flags, &new_item) < 0) + retval = CMD_RETURN_ERROR; + else if (new_item != NULL) + after = new_item; + } + globfree(&g); } if (cfg_finished) { new_item = cmdq_get_callback(cmd_source_file_done, NULL); cmdq_insert_after(item, new_item); } - globfree(&g); + free(cwd); return (retval); } diff --git a/tmux.1 b/tmux.1 index fc51ec3025..b4e27c407a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1239,13 +1239,14 @@ show debugging information about jobs and terminals. .It Xo Ic source-file .Op Fl nq .Ar path +.Ar ... .Xc .D1 (alias: Ic source ) -Execute commands from +Execute commands from one or more files specified by .Ar path -(which may be a +(which may be .Xr glob 7 -pattern). +patterns). If .Fl q is given, no error will be returned if From 299d4f3aaa801ee79920fadcb802ca51b0d639ec Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 12:20:28 +0000 Subject: [PATCH 603/836] Exit 1 correctly if source-file fails. --- cmd-source-file.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd-source-file.c b/cmd-source-file.c index a22c38e6be..d88f74cfed 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -96,6 +96,8 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) globfree(&g); } if (cfg_finished) { + if (retval == CMD_RETURN_ERROR && c->session == NULL) + c->retval = 1; new_item = cmdq_get_callback(cmd_source_file_done, NULL); cmdq_insert_after(item, new_item); } From f012db9be9faf5e172474a021acb53b8a10d5d0a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 28 May 2019 13:21:02 +0100 Subject: [PATCH 604/836] Add regress for conf files. --- regress/conf-syntax.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 regress/conf-syntax.sh diff --git a/regress/conf-syntax.sh b/regress/conf-syntax.sh new file mode 100644 index 0000000000..96d351403e --- /dev/null +++ b/regress/conf-syntax.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +for i in conf/*.conf; do + $TMUX -f/dev/null start \; source -n $i || exit 1 +done + +exit 0 From a062650d4b41c1db1f2d12dd02d6ef7c0e3f5365 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 28 May 2019 14:49:50 +0100 Subject: [PATCH 605/836] Tweak menu option. --- CHANGES | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index e72be1b29d..ddeebeee3c 100644 --- a/CHANGES +++ b/CHANGES @@ -29,10 +29,10 @@ CHANGES FROM 2.9 to X.X * Add support for the overline attribute (SGR 53). The Smol capability is needed in terminal-overrides. -* Add the ability to create simple menus. Introduces new command display-menu - and a few new formats (client_menu, session_menu, window_menu, - pane_menu). Default menus are bound to MouseDown3 on the status line, - M-MouseDown3 on panes and MouseDown3 in tree, client and buffer modes. +* Add the ability to create simple menus. Introduces new command + display-menu. Default menus are bound to MouseDown3 on the status line; + MouseDown3 or M-MouseDown3 on panes; MouseDown3 in tree, client and + buffer modes; and C-b C-m and C-b M-m. * Allow panes to be empty (no command). They can be created either by piping to split-window -I, or by passing an empty command ('') to split-window. Output From 05d07413ff825553e65e24f4561ce3c97081b375 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 28 May 2019 15:46:17 +0100 Subject: [PATCH 606/836] 3.0-rc. --- CHANGES | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index ddeebeee3c..097d7228a4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 2.9 to X.X +CHANGES FROM 2.9 to 3.0 * Add an addition form of string syntax in the configuration file - {}. This means commands that take other commands as string arguments can be expressed diff --git a/configure.ac b/configure.ac index 0795bd6411..2c1a8945a2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], next-3.0) +AC_INIT([tmux], 3.0-rc) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From e7a530fe4c0f8e0f807daf6a1b80d86c67c93e1b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 28 May 2019 15:48:31 +0100 Subject: [PATCH 607/836] Next will be 3.1. --- CHANGES | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 097d7228a4..56bf28b0a7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +CHANGES FROM 3.0 to X.X + +XXX + CHANGES FROM 2.9 to 3.0 * Add an addition form of string syntax in the configuration file - {}. This diff --git a/configure.ac b/configure.ac index 2c1a8945a2..5fba1eaf88 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 3.0-rc) +AC_INIT([tmux], next-3.1) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 4382538e4bac2849262710c447e4b630e7f34bd7 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 18:30:30 +0000 Subject: [PATCH 608/836] Do not read past the end of the argument string if it is empty. --- arguments.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arguments.c b/arguments.c index 68690deba2..54bc3593fb 100644 --- a/arguments.c +++ b/arguments.c @@ -211,6 +211,8 @@ args_escape(const char *s) char *escaped, *result; int flags; + if (*s == '\0') + return (xstrdup(s)); if ((strchr(quoted, s[0]) != NULL || s[0] == '~') && s[1] == '\0') { xasprintf(&escaped, "\\%c", s[0]); return (escaped); From 580cd16f4c3474d7cae867b9b24f01665a268e9d Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 18:53:36 +0000 Subject: [PATCH 609/836] Redraw status line if size changes, GitHub issue 1762. Also fix length of target buffer when pasting into status line. --- status.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/status.c b/status.c index ce36cc3c7e..0f96f0d393 100644 --- a/status.c +++ b/status.c @@ -348,10 +348,8 @@ status_redraw(struct client *c) /* Resize the target screen. */ if (screen_size_x(&sl->screen) != width || screen_size_y(&sl->screen) != lines) { - if (screen_size_x(&sl->screen) != width) - force = 1; screen_resize(&sl->screen, width, lines, 0); - changed = 1; + changed = force = 1; } screen_write_start(&ctx, NULL, &sl->screen); @@ -865,7 +863,7 @@ status_prompt_paste(struct client *c) if ((pb = paste_get_top(NULL)) == NULL) return (0); bufdata = paste_buffer_data(pb, &bufsize); - ud = xreallocarray(NULL, bufsize, sizeof *ud); + ud = xreallocarray(NULL, bufsize + 1, sizeof *ud); udp = ud; for (i = 0; i != bufsize; /* nothing */) { more = utf8_open(udp, bufdata[i]); From 8d137233a96c86d311f7f03c3322177a5e54d3fa Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 18:53:36 +0000 Subject: [PATCH 610/836] Redraw status line if size changes, GitHub issue 1762. Also fix length of target buffer when pasting into status line. --- status.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/status.c b/status.c index ce36cc3c7e..0f96f0d393 100644 --- a/status.c +++ b/status.c @@ -348,10 +348,8 @@ status_redraw(struct client *c) /* Resize the target screen. */ if (screen_size_x(&sl->screen) != width || screen_size_y(&sl->screen) != lines) { - if (screen_size_x(&sl->screen) != width) - force = 1; screen_resize(&sl->screen, width, lines, 0); - changed = 1; + changed = force = 1; } screen_write_start(&ctx, NULL, &sl->screen); @@ -865,7 +863,7 @@ status_prompt_paste(struct client *c) if ((pb = paste_get_top(NULL)) == NULL) return (0); bufdata = paste_buffer_data(pb, &bufsize); - ud = xreallocarray(NULL, bufsize, sizeof *ud); + ud = xreallocarray(NULL, bufsize + 1, sizeof *ud); udp = ud; for (i = 0; i != bufsize; /* nothing */) { more = utf8_open(udp, bufdata[i]); From 7eeb479705e9d30612b3b7bc08486858a857977a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 May 2019 18:30:30 +0000 Subject: [PATCH 611/836] Do not read past the end of the argument string if it is empty. --- arguments.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arguments.c b/arguments.c index 829a5ef3a9..38e5082993 100644 --- a/arguments.c +++ b/arguments.c @@ -210,6 +210,8 @@ args_escape(const char *s) char *escaped, *result; int flags; + if (*s == '\0') + return (xstrdup(s)); if ((strchr(quoted, s[0]) != NULL || s[0] == '~') && s[1] == '\0') { xasprintf(&escaped, "\\%c", s[0]); return (escaped); From a4424fbebf929f4ad742200365fc330a26a65d7f Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 May 2019 10:08:36 +0000 Subject: [PATCH 612/836] Support \ooo escapes, from Avi Halachmi. --- cmd-parse.y | 26 ++++++++++++++++++++++++-- tmux.1 | 6 +++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index f347280b35..739ca56ccf 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1083,12 +1083,34 @@ error: static int yylex_token_escape(char **buf, size_t *len) { - int ch, type; + int ch, type, o2, o3; u_int size, i, tmp; char s[9]; struct utf8_data ud; - switch (ch = yylex_getc()) { + ch = yylex_getc(); + + if (ch >= '4' && ch <= '7') { + yyerror("invalid octal escape"); + return (0); + } + if (ch >= '0' && ch <= '3') { + o2 = yylex_getc(); + if (o2 >= '0' && o2 <= '7') { + o3 = yylex_getc(); + if (o3 >= '0' && o3 <= '7') { + ch = 64 * (ch - '0') + + 8 * (o2 - '0') + + (o3 - '0'); + yylex_append1(buf, len, ch); + return (1); + } + } + yyerror("invalid octal escape"); + return (0); + } + + switch (ch) { case EOF: return (0); case 'e': diff --git a/tmux.1 b/tmux.1 index b4e27c407a..dfdd96b4e3 100644 --- a/tmux.1 +++ b/tmux.1 @@ -515,7 +515,11 @@ the given four or eight digit hexadecimal number. When preceded (escaped) by a \e, the following characters are replaced: \ee by the escape character; \er by a carriage return; \en by a newline; and \et by a tab. -.Pp +.It +\eooo is replaced by a character of the octal value ooo. +Three octal digits are required, for example \e001. +The largest valid character is \e377. +.It Any other characters preceded by \e are replaced by themselves (that is, the \e is removed) and are not treated as having any special meaning - so for example \e; will not mark a command sequence and \e$ will not expand an environment From 8827b7f9a6e2cb466da78ff0d726daeb21757bef Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 11:25:07 +0100 Subject: [PATCH 613/836] Tweak {} text. --- CHANGES | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 097d7228a4..9547d32126 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,11 @@ CHANGES FROM 2.9 to 3.0 -* Add an addition form of string syntax in the configuration file - {}. This - means commands that take other commands as string arguments can be expressed - more clearly and without additional escaping. This means that a literal { and - } must now be escaped or quoted. +* INCOMPATIBLE: Add a new {} syntax to the configuration file. This is a string + similar to single quotes but also includes newlines and allows commands that + take other commands as string arguments to be expressed more clearly and + without additional escaping. + + A literal { and } must now be escaped or quoted, for example '{' as '}'. * New <, >, <= and >= comparison operators for formats. From 7cdb1cfc8dc6d3a30e9998106308aef35d66bbb5 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 12:13:46 +0100 Subject: [PATCH 614/836] as -> and. --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 9547d32126..3faf716f7c 100644 --- a/CHANGES +++ b/CHANGES @@ -5,7 +5,7 @@ CHANGES FROM 2.9 to 3.0 take other commands as string arguments to be expressed more clearly and without additional escaping. - A literal { and } must now be escaped or quoted, for example '{' as '}'. + A literal { and } must now be escaped or quoted, for example '{' and '}'. * New <, >, <= and >= comparison operators for formats. From 409d52ed411cbc4f8e52ff3dfd02199c9f998a51 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 14:19:26 +0100 Subject: [PATCH 615/836] Try OS X. --- .travis.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2188eec0d3..ab333aa4e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,18 @@ +os: + - linux + - osx + language: c + matrix: include: - compiler: gcc - compiler: clang - env: CFLAGS="-g -O2" + before_install: - - sudo apt-get update -qq - - sudo apt-get -y install bison debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential -script: (CFLAGS= ./autogen.sh) && ./configure --enable-debug && make + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -y install bison autotools-dev libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi + +script: + - ./autogen.sh && ./configure && make From 4425c1e1b337b8b72896ba6ecbc5402ea08e4e8a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 14:24:09 +0100 Subject: [PATCH 616/836] Tweak again. --- .travis.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab333aa4e0..578c7f4320 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,12 @@ +language: c + os: - linux - osx -language: c - -matrix: - include: - - compiler: gcc - - compiler: clang +compiler: + - gcc + - clang before_install: - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; fi From 2ce8e0110cfbc2505cd369895d5bb153c3f4e3d8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 14:32:49 +0100 Subject: [PATCH 617/836] Don't even need this? --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 578c7f4320..fd85bf61c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,6 @@ compiler: before_install: - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -y install bison autotools-dev libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi script: - ./autogen.sh && ./configure && make From 47795d16952b866841b1c4cfb963e761cc438f96 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 14:40:41 +0100 Subject: [PATCH 618/836] Update .travis.yml from master. --- .travis.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2188eec0d3..fd85bf61c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,16 @@ language: c -matrix: - include: - - compiler: gcc - - compiler: clang - env: CFLAGS="-g -O2" + +os: + - linux + - osx + +compiler: + - gcc + - clang + before_install: - - sudo apt-get update -qq - - sudo apt-get -y install bison debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential -script: (CFLAGS= ./autogen.sh) && ./configure --enable-debug && make + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -y install bison autotools-dev libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential; fi + +script: + - ./autogen.sh && ./configure && make From c17edd594e8088d2355102a8ca58f4b256c59397 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 May 2019 19:34:42 +0000 Subject: [PATCH 619/836] The line number needs to be updated only after the \n is processed by the parser, so store a flag and update it next time around. Also each new line needs its own shared data. --- cmd-parse.y | 7 ++++++- cmd-queue.c | 28 ++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 739ca56ccf..a235fde1b2 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -58,6 +58,7 @@ struct cmd_parse_state { size_t len; size_t off; + int eol; int eof; struct cmd_parse_input *input; u_int escapes; @@ -933,6 +934,10 @@ yylex(void) char *token, *cp; int ch, next; + if (ps->eol) + ps->input->line++; + ps->eol = 0; + for (;;) { ch = yylex_getc(); @@ -959,7 +964,7 @@ yylex(void) /* * End of line. Update the line number. */ - ps->input->line++; + ps->eol = 1; return ('\n'); } diff --git a/cmd-queue.c b/cmd-queue.c index f08d7c022b..93dcaa5368 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -203,16 +203,20 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; struct cmdq_shared *shared; - - shared = xcalloc(1, sizeof *shared); - if (current != NULL) - cmd_find_copy_state(&shared->current, current); - else - cmd_find_clear_state(&shared->current, 0); - if (m != NULL) - memcpy(&shared->mouse, m, sizeof shared->mouse); + u_int group = 0; TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + if (cmd->group != group) { + shared = xcalloc(1, sizeof *shared); + if (current != NULL) + cmd_find_copy_state(&shared->current, current); + else + cmd_find_clear_state(&shared->current, 0); + if (m != NULL) + memcpy(&shared->mouse, m, sizeof shared->mouse); + group = cmd->group; + } + item = xcalloc(1, sizeof *item); xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item); item->type = CMDQ_COMMAND; @@ -263,12 +267,20 @@ static enum cmd_retval cmdq_fire_command(struct cmdq_item *item) { struct client *c = item->client; + const char *name = cmdq_name(c); struct cmdq_shared *shared = item->shared; struct cmd *cmd = item->cmd; const struct cmd_entry *entry = cmd->entry; enum cmd_retval retval; struct cmd_find_state *fsp, fs; int flags; + char *tmp; + + if (log_get_level() > 1) { + tmp = cmd_print(cmd); + log_debug("%s %s: (%u) %s", __func__, name, item->group, tmp); + free(tmp); + } flags = !!(shared->flags & CMDQ_SHARED_CONTROL); cmdq_guard(item, "begin", flags); From a05c3a7aa6071032bed8725b27dca8678b481dc6 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 29 May 2019 20:43:11 +0100 Subject: [PATCH 620/836] Add command order test. --- regress/command-order.sh | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 regress/command-order.sh diff --git a/regress/command-order.sh b/regress/command-order.sh new file mode 100644 index 0000000000..fb4e03249c --- /dev/null +++ b/regress/command-order.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +# new-session without clients should be the right size + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +cat <$TMP +new -sfoo -nfoo0; neww -nfoo1; neww -nfoo2 +new -sbar -nbar0; neww -nbar1; neww -nbar2 +EOF +$TMUX -f$TMP start $TMP || exit 1 +cat </dev/null + +cat <$TMP +new -sfoo -nfoo0 +neww -nfoo1 +neww -nfoo2 +new -sbar -nbar0 +neww -nbar1 +neww -nbar2 +EOF +$TMUX -f$TMP start $TMP || exit 1 +cat </dev/null + +exit 0 From 7dced376737ef685e09fd5a49161ca2bf423e91b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 May 2019 20:05:14 +0000 Subject: [PATCH 621/836] Use VIS_CSTYLE for the arguments and add the missing escapes it can generate to the parser. --- arguments.c | 2 +- cmd-parse.y | 15 +++++++++++++++ tty-term.c | 2 +- window-buffer.c | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/arguments.c b/arguments.c index 54bc3593fb..8e049aab07 100644 --- a/arguments.c +++ b/arguments.c @@ -218,7 +218,7 @@ args_escape(const char *s) return (escaped); } - flags = VIS_OCTAL|VIS_TAB|VIS_NL; + flags = VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL; if (s[strcspn(s, quoted)] != '\0') flags |= VIS_DQ; utf8_stravis(&escaped, s, flags); diff --git a/cmd-parse.y b/cmd-parse.y index a235fde1b2..a623caa57d 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1118,9 +1118,24 @@ yylex_token_escape(char **buf, size_t *len) switch (ch) { case EOF: return (0); + case 'a': + ch = '\a'; + break; + case 'b': + ch = '\b'; + break; case 'e': ch = '\033'; break; + case 'f': + ch = '\f'; + break; + case 's': + ch = ' '; + break; + case 'v': + ch = '\v'; + break; case 'r': ch = '\r'; break; diff --git a/tty-term.c b/tty-term.c index 45934afaba..83bfcdc140 100644 --- a/tty-term.c +++ b/tty-term.c @@ -685,7 +685,7 @@ tty_term_describe(struct tty_term *term, enum tty_code_code code) break; case TTYCODE_STRING: strnvis(out, term->codes[code].value.string, sizeof out, - VIS_OCTAL|VIS_TAB|VIS_NL); + VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); xsnprintf(s, sizeof s, "%4u: %s: (string) %s", code, tty_term_codes[code].name, out); diff --git a/window-buffer.c b/window-buffer.c index 79dacf973c..983b16808c 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -246,7 +246,7 @@ window_buffer_draw(__unused void *modedata, void *itemdata, at = 0; while (end != pdata + psize && *end != '\n') { if ((sizeof line) - at > 5) { - cp = vis(line + at, *end, VIS_TAB|VIS_OCTAL, 0); + cp = vis(line + at, *end, VIS_OCTAL|VIS_TAB, 0); at = cp - line; } end++; From 75d112c4842295daa6542064aede617b774e3ff7 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 29 May 2019 19:34:42 +0000 Subject: [PATCH 622/836] The line number needs to be updated only after the \n is processed by the parser, so store a flag and update it next time around. Also each new line needs its own shared data. --- cmd-parse.y | 7 ++++++- cmd-queue.c | 28 ++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index f347280b35..d984b9d33b 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -58,6 +58,7 @@ struct cmd_parse_state { size_t len; size_t off; + int eol; int eof; struct cmd_parse_input *input; u_int escapes; @@ -933,6 +934,10 @@ yylex(void) char *token, *cp; int ch, next; + if (ps->eol) + ps->input->line++; + ps->eol = 0; + for (;;) { ch = yylex_getc(); @@ -959,7 +964,7 @@ yylex(void) /* * End of line. Update the line number. */ - ps->input->line++; + ps->eol = 1; return ('\n'); } diff --git a/cmd-queue.c b/cmd-queue.c index f08d7c022b..93dcaa5368 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -203,16 +203,20 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; struct cmdq_shared *shared; - - shared = xcalloc(1, sizeof *shared); - if (current != NULL) - cmd_find_copy_state(&shared->current, current); - else - cmd_find_clear_state(&shared->current, 0); - if (m != NULL) - memcpy(&shared->mouse, m, sizeof shared->mouse); + u_int group = 0; TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + if (cmd->group != group) { + shared = xcalloc(1, sizeof *shared); + if (current != NULL) + cmd_find_copy_state(&shared->current, current); + else + cmd_find_clear_state(&shared->current, 0); + if (m != NULL) + memcpy(&shared->mouse, m, sizeof shared->mouse); + group = cmd->group; + } + item = xcalloc(1, sizeof *item); xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item); item->type = CMDQ_COMMAND; @@ -263,12 +267,20 @@ static enum cmd_retval cmdq_fire_command(struct cmdq_item *item) { struct client *c = item->client; + const char *name = cmdq_name(c); struct cmdq_shared *shared = item->shared; struct cmd *cmd = item->cmd; const struct cmd_entry *entry = cmd->entry; enum cmd_retval retval; struct cmd_find_state *fsp, fs; int flags; + char *tmp; + + if (log_get_level() > 1) { + tmp = cmd_print(cmd); + log_debug("%s %s: (%u) %s", __func__, name, item->group, tmp); + free(tmp); + } flags = !!(shared->flags & CMDQ_SHARED_CONTROL); cmdq_guard(item, "begin", flags); From 026450c1a8ed64e49521bec676e2e1faba64c1aa Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 30 May 2019 07:52:24 +0100 Subject: [PATCH 623/836] Add test for xenl terminals. --- regress/command-order.sh | 6 ++---- regress/xenl-terminal.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 regress/xenl-terminal.sh diff --git a/regress/command-order.sh b/regress/command-order.sh index fb4e03249c..04046f0d07 100644 --- a/regress/command-order.sh +++ b/regress/command-order.sh @@ -1,7 +1,5 @@ #!/bin/sh -# new-session without clients should be the right size - PATH=/bin:/usr/bin TERM=screen @@ -19,6 +17,7 @@ EOF $TMUX -f$TMP start $TMP || exit 1 +$TMUX kill-server 2>/dev/null cat </dev/null cat <$TMP new -sfoo -nfoo0 @@ -40,6 +38,7 @@ EOF $TMUX -f$TMP start $TMP || exit 1 +$TMUX kill-server 2>/dev/null cat </dev/null exit 0 diff --git a/regress/xenl-terminal.sh b/regress/xenl-terminal.sh new file mode 100644 index 0000000000..07469ceb2c --- /dev/null +++ b/regress/xenl-terminal.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -Ltest" +$TMUX kill-server 2>/dev/null +TMUX2="$TEST_TMUX -Ltest2" +$TMUX2 kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP" 0 1 15 + +$TMUX2 -f/dev/null new -d || exit 1 +$TMUX2 set -as terminal-overrides ',*:xenl@' || exit 1 +$TMUX2 set -g status-right 'RRR' || exit 1 +$TMUX2 set -g status-left 'LLL' || exit 1 +$TMUX2 set -g window-status-current-format 'WWW' || exit 1 +$TMUX -f/dev/null new -x20 -y2 -d "$TMUX2 attach" || exit 1 +sleep 1 +$TMUX capturep -p|tail -1 >$TMP || exit 1 +$TMUX kill-server 2>/dev/null +$TMUX2 kill-server 2>/dev/null +cat < Date: Thu, 30 May 2019 07:42:41 +0000 Subject: [PATCH 624/836] I had hoped that non-xenl terminals had died out, at least in fairly modern OSs, but no - DragonFly BSD's console returns to haunt us. Fix it at least somewhat. GitHub issue 1763. --- tmux.1 | 2 +- tty.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index dfdd96b4e3..d9b37c0eb1 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4325,7 +4325,7 @@ Align text to the left, centre or right of the available space if appropriate. .It Xo Ic list=on , .Ic list=focus , .Ic list=left-marker , -.Ic list=right=marker , +.Ic list=right-marker , .Ic nolist .Xc Mark the position of the various window list components in the diff --git a/tty.c b/tty.c index 34403a1faa..05df4f0ff6 100644 --- a/tty.c +++ b/tty.c @@ -527,6 +527,12 @@ tty_putc(struct tty *tty, u_char ch) { const char *acs; + if ((tty->term->flags & TERM_EARLYWRAP) && + ch >= 0x20 && ch != 0x7f && + tty->cy == tty->sy - 1 && + tty->cx + 1 >= tty->sx) + return; + if (tty->cell.attr & GRID_ATTR_CHARSET) { acs = tty_acs_get(tty, ch); if (acs != NULL) @@ -557,6 +563,11 @@ tty_putc(struct tty *tty, u_char ch) void tty_putn(struct tty *tty, const void *buf, size_t len, u_int width) { + if ((tty->term->flags & TERM_EARLYWRAP) && + tty->cy == tty->sy - 1 && + tty->cx + len >= tty->sx) + len = tty->sx - tty->cx - 1; + tty_add(tty, buf, len); if (tty->cx + width > tty->sx) { tty->cx = (tty->cx + width) - tty->sx; From 8fb796b5b3fbd7ff430d1b6ad2a49f97feea8f3c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 30 May 2019 10:04:33 +0000 Subject: [PATCH 625/836] No longer need to reduce line number by one. --- cmd-parse.y | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index a623caa57d..d5d12d957a 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -361,7 +361,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line - 1; + $$->line = ps->input->line; } | assignment TOKEN arguments @@ -370,7 +370,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line - 1; + $$->line = ps->input->line; $$->argc = $3.argc; $$->argv = $3.argv; From e4eec92852754996d8c2a3fae361deb6639f3c4b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 30 May 2019 10:04:33 +0000 Subject: [PATCH 626/836] No longer need to reduce line number by one. --- cmd-parse.y | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index d984b9d33b..113e6a92cf 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -361,7 +361,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line - 1; + $$->line = ps->input->line; } | assignment TOKEN arguments @@ -370,7 +370,7 @@ command : assignment TOKEN $$ = xcalloc(1, sizeof *$$); $$->name = $2; - $$->line = ps->input->line - 1; + $$->line = ps->input->line; $$->argc = $3.argc; $$->argv = $3.argv; From b26523c26dc7cf0a24a1adb787aa1816deb40693 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 30 May 2019 20:54:03 +0000 Subject: [PATCH 627/836] Remove a leftover abort and some fixes from cppcheck. --- cmd-display-message.c | 3 +-- input.c | 1 - mode-tree.c | 2 +- options.c | 3 ++- window.c | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/cmd-display-message.c b/cmd-display-message.c index 8c1ad5f6f6..4d9bccb60a 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -109,8 +109,7 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) format_defaults(ft, target_c, s, wl, wp); if (args_has(args, 'a')) { - if (item != NULL) - format_each(ft, cmd_display_message_each, item); + format_each(ft, cmd_display_message_each, item); return (CMD_RETURN_NORMAL); } diff --git a/input.c b/input.c index 4095c05d18..e54b5ac0e6 100644 --- a/input.c +++ b/input.c @@ -2409,7 +2409,6 @@ input_osc_52(struct input_ctx *ictx, const char *p) outlen = 4 * ((len + 2) / 3) + 1; out = xmalloc(outlen); if ((outlen = b64_ntop(buf, len, out, outlen)) == -1) { - abort(); free(out); return; } diff --git a/mode-tree.c b/mode-tree.c index 750346750c..20ac322699 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -480,7 +480,7 @@ mode_tree_add(struct mode_tree_data *mtd, struct mode_tree_item *parent, saved = mode_tree_find_item(&mtd->saved, tag); if (saved != NULL) { - if (parent == NULL || (parent != NULL && parent->expanded)) + if (parent == NULL || parent->expanded) mti->tagged = saved->tagged; mti->expanded = saved->expanded; } else if (expanded == -1) diff --git a/options.c b/options.c index 7d79cf3009..7e12544dbd 100644 --- a/options.c +++ b/options.c @@ -365,7 +365,8 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, pr = cmd_parse_from_string(value, NULL); switch (pr->status) { case CMD_PARSE_EMPTY: - *cause = xstrdup("empty command"); + if (cause != NULL) + *cause = xstrdup("empty command"); return (-1); case CMD_PARSE_ERROR: if (cause != NULL) diff --git a/window.c b/window.c index b08a5d355c..1d83c24747 100644 --- a/window.c +++ b/window.c @@ -1136,7 +1136,7 @@ window_pane_reset_mode(struct window_pane *wp) } else { log_debug("%s: next mode is %s", __func__, next->mode->name); wp->screen = next->screen; - if (next != NULL && next->mode->resize != NULL) + if (next->mode->resize != NULL) next->mode->resize(next, wp->sx, wp->sy); } wp->flags |= (PANE_REDRAW|PANE_CHANGED); From 82e47403c6a8d6fff90f77e9262840050b8e6b2e Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 31 May 2019 11:34:09 +0000 Subject: [PATCH 628/836] Allow % strings that are all numbers or %s, and fix a double free. Both reported by George Nachman, GitHub issues 1765 and 1766. --- cmd-parse.y | 10 +++++++--- control.c | 1 - 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index d5d12d957a..0a62726817 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -998,11 +998,15 @@ yylex(void) if (ch == '%') { /* - * % is a condition unless it is alone, then it is a - * token. + * % is a condition unless it is all % or all numbers, + * then it is a token. */ yylval.token = yylex_get_word('%'); - if (strcmp(yylval.token, "%") == 0) + for (cp = yylval.token; *cp != '\0'; cp++) { + if (*cp != '%' && !isdigit((u_char)*cp)) + break; + } + if (*cp == '\0') return (TOKEN); if (strcmp(yylval.token, "%if") == 0) { free(yylval.token); diff --git a/control.c b/control.c index b7ac3f6295..16fa71bb38 100644 --- a/control.c +++ b/control.c @@ -91,7 +91,6 @@ control_callback(struct client *c, int closed, __unused void *data) case CMD_PARSE_ERROR: item = cmdq_get_callback(control_error, pr->error); cmdq_append(c, item); - free(pr->error); break; case CMD_PARSE_SUCCESS: item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); From 1a3a973bd08e2890eac6711eb01255b2410bec75 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 31 May 2019 11:34:09 +0000 Subject: [PATCH 629/836] Allow % strings that are all numbers or %s, and fix a double free. Both reported by George Nachman, GitHub issues 1765 and 1766. --- cmd-parse.y | 10 +++++++--- control.c | 1 - 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 113e6a92cf..4d43789eb6 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -998,11 +998,15 @@ yylex(void) if (ch == '%') { /* - * % is a condition unless it is alone, then it is a - * token. + * % is a condition unless it is all % or all numbers, + * then it is a token. */ yylval.token = yylex_get_word('%'); - if (strcmp(yylval.token, "%") == 0) + for (cp = yylval.token; *cp != '\0'; cp++) { + if (*cp != '%' && !isdigit((u_char)*cp)) + break; + } + if (*cp == '\0') return (TOKEN); if (strcmp(yylval.token, "%if") == 0) { free(yylval.token); diff --git a/control.c b/control.c index b7ac3f6295..16fa71bb38 100644 --- a/control.c +++ b/control.c @@ -91,7 +91,6 @@ control_callback(struct client *c, int closed, __unused void *data) case CMD_PARSE_ERROR: item = cmdq_get_callback(control_error, pr->error); cmdq_append(c, item); - free(pr->error); break; case CMD_PARSE_SUCCESS: item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); From 2c5f3074bcd3c4d1399a5cf3691430027452266f Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 31 May 2019 21:41:17 +0000 Subject: [PATCH 630/836] Fix warnings, from Ben Boeckel. --- cmd-queue.c | 2 +- format.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd-queue.c b/cmd-queue.c index 93dcaa5368..1ee4350850 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -202,7 +202,7 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, { struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; - struct cmdq_shared *shared; + struct cmdq_shared *shared = NULL; u_int group = 0; TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { diff --git a/format.c b/format.c index 0cf7ee6419..a2174e8c68 100644 --- a/format.c +++ b/format.c @@ -1502,7 +1502,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { struct window_pane *wp = ft->wp; - const char *errptr, *copy, *cp, *marker; + const char *errptr, *copy, *cp, *marker = NULL; char *copy0, *condition, *found, *new; char *value, *left, *right; size_t valuelen; @@ -1550,8 +1550,6 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, limit = 0; if (fm->argc == 2 && fm->argv[1] != NULL) marker = fm->argv[1]; - else - marker = NULL; break; case 'l': modifiers |= FORMAT_LITERAL; From 88ee5a1a00b475fd2b93ef00e71f527fe2e9520e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 31 May 2019 22:50:30 +0100 Subject: [PATCH 631/836] Add a crashing config. --- regress/conf/21867280ff7e99631046f9cc669b80d2.conf | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 regress/conf/21867280ff7e99631046f9cc669b80d2.conf diff --git a/regress/conf/21867280ff7e99631046f9cc669b80d2.conf b/regress/conf/21867280ff7e99631046f9cc669b80d2.conf new file mode 100644 index 0000000000..43b142b409 --- /dev/null +++ b/regress/conf/21867280ff7e99631046f9cc669b80d2.conf @@ -0,0 +1,8 @@ +%if #{l:1} +set -g status-style fg=cyan,bg='#001040' +%elif #{l:1} +set -g status-style fg=white,bg='#400040' +%else +set -g status-style fg=white,bg='#800000' +%endif +bind ^X last-window From 39ea8a2787a29265970d0ef47a879527bc30d1f8 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 1 Jun 2019 06:20:22 +0000 Subject: [PATCH 632/836] Need stdlib.h, from Ben Boeckel. --- cmd-parse.y | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd-parse.y b/cmd-parse.y index 0a62726817..402ec80675 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -23,6 +23,7 @@ #include #include #include +#include #include #include From 3d29b97768530f55aab2d7466124a038bc72e1ce Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 1 Jun 2019 07:24:33 +0100 Subject: [PATCH 633/836] Link to file. --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 6e262ef530..3e892d7c42 100644 --- a/.github/README.md +++ b/.github/README.md @@ -57,7 +57,7 @@ explains some ideas for tmux not yet developed. Please feel free to ask for clarifications on the mailing list if you're thinking of working on these or need further information. -Please read the CONTRIBUTING file before opening an issue. +Please read [this document](Contributing.md) before opening an issue. ## Documentation From feff55b92fe5a8382aa0cfd56f961330fe13741a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 1 Jun 2019 07:26:39 +0100 Subject: [PATCH 634/836] Try this instead. --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 3e892d7c42..1e7e9a428a 100644 --- a/.github/README.md +++ b/.github/README.md @@ -57,7 +57,7 @@ explains some ideas for tmux not yet developed. Please feel free to ask for clarifications on the mailing list if you're thinking of working on these or need further information. -Please read [this document](Contributing.md) before opening an issue. +Please read [this document](./Contributing.md) before opening an issue. ## Documentation From c2d79add3179c5062e642b604809a3d87b6ff360 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 1 Jun 2019 07:28:31 +0100 Subject: [PATCH 635/836] Should be caps. --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 1e7e9a428a..9a95772ca6 100644 --- a/.github/README.md +++ b/.github/README.md @@ -57,7 +57,7 @@ explains some ideas for tmux not yet developed. Please feel free to ask for clarifications on the mailing list if you're thinking of working on these or need further information. -Please read [this document](./Contributing.md) before opening an issue. +Please read [this document](CONTRIBUTING.md) before opening an issue. ## Documentation From b28b8312f2a40d3fe7321375b91329eca4efb698 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 1 Jun 2019 08:05:55 +0100 Subject: [PATCH 636/836] Mention CHANGES. --- .github/CONTRIBUTING.md | 9 ++++++++- .github/ISSUE_TEMPLATE.md | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 49e2b90bc5..3a589484d9 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,13 +2,20 @@ Before opening an issue, please ensure that: +- Your problem is a specific problem or question or suggestion, not a general + complaint. + - `$TERM` inside tmux is screen, screen-256color, tmux or tmux-256color. Check by running `echo $TERM` inside tmux. - You can reproduce the problem with the latest tmux release, or a build from Git master. -- Your question or issue is not covered in the manual (run man tmux). +- Your question or issue is not covered [in the + manual](https://man.openbsd.org/tmux.1) (run `man tmux`). + +- Your problem is not mentioned in the [CHANGES + file](https://raw.githubusercontent.com/tmux/tmux/master/CHANGES) file. - Nobody else has opened the same issue recently. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index ee45723753..8bf1e66ad8 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -3,6 +3,9 @@ Please read https://github.com/tmux/tmux/blob/master/.github/CONTRIBUTING.md before opening an issue. +If you have upgraded, make sure your issue is not covered in the CHANGES file +for your version: https://raw.githubusercontent.com/tmux/tmux/master/CHANGES + Describe the problem and the steps to reproduce. Add a minimal tmux config if necessary. Screenshots can be helpful, but no more than one or two. From ec690208a3b416ce2b3713e3e882ba414afd8c0f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 1 Jun 2019 08:07:22 +0100 Subject: [PATCH 637/836] Move link. --- .github/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/README.md b/.github/README.md index 9a95772ca6..cfff69dacb 100644 --- a/.github/README.md +++ b/.github/README.md @@ -50,15 +50,14 @@ welcome. Please send by email to: tmux-users@googlegroups.com -Or open a GitHub issue or pull request. +Or open a GitHub issue or pull request. **Please read [this +document](CONTRIBUTING.md) before opening an issue.** There is [a TODO list](https://github.com/tmux/tmux/wiki/Contributing) which explains some ideas for tmux not yet developed. Please feel free to ask for clarifications on the mailing list if you're thinking of working on these or need further information. -Please read [this document](CONTRIBUTING.md) before opening an issue. - ## Documentation For documentation on using tmux, see the tmux.1 manpage. View it from the From 2c6c3a1d27d3665a47d037965955d2bad1f81bcc Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 1 Jun 2019 16:21:37 +0000 Subject: [PATCH 638/836] If only one of -x or -y is given, use the calculated size for the other. Pointed out by Ben Boeckel. --- cmd-new-session.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 2fd1342027..559c268c54 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -242,8 +242,13 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) /* Create the new session. */ oo = options_create(global_s_options); - if (args_has(args, 'x') || args_has(args, 'y')) + if (args_has(args, 'x') || args_has(args, 'y')) { + if (!args_has(args, 'x')) + dsx = sx; + if (!args_has(args, 'y')) + dsy = sy; options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + } env = environ_create(); if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); From 900238a30657a477f3c62ba344fcc73fc0948ac7 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 2 Jun 2019 07:10:15 +0000 Subject: [PATCH 639/836] yacc(1) copies its union so it is not a good place to store TAILQ_HEADs. Allocate them instead. Found from a problem reported by sthen@. --- cmd-parse.y | 263 ++++++++++++++++++++++++++++------------------------ 1 file changed, 140 insertions(+), 123 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 402ec80675..e27cdcd803 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -65,7 +65,7 @@ struct cmd_parse_state { u_int escapes; char *error; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; struct cmd_parse_scope *scope; TAILQ_HEAD(, cmd_parse_scope) stack; @@ -74,6 +74,7 @@ static struct cmd_parse_state parse_state; static char *cmd_parse_get_error(const char *, u_int, const char *); static void cmd_parse_free_command(struct cmd_parse_command *); +static struct cmd_parse_commands *cmd_parse_new_commands(void); static void cmd_parse_free_commands(struct cmd_parse_commands *); %} @@ -88,9 +89,9 @@ static void cmd_parse_free_commands(struct cmd_parse_commands *); int flag; struct { int flag; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; } elif; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; struct cmd_parse_command *command; } @@ -115,45 +116,46 @@ lines : /* empty */ { struct cmd_parse_state *ps = &parse_state; - TAILQ_CONCAT(&ps->commands, &$1, entry); + ps->commands = $1; } statements : statement '\n' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } | statements statement '\n' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_CONCAT(&$$, &$2, entry); + $$ = $1; + TAILQ_CONCAT($$, $2, entry); + free($2); } - statement : condition { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) - TAILQ_CONCAT(&$$, &$1, entry); - else - cmd_parse_free_commands(&$1); + $$ = $1; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); + } } | assignment { - TAILQ_INIT(&$$); + $$ = xmalloc (sizeof *$$); + TAILQ_INIT($$); } | commands { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) - TAILQ_CONCAT(&$$, &$1, entry); - else - cmd_parse_free_commands(&$1); + $$ = $1; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); + } } expanded : FORMAT @@ -243,117 +245,119 @@ if_close : ENDIF condition : if_open '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) - TAILQ_CONCAT(&$$, &$3, entry); - else - cmd_parse_free_commands(&$3); + $$ = $3; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + } } | if_open '\n' statements if_else '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$6); + $$ = $3; + cmd_parse_free_commands($6); } else { - TAILQ_CONCAT(&$$, &$6, entry); - cmd_parse_free_commands(&$3); + $$ = $6; + cmd_parse_free_commands($3); } } | if_open '\n' statements elif if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$4.commands); + $$ = $3; + cmd_parse_free_commands($4.commands); } else if ($4.flag) { - TAILQ_CONCAT(&$$, &$4.commands, entry); - cmd_parse_free_commands(&$3); + $$ = $4.commands; + cmd_parse_free_commands($3); } else { - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$4.commands); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } | if_open '\n' statements elif if_else '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$4.commands); - cmd_parse_free_commands(&$7); + $$ = $3; + cmd_parse_free_commands($4.commands); + cmd_parse_free_commands($7); } else if ($4.flag) { - TAILQ_CONCAT(&$$, &$4.commands, entry); - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$7); + $$ = $4.commands; + cmd_parse_free_commands($3); + cmd_parse_free_commands($7); } else { - TAILQ_CONCAT(&$$, &$7, entry); - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$4.commands); + $$ = $7; + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } elif : if_elif '\n' statements { - TAILQ_INIT(&$$.commands); - if ($1) - TAILQ_CONCAT(&$$.commands, &$3, entry); - else - cmd_parse_free_commands(&$3); - $$.flag = $1; + if ($1) { + $$.flag = 1; + $$.commands = $3; + } else { + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + } } | if_elif '\n' statements elif { - TAILQ_INIT(&$$.commands); if ($1) { $$.flag = 1; - TAILQ_CONCAT(&$$.commands, &$3, entry); - cmd_parse_free_commands(&$4.commands); + $$.commands = $3; + cmd_parse_free_commands($4.commands); + } else if ($4.flag) { + $$.flag = 1; + $$.commands = $4.commands; + cmd_parse_free_commands($3); } else { - $$.flag = $4.flag; - TAILQ_CONCAT(&$$.commands, &$4.commands, entry); - cmd_parse_free_commands(&$3); + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } - commands : command { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); + $$ = cmd_parse_new_commands(); if (ps->scope == NULL || ps->scope->flag) - TAILQ_INSERT_TAIL(&$$, $1, entry); + TAILQ_INSERT_TAIL($$, $1, entry); else cmd_parse_free_command($1); } | commands ';' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } | commands ';' condition1 { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_CONCAT(&$$, &$3, entry); + $$ = $1; + TAILQ_CONCAT($$, $3, entry); + free($3); } | commands ';' command { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) { - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_INSERT_TAIL(&$$, $3, entry); + $$ = $1; + TAILQ_INSERT_TAIL($$, $3, entry); } else { - cmd_parse_free_commands(&$1); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); cmd_parse_free_command($3); } } | condition1 { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } command : assignment TOKEN @@ -379,76 +383,80 @@ command : assignment TOKEN condition1 : if_open commands if_close { - TAILQ_INIT(&$$); if ($1) - TAILQ_CONCAT(&$$, &$2, entry); - else - cmd_parse_free_commands(&$2); + $$ = $2; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + } } | if_open commands if_else commands if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$4); + $$ = $2; + cmd_parse_free_commands($4); } else { - TAILQ_CONCAT(&$$, &$4, entry); - cmd_parse_free_commands(&$2); + $$ = $4; + cmd_parse_free_commands($2); } } | if_open commands elif1 if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$3.commands); + $$ = $2; + cmd_parse_free_commands($3.commands); } else if ($3.flag) { - TAILQ_CONCAT(&$$, &$3.commands, entry); - cmd_parse_free_commands(&$2); + $$ = $3.commands; + cmd_parse_free_commands($2); } else { - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$3.commands); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } } | if_open commands elif1 if_else commands if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$3.commands); - cmd_parse_free_commands(&$5); + $$ = $2; + cmd_parse_free_commands($3.commands); + cmd_parse_free_commands($5); } else if ($3.flag) { - TAILQ_CONCAT(&$$, &$3.commands, entry); - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$5); + $$ = $3.commands; + cmd_parse_free_commands($2); + cmd_parse_free_commands($5); } else { - TAILQ_CONCAT(&$$, &$5, entry); - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$3.commands); + $$ = $5; + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } - } elif1 : if_elif commands { - TAILQ_INIT(&$$.commands); - if ($1) - TAILQ_CONCAT(&$$.commands, &$2, entry); - else - cmd_parse_free_commands(&$2); - $$.flag = $1; + if ($1) { + $$.flag = 1; + $$.commands = $2; + } else { + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + } } | if_elif commands elif1 { - TAILQ_INIT(&$$.commands); if ($1) { $$.flag = 1; - TAILQ_CONCAT(&$$.commands, &$2, entry); - cmd_parse_free_commands(&$3.commands); + $$.commands = $2; + cmd_parse_free_commands($3.commands); + } else if ($3.flag) { + $$.flag = 1; + $$.commands = $3.commands; + cmd_parse_free_commands($2); } else { - $$.flag = $3.flag; - TAILQ_CONCAT(&$$.commands, &$3.commands, entry); - cmd_parse_free_commands(&$2); + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } } @@ -497,6 +505,16 @@ cmd_parse_free_command(struct cmd_parse_command *cmd) free(cmd); } +static struct cmd_parse_commands * +cmd_parse_new_commands(void) +{ + struct cmd_parse_commands *cmds; + + cmds = xmalloc(sizeof *cmds); + TAILQ_INIT (cmds); + return (cmds); +} + static void cmd_parse_free_commands(struct cmd_parse_commands *cmds) { @@ -506,17 +524,17 @@ cmd_parse_free_commands(struct cmd_parse_commands *cmds) TAILQ_REMOVE(cmds, cmd, entry); cmd_parse_free_command(cmd); } + free(cmds); } static struct cmd_parse_commands * cmd_parse_run_parser(char **cause) { - struct cmd_parse_state *ps = &parse_state; - struct cmd_parse_commands *cmds; - struct cmd_parse_scope *scope, *scope1; - int retval; + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_scope *scope, *scope1; + int retval; - TAILQ_INIT(&ps->commands); + ps->commands = NULL; TAILQ_INIT(&ps->stack); retval = yyparse(); @@ -529,10 +547,9 @@ cmd_parse_run_parser(char **cause) return (NULL); } - cmds = xmalloc(sizeof *cmds); - TAILQ_INIT(cmds); - TAILQ_CONCAT(cmds, &ps->commands, entry); - return (cmds); + if (ps->commands == NULL) + return (cmd_parse_new_commands()); + return (ps->commands); } static struct cmd_parse_commands * @@ -574,7 +591,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, /* Check for an empty list. */ if (TAILQ_EMPTY(cmds)) { - free(cmds); + cmd_parse_free_commands(cmds); pr.status = CMD_PARSE_EMPTY; return (&pr); } @@ -668,7 +685,6 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, out: cmd_parse_free_commands(cmds); - free(cmds); return (&pr); } @@ -747,8 +763,7 @@ cmd_parse_from_arguments(int argc, char **argv, struct cmd_parse_input *pi) } cmd_log_argv(argc, argv, "%s", __func__); - cmds = xmalloc(sizeof *cmds); - TAILQ_INIT(cmds); + cmds = cmd_parse_new_commands(); copy = cmd_copy_argv(argc, argv); last = 0; @@ -801,6 +816,8 @@ cmd_parse_from_arguments(int argc, char **argv, struct cmd_parse_input *pi) TAILQ_INSERT_TAIL(cmds, cmd, entry); } } + + cmd_free_argv(argc, copy); return (cmd_parse_build_commands(cmds, pi)); } From 17bc11bd157db83fd90051824c289712fbac7eae Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 2 Jun 2019 07:10:15 +0000 Subject: [PATCH 640/836] yacc(1) copies its union so it is not a good place to store TAILQ_HEADs. Allocate them instead. Found from a problem reported by sthen@. --- cmd-parse.y | 263 ++++++++++++++++++++++++++++------------------------ 1 file changed, 140 insertions(+), 123 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 4d43789eb6..d369dc4ec6 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -64,7 +64,7 @@ struct cmd_parse_state { u_int escapes; char *error; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; struct cmd_parse_scope *scope; TAILQ_HEAD(, cmd_parse_scope) stack; @@ -73,6 +73,7 @@ static struct cmd_parse_state parse_state; static char *cmd_parse_get_error(const char *, u_int, const char *); static void cmd_parse_free_command(struct cmd_parse_command *); +static struct cmd_parse_commands *cmd_parse_new_commands(void); static void cmd_parse_free_commands(struct cmd_parse_commands *); %} @@ -87,9 +88,9 @@ static void cmd_parse_free_commands(struct cmd_parse_commands *); int flag; struct { int flag; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; } elif; - struct cmd_parse_commands commands; + struct cmd_parse_commands *commands; struct cmd_parse_command *command; } @@ -114,45 +115,46 @@ lines : /* empty */ { struct cmd_parse_state *ps = &parse_state; - TAILQ_CONCAT(&ps->commands, &$1, entry); + ps->commands = $1; } statements : statement '\n' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } | statements statement '\n' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_CONCAT(&$$, &$2, entry); + $$ = $1; + TAILQ_CONCAT($$, $2, entry); + free($2); } - statement : condition { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) - TAILQ_CONCAT(&$$, &$1, entry); - else - cmd_parse_free_commands(&$1); + $$ = $1; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); + } } | assignment { - TAILQ_INIT(&$$); + $$ = xmalloc (sizeof *$$); + TAILQ_INIT($$); } | commands { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) - TAILQ_CONCAT(&$$, &$1, entry); - else - cmd_parse_free_commands(&$1); + $$ = $1; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); + } } expanded : FORMAT @@ -242,117 +244,119 @@ if_close : ENDIF condition : if_open '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) - TAILQ_CONCAT(&$$, &$3, entry); - else - cmd_parse_free_commands(&$3); + $$ = $3; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + } } | if_open '\n' statements if_else '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$6); + $$ = $3; + cmd_parse_free_commands($6); } else { - TAILQ_CONCAT(&$$, &$6, entry); - cmd_parse_free_commands(&$3); + $$ = $6; + cmd_parse_free_commands($3); } } | if_open '\n' statements elif if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$4.commands); + $$ = $3; + cmd_parse_free_commands($4.commands); } else if ($4.flag) { - TAILQ_CONCAT(&$$, &$4.commands, entry); - cmd_parse_free_commands(&$3); + $$ = $4.commands; + cmd_parse_free_commands($3); } else { - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$4.commands); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } | if_open '\n' statements elif if_else '\n' statements if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$3, entry); - cmd_parse_free_commands(&$4.commands); - cmd_parse_free_commands(&$7); + $$ = $3; + cmd_parse_free_commands($4.commands); + cmd_parse_free_commands($7); } else if ($4.flag) { - TAILQ_CONCAT(&$$, &$4.commands, entry); - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$7); + $$ = $4.commands; + cmd_parse_free_commands($3); + cmd_parse_free_commands($7); } else { - TAILQ_CONCAT(&$$, &$7, entry); - cmd_parse_free_commands(&$3); - cmd_parse_free_commands(&$4.commands); + $$ = $7; + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } elif : if_elif '\n' statements { - TAILQ_INIT(&$$.commands); - if ($1) - TAILQ_CONCAT(&$$.commands, &$3, entry); - else - cmd_parse_free_commands(&$3); - $$.flag = $1; + if ($1) { + $$.flag = 1; + $$.commands = $3; + } else { + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + } } | if_elif '\n' statements elif { - TAILQ_INIT(&$$.commands); if ($1) { $$.flag = 1; - TAILQ_CONCAT(&$$.commands, &$3, entry); - cmd_parse_free_commands(&$4.commands); + $$.commands = $3; + cmd_parse_free_commands($4.commands); + } else if ($4.flag) { + $$.flag = 1; + $$.commands = $4.commands; + cmd_parse_free_commands($3); } else { - $$.flag = $4.flag; - TAILQ_CONCAT(&$$.commands, &$4.commands, entry); - cmd_parse_free_commands(&$3); + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($3); + cmd_parse_free_commands($4.commands); } } - commands : command { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); + $$ = cmd_parse_new_commands(); if (ps->scope == NULL || ps->scope->flag) - TAILQ_INSERT_TAIL(&$$, $1, entry); + TAILQ_INSERT_TAIL($$, $1, entry); else cmd_parse_free_command($1); } | commands ';' { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } | commands ';' condition1 { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_CONCAT(&$$, &$3, entry); + $$ = $1; + TAILQ_CONCAT($$, $3, entry); + free($3); } | commands ';' command { struct cmd_parse_state *ps = &parse_state; - TAILQ_INIT(&$$); if (ps->scope == NULL || ps->scope->flag) { - TAILQ_CONCAT(&$$, &$1, entry); - TAILQ_INSERT_TAIL(&$$, $3, entry); + $$ = $1; + TAILQ_INSERT_TAIL($$, $3, entry); } else { - cmd_parse_free_commands(&$1); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($1); cmd_parse_free_command($3); } } | condition1 { - TAILQ_INIT(&$$); - TAILQ_CONCAT(&$$, &$1, entry); + $$ = $1; } command : assignment TOKEN @@ -378,76 +382,80 @@ command : assignment TOKEN condition1 : if_open commands if_close { - TAILQ_INIT(&$$); if ($1) - TAILQ_CONCAT(&$$, &$2, entry); - else - cmd_parse_free_commands(&$2); + $$ = $2; + else { + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + } } | if_open commands if_else commands if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$4); + $$ = $2; + cmd_parse_free_commands($4); } else { - TAILQ_CONCAT(&$$, &$4, entry); - cmd_parse_free_commands(&$2); + $$ = $4; + cmd_parse_free_commands($2); } } | if_open commands elif1 if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$3.commands); + $$ = $2; + cmd_parse_free_commands($3.commands); } else if ($3.flag) { - TAILQ_CONCAT(&$$, &$3.commands, entry); - cmd_parse_free_commands(&$2); + $$ = $3.commands; + cmd_parse_free_commands($2); } else { - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$3.commands); + $$ = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } } | if_open commands elif1 if_else commands if_close { - TAILQ_INIT(&$$); if ($1) { - TAILQ_CONCAT(&$$, &$2, entry); - cmd_parse_free_commands(&$3.commands); - cmd_parse_free_commands(&$5); + $$ = $2; + cmd_parse_free_commands($3.commands); + cmd_parse_free_commands($5); } else if ($3.flag) { - TAILQ_CONCAT(&$$, &$3.commands, entry); - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$5); + $$ = $3.commands; + cmd_parse_free_commands($2); + cmd_parse_free_commands($5); } else { - TAILQ_CONCAT(&$$, &$5, entry); - cmd_parse_free_commands(&$2); - cmd_parse_free_commands(&$3.commands); + $$ = $5; + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } - } elif1 : if_elif commands { - TAILQ_INIT(&$$.commands); - if ($1) - TAILQ_CONCAT(&$$.commands, &$2, entry); - else - cmd_parse_free_commands(&$2); - $$.flag = $1; + if ($1) { + $$.flag = 1; + $$.commands = $2; + } else { + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + } } | if_elif commands elif1 { - TAILQ_INIT(&$$.commands); if ($1) { $$.flag = 1; - TAILQ_CONCAT(&$$.commands, &$2, entry); - cmd_parse_free_commands(&$3.commands); + $$.commands = $2; + cmd_parse_free_commands($3.commands); + } else if ($3.flag) { + $$.flag = 1; + $$.commands = $3.commands; + cmd_parse_free_commands($2); } else { - $$.flag = $3.flag; - TAILQ_CONCAT(&$$.commands, &$3.commands, entry); - cmd_parse_free_commands(&$2); + $$.flag = 0; + $$.commands = cmd_parse_new_commands(); + cmd_parse_free_commands($2); + cmd_parse_free_commands($3.commands); } } @@ -496,6 +504,16 @@ cmd_parse_free_command(struct cmd_parse_command *cmd) free(cmd); } +static struct cmd_parse_commands * +cmd_parse_new_commands(void) +{ + struct cmd_parse_commands *cmds; + + cmds = xmalloc(sizeof *cmds); + TAILQ_INIT (cmds); + return (cmds); +} + static void cmd_parse_free_commands(struct cmd_parse_commands *cmds) { @@ -505,17 +523,17 @@ cmd_parse_free_commands(struct cmd_parse_commands *cmds) TAILQ_REMOVE(cmds, cmd, entry); cmd_parse_free_command(cmd); } + free(cmds); } static struct cmd_parse_commands * cmd_parse_run_parser(char **cause) { - struct cmd_parse_state *ps = &parse_state; - struct cmd_parse_commands *cmds; - struct cmd_parse_scope *scope, *scope1; - int retval; + struct cmd_parse_state *ps = &parse_state; + struct cmd_parse_scope *scope, *scope1; + int retval; - TAILQ_INIT(&ps->commands); + ps->commands = NULL; TAILQ_INIT(&ps->stack); retval = yyparse(); @@ -528,10 +546,9 @@ cmd_parse_run_parser(char **cause) return (NULL); } - cmds = xmalloc(sizeof *cmds); - TAILQ_INIT(cmds); - TAILQ_CONCAT(cmds, &ps->commands, entry); - return (cmds); + if (ps->commands == NULL) + return (cmd_parse_new_commands()); + return (ps->commands); } static struct cmd_parse_commands * @@ -573,7 +590,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, /* Check for an empty list. */ if (TAILQ_EMPTY(cmds)) { - free(cmds); + cmd_parse_free_commands(cmds); pr.status = CMD_PARSE_EMPTY; return (&pr); } @@ -667,7 +684,6 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, out: cmd_parse_free_commands(cmds); - free(cmds); return (&pr); } @@ -746,8 +762,7 @@ cmd_parse_from_arguments(int argc, char **argv, struct cmd_parse_input *pi) } cmd_log_argv(argc, argv, "%s", __func__); - cmds = xmalloc(sizeof *cmds); - TAILQ_INIT(cmds); + cmds = cmd_parse_new_commands(); copy = cmd_copy_argv(argc, argv); last = 0; @@ -800,6 +815,8 @@ cmd_parse_from_arguments(int argc, char **argv, struct cmd_parse_input *pi) TAILQ_INSERT_TAIL(cmds, cmd, entry); } } + + cmd_free_argv(argc, copy); return (cmd_parse_build_commands(cmds, pi)); } From 4ca1de1b8bc10dca47d2cf7399df41845c902c9e Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 3 Jun 2019 18:28:37 +0000 Subject: [PATCH 641/836] Add new-session -X and attach-session -x to send SIGHUP to parent when detaching (like detach-client -P). From Colin Watson in GitHub issue 1773. --- cmd-attach-session.c | 27 ++++++++++++++++++--------- cmd-new-session.c | 7 ++++--- tmux.1 | 14 ++++++++++++-- tmux.h | 2 +- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/cmd-attach-session.c b/cmd-attach-session.c index bcd6d89529..6de734e512 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -37,8 +37,8 @@ const struct cmd_entry cmd_attach_session_entry = { .name = "attach-session", .alias = "attach", - .args = { "c:dErt:", 0, 0 }, - .usage = "[-dEr] [-c working-directory] " CMD_TARGET_SESSION_USAGE, + .args = { "c:dErt:x", 0, 0 }, + .usage = "[-dErx] [-c working-directory] " CMD_TARGET_SESSION_USAGE, /* -t is special */ @@ -48,7 +48,7 @@ const struct cmd_entry cmd_attach_session_entry = { enum cmd_retval cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, - int rflag, const char *cflag, int Eflag) + int xflag, int rflag, const char *cflag, int Eflag) { struct cmd_find_state *current = &item->shared->current; enum cmd_find_type type; @@ -58,6 +58,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, struct winlink *wl; struct window_pane *wp; char *cause; + enum msgtype msgtype; if (RB_EMPTY(&sessions)) { cmdq_error(item, "no sessions"); @@ -102,11 +103,15 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, c->last_session = c->session; if (c->session != NULL) { - if (dflag) { + if (dflag || xflag) { + if (xflag) + msgtype = MSG_DETACHKILL; + else + msgtype = MSG_DETACH; TAILQ_FOREACH(c_loop, &clients, entry) { if (c_loop->session != s || c == c_loop) continue; - server_client_detach(c_loop, MSG_DETACH); + server_client_detach(c_loop, msgtype); } } if (!Eflag) @@ -131,11 +136,15 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, if (rflag) c->flags |= CLIENT_READONLY; - if (dflag) { + if (dflag || xflag) { + if (xflag) + msgtype = MSG_DETACHKILL; + else + msgtype = MSG_DETACH; TAILQ_FOREACH(c_loop, &clients, entry) { if (c_loop->session != s || c == c_loop) continue; - server_client_detach(c_loop, MSG_DETACH); + server_client_detach(c_loop, msgtype); } } if (!Eflag) @@ -169,6 +178,6 @@ cmd_attach_session_exec(struct cmd *self, struct cmdq_item *item) struct args *args = self->args; return (cmd_attach_session(item, args_get(args, 't'), - args_has(args, 'd'), args_has(args, 'r'), args_get(args, 'c'), - args_has(args, 'E'))); + args_has(args, 'd'), args_has(args, 'x'), args_has(args, 'r'), + args_get(args, 'c'), args_has(args, 'E'))); } diff --git a/cmd-new-session.c b/cmd-new-session.c index 559c268c54..e054081539 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_new_session_entry = { .name = "new-session", .alias = "new", - .args = { "Ac:dDEF:n:Ps:t:x:y:", 0, -1 }, - .usage = "[-AdDEP] [-c start-directory] [-F format] [-n window-name] " + .args = { "Ac:dDEF:n:Ps:t:x:Xy:", 0, -1 }, + .usage = "[-AdDEPX] [-c start-directory] [-F format] [-n window-name] " "[-s session-name] " CMD_TARGET_SESSION_USAGE " [-x width] " "[-y height] [command]", @@ -105,7 +105,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'A')) { retval = cmd_attach_session(item, newname, args_has(args, 'D'), - 0, NULL, args_has(args, 'E')); + args_has(args, 'X'), 0, NULL, + args_has(args, 'E')); free(newname); return (retval); } diff --git a/tmux.1 b/tmux.1 index d9b37c0eb1..6917e8b0de 100644 --- a/tmux.1 +++ b/tmux.1 @@ -918,7 +918,7 @@ section. The following commands are available to manage clients and sessions: .Bl -tag -width Ds .It Xo Ic attach-session -.Op Fl dEr +.Op Fl dErx .Op Fl c Ar working-directory .Op Fl t Ar target-session .Xc @@ -931,6 +931,10 @@ If used from inside, switch the current client. If .Fl d is specified, any other clients attached to the session are detached. +If +.Fl x +is given, send SIGHUP to the parent process of the client as well as +detaching the client, typically causing it to exit. .Fl r signifies the client is read-only (only keys bound to the .Ic detach-client @@ -1048,7 +1052,7 @@ command. Lock all clients attached to .Ar target-session . .It Xo Ic new-session -.Op Fl AdDEP +.Op Fl AdDEPX .Op Fl c Ar start-directory .Op Fl F Ar format .Op Fl n Ar window-name @@ -1105,6 +1109,12 @@ already exists; in this case, behaves like .Fl d to +.Ic attach-session , +and +.Fl X +behaves like +.Fl x +to .Ic attach-session . .Pp If diff --git a/tmux.h b/tmux.h index 8eb1e65a0d..3849790c94 100644 --- a/tmux.h +++ b/tmux.h @@ -2009,7 +2009,7 @@ extern const struct cmd_entry *cmd_table[]; /* cmd-attach-session.c */ enum cmd_retval cmd_attach_session(struct cmdq_item *, const char *, int, int, - const char *, int); + int, const char *, int); /* cmd-parse.c */ void cmd_parse_empty(struct cmd_parse_input *); From e252984993fdfd57a1fdc1eaf393e42e8589d623 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 5 Jun 2019 06:44:08 +0100 Subject: [PATCH 642/836] If only one of -x or -y is given, use the calculated size for the other. Also fix some warnings. Pointed out by Ben Boeckel. --- cmd-new-session.c | 7 ++++++- cmd-parse.y | 1 + cmd-queue.c | 2 +- format.c | 4 +--- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 2fd1342027..559c268c54 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -242,8 +242,13 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) /* Create the new session. */ oo = options_create(global_s_options); - if (args_has(args, 'x') || args_has(args, 'y')) + if (args_has(args, 'x') || args_has(args, 'y')) { + if (!args_has(args, 'x')) + dsx = sx; + if (!args_has(args, 'y')) + dsy = sy; options_set_string(oo, "default-size", 0, "%ux%u", dsx, dsy); + } env = environ_create(); if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); diff --git a/cmd-parse.y b/cmd-parse.y index d369dc4ec6..6feeb35a25 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -23,6 +23,7 @@ #include #include #include +#include #include #include diff --git a/cmd-queue.c b/cmd-queue.c index 93dcaa5368..1ee4350850 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -202,7 +202,7 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current, { struct cmdq_item *item, *first = NULL, *last = NULL; struct cmd *cmd; - struct cmdq_shared *shared; + struct cmdq_shared *shared = NULL; u_int group = 0; TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { diff --git a/format.c b/format.c index 45479d5e20..5ca970b74a 100644 --- a/format.c +++ b/format.c @@ -1518,7 +1518,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { struct window_pane *wp = ft->wp; - const char *errptr, *copy, *cp, *marker; + const char *errptr, *copy, *cp, *marker = NULL; char *copy0, *condition, *found, *new; char *value, *left, *right; size_t valuelen; @@ -1566,8 +1566,6 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, limit = 0; if (fm->argc == 2 && fm->argv[1] != NULL) marker = fm->argv[1]; - else - marker = NULL; break; case 'l': modifiers |= FORMAT_LITERAL; From 53914e50b90ddbe285c188c021c3922b4e4c9fb8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 5 Jun 2019 15:09:42 +0100 Subject: [PATCH 643/836] RC2. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2c1a8945a2..8ff6d16e59 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 3.0-rc) +AC_INIT([tmux], 3.0-rc2) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 09e90c1645a8ecd1e467b13a743bb46d48febd37 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 5 Jun 2019 19:00:36 +0000 Subject: [PATCH 644/836] Need to increment the argument to skip the prefix earlier, fixes repeated incremental search in copy mode, reported by Kaushal Modi in GitHub issue 1780. --- window-copy.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/window-copy.c b/window-copy.c index 36ad6a830a..d81073bffe 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1668,9 +1668,11 @@ window_copy_cmd_search_backward_incremental(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; const char *argument = cs->args->argv[1]; - enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; const char *ss = data->searchstr; + char prefix; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + prefix = *argument++; if (data->searchx == -1 || data->searchy == -1) { data->searchx = data->cx; data->searchy = data->cy; @@ -1681,13 +1683,11 @@ window_copy_cmd_search_backward_incremental(struct window_copy_cmd_state *cs) data->oy = data->searcho; action = WINDOW_COPY_CMD_REDRAW; } - if (*argument == '\0') { window_copy_clear_marks(wme); return (WINDOW_COPY_CMD_REDRAW); } - - switch (*argument++) { + switch (prefix) { case '=': case '-': data->searchtype = WINDOW_COPY_SEARCHUP; @@ -1717,9 +1717,11 @@ window_copy_cmd_search_forward_incremental(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; const char *argument = cs->args->argv[1]; - enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; const char *ss = data->searchstr; + char prefix; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + prefix = *argument++; if (data->searchx == -1 || data->searchy == -1) { data->searchx = data->cx; data->searchy = data->cy; @@ -1730,13 +1732,11 @@ window_copy_cmd_search_forward_incremental(struct window_copy_cmd_state *cs) data->oy = data->searcho; action = WINDOW_COPY_CMD_REDRAW; } - if (*argument == '\0') { window_copy_clear_marks(wme); return (WINDOW_COPY_CMD_REDRAW); } - - switch (*argument++) { + switch (prefix) { case '=': case '+': data->searchtype = WINDOW_COPY_SEARCHDOWN; From 8f40796f05f2db0ff8b2c9231054b62b511a7ba0 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 5 Jun 2019 20:00:53 +0000 Subject: [PATCH 645/836] Add a -v flag to source-file to show the commands and line numbers. --- cfg.c | 1 + cmd-parse.y | 17 +++++++++++++++++ cmd-source-file.c | 6 ++++-- tmux.1 | 4 +++- tmux.h | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/cfg.c b/cfg.c index d643598028..c79150de25 100644 --- a/cfg.c +++ b/cfg.c @@ -127,6 +127,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, pi.flags = flags; pi.file = path; pi.line = 1; + pi.item = item; pr = cmd_parse_from_file(f, &pi); fclose(f); diff --git a/cmd-parse.y b/cmd-parse.y index e27cdcd803..a7c12f62f3 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -76,6 +76,8 @@ static char *cmd_parse_get_error(const char *, u_int, const char *); static void cmd_parse_free_command(struct cmd_parse_command *); static struct cmd_parse_commands *cmd_parse_new_commands(void); static void cmd_parse_free_commands(struct cmd_parse_commands *); +static void cmd_parse_print_commands(struct cmd_parse_input *, u_int, + struct cmd_list *); %} @@ -497,6 +499,19 @@ cmd_parse_get_error(const char *file, u_int line, const char *error) return (s); } +static void +cmd_parse_print_commands(struct cmd_parse_input *pi, u_int line, + struct cmd_list *cmdlist) +{ + char *s; + + if (pi->item != NULL && (pi->flags & CMD_PARSE_VERBOSE)) { + s = cmd_list_print(cmdlist, 0); + cmdq_print(pi->item, "%u: %s", line, s); + free(s); + } +} + static void cmd_parse_free_command(struct cmd_parse_command *cmd) { @@ -653,6 +668,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, if (cmdlist == NULL || cmd->line != line) { if (cmdlist != NULL) { + cmd_parse_print_commands(pi, line, cmdlist); cmd_list_move(result, cmdlist); cmd_list_free(cmdlist); } @@ -672,6 +688,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, cmd_list_append(cmdlist, add); } if (cmdlist != NULL) { + cmd_parse_print_commands(pi, line, cmdlist); cmd_list_move(result, cmdlist); cmd_list_free(cmdlist); } diff --git a/cmd-source-file.c b/cmd-source-file.c index d88f74cfed..b867db677d 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -38,8 +38,8 @@ const struct cmd_entry cmd_source_file_entry = { .name = "source-file", .alias = "source", - .args = { "nq", 1, -1 }, - .usage = "[-nq] path ...", + .args = { "nqv", 1, -1 }, + .usage = "[-nqv] path ...", .flags = 0, .exec = cmd_source_file_exec @@ -63,6 +63,8 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) flags |= CMD_PARSE_QUIET; if (args_has(args, 'n')) flags |= CMD_PARSE_PARSEONLY; + if (args_has(args, 'v')) + flags |= CMD_PARSE_VERBOSE; utf8_stravis(&cwd, server_client_get_cwd(c, NULL), VIS_GLOB); retval = CMD_RETURN_NORMAL; diff --git a/tmux.1 b/tmux.1 index 6917e8b0de..9f97422c14 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1251,7 +1251,7 @@ and .Fl T show debugging information about jobs and terminals. .It Xo Ic source-file -.Op Fl nq +.Op Fl nqv .Ar path .Ar ... .Xc @@ -1269,6 +1269,8 @@ does not exist. With .Fl n , the file is parsed but no commands are executed. +.Fl v +shows the parsed commands and line numbers if possible. .It Ic start-server .D1 (alias: Ic start ) Start the diff --git a/tmux.h b/tmux.h index 3849790c94..f8ceb95d7d 100644 --- a/tmux.h +++ b/tmux.h @@ -1324,6 +1324,7 @@ struct cmd_parse_input { #define CMD_PARSE_QUIET 0x1 #define CMD_PARSE_PARSEONLY 0x2 #define CMD_PARSE_NOALIAS 0x4 +#define CMD_PARSE_VERBOSE 0x8 const char *file; u_int line; From db5a7c1740b4400a1ea5cabaae5e99f942179d16 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 5 Jun 2019 19:00:36 +0000 Subject: [PATCH 646/836] Need to increment the argument to skip the prefix earlier, fixes repeated incremental search in copy mode, reported by Kaushal Modi in GitHub issue 1780. --- window-copy.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/window-copy.c b/window-copy.c index 36ad6a830a..d81073bffe 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1668,9 +1668,11 @@ window_copy_cmd_search_backward_incremental(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; const char *argument = cs->args->argv[1]; - enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; const char *ss = data->searchstr; + char prefix; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + prefix = *argument++; if (data->searchx == -1 || data->searchy == -1) { data->searchx = data->cx; data->searchy = data->cy; @@ -1681,13 +1683,11 @@ window_copy_cmd_search_backward_incremental(struct window_copy_cmd_state *cs) data->oy = data->searcho; action = WINDOW_COPY_CMD_REDRAW; } - if (*argument == '\0') { window_copy_clear_marks(wme); return (WINDOW_COPY_CMD_REDRAW); } - - switch (*argument++) { + switch (prefix) { case '=': case '-': data->searchtype = WINDOW_COPY_SEARCHUP; @@ -1717,9 +1717,11 @@ window_copy_cmd_search_forward_incremental(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; const char *argument = cs->args->argv[1]; - enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; const char *ss = data->searchstr; + char prefix; + enum window_copy_cmd_action action = WINDOW_COPY_CMD_NOTHING; + prefix = *argument++; if (data->searchx == -1 || data->searchy == -1) { data->searchx = data->cx; data->searchy = data->cy; @@ -1730,13 +1732,11 @@ window_copy_cmd_search_forward_incremental(struct window_copy_cmd_state *cs) data->oy = data->searcho; action = WINDOW_COPY_CMD_REDRAW; } - if (*argument == '\0') { window_copy_clear_marks(wme); return (WINDOW_COPY_CMD_REDRAW); } - - switch (*argument++) { + switch (prefix) { case '=': case '+': data->searchtype = WINDOW_COPY_SEARCHDOWN; From e37f34facc05c3ba146d4158cc7af23f6886fecd Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 7 Jun 2019 20:09:17 +0000 Subject: [PATCH 647/836] Do not load the config file if the server is exiting because it failed to start, otherwise commands like lsk which start the server again can end up looping infinitely. Also make the first client exit correctly. Problem reported by Wael M Nasreddine. --- server-client.c | 6 ++++-- server.c | 10 ++++++---- tmux.h | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/server-client.c b/server-client.c index 52842e3855..fa21fa7977 100644 --- a/server-client.c +++ b/server-client.c @@ -1511,7 +1511,9 @@ server_client_click_timer(__unused int fd, __unused short events, void *data) static void server_client_check_exit(struct client *c) { - if (!(c->flags & CLIENT_EXIT)) + if (~c->flags & CLIENT_EXIT) + return; + if (c->flags & CLIENT_EXITED) return; if (EVBUFFER_LENGTH(c->stdin_data) != 0) @@ -1524,7 +1526,7 @@ server_client_check_exit(struct client *c) if (c->flags & CLIENT_ATTACHED) notify_client("client-detached", c); proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval); - c->flags &= ~CLIENT_EXIT; + c->flags |= CLIENT_EXITED; } /* Redraw timer callback. */ diff --git a/server.c b/server.c index 18818c38b6..fc3730adae 100644 --- a/server.c +++ b/server.c @@ -44,7 +44,7 @@ struct clients clients; struct tmuxproc *server_proc; -static int server_fd; +static int server_fd = -1; static int server_exit; static struct event server_ev_accept; @@ -208,11 +208,10 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, cmdq_append(c, cmdq_get_error(cause)); free(cause); c->flags |= CLIENT_EXIT; - } + } else + start_cfg(); - start_cfg(); server_add_accept(0); - proc_loop(server_proc, server_loop); job_kill_all(); @@ -364,6 +363,9 @@ server_add_accept(int timeout) { struct timeval tv = { timeout, 0 }; + if (server_fd == -1) + return; + if (event_initialized(&server_ev_accept)) event_del(&server_ev_accept); diff --git a/tmux.h b/tmux.h index f8ceb95d7d..76bf8303a3 100644 --- a/tmux.h +++ b/tmux.h @@ -1490,7 +1490,7 @@ struct client { #define CLIENT_REPEAT 0x20 #define CLIENT_SUSPENDED 0x40 #define CLIENT_ATTACHED 0x80 -/* 0x100 unused */ +#define CLIENT_EXITED 0x100 #define CLIENT_DEAD 0x200 #define CLIENT_REDRAWBORDERS 0x400 #define CLIENT_READONLY 0x800 From 43796bf131c4d7d3a44185c10e5d75860869af0d Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 8 Jun 2019 21:48:29 +0000 Subject: [PATCH 648/836] Do not try to parse command when unsetting, GitHub issue 1788. --- options.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.c b/options.c index 7e12544dbd..619c27edb7 100644 --- a/options.c +++ b/options.c @@ -361,7 +361,7 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, return (-1); } - if (OPTIONS_IS_COMMAND(o)) { + if (OPTIONS_IS_COMMAND(o) && value != NULL) { pr = cmd_parse_from_string(value, NULL); switch (pr->status) { case CMD_PARSE_EMPTY: From 915097d312319a463fa4333c9bdf728b8dd6d39d Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 9 Jun 2019 06:50:24 +0000 Subject: [PATCH 649/836] Exiting alternate screen mode should restore cursor position and attributes even if already outside alternate screen mode. GitHub issue 1789. --- window.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/window.c b/window.c index 1d83c24747..781ff30c99 100644 --- a/window.c +++ b/window.c @@ -804,6 +804,8 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->pipe_event = NULL; wp->saved_grid = NULL; + wp->saved_cx = UINT_MAX; + wp->saved_cy = UINT_MAX; style_set(&wp->style, &grid_default_cell); @@ -962,10 +964,25 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc, struct screen *s = &wp->base; u_int sx, sy; - if (wp->saved_grid == NULL) - return; if (!options_get_number(wp->window->options, "alternate-screen")) return; + + /* + * Restore the cursor position and cell. This happens even if not + * currently in the alternate screen. + */ + if (cursor && wp->saved_cx != UINT_MAX && wp->saved_cy != UINT_MAX) { + s->cx = wp->saved_cx; + if (s->cx > screen_size_x(s) - 1) + s->cx = screen_size_x(s) - 1; + s->cy = wp->saved_cy; + if (s->cy > screen_size_y(s) - 1) + s->cy = screen_size_y(s) - 1; + memcpy(gc, &wp->saved_cell, sizeof *gc); + } + + if (wp->saved_grid == NULL) + return; sx = screen_size_x(s); sy = screen_size_y(s); @@ -976,17 +993,8 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc, if (sy > wp->saved_grid->sy) screen_resize(s, sx, wp->saved_grid->sy, 1); - /* Restore the grid, cursor position and cell. */ + /* Restore the saved grid. */ grid_duplicate_lines(s->grid, screen_hsize(s), wp->saved_grid, 0, sy); - if (cursor) - s->cx = wp->saved_cx; - if (s->cx > screen_size_x(s) - 1) - s->cx = screen_size_x(s) - 1; - if (cursor) - s->cy = wp->saved_cy; - if (s->cy > screen_size_y(s) - 1) - s->cy = screen_size_y(s) - 1; - memcpy(gc, &wp->saved_cell, sizeof *gc); /* * Turn history back on (so resize can use it) and then resize back to From 1a9f9c09b4bcc9f99f10190ab91f1aea5206809b Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 11 Jun 2019 13:09:00 +0000 Subject: [PATCH 650/836] Do not resize panes unless they are in an attached, active window. From Morten M Neergaard in GitHub issue 1782. --- server-client.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server-client.c b/server-client.c index fa21fa7977..dc57e52309 100644 --- a/server-client.c +++ b/server-client.c @@ -1241,6 +1241,8 @@ server_client_loop(void) struct client *c; struct window *w; struct window_pane *wp; + struct winlink *wl; + struct session *s; int focus; TAILQ_FOREACH(c, &clients, entry) { @@ -1257,8 +1259,13 @@ server_client_loop(void) */ focus = options_get_number(global_options, "focus-events"); RB_FOREACH(w, windows, &windows) { + TAILQ_FOREACH(wl, &w->winlinks, wentry) { + s = wl->session; + if (s->attached != 0 && s->curw == wl) + break; + } TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->fd != -1) { + if (wl != NULL && wp->fd != -1) { if (focus) server_client_check_focus(wp); server_client_check_resize(wp); From e8814a7e9308dfd4617ce01bc0aa3dba15f177c0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 11 Jun 2019 14:23:47 +0100 Subject: [PATCH 651/836] Add to CHANGES. --- CHANGES | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index edd4751b31..200e68c882 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ CHANGES FROM 3.0 to X.X -XXX +* Add new-session -X and attach-session -x to send SIGHUP to parent when + detaching (like detach-client -P). + +* Support for octal escapes in strings (such as \007). CHANGES FROM 2.9 to 3.0 From 8e971f187ab97ff3f22d8e2f7f5050702c99e627 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 11 Jun 2019 14:27:40 +0100 Subject: [PATCH 652/836] Update README.md --- .github/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/README.md b/.github/README.md index cfff69dacb..ce12f6aab2 100644 --- a/.github/README.md +++ b/.github/README.md @@ -53,10 +53,9 @@ tmux-users@googlegroups.com Or open a GitHub issue or pull request. **Please read [this document](CONTRIBUTING.md) before opening an issue.** -There is [a TODO list](https://github.com/tmux/tmux/wiki/Contributing) which -explains some ideas for tmux not yet developed. Please feel free to ask for -clarifications on the mailing list if you're thinking of working on these or -need further information. +There is [a list of suggestions for contributions](https://github.com/tmux/tmux/wiki/Contributing). +Please feel free to ask on the mailing list if you're thinking of working on something or need +further information. ## Documentation From e337c1ba7d0a5e8895d8903fa801344f385d92d7 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 8 Jun 2019 21:48:29 +0000 Subject: [PATCH 653/836] Do not try to parse command when unsetting, GitHub issue 1788. --- options.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.c b/options.c index 7d79cf3009..26ce3b6fbd 100644 --- a/options.c +++ b/options.c @@ -361,7 +361,7 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, return (-1); } - if (OPTIONS_IS_COMMAND(o)) { + if (OPTIONS_IS_COMMAND(o) && value != NULL) { pr = cmd_parse_from_string(value, NULL); switch (pr->status) { case CMD_PARSE_EMPTY: From 9d42bd328c094c679415c623f7a87c200b64984e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 12 Jun 2019 08:08:33 +0000 Subject: [PATCH 654/836] Do not always resize the window back to its original size after applying a layout, let the normal window resize process do it. This means windows are not resized at all if window-size is manual, and are not resized multiple times if later attached to a different size terminal. --- layout-custom.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/layout-custom.c b/layout-custom.c index 9886afe121..4d9e818b84 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -168,10 +168,7 @@ layout_parse(struct window *w, const char *layout) /* Update pane offsets and sizes. */ layout_fix_offsets(lc); layout_fix_panes(w); - - /* Then resize the layout back to the original window size. */ - layout_resize(w, sx, sy); - window_resize(w, sx, sy); + recalculate_sizes(); layout_print_cell(lc, __func__, 0); From b12df0186139bb4761292629871205dc46d4c302 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 12 Jun 2019 08:47:07 +0000 Subject: [PATCH 655/836] Pass target on to new commands with if -F. --- cmd-if-shell.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 84f66657d5..f795575a59 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -67,10 +67,11 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) struct cmd_if_shell_data *cdata; char *shellcmd, *cmd; struct cmdq_item *new_item; + struct cmd_find_state *fs = &item->target; struct client *c = cmd_find_client(item, NULL, 1); - struct session *s = item->target.s; - struct winlink *wl = item->target.wl; - struct window_pane *wp = item->target.wp; + struct session *s = fs->s; + struct winlink *wl = fs->wl; + struct window_pane *wp = fs->wp; struct cmd_parse_input pi; struct cmd_parse_result *pr; @@ -92,7 +93,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) pi.line = self->line; pi.item = item; pi.c = c; - cmd_find_copy_state(&pi.fs, &item->target); + cmd_find_copy_state(&pi.fs, fs); pr = cmd_parse_from_string(cmd, &pi); switch (pr->status) { @@ -103,7 +104,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) free(pr->error); return (CMD_RETURN_ERROR); case CMD_PARSE_SUCCESS: - new_item = cmdq_get_command(pr->cmdlist, NULL, m, 0); + new_item = cmdq_get_command(pr->cmdlist, fs, m, 0); cmdq_insert_after(item, new_item); cmd_list_free(pr->cmdlist); break; @@ -137,7 +138,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->input.c = c; if (cdata->input.c != NULL) cdata->input.c->references++; - cmd_find_copy_state(&cdata->input.fs, &item->target); + cmd_find_copy_state(&cdata->input.fs, fs); if (job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, cmd_if_shell_callback, cmd_if_shell_free, cdata, 0) == NULL) { From 7e6a26cc9d857ffc53fdb2395aa5413ff1865f9e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 12 Jun 2019 09:10:29 +0000 Subject: [PATCH 656/836] Do not use $TMUX to find the session because for windows in multiple sessions it is wrong as often as it is right, and for windows in one session it is pointless. Instead check TMUX_PANE to find the pane and look for the MRU session as usual. GitHub issue 1793. --- cmd-find.c | 73 +++++++----------------------------------------------- 1 file changed, 9 insertions(+), 64 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index e5ef8b99b0..e3e14f5563 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -76,38 +76,12 @@ static const char *cmd_find_pane_table[][2] = { { NULL, NULL } }; -/* Get session from TMUX if present. */ -static struct session * -cmd_find_try_TMUX(struct client *c) -{ - struct environ_entry *envent; - char tmp[256]; - long long pid; - u_int session; - struct session *s; - - envent = environ_find(c->environ, "TMUX"); - if (envent == NULL) - return (NULL); - - if (sscanf(envent->value, "%255[^,],%lld,%d", tmp, &pid, &session) != 3) - return (NULL); - if (pid != getpid()) - return (NULL); - log_debug("%s: client %p TMUX %s (session $%u)", __func__, c, - envent->value, session); - - s = session_find_by_id(session); - if (s != NULL) - log_debug("%s: session $%u still exists", __func__, s->id); - return (s); -} - /* Find pane containing client if any. */ static struct window_pane * cmd_find_inside_pane(struct client *c) { struct window_pane *wp; + struct environ_entry *envent; if (c == NULL) return (NULL); @@ -116,6 +90,11 @@ cmd_find_inside_pane(struct client *c) if (wp->fd != -1 && strcmp(wp->tty, c->ttyname) == 0) break; } + if (wp == NULL) { + envent = environ_find(c->environ, "TMUX_PANE"); + if (envent != NULL) + wp = window_pane_find_by_id_str(envent->value); + } if (wp != NULL) log_debug("%s: got pane %%%u (%s)", __func__, wp->id, wp->tty); return (wp); @@ -880,8 +859,6 @@ cmd_find_from_mouse(struct cmd_find_state *fs, struct mouse_event *m, int flags) int cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) { - struct session *s; - struct winlink *wl; struct window_pane *wp; /* If no client, treat as from nothing. */ @@ -903,30 +880,6 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) if (wp == NULL) goto unknown_pane; - /* If we have a session in TMUX, see if it has this pane. */ - s = cmd_find_try_TMUX(c); - if (s != NULL) { - RB_FOREACH(wl, winlinks, &s->windows) { - if (window_has_pane(wl->window, wp)) - break; - } - if (wl != NULL) { - log_debug("%s: session $%u has pane %%%u", __func__, - s->id, wp->id); - - fs->s = s; - fs->wl = s->curw; /* use current session */ - fs->w = fs->wl->window; - fs->wp = fs->w->active; /* use active pane */ - - cmd_find_log_state(__func__, fs); - return (0); - } else { - log_debug("%s: session $%u does not have pane %%%u", - __func__, s->id, wp->id); - } - } - /* * Don't have a session, or it doesn't have this pane. Try all * sessions. @@ -948,17 +901,7 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags) return (0); unknown_pane: - /* - * We're not running in a known pane, but maybe this client has TMUX - * in the environment. That'd give us a session. - */ - s = cmd_find_try_TMUX(c); - if (s != NULL) { - cmd_find_from_session(fs, s, flags); - return (0); - } - - /* Otherwise we need to guess. */ + /* We can't find the pane so need to guess. */ return (cmd_find_from_nothing(fs, flags)); } @@ -1006,6 +949,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, strlcat(tmp, "CANFAIL,", sizeof tmp); if (*tmp != '\0') tmp[strlen(tmp) - 1] = '\0'; + else + strlcat(tmp, "NONE", sizeof tmp); log_debug("%s: target %s, type %s, item %p, flags %s", __func__, target == NULL ? "none" : target, s, item, tmp); From 3e72e98e3bdf3e814d6d20060247bb5f5dc859bb Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 19:46:00 +0000 Subject: [PATCH 657/836] Add regular expression support for the format search, match and substitute modifiers. --- Makefile | 2 +- format.c | 110 +++++++++++++++++++++++++++++++++---------------------- regsub.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ tmux.1 | 46 ++++++++++++++++++----- tmux.h | 6 ++- window.c | 34 +++++++++++++---- 6 files changed, 234 insertions(+), 62 deletions(-) create mode 100644 regsub.c diff --git a/Makefile b/Makefile index 07d0b450eb..4efeb3f76f 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,6 @@ SRCS= alerts.c \ cmd-list-panes.c \ cmd-list-sessions.c \ cmd-list-windows.c \ - cmd-list.c \ cmd-load-buffer.c \ cmd-lock-server.c \ cmd-move-window.c \ @@ -96,6 +95,7 @@ SRCS= alerts.c \ paste.c \ proc.c \ procname.c \ + regsub.c \ resize.c \ screen-redraw.c \ screen-write.c \ diff --git a/format.c b/format.c index a2174e8c68..c2a911f8a5 100644 --- a/format.c +++ b/format.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -1247,7 +1248,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) cp++; /* Check single character modifiers with no arguments. */ - if (strchr("lmCbdtqETSWP<>", cp[0]) != NULL && + if (strchr("lbdtqETSWP<>", cp[0]) != NULL && format_is_end(cp[1])) { format_add_modifier(&list, count, cp, 1, NULL, 0); cp++; @@ -1268,7 +1269,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) } /* Now try single character with arguments. */ - if (strchr("s=", cp[0]) == NULL) + if (strchr("mCs=", cp[0]) == NULL) break; c = cp[0]; @@ -1329,39 +1330,67 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) return list; } -/* Perform substitution in string. */ +/* Match against an fnmatch(3) pattern or regular expression. */ static char * -format_substitute(const char *source, const char *from, const char *to) +format_match(struct format_modifier *fm, const char *pattern, const char *text) { - char *copy, *new; - const char *cp; - size_t fromlen, tolen, newlen, used; - - fromlen = strlen(from); - tolen = strlen(to); - - newlen = strlen(source) + 1; - copy = new = xmalloc(newlen); - - for (cp = source; *cp != '\0'; /* nothing */) { - if (strncmp(cp, from, fromlen) != 0) { - *new++ = *cp++; - continue; + const char *s = ""; + regex_t r; + int flags = 0; + + if (fm->argc >= 1) + s = fm->argv[0]; + if (strchr(s, 'r') == NULL) { + if (strchr(s, 'i') != NULL) + flags |= FNM_CASEFOLD; + if (fnmatch(pattern, text, flags) != 0) + return (xstrdup("0")); + } else { + flags = REG_EXTENDED|REG_NOSUB; + if (strchr(s, 'i') != NULL) + flags |= REG_ICASE; + if (regcomp(&r, pattern, flags) != 0) + return (xstrdup("0")); + if (regexec(&r, text, 0, NULL, 0) != 0) { + regfree(&r); + return (xstrdup("0")); } - used = new - copy; - - newlen += tolen; - copy = xrealloc(copy, newlen); + regfree(&r); + } + return (xstrdup("1")); +} - new = copy + used; - memcpy(new, to, tolen); +/* Perform substitution in string. */ +static char * +format_sub(struct format_modifier *fm, const char *text, const char *pattern, + const char *with) +{ + char *value; + int flags = REG_EXTENDED; + + if (fm->argc >= 3 && strchr(fm->argv[2], 'i') != NULL) + flags |= REG_ICASE; + value = regsub(pattern, with, text, flags); + if (value == NULL) + return (xstrdup(text)); + return (value); +} - new += tolen; - cp += fromlen; +/* Search inside pane. */ +static char * +format_search(struct format_modifier *fm, struct window_pane *wp, const char *s) +{ + int ignore = 0, regex = 0; + char *value; + + if (fm->argc >= 1) { + if (strchr(fm->argv[0], 'i') != NULL) + ignore = 1; + if (strchr(fm->argv[0], 'r') != NULL) + regex = 1; } - - *new = '\0'; - return (copy); + xasprintf(&value, "%u", window_pane_search(wp, s, regex, ignore)); + return (value); } /* Loop over sessions. */ @@ -1506,11 +1535,10 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char *copy0, *condition, *found, *new; char *value, *left, *right; size_t valuelen; - int modifiers = 0, limit = 0; + int modifiers = 0, limit = 0, j; struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; struct format_modifier *sub = NULL; u_int i, count; - int j; /* Make a copy of the key. */ copy = copy0 = xstrndup(key, keylen); @@ -1537,18 +1565,18 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, search = fm; break; case 's': - if (fm->argc != 2) + if (fm->argc < 2) break; sub = fm; break; case '=': - if (fm->argc != 1 && fm->argc != 2) + if (fm->argc < 1) break; limit = strtonum(fm->argv[0], INT_MIN, INT_MAX, &errptr); if (errptr != NULL) limit = 0; - if (fm->argc == 2 && fm->argv[1] != NULL) + if (fm->argc >= 2 && fm->argv[1] != NULL) marker = fm->argv[1]; break; case 'l': @@ -1619,7 +1647,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = xstrdup("0"); } else { format_log(ft, "search '%s' pane %%%u", copy, wp->id); - xasprintf(&value, "%u", window_pane_search(wp, copy)); + value = format_search(fm, wp, copy); } } else if (cmp != NULL) { /* Comparison of left and right. */ @@ -1671,12 +1699,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, value = xstrdup("1"); else value = xstrdup("0"); - } else if (strcmp(cmp->modifier, "m") == 0) { - if (fnmatch(left, right, 0) == 0) - value = xstrdup("1"); - else - value = xstrdup("0"); - } + } else if (strcmp(cmp->modifier, "m") == 0) + value = format_match(fm, left, right); free(right); free(left); @@ -1754,8 +1778,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Perform substitution if any. */ if (sub != NULL) { - new = format_substitute(value, sub->argv[0], sub->argv[1]); - format_log(ft, "substituted '%s' to '%s: %s", sub->argv[0], + new = format_sub(sub, value, sub->argv[0], sub->argv[1]); + format_log(ft, "substituted '%s' to '%s': %s", sub->argv[0], sub->argv[1], new); free(value); value = new; diff --git a/regsub.c b/regsub.c new file mode 100644 index 0000000000..53c83a8f13 --- /dev/null +++ b/regsub.c @@ -0,0 +1,98 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2019 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include + +#include "tmux.h" + +static void +regsub_copy(char **buf, size_t *len, const char *text, size_t start, + size_t end) +{ + size_t add = end - start; + + *buf = xrealloc(*buf, (*len) + add + 1); + memcpy((*buf) + *len, text + start, add); + (*len) += add; +} + +static void +regsub_expand(char **buf, size_t *len, const char *with, const char *text, + regmatch_t *m, u_int n) +{ + const char *cp; + u_int i; + + for (cp = with; *cp != '\0'; cp++) { + if (*cp == '\\') { + cp++; + if (*cp >= '0' && *cp <= '9') { + i = *cp - '0'; + if (i < n && m[i].rm_so != m[i].rm_eo) { + regsub_copy(buf, len, text, m[i].rm_so, + m[i].rm_eo); + continue; + } + } + } + *buf = xrealloc(*buf, (*len) + 2); + (*buf)[(*len)++] = *cp; + } +} + +char * +regsub(const char *pattern, const char *with, const char *text, int flags) +{ + regex_t r; + regmatch_t m[10]; + size_t start, end, len = 0; + char *buf = NULL; + + if (*text == '\0') + return (xstrdup("")); + if (regcomp(&r, pattern, flags) != 0) + return (NULL); + + start = 0; + end = strlen(text); + + while (start != end) { + m[0].rm_so = start; + m[0].rm_eo = end; + + if (regexec(&r, text, nitems(m), m, REG_STARTEND) != 0) { + regsub_copy(&buf, &len, text, start, end); + break; + } + if (m[0].rm_so == m[0].rm_eo) { + regsub_copy(&buf, &len, text, start, end); + break; + } + + regsub_copy(&buf, &len, text, start, m[0].rm_so); + regsub_expand(&buf, &len, with, text, m, nitems(m)); + start = m[0].rm_eo; + } + buf[len] = '\0'; + + regfree(&r); + return (buf); +} diff --git a/tmux.1 b/tmux.1 index 9f97422c14..21a30fff17 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4012,25 +4012,45 @@ if running on .Ql myhost , otherwise by .Ql 0 . -An -.Ql m -specifies an -.Xr fnmatch 3 -comparison where the first argument is the pattern and the second the string to -compare, for example -.Ql #{m:*foo*,#{host}} . .Ql || and .Ql && evaluate to true if either or both of two comma-separated alternatives are true, for example .Ql #{||:#{pane_in_mode},#{alternate_on}} . +.Pp +An +.Ql m +specifies an +.Xr fnmatch 3 +or regular expression comparison. +The first argument is the pattern and the second the string to compare. +An optional third argument specifies flags: +.Ql r +means the pattern is a regular expression instead of the default +.Xr fnmatch 3 +pattern, and +.Ql i +means to ignore case. +For example: +.Ql #{m:*foo*,#{host}} +or +.Ql #{m/ri:^A,MYVAR} . A .Ql C performs a search for an .Xr fnmatch 3 -pattern in the pane content and evaluates to zero if not found, or a line -number if found. +pattern or regular expression in the pane content and evaluates to zero if not +found, or a line number if found. +Like +.Ql m , +a +.Ql r +flag means search for a regular expression and +.Ql i +ignores case. +For example: +.Ql #{C/r:^Start} .Pp A limit may be placed on the length of the resultant string by prefixing it by an @@ -4103,6 +4123,14 @@ will substitute with .Ql bar throughout. +The first argument may be an extended regular expression and a final argument may be +.Ql i +to ignore case, for example +.Ql s/a(.)/\1x/i: +would change +.Ql abABab +into +.Ql bxBxbx . .Pp In addition, the first line of a shell command's output may be inserted using .Ql #() . diff --git a/tmux.h b/tmux.h index 76bf8303a3..3324acba06 100644 --- a/tmux.h +++ b/tmux.h @@ -2396,7 +2396,8 @@ void window_pane_key(struct window_pane *, struct client *, struct session *, struct winlink *, key_code, struct mouse_event *); int window_pane_visible(struct window_pane *); -u_int window_pane_search(struct window_pane *, const char *); +u_int window_pane_search(struct window_pane *, const char *, int, + int); const char *window_printable_flags(struct winlink *); struct window_pane *window_pane_find_up(struct window_pane *); struct window_pane *window_pane_find_down(struct window_pane *); @@ -2631,4 +2632,7 @@ int style_is_default(struct style *); struct winlink *spawn_window(struct spawn_context *, char **); struct window_pane *spawn_pane(struct spawn_context *, char **); +/* regsub.c */ +char *regsub(const char *, const char *, const char *, int); + #endif /* TMUX_H */ diff --git a/window.c b/window.c index 781ff30c99..e89cf96c62 100644 --- a/window.c +++ b/window.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -1206,24 +1207,41 @@ window_pane_visible(struct window_pane *wp) } u_int -window_pane_search(struct window_pane *wp, const char *searchstr) +window_pane_search(struct window_pane *wp, const char *term, int regex, + int ignore) { struct screen *s = &wp->base; - char *newsearchstr, *line; + regex_t r; + char *new = NULL, *line; u_int i; + int flags = 0, found; - xasprintf(&newsearchstr, "*%s*", searchstr); + if (!regex) { + if (ignore) + flags |= FNM_CASEFOLD; + xasprintf(&new, "*%s*", term); + } else { + if (ignore) + flags |= REG_ICASE; + if (regcomp(&r, term, flags|REG_EXTENDED) != 0) + return (0); + } for (i = 0; i < screen_size_y(s); i++) { line = grid_view_string_cells(s->grid, 0, i, screen_size_x(s)); - if (fnmatch(newsearchstr, line, 0) == 0) { - free(line); - break; - } + if (!regex) + found = (fnmatch(new, line, 0) == 0); + else + found = (regexec(&r, line, 0, NULL, 0) == 0); free(line); + if (found) + break; } + if (!regex) + free(new); + else + regfree(&r); - free(newsearchstr); if (i == screen_size_y(s)) return (0); return (i + 1); From 26b9a8e49b7eee7b7c05f85c731f5829e64c507c Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 20:38:05 +0000 Subject: [PATCH 658/836] Set the cursor x at the same time as changing the y or the end of line marker may not be redrawn. --- window-copy.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/window-copy.c b/window-copy.c index d81073bffe..a7cb5dfa28 100644 --- a/window-copy.c +++ b/window-copy.c @@ -3027,8 +3027,8 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only) if (data->lineflag == LINE_SEL_LEFT_RIGHT && oy == data->sely) window_copy_other_end(wme); - data->cx = data->lastcx; if (scroll_only || data->cy == 0) { + data->cx = data->lastcx; window_copy_scroll_down(wme, 1); if (scroll_only) { if (data->cy == screen_size_y(s) - 1) @@ -3037,7 +3037,7 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only) window_copy_redraw_lines(wme, data->cy, 2); } } else { - window_copy_update_cursor(wme, data->cx, data->cy - 1); + window_copy_update_cursor(wme, data->lastcx, data->cy - 1); if (window_copy_update_selection(wme, 1)) { if (data->cy == screen_size_y(s) - 1) window_copy_redraw_lines(wme, data->cy, 1); @@ -3077,13 +3077,13 @@ window_copy_cursor_down(struct window_mode_entry *wme, int scroll_only) if (data->lineflag == LINE_SEL_RIGHT_LEFT && oy == data->endsely) window_copy_other_end(wme); - data->cx = data->lastcx; if (scroll_only || data->cy == screen_size_y(s) - 1) { + data->cx = data->lastcx; window_copy_scroll_up(wme, 1); if (scroll_only && data->cy > 0) window_copy_redraw_lines(wme, data->cy - 1, 2); } else { - window_copy_update_cursor(wme, data->cx, data->cy + 1); + window_copy_update_cursor(wme, data->lastcx, data->cy + 1); if (window_copy_update_selection(wme, 1)) window_copy_redraw_lines(wme, data->cy - 1, 2); } From b8a9c740bbb0f28ce7cbfeeec584e0719950b8a8 Mon Sep 17 00:00:00 2001 From: jmc Date: Thu, 13 Jun 2019 21:04:21 +0000 Subject: [PATCH 659/836] tweak previous; --- tmux.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.1 b/tmux.1 index 21a30fff17..e5d837daa3 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4044,7 +4044,7 @@ pattern or regular expression in the pane content and evaluates to zero if not found, or a line number if found. Like .Ql m , -a +an .Ql r flag means search for a regular expression and .Ql i @@ -4126,7 +4126,7 @@ throughout. The first argument may be an extended regular expression and a final argument may be .Ql i to ignore case, for example -.Ql s/a(.)/\1x/i: +.Ql s/a(.)/\e1x/i: would change .Ql abABab into From eef11b64e1a41db349b1a8a54b2f61e460483b07 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 21:24:09 +0000 Subject: [PATCH 660/836] Do not crash if the environment variable is present but empty. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index c2a911f8a5..e1a6360ad6 100644 --- a/format.c +++ b/format.c @@ -1097,7 +1097,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) envent = environ_find(ft->s->environ, key); if (envent == NULL) envent = environ_find(global_environ, key); - if (envent != NULL) { + if (envent != NULL && envent->value != NULL) { found = xstrdup(envent->value); goto found; } From f35f15b1077eea1d16037d2b226bf7fceb58b8fa Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 21:44:13 +0000 Subject: [PATCH 661/836] Use the right client when working out where to save or load the buffer, reported by kn@. --- cmd-load-buffer.c | 2 +- cmd-save-buffer.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 47cb0ca223..3e6690939b 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -93,7 +93,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_WAIT); } - file = server_client_get_path(c, path); + file = server_client_get_path(item->client, path); free(path); f = fopen(file, "rb"); diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index f6ac93a637..a8d43f87ce 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -105,7 +105,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'a')) flags = "ab"; - file = server_client_get_path(c, path); + file = server_client_get_path(item->client, path); free(path); f = fopen(file, flags); From f31847db624806b2d4e4647238bc3b37b737b84f Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 10:33:55 +0100 Subject: [PATCH 662/836] Improve description of #{. --- CHANGES | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 3faf716f7c..b5d83e5087 100644 --- a/CHANGES +++ b/CHANGES @@ -15,9 +15,9 @@ CHANGES FROM 2.9 to 3.0 configuration files shouldn't need to be changed but there are the following differences: - 1) Formats now need to be quoted, so a bare #{...} becomes "#{...}". This - includes #{ which may previously have looked like a comment (for example at - the start of a line). + 1) #{ is now parsed as a format and is only valid after directives (%if, + %elif, %else), so comments starting with #{ are now syntax errors (adding + an extra # or a space after the # is an easy way to fix this). 2) A \ on its own must be escaped or quoted as either \\ or '\' (the latter works on older tmux versions). From ebc9dcb3bb71c2c8640466d84897971648a43845 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 12:40:35 +0100 Subject: [PATCH 663/836] Add a bit to {}. --- CHANGES | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index b5d83e5087..751b5210ed 100644 --- a/CHANGES +++ b/CHANGES @@ -5,7 +5,9 @@ CHANGES FROM 2.9 to 3.0 take other commands as string arguments to be expressed more clearly and without additional escaping. - A literal { and } must now be escaped or quoted, for example '{' and '}'. + A literal { and } or a string containing { or } must now be escaped or + quoted, for example '{' and '}' instead of { or }, or 'X#{foo}' instead of + X#{foo}. * New <, >, <= and >= comparison operators for formats. From 45203582ff8708042c5f4f7134ad7d4ec71d2050 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Jun 2019 12:04:11 +0000 Subject: [PATCH 664/836] A couple of minor parser changes around conditions: 1) only treat #{ specially after a condition, otherwise as a comment (which is more as most people expect) 2) allow formats to be quoted after a condition. --- cmd-parse.y | 26 ++++++++++++++++++++------ tmux.1 | 4 ++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index a7c12f62f3..1a6af3e76e 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -59,6 +59,7 @@ struct cmd_parse_state { size_t len; size_t off; + int condition; int eol; int eof; struct cmd_parse_input *input; @@ -104,7 +105,7 @@ static void cmd_parse_print_commands(struct cmd_parse_input *, u_int, %token ENDIF %token FORMAT TOKEN EQUALS -%type argument expanded +%type argument expanded format %type arguments %type if_open if_elif %type elif elif1 @@ -160,7 +161,16 @@ statement : condition } } -expanded : FORMAT +format : FORMAT + { + $$ = $1; + } + | TOKEN + { + $$ = $1; + } + +expanded : format { struct cmd_parse_state *ps = &parse_state; struct cmd_parse_input *pi = ps->input; @@ -967,12 +977,15 @@ yylex(void) { struct cmd_parse_state *ps = &parse_state; char *token, *cp; - int ch, next; + int ch, next, condition; if (ps->eol) ps->input->line++; ps->eol = 0; + condition = ps->condition; + ps->condition = 0; + for (;;) { ch = yylex_getc(); @@ -1012,11 +1025,11 @@ yylex(void) if (ch == '#') { /* - * #{ opens a format; anything else is a comment, - * ignore up to the end of the line. + * #{ after a condition opens a format; anything else + * is a comment, ignore up to the end of the line. */ next = yylex_getc(); - if (next == '{') { + if (condition && next == '{') { yylval.token = yylex_format(); if (yylval.token == NULL) return (ERROR); @@ -1043,6 +1056,7 @@ yylex(void) } if (*cp == '\0') return (TOKEN); + ps->condition = 1; if (strcmp(yylval.token, "%if") == 0) { free(yylval.token); return (IF); diff --git a/tmux.1 b/tmux.1 index e5d837daa3..041097b6bb 100644 --- a/tmux.1 +++ b/tmux.1 @@ -582,9 +582,9 @@ or .Ql %endif . For example: .Bd -literal -offset indent -%if #{==:#{host},myhost} +%if "#{==:#{host},myhost}" set -g status-style bg=red -%elif #{==:#{host},myotherhost} +%elif "#{==:#{host},myotherhost}" set -g status-style bg=green %else set -g status-style bg=blue From d1d3bbb458b50ec455d65774d5c6669546b3b4ca Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Jun 2019 13:34:45 +0000 Subject: [PATCH 665/836] Show filename with -v for source-file. --- cmd-parse.y | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd-parse.y b/cmd-parse.y index 1a6af3e76e..1dbc27a7ad 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -517,7 +517,10 @@ cmd_parse_print_commands(struct cmd_parse_input *pi, u_int line, if (pi->item != NULL && (pi->flags & CMD_PARSE_VERBOSE)) { s = cmd_list_print(cmdlist, 0); - cmdq_print(pi->item, "%u: %s", line, s); + if (pi->file != NULL) + cmdq_print(pi->item, "%s:%u: %s", pi->file, line, s); + else + cmdq_print(pi->item, "%u: %s", line, s); free(s); } } From 7bb8ab1c0efefebcaeb25c5694bc8ac6506a7396 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 12:40:35 +0100 Subject: [PATCH 666/836] Add a bit to {}. --- CHANGES | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index abd91a806f..1d0338772d 100644 --- a/CHANGES +++ b/CHANGES @@ -12,7 +12,9 @@ CHANGES FROM 2.9 to 3.0 take other commands as string arguments to be expressed more clearly and without additional escaping. - A literal { and } must now be escaped or quoted, for example '{' and '}'. + A literal { and } or a string containing { or } must now be escaped or + quoted, for example '{' and '}' instead of { or }, or 'X#{foo}' instead of + X#{foo}. * New <, >, <= and >= comparison operators for formats. From 8da756c4f09d436c130e702b5e66d853fe390d67 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 16:02:34 +0100 Subject: [PATCH 667/836] Restore missing functions. --- cmd.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/cmd.c b/cmd.c index 81073ec156..74d2f5efef 100644 --- a/cmd.c +++ b/cmd.c @@ -204,6 +204,8 @@ const struct cmd_entry *cmd_table[] = { NULL }; +static u_int cmd_list_next_group = 1; + void printflike(3, 4) cmd_log_argv(int argc, char **argv, const char *fmt, ...) { @@ -501,6 +503,83 @@ cmd_print(struct cmd *cmd) return (out); } +struct cmd_list * +cmd_list_new(void) +{ + struct cmd_list *cmdlist; + + cmdlist = xcalloc(1, sizeof *cmdlist); + cmdlist->references = 1; + cmdlist->group = cmd_list_next_group++; + TAILQ_INIT(&cmdlist->list); + return (cmdlist); +} + +void +cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) +{ + cmd->group = cmdlist->group; + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); +} + +void +cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) +{ + struct cmd *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { + TAILQ_REMOVE(&from->list, cmd, qentry); + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); + } + cmdlist->group = cmd_list_next_group++; +} + +void +cmd_list_free(struct cmd_list *cmdlist) +{ + struct cmd *cmd, *cmd1; + + if (--cmdlist->references != 0) + return; + + TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { + TAILQ_REMOVE(&cmdlist->list, cmd, qentry); + cmd_free(cmd); + } + + free(cmdlist); +} + +char * +cmd_list_print(struct cmd_list *cmdlist, int escaped) +{ + struct cmd *cmd; + char *buf, *this; + size_t len; + + len = 1; + buf = xcalloc(1, len); + + TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + this = cmd_print(cmd); + + len += strlen(this) + 4; + buf = xrealloc(buf, len); + + strlcat(buf, this, len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } + + free(this); + } + + return (buf); +} + /* Adjust current mouse position for a pane. */ int cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, From 0a94dbe051042cba644240ab0361319744ee4875 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Jun 2019 12:04:11 +0000 Subject: [PATCH 668/836] A couple of minor parser changes around conditions: 1) only treat #{ specially after a condition, otherwise as a comment (which is more as most people expect) 2) allow formats to be quoted after a condition. --- cmd-parse.y | 26 ++++++++++++++++++++------ tmux.1 | 4 ++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 6feeb35a25..9a2c2cfdf5 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -59,6 +59,7 @@ struct cmd_parse_state { size_t len; size_t off; + int condition; int eol; int eof; struct cmd_parse_input *input; @@ -102,7 +103,7 @@ static void cmd_parse_free_commands(struct cmd_parse_commands *); %token ENDIF %token FORMAT TOKEN EQUALS -%type argument expanded +%type argument expanded format %type arguments %type if_open if_elif %type elif elif1 @@ -158,7 +159,16 @@ statement : condition } } -expanded : FORMAT +format : FORMAT + { + $$ = $1; + } + | TOKEN + { + $$ = $1; + } + +expanded : format { struct cmd_parse_state *ps = &parse_state; struct cmd_parse_input *pi = ps->input; @@ -950,12 +960,15 @@ yylex(void) { struct cmd_parse_state *ps = &parse_state; char *token, *cp; - int ch, next; + int ch, next, condition; if (ps->eol) ps->input->line++; ps->eol = 0; + condition = ps->condition; + ps->condition = 0; + for (;;) { ch = yylex_getc(); @@ -995,11 +1008,11 @@ yylex(void) if (ch == '#') { /* - * #{ opens a format; anything else is a comment, - * ignore up to the end of the line. + * #{ after a condition opens a format; anything else + * is a comment, ignore up to the end of the line. */ next = yylex_getc(); - if (next == '{') { + if (condition && next == '{') { yylval.token = yylex_format(); if (yylval.token == NULL) return (ERROR); @@ -1026,6 +1039,7 @@ yylex(void) } if (*cp == '\0') return (TOKEN); + ps->condition = 1; if (strcmp(yylval.token, "%if") == 0) { free(yylval.token); return (IF); diff --git a/tmux.1 b/tmux.1 index 263aecbc75..286192a339 100644 --- a/tmux.1 +++ b/tmux.1 @@ -583,9 +583,9 @@ or .Ql %endif . For example: .Bd -literal -offset indent -%if #{==:#{host},myhost} +%if "#{==:#{host},myhost}" set -g status-style bg=red -%elif #{==:#{host},myotherhost} +%elif "#{==:#{host},myotherhost}" set -g status-style bg=green %else set -g status-style bg=blue From a924694820c631d7d9b1b13ad48ce4fc0a60df8b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 21:44:13 +0000 Subject: [PATCH 669/836] Use the right client when working out where to save or load the buffer, reported by kn@. --- cmd-load-buffer.c | 2 +- cmd-save-buffer.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 47cb0ca223..3e6690939b 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -93,7 +93,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_WAIT); } - file = server_client_get_path(c, path); + file = server_client_get_path(item->client, path); free(path); f = fopen(file, "rb"); diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index 938bb3d69c..3395612f40 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -104,7 +104,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'a')) flags = "ab"; - file = server_client_get_path(c, path); + file = server_client_get_path(item->client, path); free(path); f = fopen(file, flags); From 52b82742850173fa9913538a010faa98c9f9c6e1 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 13 Jun 2019 21:24:09 +0000 Subject: [PATCH 670/836] Do not crash if the environment variable is present but empty. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index 5ca970b74a..3d649a2999 100644 --- a/format.c +++ b/format.c @@ -1112,7 +1112,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers) envent = environ_find(ft->s->environ, key); if (envent == NULL) envent = environ_find(global_environ, key); - if (envent != NULL) { + if (envent != NULL && envent->value != NULL) { found = xstrdup(envent->value); goto found; } From ae83a5b0105942abdb154502745897cdc8a15d4d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 16:09:49 +0100 Subject: [PATCH 671/836] Add to CHANGES. --- CHANGES | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 1d0338772d..59c111578d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,24 @@ CHANGES FROM 3.0 to X.X +* Resize panes lazily - do not resize unless they are in an attached, active + window. + +* Add regular expression support for the format search, match and substitute + modifiers and make them able to ignore case. + +* Do not use $TMUX to find the session because for windows in multiple sessions + it is wrong as often as it is right, and for windows in one session it is + pointless. Instead use TMUX_PANE if it is present. + +* Do not always resize the window back to its original size after applying a + layout, keep it at the layout size until it must be resized (for example when + attached and window-size is not manual). + * Add new-session -X and attach-session -x to send SIGHUP to parent when detaching (like detach-client -P). -* Support for octal escapes in strings (such as \007). +* Support for octal escapes in strings (such as \007) and improve list-keys + output so it parses correctly if copied into a configuration file. CHANGES FROM 2.9 to 3.0 From 31cb95893eaae01c32aa444564f255100c05b85e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 16:10:27 +0100 Subject: [PATCH 672/836] #{ is no longer special. --- CHANGES | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 751b5210ed..3563bcbc4a 100644 --- a/CHANGES +++ b/CHANGES @@ -13,16 +13,9 @@ CHANGES FROM 2.9 to 3.0 * Improve escaping of special characters in list-keys output. -* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). Most - configuration files shouldn't need to be changed but there are the following - differences: - - 1) #{ is now parsed as a format and is only valid after directives (%if, - %elif, %else), so comments starting with #{ are now syntax errors (adding - an extra # or a space after the # is an easy way to fix this). - - 2) A \ on its own must be escaped or quoted as either \\ or '\' (the latter - works on older tmux versions). +* INCOMPATIBLE: tmux's configuration parsing has changed to use yacc(1). There + is one incompatible change: a \ on its own must be escaped or quoted as + either \\ or '\' (the latter works on older tmux versions). Entirely the same parser is now used for parsing the configuration file and for string commands. This means that constructs previously only From c22470bd14ba1cdc523e0bfbb0180c75a9db1819 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Jun 2019 16:17:34 +0100 Subject: [PATCH 673/836] 3.0-rc3. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 8ff6d16e59..8473a0d29e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 3.0-rc2) +AC_INIT([tmux], 3.0-rc3) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From c95cd9ed5e5e89e1ed467dbd5b7d8c80f672a5a1 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Jun 2019 15:35:58 +0000 Subject: [PATCH 674/836] Do not loop forever if a menu item contains invisible characters, reported by Thomas Sattler. --- format-draw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index f8882ac2f7..b589ca5e93 100644 --- a/format-draw.c +++ b/format-draw.c @@ -791,7 +791,8 @@ format_width(const char *expanded) } else if (*cp > 0x1f && *cp < 0x7f) { width++; cp++; - } + } else + cp++; } return (width); } From 03da0ced46e0ddcfbdcc6d580d906f47279cabcd Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 15 Jun 2019 06:33:48 +0000 Subject: [PATCH 675/836] Use the right format modifier when comparing, and remove a couple of unused variables. --- format.c | 2 +- layout-custom.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/format.c b/format.c index e1a6360ad6..75521fd0eb 100644 --- a/format.c +++ b/format.c @@ -1700,7 +1700,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, else value = xstrdup("0"); } else if (strcmp(cmp->modifier, "m") == 0) - value = format_match(fm, left, right); + value = format_match(cmp, left, right); free(right); free(left); diff --git a/layout-custom.c b/layout-custom.c index 4d9e818b84..bedcaf1020 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -122,7 +122,7 @@ layout_parse(struct window *w, const char *layout) { struct layout_cell *lc, *lcchild; struct window_pane *wp; - u_int npanes, ncells, sx, sy; + u_int npanes, ncells; u_short csum; /* Check validity. */ @@ -153,8 +153,7 @@ layout_parse(struct window *w, const char *layout) layout_destroy_cell(w, lcchild, &lc); } - /* Save the old window size and resize to the layout size. */ - sx = w->sx; sy = w->sy; + /* Resize to the layout size. */ window_resize(w, lc->sx, lc->sy); /* Destroy the old layout and swap to the new. */ From 9ae658983c452b21bcdbd7cbcf5ad23dad95f036 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Jun 2019 15:35:58 +0000 Subject: [PATCH 676/836] Do not loop forever if a menu item contains invisible characters, reported by Thomas Sattler. --- format-draw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index f8882ac2f7..b589ca5e93 100644 --- a/format-draw.c +++ b/format-draw.c @@ -791,7 +791,8 @@ format_width(const char *expanded) } else if (*cp > 0x1f && *cp < 0x7f) { width++; cp++; - } + } else + cp++; } return (width); } From 08f55414e1a0f5599fa7d62db711fbfa4e4a80b2 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 15 Jun 2019 07:42:49 +0100 Subject: [PATCH 677/836] Remove cmd-list.c line in master. --- Makefile.am | 1 - cmd-list.c | 103 ---------------------------------------------------- cmd.c | 79 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 104 deletions(-) delete mode 100644 cmd-list.c diff --git a/Makefile.am b/Makefile.am index ceaae6adc0..2b88892f8c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -88,7 +88,6 @@ dist_tmux_SOURCES = \ cmd-list-panes.c \ cmd-list-sessions.c \ cmd-list-windows.c \ - cmd-list.c \ cmd-load-buffer.c \ cmd-lock-server.c \ cmd-move-window.c \ diff --git a/cmd-list.c b/cmd-list.c deleted file mode 100644 index 82ffe55c02..0000000000 --- a/cmd-list.c +++ /dev/null @@ -1,103 +0,0 @@ -/* $OpenBSD$ */ - -/* - * Copyright (c) 2009 Nicholas Marriott - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#include -#include - -#include "tmux.h" - -static u_int cmd_list_next_group = 1; - -struct cmd_list * -cmd_list_new(void) -{ - struct cmd_list *cmdlist; - - cmdlist = xcalloc(1, sizeof *cmdlist); - cmdlist->references = 1; - cmdlist->group = cmd_list_next_group++; - TAILQ_INIT(&cmdlist->list); - return (cmdlist); -} - -void -cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) -{ - cmd->group = cmdlist->group; - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); -} - -void -cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) -{ - struct cmd *cmd, *cmd1; - - TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { - TAILQ_REMOVE(&from->list, cmd, qentry); - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); - } - cmdlist->group = cmd_list_next_group++; -} - -void -cmd_list_free(struct cmd_list *cmdlist) -{ - struct cmd *cmd, *cmd1; - - if (--cmdlist->references != 0) - return; - - TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { - TAILQ_REMOVE(&cmdlist->list, cmd, qentry); - cmd_free(cmd); - } - - free(cmdlist); -} - -char * -cmd_list_print(struct cmd_list *cmdlist, int escaped) -{ - struct cmd *cmd; - char *buf, *this; - size_t len; - - len = 1; - buf = xcalloc(1, len); - - TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { - this = cmd_print(cmd); - - len += strlen(this) + 4; - buf = xrealloc(buf, len); - - strlcat(buf, this, len); - if (TAILQ_NEXT(cmd, qentry) != NULL) { - if (escaped) - strlcat(buf, " \\; ", len); - else - strlcat(buf, " ; ", len); - } - - free(this); - } - - return (buf); -} diff --git a/cmd.c b/cmd.c index 81073ec156..74d2f5efef 100644 --- a/cmd.c +++ b/cmd.c @@ -204,6 +204,8 @@ const struct cmd_entry *cmd_table[] = { NULL }; +static u_int cmd_list_next_group = 1; + void printflike(3, 4) cmd_log_argv(int argc, char **argv, const char *fmt, ...) { @@ -501,6 +503,83 @@ cmd_print(struct cmd *cmd) return (out); } +struct cmd_list * +cmd_list_new(void) +{ + struct cmd_list *cmdlist; + + cmdlist = xcalloc(1, sizeof *cmdlist); + cmdlist->references = 1; + cmdlist->group = cmd_list_next_group++; + TAILQ_INIT(&cmdlist->list); + return (cmdlist); +} + +void +cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) +{ + cmd->group = cmdlist->group; + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); +} + +void +cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) +{ + struct cmd *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { + TAILQ_REMOVE(&from->list, cmd, qentry); + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); + } + cmdlist->group = cmd_list_next_group++; +} + +void +cmd_list_free(struct cmd_list *cmdlist) +{ + struct cmd *cmd, *cmd1; + + if (--cmdlist->references != 0) + return; + + TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { + TAILQ_REMOVE(&cmdlist->list, cmd, qentry); + cmd_free(cmd); + } + + free(cmdlist); +} + +char * +cmd_list_print(struct cmd_list *cmdlist, int escaped) +{ + struct cmd *cmd; + char *buf, *this; + size_t len; + + len = 1; + buf = xcalloc(1, len); + + TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + this = cmd_print(cmd); + + len += strlen(this) + 4; + buf = xrealloc(buf, len); + + strlcat(buf, this, len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } + + free(this); + } + + return (buf); +} + /* Adjust current mouse position for a pane. */ int cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, From 748633c887d7ec1c86a77610c1e088985cc7f839 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 15 Jun 2019 07:45:41 +0100 Subject: [PATCH 678/836] Remove a stray abort. --- input.c | 1 - 1 file changed, 1 deletion(-) diff --git a/input.c b/input.c index 4095c05d18..e54b5ac0e6 100644 --- a/input.c +++ b/input.c @@ -2409,7 +2409,6 @@ input_osc_52(struct input_ctx *ictx, const char *p) outlen = 4 * ((len + 2) / 3) + 1; out = xmalloc(outlen); if ((outlen = b64_ntop(buf, len, out, outlen)) == -1) { - abort(); free(out); return; } From 9272fe36e2e36789342337d81914008826499941 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 18 Jun 2019 11:08:42 +0000 Subject: [PATCH 679/836] Add a cmdq_continue function rather than twiddling the flag directly. --- cfg.c | 2 +- cmd-display-panes.c | 2 +- cmd-if-shell.c | 2 +- cmd-load-buffer.c | 2 +- cmd-queue.c | 7 +++++++ cmd-run-shell.c | 2 +- cmd-wait-for.c | 8 ++++---- menu.c | 2 +- tmux.h | 1 + window.c | 2 +- 10 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cfg.c b/cfg.c index c79150de25..286ed4604c 100644 --- a/cfg.c +++ b/cfg.c @@ -53,7 +53,7 @@ cfg_done(__unused struct cmdq_item *item, __unused void *data) cfg_show_causes(RB_MIN(sessions, &sessions)); if (cfg_item != NULL) - cfg_item->flags &= ~CMDQ_WAITING; + cmdq_continue(cfg_item); status_prompt_load_history(); diff --git a/cmd-display-panes.c b/cmd-display-panes.c index aeeb6936bc..aa665f08b3 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -188,7 +188,7 @@ cmd_display_panes_free(struct client *c) struct cmd_display_panes_data *cdata = c->overlay_data; if (cdata->item != NULL) - cdata->item->flags &= ~CMDQ_WAITING; + cmdq_continue(cdata->item); free(cdata->command); free(cdata); } diff --git a/cmd-if-shell.c b/cmd-if-shell.c index f795575a59..a992602cb2 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -196,7 +196,7 @@ cmd_if_shell_callback(struct job *job) out: if (cdata->item != NULL) - cdata->item->flags &= ~CMDQ_WAITING; + cmdq_continue(cdata->item); } static void diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 3e6690939b..cdf44bf7e1 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -176,7 +176,7 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data) free(cause); } out: - cdata->item->flags &= ~CMDQ_WAITING; + cmdq_continue(cdata->item); free(cdata->bufname); free(cdata); diff --git a/cmd-queue.c b/cmd-queue.c index 1ee4350850..ef68d5d539 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -156,6 +156,13 @@ cmdq_insert_hook(struct session *s, struct cmdq_item *item, free(name); } +/* Continue processing command queue. */ +void +cmdq_continue(struct cmdq_item *item) +{ + item->flags &= ~CMDQ_WAITING; +} + /* Remove an item. */ static void cmdq_remove(struct cmdq_item *item) diff --git a/cmd-run-shell.c b/cmd-run-shell.c index c9a478c7da..2f45f49256 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -155,7 +155,7 @@ cmd_run_shell_callback(struct job *job) free(msg); if (cdata->item != NULL) - cdata->item->flags &= ~CMDQ_WAITING; + cmdq_continue(cdata->item); } static void diff --git a/cmd-wait-for.c b/cmd-wait-for.c index 33600edad3..4f438a7f27 100644 --- a/cmd-wait-for.c +++ b/cmd-wait-for.c @@ -153,7 +153,7 @@ cmd_wait_for_signal(__unused struct cmdq_item *item, const char *name, log_debug("signal wait channel %s, with waiters", wc->name); TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { - wi->item->flags &= ~CMDQ_WAITING; + cmdq_continue(wi->item); TAILQ_REMOVE(&wc->waiters, wi, entry); free(wi); @@ -229,7 +229,7 @@ cmd_wait_for_unlock(struct cmdq_item *item, const char *name, } if ((wi = TAILQ_FIRST(&wc->lockers)) != NULL) { - wi->item->flags &= ~CMDQ_WAITING; + cmdq_continue(wi->item); TAILQ_REMOVE(&wc->lockers, wi, entry); free(wi); } else { @@ -248,13 +248,13 @@ cmd_wait_for_flush(void) RB_FOREACH_SAFE(wc, wait_channels, &wait_channels, wc1) { TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { - wi->item->flags &= ~CMDQ_WAITING; + cmdq_continue(wi->item); TAILQ_REMOVE(&wc->waiters, wi, entry); free(wi); } wc->woken = 1; TAILQ_FOREACH_SAFE(wi, &wc->lockers, entry, wi1) { - wi->item->flags &= ~CMDQ_WAITING; + cmdq_continue(wi->item); TAILQ_REMOVE(&wc->lockers, wi, entry); free(wi); } diff --git a/menu.c b/menu.c index fd35399bdb..cc21c79631 100644 --- a/menu.c +++ b/menu.c @@ -161,7 +161,7 @@ menu_free_cb(struct client *c) struct menu_data *md = c->overlay_data; if (md->item != NULL) - md->item->flags &= ~CMDQ_WAITING; + cmdq_continue(md->item); if (md->cb != NULL) md->cb(md->menu, UINT_MAX, KEYC_NONE, md->data); diff --git a/tmux.h b/tmux.h index 3324acba06..cc5e55c0ae 100644 --- a/tmux.h +++ b/tmux.h @@ -2037,6 +2037,7 @@ void cmdq_insert_after(struct cmdq_item *, struct cmdq_item *); void cmdq_append(struct client *, struct cmdq_item *); void cmdq_insert_hook(struct session *, struct cmdq_item *, struct cmd_find_state *, const char *, ...); +void cmdq_continue(struct cmdq_item *); void printflike(3, 4) cmdq_format(struct cmdq_item *, const char *, const char *, ...); u_int cmdq_next(struct client *); diff --git a/window.c b/window.c index e89cf96c62..e7941c7040 100644 --- a/window.c +++ b/window.c @@ -1512,7 +1512,7 @@ window_pane_input_callback(struct client *c, int closed, void *data) c->stdin_callback = NULL; server_client_unref(c); - cdata->item->flags &= ~CMDQ_WAITING; + cmdq_continue(cdata->item); free(cdata); return; From 250fdd08bea74f47fc9a8962d5688db353896921 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 18 Jun 2019 11:17:40 +0000 Subject: [PATCH 680/836] Handle comments more correctly inside {}, from Avi Halachmi. --- cmd-parse.y | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 1dbc27a7ad..6d2b970c46 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1338,8 +1338,8 @@ static int yylex_token_brace(char **buf, size_t *len) { struct cmd_parse_state *ps = &parse_state; - int ch, nesting = 1, escape = 0, quote = '\0'; - int lines = 0; + int ch, lines = 0, nesting = 1, escape = 0; + int quote = '\0', token = 0; /* * Extract a string up to the matching unquoted '}', including newlines @@ -1349,6 +1349,10 @@ yylex_token_brace(char **buf, size_t *len) * depth, we scan the input as if it was a tmux config file, and ignore * braces which would be considered quoted, escaped, or in a comment. * + * We update the token state after every character because '#' begins a + * comment only when it begins a token. For simplicity, we treat an + * unquoted directive format as comment. + * * The result is verbatim copy of the input excluding the final brace. */ @@ -1368,6 +1372,8 @@ yylex_token_brace(char **buf, size_t *len) ch == '\n' || ch == '\\')) { escape = 0; + if (ch != '\n') + token = 1; continue; } @@ -1383,7 +1389,7 @@ yylex_token_brace(char **buf, size_t *len) /* A newline always resets to unquoted. */ if (ch == '\n') { - quote = 0; + quote = token = 0; continue; } @@ -1394,33 +1400,47 @@ yylex_token_brace(char **buf, size_t *len) */ if (ch == quote && quote != '#') quote = 0; - } else { + token = 1; /* token continues regardless */ + } else { /* Not inside quotes or comment. */ switch (ch) { case '"': case '\'': case '#': - /* Beginning of quote or comment. */ - quote = ch; + /* Beginning of quote or maybe comment. */ + if (ch != '#' || !token) + quote = ch; + token = 1; + break; + case ' ': + case '\t': + case ';': + /* Delimiter - token resets. */ + token = 0; break; case '{': nesting++; + token = 0; /* new commands set - token resets */ break; case '}': nesting--; + token = 1; /* same as after quotes */ if (nesting == 0) { (*len)--; /* remove closing } */ ps->input->line += lines; return (1); } break; + default: + token = 1; + break; } } } /* - * Update line count after error as reporting the opening line - * is more useful than EOF. + * Update line count after error as reporting the opening line is more + * useful than EOF. */ yyerror("unterminated brace string"); ps->input->line += lines; From df07723e2093762d1cffc1a3f542e20853c42101 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 18 Jun 2019 19:42:52 +0100 Subject: [PATCH 681/836] Add a config. --- .../99749670b62bcb99a9b2e3d59708e357.conf | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 regress/conf/99749670b62bcb99a9b2e3d59708e357.conf diff --git a/regress/conf/99749670b62bcb99a9b2e3d59708e357.conf b/regress/conf/99749670b62bcb99a9b2e3d59708e357.conf new file mode 100644 index 0000000000..dd1700b0c6 --- /dev/null +++ b/regress/conf/99749670b62bcb99a9b2e3d59708e357.conf @@ -0,0 +1,93 @@ +# ----------------------------------------------------------------------------- +# This config is targeted for tmux 2.1+ and should be placed in $HOME. +# +# Read the "Plugin Manager" section (bottom) before trying to use this config! +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Global options +# ----------------------------------------------------------------------------- + +# Set a new prefix / leader key. +set -g prefix ` +bind ` send-prefix + +# Allow opening multiple terminals to view the same session at different sizes. +setw -g aggressive-resize on + +# Remove delay when switching between Vim modes. +set -s escape-time 0 + +# Allow Vim's FocusGained to work when your terminal gains focus. +# Requires Vim plugin: https://github.com/tmux-plugins/vim-tmux-focus-events +set -g focus-events on + +# Add a bit more scroll history in the buffer. +set -g history-limit 50000 + +# Enable color support inside of tmux. +set -g default-terminal "screen-256color" + +# Ensure window titles get renamed automatically. +setw -g automatic-rename + +# Start windows and panes index at 1, not 0. +set -g base-index 1 +setw -g pane-base-index 1 + +# Enable full mouse support. +set -g mouse on + +# Status bar optimized for Gruvbox. +set -g status-fg colour244 +set -g status-bg default +set -g status-left '' +set -g status-right-length 0 +#set -g status-right-length 20 +#set -g status-right '%a %Y-%m-%d %H:%M' + +set -g pane-border-fg default +set -g pane-border-bg default +set -g pane-active-border-fg colour250 +set -g pane-active-border-bg default + +set-window-option -g window-status-current-attr bold +set-window-option -g window-status-current-fg colour223 + +# ----------------------------------------------------------------------------- +# Key bindings +# ----------------------------------------------------------------------------- + +# Unbind default keys +unbind C-b +unbind '"' +unbind % + +# Reload the tmux config. +bind-key r source-file ~/.tmux.conf + +# Split panes. +bind-key h split-window -v +bind-key v split-window -h + +# Move around panes with ALT + arrow keys. +bind-key -n M-Up select-pane -U +bind-key -n M-Left select-pane -L +bind-key -n M-Down select-pane -D +bind-key -n M-Right select-pane -R + +# ----------------------------------------------------------------------------- +# Plugin Manager - https://github.com/tmux-plugins/tpm +# In order to use the plugins below you need to install TPM and the plugins. +# Step 1) git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm +# Step 2) Reload tmux if it's already started with `r +# Step 3) Launch tmux and hit `I (capital i) to fetch any plugins +# ----------------------------------------------------------------------------- + +# List of plugins. +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-yank' + +# Initialize TPM (keep this line at the very bottom of your tmux.conf). +run -b '~/.tmux/plugins/tpm/tpm' From 797042584e2a0b6208aafa3276a08588120a4ba4 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 18 Jun 2019 11:17:40 +0000 Subject: [PATCH 682/836] Handle comments more correctly inside {}, from Avi Halachmi. --- cmd-parse.y | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 9a2c2cfdf5..ce7b344b7e 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1281,8 +1281,8 @@ static int yylex_token_brace(char **buf, size_t *len) { struct cmd_parse_state *ps = &parse_state; - int ch, nesting = 1, escape = 0, quote = '\0'; - int lines = 0; + int ch, lines = 0, nesting = 1, escape = 0; + int quote = '\0', token = 0; /* * Extract a string up to the matching unquoted '}', including newlines @@ -1292,6 +1292,10 @@ yylex_token_brace(char **buf, size_t *len) * depth, we scan the input as if it was a tmux config file, and ignore * braces which would be considered quoted, escaped, or in a comment. * + * We update the token state after every character because '#' begins a + * comment only when it begins a token. For simplicity, we treat an + * unquoted directive format as comment. + * * The result is verbatim copy of the input excluding the final brace. */ @@ -1311,6 +1315,8 @@ yylex_token_brace(char **buf, size_t *len) ch == '\n' || ch == '\\')) { escape = 0; + if (ch != '\n') + token = 1; continue; } @@ -1326,7 +1332,7 @@ yylex_token_brace(char **buf, size_t *len) /* A newline always resets to unquoted. */ if (ch == '\n') { - quote = 0; + quote = token = 0; continue; } @@ -1337,33 +1343,47 @@ yylex_token_brace(char **buf, size_t *len) */ if (ch == quote && quote != '#') quote = 0; - } else { + token = 1; /* token continues regardless */ + } else { /* Not inside quotes or comment. */ switch (ch) { case '"': case '\'': case '#': - /* Beginning of quote or comment. */ - quote = ch; + /* Beginning of quote or maybe comment. */ + if (ch != '#' || !token) + quote = ch; + token = 1; + break; + case ' ': + case '\t': + case ';': + /* Delimiter - token resets. */ + token = 0; break; case '{': nesting++; + token = 0; /* new commands set - token resets */ break; case '}': nesting--; + token = 1; /* same as after quotes */ if (nesting == 0) { (*len)--; /* remove closing } */ ps->input->line += lines; return (1); } break; + default: + token = 1; + break; } } } /* - * Update line count after error as reporting the opening line - * is more useful than EOF. + * Update line count after error as reporting the opening line is more + * useful than EOF. */ yyerror("unterminated brace string"); ps->input->line += lines; From b3ca410bc398e9aa7a045cf1337ca3f08c005e6e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 20 Jun 2019 06:57:37 +0100 Subject: [PATCH 683/836] Use KERN_PROC_CWD on NetBSD, from Leonardo Taccari. --- osdep-netbsd.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/osdep-netbsd.c b/osdep-netbsd.c index daca1abb21..6789417502 100644 --- a/osdep-netbsd.c +++ b/osdep-netbsd.c @@ -133,13 +133,27 @@ char * osdep_get_cwd(int fd) { static char target[PATH_MAX + 1]; - char *path; pid_t pgrp; +#ifdef KERN_PROC_CWD + int mib[4]; + size_t len; +#else + char *path; ssize_t n; +#endif if ((pgrp = tcgetpgrp(fd)) == -1) return (NULL); +#ifdef KERN_PROC_CWD + mib[0] = CTL_KERN; + mib[1] = KERN_PROC_ARGS; + mib[2] = pgrp; + mib[3] = KERN_PROC_CWD; + len = sizeof(target); + if (sysctl(mib, __arraycount(mib), target, &len, NULL, 0) == 0) + return (target); +#else xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp); n = readlink(path, target, sizeof(target) - 1); free(path); @@ -147,6 +161,7 @@ osdep_get_cwd(int fd) target[n] = '\0'; return (target); } +#endif return (NULL); } From ae541287d303fb253b3cd75341c318dcc6a8db4a Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 06:51:36 +0000 Subject: [PATCH 684/836] Expand command formats in %if and move the config file loading later (to when the first client has identified) so all the client formats are available, fixes problems reported by Thomas Sattler. --- cfg.c | 7 ++++--- format.c | 4 ++-- server-client.c | 39 +++++++++++++++++++++------------------ server.c | 3 +-- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/cfg.c b/cfg.c index 286ed4604c..a47621a4e3 100644 --- a/cfg.c +++ b/cfg.c @@ -91,14 +91,14 @@ start_cfg(void) } if (cfg_file == NULL) - load_cfg(TMUX_CONF, NULL, NULL, CMD_PARSE_QUIET, NULL); + load_cfg(TMUX_CONF, c, NULL, CMD_PARSE_QUIET, NULL); if (cfg_file == NULL && (home = find_home()) != NULL) { xasprintf(&cfg_file, "%s/.tmux.conf", home); flags = CMD_PARSE_QUIET; } if (cfg_file != NULL) - load_cfg(cfg_file, NULL, NULL, flags, NULL); + load_cfg(cfg_file, c, NULL, flags, NULL); cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL)); } @@ -128,6 +128,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, pi.file = path; pi.line = 1; pi.item = item; + pi.c = c; pr = cmd_parse_from_file(f, &pi); fclose(f); @@ -147,7 +148,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags, if (item != NULL) cmdq_insert_after(item, new_item0); else - cmdq_append(c, new_item0); + cmdq_append(NULL, new_item0); cmd_list_free(pr->cmdlist); if (new_item != NULL) diff --git a/format.c b/format.c index 75521fd0eb..50b537fa89 100644 --- a/format.c +++ b/format.c @@ -2006,10 +2006,10 @@ void format_defaults(struct format_tree *ft, struct client *c, struct session *s, struct winlink *wl, struct window_pane *wp) { - if (c != NULL) + if (c != NULL && c->name != NULL) log_debug("%s: c=%s", __func__, c->name); else - log_debug("%s: s=none", __func__); + log_debug("%s: c=none", __func__); if (s != NULL) log_debug("%s: s=$%u", __func__, s->id); else diff --git a/server-client.c b/server-client.c index dc57e52309..14c2061724 100644 --- a/server-client.c +++ b/server-client.c @@ -1934,26 +1934,29 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg) close(c->fd); c->fd = -1; - - return; - } - - if (c->fd == -1) - return; - if (tty_init(&c->tty, c, c->fd, c->term) != 0) { - close(c->fd); - c->fd = -1; - return; + } else if (c->fd != -1) { + if (tty_init(&c->tty, c, c->fd, c->term) != 0) { + close(c->fd); + c->fd = -1; + } else { + if (c->flags & CLIENT_UTF8) + c->tty.flags |= TTY_UTF8; + if (c->flags & CLIENT_256COLOURS) + c->tty.term_flags |= TERM_256COLOURS; + tty_resize(&c->tty); + c->flags |= CLIENT_TERMINAL; + } } - if (c->flags & CLIENT_UTF8) - c->tty.flags |= TTY_UTF8; - if (c->flags & CLIENT_256COLOURS) - c->tty.term_flags |= TERM_256COLOURS; - tty_resize(&c->tty); - - if (!(c->flags & CLIENT_CONTROL)) - c->flags |= CLIENT_TERMINAL; + /* + * If this is the first client that has finished identifying, load + * configuration files. + */ + if ((~c->flags & CLIENT_EXIT) && + !cfg_finished && + c == TAILQ_FIRST(&clients) && + TAILQ_NEXT(c, entry) == NULL) + start_cfg(); } /* Handle shell message. */ diff --git a/server.c b/server.c index fc3730adae..e75b02dadf 100644 --- a/server.c +++ b/server.c @@ -208,8 +208,7 @@ server_start(struct tmuxproc *client, struct event_base *base, int lockfd, cmdq_append(c, cmdq_get_error(cause)); free(cause); c->flags |= CLIENT_EXIT; - } else - start_cfg(); + } server_add_accept(0); proc_loop(server_proc, server_loop); From cd1fc42df6d1bacac4f617e031c279ba31bc0632 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 07:10:56 +0000 Subject: [PATCH 685/836] Add a -A flag to show-options to show parent options as well. --- arguments.c | 4 ++- cmd-show-options.c | 78 +++++++++++++++++++++++++++++++--------------- tmux.1 | 5 ++- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/arguments.c b/arguments.c index 8e049aab07..751d0607ad 100644 --- a/arguments.c +++ b/arguments.c @@ -213,7 +213,9 @@ args_escape(const char *s) if (*s == '\0') return (xstrdup(s)); - if ((strchr(quoted, s[0]) != NULL || s[0] == '~') && s[1] == '\0') { + if (s[0] != ' ' && + (strchr(quoted, s[0]) != NULL || s[0] == '~') && + s[1] == '\0') { xasprintf(&escaped, "\\%c", s[0]); return (escaped); } diff --git a/cmd-show-options.c b/cmd-show-options.c index 6e3eca0d0b..3c5b6d47a1 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -31,16 +31,16 @@ static enum cmd_retval cmd_show_options_exec(struct cmd *, struct cmdq_item *); static void cmd_show_options_print(struct cmd *, struct cmdq_item *, - struct options_entry *, int); + struct options_entry *, int, int); static enum cmd_retval cmd_show_options_all(struct cmd *, struct cmdq_item *, - struct options *); + enum options_table_scope, struct options *); const struct cmd_entry cmd_show_options_entry = { .name = "show-options", .alias = "show", - .args = { "gHqst:vw", 0, 1 }, - .usage = "[-gHqsvw] [-t target-session|target-window] [option]", + .args = { "AgHqst:vw", 0, 1 }, + .usage = "[-AgHqsvw] [-t target-session|target-window] [option]", .target = { 't', CMD_FIND_WINDOW, CMD_FIND_CANFAIL }, @@ -86,7 +86,7 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) enum options_table_scope scope; char *argument, *name = NULL, *cause; const char *target; - int window, idx, ambiguous; + int window, idx, ambiguous, parent; struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); @@ -99,7 +99,7 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) free(cause); return (CMD_RETURN_ERROR); } - return (cmd_show_options_all(self, item, oo)); + return (cmd_show_options_all(self, item, scope, oo)); } argument = format_single(item, args->argv[0], c, s, wl, NULL); @@ -164,8 +164,13 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) goto fail; } o = options_get_only(oo, name); + if (args_has(args, 'A') && o == NULL) { + o = options_get(oo, name); + parent = 1; + } else + parent = 0; if (o != NULL) - cmd_show_options_print(self, item, o, idx); + cmd_show_options_print(self, item, o, idx, parent); free(name); free(argument); @@ -179,7 +184,7 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) static void cmd_show_options_print(struct cmd *self, struct cmdq_item *item, - struct options_entry *o, int idx) + struct options_entry *o, int idx, int parent) { struct options_array_item *a; const char *name = options_name(o); @@ -198,7 +203,8 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, } while (a != NULL) { idx = options_array_item_index(a); - cmd_show_options_print(self, item, o, idx); + cmd_show_options_print(self, item, o, idx, + parent); a = options_array_next(a); } return; @@ -210,10 +216,17 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, cmdq_print(item, "%s", value); else if (options_isstring(o)) { escaped = args_escape(value); - cmdq_print(item, "%s %s", name, escaped); + if (parent) + cmdq_print(item, "%s* %s", name, escaped); + else + cmdq_print(item, "%s %s", name, escaped); free(escaped); - } else - cmdq_print(item, "%s %s", name, value); + } else { + if (parent) + cmdq_print(item, "%s* %s", name, value); + else + cmdq_print(item, "%s %s", name, value); + } free(value); free(tmp); @@ -221,39 +234,54 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, static enum cmd_retval cmd_show_options_all(struct cmd *self, struct cmdq_item *item, - struct options *oo) + enum options_table_scope scope, struct options *oo) { + const struct options_table_entry *oe; struct options_entry *o; struct options_array_item *a; u_int idx; - const struct options_table_entry *oe; + int parent; + + for (oe = options_table; oe->name != NULL; oe++) { + if (oe->scope != scope) + continue; - o = options_first(oo); - while (o != NULL) { - oe = options_table_entry(o); if ((self->entry != &cmd_show_hooks_entry && !args_has(self->args, 'H') && oe != NULL && (oe->flags & OPTIONS_TABLE_IS_HOOK)) || (self->entry == &cmd_show_hooks_entry && (oe == NULL || - (~oe->flags & OPTIONS_TABLE_IS_HOOK)))) { - o = options_next(o); + (~oe->flags & OPTIONS_TABLE_IS_HOOK)))) continue; - } + + o = options_get_only(oo, oe->name); + if (o == NULL) { + if (!args_has(self->args, 'A')) + continue; + o = options_get(oo, oe->name); + if (o == NULL) + continue; + parent = 1; + } else + parent = 0; + if (!options_isarray(o)) - cmd_show_options_print(self, item, o, -1); + cmd_show_options_print(self, item, o, -1, parent); else if ((a = options_array_first(o)) == NULL) { - if (!args_has(self->args, 'v')) - cmdq_print(item, "%s", options_name(o)); + if (!args_has(self->args, 'v')) { + if (parent) + cmdq_print(item, "%s*", options_name(o)); + else + cmdq_print(item, "%s", options_name(o)); + } } else { while (a != NULL) { idx = options_array_item_index(a); - cmd_show_options_print(self, item, o, idx); + cmd_show_options_print(self, item, o, idx, parent); a = options_array_next(a); } } - o = options_next(o); } return (CMD_RETURN_NORMAL); } diff --git a/tmux.1 b/tmux.1 index 041097b6bb..4b3568f3c5 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3680,7 +3680,7 @@ function key sequences; these have a number included to indicate modifiers such as Shift, Alt or Ctrl. .El .It Xo Ic show-options -.Op Fl gHqsvw +.Op Fl AgHqsvw .Op Fl t Ar target-session | Ar target-window .Op Ar option .Xc @@ -3714,6 +3714,9 @@ is set, no error will be returned if is unset. .Fl H includes hooks (omitted by default). +.Fl A +includes options inherited from a parent set of options, such options are +marked with an asterisk. .It Xo Ic show-window-options .Op Fl gv .Op Fl t Ar target-window From c1ede507d954b98a73c40665e7aee6fe5f0c5bce Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 07:41:29 +0000 Subject: [PATCH 686/836] Add a helper function to work out option table from name. --- cmd-set-option.c | 55 +++++----------------------------------------- cmd-show-options.c | 46 ++------------------------------------ options.c | 52 ++++++++++++++++++++++++++++++++++++++++++- tmux.h | 3 +++ 4 files changed, 62 insertions(+), 94 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index 7be561f2b3..10b7030413 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -92,16 +92,19 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) struct options *oo; struct options_entry *parent, *o; char *name, *argument, *value = NULL, *cause; - const char *target; int window, idx, already, error, ambiguous; struct style *sy; + window = (self->entry == &cmd_set_window_option_entry); + /* Expand argument. */ c = cmd_find_client(item, NULL, 1); argument = format_single(item, args->argv[0], c, s, wl, NULL); + /* If set-hook -R, fire the hook straight away. */ if (self->entry == &cmd_set_hook_entry && args_has(args, 'R')) { notify_hook(item, argument); + free(argument); return (CMD_RETURN_NORMAL); } @@ -123,25 +126,8 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) else value = xstrdup(args->argv[1]); - /* - * Figure out the scope: for user options it comes from the arguments, - * otherwise from the option name. - */ - if (*name == '@') { - window = (self->entry == &cmd_set_window_option_entry); - scope = options_scope_from_flags(args, window, fs, &oo, &cause); - } else { - if (options_get_only(global_options, name) != NULL) - scope = OPTIONS_TABLE_SERVER; - else if (options_get_only(global_s_options, name) != NULL) - scope = OPTIONS_TABLE_SESSION; - else if (options_get_only(global_w_options, name) != NULL) - scope = OPTIONS_TABLE_WINDOW; - else { - scope = OPTIONS_TABLE_NONE; - xasprintf(&cause, "unknown option: %s", argument); - } - } + /* Get the scope and table for the option .*/ + scope = options_scope_from_name(args, window, name, fs, &oo, &cause); if (scope == OPTIONS_TABLE_NONE) { if (args_has(args, 'q')) goto out; @@ -149,35 +135,6 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) free(cause); goto fail; } - - /* Which table should this option go into? */ - if (scope == OPTIONS_TABLE_SERVER) - oo = global_options; - else if (scope == OPTIONS_TABLE_SESSION) { - if (args_has(self->args, 'g')) - oo = global_s_options; - else if (s == NULL) { - target = args_get(args, 't'); - if (target != NULL) - cmdq_error(item, "no such session: %s", target); - else - cmdq_error(item, "no current session"); - goto fail; - } else - oo = s->options; - } else if (scope == OPTIONS_TABLE_WINDOW) { - if (args_has(self->args, 'g')) - oo = global_w_options; - else if (wl == NULL) { - target = args_get(args, 't'); - if (target != NULL) - cmdq_error(item, "no such window: %s", target); - else - cmdq_error(item, "no current window"); - goto fail; - } else - oo = wl->window->options; - } o = options_get_only(oo, name); parent = options_get(oo, name); diff --git a/cmd-show-options.c b/cmd-show-options.c index 3c5b6d47a1..109c6c5238 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -85,11 +85,11 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) struct options *oo; enum options_table_scope scope; char *argument, *name = NULL, *cause; - const char *target; int window, idx, ambiguous, parent; struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); + if (args->argc == 0) { scope = options_scope_from_flags(args, window, fs, &oo, &cause); if (scope == OPTIONS_TABLE_NONE) { @@ -113,49 +113,7 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "invalid option: %s", argument); goto fail; } - if (*name == '@') - scope = options_scope_from_flags(args, window, fs, &oo, &cause); - else { - if (options_get_only(global_options, name) != NULL) - scope = OPTIONS_TABLE_SERVER; - else if (options_get_only(global_s_options, name) != NULL) - scope = OPTIONS_TABLE_SESSION; - else if (options_get_only(global_w_options, name) != NULL) - scope = OPTIONS_TABLE_WINDOW; - else { - scope = OPTIONS_TABLE_NONE; - xasprintf(&cause, "unknown option: %s", argument); - } - if (scope == OPTIONS_TABLE_SERVER) - oo = global_options; - else if (scope == OPTIONS_TABLE_SESSION) { - if (args_has(self->args, 'g')) - oo = global_s_options; - else if (s == NULL) { - target = args_get(args, 't'); - if (target != NULL) { - cmdq_error(item, "no such session: %s", - target); - } else - cmdq_error(item, "no current session"); - goto fail; - } else - oo = s->options; - } else if (scope == OPTIONS_TABLE_WINDOW) { - if (args_has(self->args, 'g')) - oo = global_w_options; - else if (wl == NULL) { - target = args_get(args, 't'); - if (target != NULL) { - cmdq_error(item, "no such window: %s", - target); - } else - cmdq_error(item, "no current window"); - goto fail; - } else - oo = wl->window->options; - } - } + scope = options_scope_from_name(args, window, name, fs, &oo, &cause); if (scope == OPTIONS_TABLE_NONE) { if (args_has(args, 'q')) goto fail; diff --git a/options.c b/options.c index 619c27edb7..3bce604172 100644 --- a/options.c +++ b/options.c @@ -725,13 +725,63 @@ options_set_style(struct options *oo, const char *name, int append, return (o); } +enum options_table_scope +options_scope_from_name(struct args *args, int window, + const char *name, struct cmd_find_state *fs, struct options **oo, + char **cause) +{ + struct session *s = fs->s; + struct winlink *wl = fs->wl; + const char *target = args_get(args, 't'); + enum options_table_scope scope; + + if (*name == '@') + return (options_scope_from_flags(args, window, fs, oo, cause)); + + if (options_get_only(global_options, name) != NULL) + scope = OPTIONS_TABLE_SERVER; + else if (options_get_only(global_s_options, name) != NULL) + scope = OPTIONS_TABLE_SESSION; + else if (options_get_only(global_w_options, name) != NULL) + scope = OPTIONS_TABLE_WINDOW; + else { + xasprintf(cause, "unknown option: %s", name); + return (OPTIONS_TABLE_NONE); + } + + if (scope == OPTIONS_TABLE_SERVER) + *oo = global_options; + else if (scope == OPTIONS_TABLE_SESSION) { + if (args_has(args, 'g')) + *oo = global_s_options; + else if (s == NULL) { + if (target != NULL) + xasprintf(cause, "no such session: %s", target); + else + xasprintf(cause, "no current session"); + } else + *oo = s->options; + } else if (scope == OPTIONS_TABLE_WINDOW) { + if (args_has(args, 'g')) + *oo = global_w_options; + else if (wl == NULL) { + if (target != NULL) + xasprintf(cause, "no such window: %s", target); + else + xasprintf(cause, "no current window"); + } else + *oo = wl->window->options; + } + return (scope); +} + enum options_table_scope options_scope_from_flags(struct args *args, int window, struct cmd_find_state *fs, struct options **oo, char **cause) { struct session *s = fs->s; struct winlink *wl = fs->wl; - const char *target= args_get(args, 't'); + const char *target = args_get(args, 't'); if (args_has(args, 's')) { *oo = global_options; diff --git a/tmux.h b/tmux.h index cc5e55c0ae..0557e98d78 100644 --- a/tmux.h +++ b/tmux.h @@ -1819,6 +1819,9 @@ struct options_entry *options_set_number(struct options *, const char *, long long); struct options_entry *options_set_style(struct options *, const char *, int, const char *); +enum options_table_scope options_scope_from_name(struct args *, int, + const char *, struct cmd_find_state *, struct options **, + char **); enum options_table_scope options_scope_from_flags(struct args *, int, struct cmd_find_state *, struct options **, char **); From 5f92f92908b81b4ec66682adb84b9ffc8d83c2f7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 11:59:59 +0000 Subject: [PATCH 687/836] Add a per-pane option set. Pane options inherit from window options (so there should be no change to existing behaviour) and are set and shown with set-option -p and show-options -p. Change remain-on-exit and window-style/window-active-style to be pane options (some others will be changed later). This makes select-pane -P and -g unnecessary so no longer document them (they still work) and no longer document set-window-option and show-window-options in favour of set-option -w and show-options -w. --- cmd-break-pane.c | 2 + cmd-join-pane.c | 2 + cmd-select-pane.c | 18 ++-- cmd-set-option.c | 13 +-- cmd-show-options.c | 26 ++--- cmd-swap-pane.c | 4 + format.c | 2 + input.c | 16 +-- options-table.c | 6 +- options.c | 100 ++++++++++++------ server-fn.c | 2 +- tmux.1 | 255 ++++++++++++++++++++------------------------- tmux.c | 6 +- tmux.h | 27 +++-- tty.c | 46 ++++---- window.c | 55 +++++----- 16 files changed, 301 insertions(+), 279 deletions(-) diff --git a/cmd-break-pane.c b/cmd-break-pane.c index 3b929deecb..b4c5b7cd3b 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -77,6 +77,8 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item) layout_close_pane(wp); w = wp->window = window_create(w->sx, w->sy); + options_set_parent(wp->options, w->options); + wp->flags |= PANE_STYLECHANGED; TAILQ_INSERT_HEAD(&w->panes, wp, entry); w->active = wp; diff --git a/cmd-join-pane.c b/cmd-join-pane.c index ab24530275..4a0c733917 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -140,6 +140,8 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) TAILQ_REMOVE(&src_w->panes, src_wp, entry); src_wp->window = dst_w; + options_set_parent(src_wp->options, dst_w->options); + src_wp->flags |= PANE_STYLECHANGED; TAILQ_INSERT_AFTER(&dst_w->panes, dst_wp, src_wp, entry); layout_assign_pane(lc, src_wp); diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 92ecb73466..52c58dbcea 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_select_pane_entry = { .name = "select-pane", .alias = "selectp", - .args = { "DdegLlMmP:RT:t:U", 0, 0 }, - .usage = "[-DdegLlMmRU] [-P style] [-T title] " CMD_TARGET_PANE_USAGE, + .args = { "DdegLlMmP:RT:t:U", 0, 0 }, /* -P and -g deprecated */ + .usage = "[-DdeLlMmRU] [-T title] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, @@ -90,9 +90,10 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) struct window *w = wl->window; struct session *s = item->target.s; struct window_pane *wp = item->target.wp, *lastwp, *markedwp; - struct style *sy = &wp->style; char *pane_title; const char *style; + struct style *sy; + struct options_entry *o; if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) { lastwp = w->last; @@ -144,15 +145,18 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'P') || args_has(self->args, 'g')) { if ((style = args_get(args, 'P')) != NULL) { - style_set(sy, &grid_default_cell); - if (style_parse(sy, &grid_default_cell, style) == -1) { + o = options_set_style(wp->options, "window-style", 0, + style); + if (o == NULL) { cmdq_error(item, "bad style: %s", style); return (CMD_RETURN_ERROR); } - wp->flags |= PANE_REDRAW; + wp->flags |= (PANE_REDRAW|PANE_STYLECHANGED); } - if (args_has(self->args, 'g')) + if (args_has(self->args, 'g')) { + sy = options_get_style(wp->options, "window-style"); cmdq_print(item, "%s", style_tostring(sy)); + } return (CMD_RETURN_NORMAL); } diff --git a/cmd-set-option.c b/cmd-set-option.c index 10b7030413..23b45230ab 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -43,10 +43,10 @@ const struct cmd_entry cmd_set_option_entry = { .name = "set-option", .alias = "set", - .args = { "aFgoqst:uw", 1, 2 }, - .usage = "[-aFgosquw] [-t target-window] option [value]", + .args = { "aFgopqst:uw", 1, 2 }, + .usage = "[-aFgopqsuw] " CMD_TARGET_PANE_USAGE " option [value]", - .target = { 't', CMD_FIND_WINDOW, CMD_FIND_CANFAIL }, + .target = { 't', CMD_FIND_PANE, CMD_FIND_CANFAIL }, .flags = CMD_AFTERHOOK, .exec = cmd_set_option_exec @@ -88,11 +88,12 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) struct session *s = fs->s; struct winlink *wl = fs->wl; struct window *w; - enum options_table_scope scope; + struct window_pane *wp; struct options *oo; struct options_entry *parent, *o; char *name, *argument, *value = NULL, *cause; int window, idx, already, error, ambiguous; + int scope; struct style *sy; window = (self->entry == &cmd_set_window_option_entry); @@ -249,8 +250,8 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) alerts_reset_all(); if (strcmp(name, "window-style") == 0 || strcmp(name, "window-active-style") == 0) { - RB_FOREACH(w, windows, &windows) - w->flags |= WINDOW_STYLECHANGED; + RB_FOREACH(wp, window_pane_tree, &all_window_panes) + wp->flags |= PANE_STYLECHANGED; } if (strcmp(name, "pane-border-status") == 0) { RB_FOREACH(w, windows, &windows) diff --git a/cmd-show-options.c b/cmd-show-options.c index 109c6c5238..5b22b8bd16 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -33,16 +33,16 @@ static enum cmd_retval cmd_show_options_exec(struct cmd *, struct cmdq_item *); static void cmd_show_options_print(struct cmd *, struct cmdq_item *, struct options_entry *, int, int); static enum cmd_retval cmd_show_options_all(struct cmd *, struct cmdq_item *, - enum options_table_scope, struct options *); + int, struct options *); const struct cmd_entry cmd_show_options_entry = { .name = "show-options", .alias = "show", - .args = { "AgHqst:vw", 0, 1 }, - .usage = "[-AgHqsvw] [-t target-session|target-window] [option]", + .args = { "AgHpqst:vw", 0, 1 }, + .usage = "[-AgHpqsvw] " CMD_TARGET_PANE_USAGE " [option]", - .target = { 't', CMD_FIND_WINDOW, CMD_FIND_CANFAIL }, + .target = { 't', CMD_FIND_PANE, CMD_FIND_CANFAIL }, .flags = CMD_AFTERHOOK, .exec = cmd_show_options_exec @@ -83,9 +83,8 @@ cmd_show_options_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct options *oo; - enum options_table_scope scope; char *argument, *name = NULL, *cause; - int window, idx, ambiguous, parent; + int window, idx, ambiguous, parent, scope; struct options_entry *o; window = (self->entry == &cmd_show_window_options_entry); @@ -191,17 +190,18 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item, } static enum cmd_retval -cmd_show_options_all(struct cmd *self, struct cmdq_item *item, - enum options_table_scope scope, struct options *oo) +cmd_show_options_all(struct cmd *self, struct cmdq_item *item, int scope, + struct options *oo) { const struct options_table_entry *oe; struct options_entry *o; struct options_array_item *a; + const char *name; u_int idx; int parent; for (oe = options_table; oe->name != NULL; oe++) { - if (oe->scope != scope) + if (~oe->scope & scope) continue; if ((self->entry != &cmd_show_hooks_entry && @@ -228,15 +228,17 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item, cmd_show_options_print(self, item, o, -1, parent); else if ((a = options_array_first(o)) == NULL) { if (!args_has(self->args, 'v')) { + name = options_name(o); if (parent) - cmdq_print(item, "%s*", options_name(o)); + cmdq_print(item, "%s*", name); else - cmdq_print(item, "%s", options_name(o)); + cmdq_print(item, "%s", name); } } else { while (a != NULL) { idx = options_array_item_index(a); - cmd_show_options_print(self, item, o, idx, parent); + cmd_show_options_print(self, item, o, idx, + parent); a = options_array_next(a); } } diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 2ad05561be..994ad0e8bd 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -90,7 +90,11 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) src_wp->layout_cell = dst_lc; src_wp->window = dst_w; + options_set_parent(src_wp->options, dst_w->options); + src_wp->flags |= PANE_STYLECHANGED; dst_wp->window = src_w; + options_set_parent(dst_wp->options, src_w->options); + dst_wp->flags |= PANE_STYLECHANGED; sx = src_wp->sx; sy = src_wp->sy; xoff = src_wp->xoff; yoff = src_wp->yoff; diff --git a/format.c b/format.c index 50b537fa89..6b07e67efd 100644 --- a/format.c +++ b/format.c @@ -1052,6 +1052,8 @@ format_find(struct format_tree *ft, const char *key, int modifiers) if (~modifiers & FORMAT_TIMESTRING) { o = options_parse_get(global_options, key, &idx, 0); + if (o == NULL && ft->wp != NULL) + o = options_parse_get(ft->wp->options, key, &idx, 0); if (o == NULL && ft->w != NULL) o = options_parse_get(ft->w->options, key, &idx, 0); if (o == NULL) diff --git a/input.c b/input.c index e54b5ac0e6..3e85e14f57 100644 --- a/input.c +++ b/input.c @@ -2347,12 +2347,14 @@ input_osc_10(struct input_ctx *ictx, const char *p) { struct window_pane *wp = ictx->wp; u_int r, g, b; + char tmp[16]; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; - - wp->style.gc.fg = colour_join_rgb(r, g, b); - wp->flags |= PANE_REDRAW; + xsnprintf(tmp, sizeof tmp, "fg=#%02x%02x%02x", r, g, b); + options_set_style(wp->options, "window-style", 1, tmp); + options_set_style(wp->options, "window-active-style", 1, tmp); + wp->flags |= (PANE_REDRAW|PANE_STYLECHANGED); return; @@ -2366,12 +2368,14 @@ input_osc_11(struct input_ctx *ictx, const char *p) { struct window_pane *wp = ictx->wp; u_int r, g, b; + char tmp[16]; if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) goto bad; - - wp->style.gc.bg = colour_join_rgb(r, g, b); - wp->flags |= PANE_REDRAW; + xsnprintf(tmp, sizeof tmp, "bg=#%02x%02x%02x", r, g, b); + options_set_style(wp->options, "window-style", 1, tmp); + options_set_style(wp->options, "window-active-style", 1, tmp); + wp->flags |= (PANE_REDRAW|PANE_STYLECHANGED); return; diff --git a/options-table.c b/options-table.c index 32032f8b7e..b287d66081 100644 --- a/options-table.c +++ b/options-table.c @@ -700,7 +700,7 @@ const struct options_table_entry options_table[] = { { .name = "remain-on-exit", .type = OPTIONS_TABLE_FLAG, - .scope = OPTIONS_TABLE_WINDOW, + .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, .default_num = 0 }, @@ -712,7 +712,7 @@ const struct options_table_entry options_table[] = { { .name = "window-active-style", .type = OPTIONS_TABLE_STYLE, - .scope = OPTIONS_TABLE_WINDOW, + .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, .default_str = "default" }, @@ -725,7 +725,7 @@ const struct options_table_entry options_table[] = { { .name = "window-style", .type = OPTIONS_TABLE_STYLE, - .scope = OPTIONS_TABLE_WINDOW, + .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, .default_str = "default" }, diff --git a/options.c b/options.c index 3bce604172..bbb6af98b8 100644 --- a/options.c +++ b/options.c @@ -100,7 +100,7 @@ options_parent_table_entry(struct options *oo, const char *s) if (oo->parent == NULL) fatalx("no parent options for %s", s); - o = options_get_only(oo->parent, s); + o = options_get(oo->parent, s); if (o == NULL) fatalx("%s not in parent options", s); return (o->tableentry); @@ -178,6 +178,12 @@ options_free(struct options *oo) free(oo); } +void +options_set_parent(struct options *oo, struct options *parent) +{ + oo->parent = parent; +} + struct options_entry * options_first(struct options *oo) { @@ -545,7 +551,7 @@ options_parse_get(struct options *oo, const char *s, int *idx, int only) } char * -options_match(const char *s, int *idx, int* ambiguous) +options_match(const char *s, int *idx, int *ambiguous) { const struct options_table_entry *oe, *found; char *name; @@ -725,70 +731,96 @@ options_set_style(struct options *oo, const char *name, int append, return (o); } -enum options_table_scope +int options_scope_from_name(struct args *args, int window, const char *name, struct cmd_find_state *fs, struct options **oo, char **cause) { - struct session *s = fs->s; - struct winlink *wl = fs->wl; - const char *target = args_get(args, 't'); - enum options_table_scope scope; + struct session *s = fs->s; + struct winlink *wl = fs->wl; + struct window_pane *wp = fs->wp; + const char *target = args_get(args, 't'); + const struct options_table_entry *oe; + int scope; if (*name == '@') return (options_scope_from_flags(args, window, fs, oo, cause)); - if (options_get_only(global_options, name) != NULL) - scope = OPTIONS_TABLE_SERVER; - else if (options_get_only(global_s_options, name) != NULL) - scope = OPTIONS_TABLE_SESSION; - else if (options_get_only(global_w_options, name) != NULL) - scope = OPTIONS_TABLE_WINDOW; - else { + for (oe = options_table; oe->name != NULL; oe++) { + if (strcmp(oe->name, name) == 0) + break; + } + if (oe->name == NULL) { xasprintf(cause, "unknown option: %s", name); return (OPTIONS_TABLE_NONE); } + scope = oe->scope; - if (scope == OPTIONS_TABLE_SERVER) + switch (scope) { + case OPTIONS_TABLE_SERVER: *oo = global_options; - else if (scope == OPTIONS_TABLE_SESSION) { + break; + case OPTIONS_TABLE_SESSION: if (args_has(args, 'g')) *oo = global_s_options; - else if (s == NULL) { - if (target != NULL) - xasprintf(cause, "no such session: %s", target); - else - xasprintf(cause, "no current session"); - } else + else if (s == NULL && target != NULL) + xasprintf(cause, "no such session: %s", target); + else if (s == NULL) + xasprintf(cause, "no current session"); + else *oo = s->options; - } else if (scope == OPTIONS_TABLE_WINDOW) { + break; + case OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE: + if (args_has(args, 'p')) { + if (wp == NULL && target != NULL) + xasprintf(cause, "no such pane: %s", target); + else if (wp == NULL) + xasprintf(cause, "no current pane"); + else + *oo = wp->options; + break; + } + scope = OPTIONS_TABLE_WINDOW; + /* FALLTHROUGH */ + case OPTIONS_TABLE_WINDOW: if (args_has(args, 'g')) *oo = global_w_options; - else if (wl == NULL) { - if (target != NULL) - xasprintf(cause, "no such window: %s", target); - else - xasprintf(cause, "no current window"); - } else + else if (wl == NULL && target != NULL) + xasprintf(cause, "no such window: %s", target); + else if (wl == NULL) + xasprintf(cause, "no current window"); + else *oo = wl->window->options; + break; } return (scope); } -enum options_table_scope +int options_scope_from_flags(struct args *args, int window, struct cmd_find_state *fs, struct options **oo, char **cause) { - struct session *s = fs->s; - struct winlink *wl = fs->wl; - const char *target = args_get(args, 't'); + struct session *s = fs->s; + struct winlink *wl = fs->wl; + struct window_pane *wp = fs->wp; + const char *target = args_get(args, 't'); if (args_has(args, 's')) { *oo = global_options; return (OPTIONS_TABLE_SERVER); } - if (window || args_has(args, 'w')) { + if (args_has(args, 'p')) { + if (wp == NULL) { + if (target != NULL) + xasprintf(cause, "no such pane: %s", target); + else + xasprintf(cause, "no current pane"); + return (OPTIONS_TABLE_NONE); + } + *oo = wp->options; + return (OPTIONS_TABLE_PANE); + } else if (window || args_has(args, 'w')) { if (args_has(args, 'g')) { *oo = global_w_options; return (OPTIONS_TABLE_WINDOW); diff --git a/server-fn.c b/server-fn.c index 372bf21d9b..25d3aeb15d 100644 --- a/server-fn.c +++ b/server-fn.c @@ -307,7 +307,7 @@ server_destroy_pane(struct window_pane *wp, int notify) wp->fd = -1; } - if (options_get_number(w->options, "remain-on-exit")) { + if (options_get_number(wp->options, "remain-on-exit")) { if (~wp->flags & PANE_STATUSREADY) return; diff --git a/tmux.1 b/tmux.1 index 4b3568f3c5..ec7fdc3150 100644 --- a/tmux.1 +++ b/tmux.1 @@ -876,7 +876,7 @@ refresh-client -t/dev/ttyp2 rename-session -tfirst newname -set-window-option -t:0 monitor-activity on +set-option -wt:0 monitor-activity on new-window ; split-window -d @@ -2323,8 +2323,7 @@ applies the last set layout if possible (undoes the most recent layout change). .Fl E spreads the current pane and any panes next to it out evenly. .It Xo Ic select-pane -.Op Fl DdegLlMmRU -.Op Fl P Ar style +.Op Fl DdeLlMmRU .Op Fl T Ar title .Op Fl t Ar target-pane .Xc @@ -2351,6 +2350,8 @@ command. enables or .Fl d disables input to the pane. +.Fl T +sets the pane title. .Pp .Fl m and @@ -2365,25 +2366,6 @@ to .Ic swap-pane and .Ic swap-window . -.Pp -Each pane has a style: by default the -.Ic window-style -and -.Ic window-active-style -options are used, -.Ic select-pane -.Fl P -sets the style for a single pane. -For example, to set the pane 1 background to red: -.Bd -literal -offset indent -select-pane -t:.1 -P 'bg=red' -.Ed -.Pp -.Fl g -shows the current pane style. -.Pp -.Fl T -sets the pane title. .It Xo Ic select-window .Op Fl lnpT .Op Fl t Ar target-window @@ -2702,16 +2684,17 @@ is present, all key bindings are removed. The appearance and behaviour of .Nm may be modified by changing the value of various options. -There are three types of option: +There are four types of option: .Em server options , .Em session options +.Em window options and -.Em window options . +.Em pane options . .Pp The .Nm server has a set of global options which do not apply to any particular -window or session. +window or session or pane. These are altered with the .Ic set-option .Fl s @@ -2733,16 +2716,29 @@ The available server and session options are listed under the .Ic set-option command. .Pp -Similarly, a set of window options is attached to each window, and there is -a set of global window options from which any unset options are inherited. -Window options are altered with the -.Ic set-window-option -command and can be listed with the -.Ic show-window-options -command. -All window options are documented with the -.Ic set-window-option -command. +Similarly, a set of window options is attached to each window and a set of pane +options to each pane. +Pane options inherit from window options. +This means any pane option may be set as a window option to apply the option to +all panes in the window without the option set, for example these commands will +set the background colour to red for all panes except pane 0: +.Bd -literal -offset indent +set -w window-style bg=red +set -pt:.0 window-style bg=blue +.Ed +.Pp +There is also a set of global window options from which any unset window or +pane options are inherited. +Window and pane options are altered with +.Ic set-option +.Fl w +and +.Fl p +commands and displayed with +.Ic show-option +.Fl w +and +.Fl p . .Pp .Nm also supports user options which are prefixed with a @@ -2760,26 +2756,27 @@ abc123 Commands which set options are as follows: .Bl -tag -width Ds .It Xo Ic set-option -.Op Fl aFgoqsuw -.Op Fl t Ar target-session | Ar target-window +.Op Fl aFgopqsuw +.Op Fl t Ar target-pane .Ar option Ar value .Xc .D1 (alias: Ic set ) -Set a window option with -.Fl w -(equivalent to the -.Ic set-window-option -command), +Set a pane option with +.Fl p , +a window option with +.Fl w , a server option with .Fl s , otherwise a session option. If the option is not a user option, .Fl w -and +or .Fl s -are unnecessary - +may be unnecessary - .Nm -will infer the type from the option name. +will infer the type from the option name, assuming +.Fl w +for pane options. If .Fl g is given, the global session or window option is set. @@ -2824,13 +2821,49 @@ blue foreground. Without .Fl a , the result would be the default background and a blue foreground. -.Pp -Available window options are listed under -.Ic set-window-option . -.Pp +.It Xo Ic show-options +.Op Fl AgHpqsvw +.Op Fl t Ar target-pane +.Op Ar option +.Xc +.D1 (alias: Ic show ) +Show the pane options (or a single option if +.Ar option +is provided) with +.Fl p , +the window options with +.Fl w , +the server options with +.Fl s , +otherwise the session options. +If the option is not a user option, +.Fl w +or +.Fl s +may be unnecessary - +.Nm +will infer the type from the option name, assuming +.Fl w +for pane options. +Global session or window options are listed if +.Fl g +is used. +.Fl v +shows only the option value, not the name. +If +.Fl q +is set, no error will be returned if +.Ar option +is unset. +.Fl H +includes hooks (omitted by default). +.Fl A +includes options inherited from a parent set of options, such options are +marked with an asterisk. .Ar value depends on the option and may be a number, a string, or a flag (on, off, or omitted to toggle). +.El .Pp Available server options are: .Bl -tag -width Ds @@ -3357,26 +3390,8 @@ copy mode. The default is .Ql \ -_@ . .El -.It Xo Ic set-window-option -.Op Fl aFgoqu -.Op Fl t Ar target-window -.Ar option Ar value -.Xc -.D1 (alias: Ic setw ) -Set a window option. -The -.Fl a , -.Fl F , -.Fl g , -.Fl o , -.Fl q -and -.Fl u -flags work similarly to the -.Ic set-option -command. .Pp -Supported window options are: +Available window options are: .Pp .Bl -tag -width Ds -compact .It Xo Ic aggressive-resize @@ -3436,7 +3451,7 @@ or later with or with a terminal escape sequence. It may be switched off globally with: .Bd -literal -offset indent -set-window-option -g automatic-rename off +set-option -wg automatic-rename off .Ed .Pp .It Ic automatic-rename-format Ar format @@ -3553,29 +3568,12 @@ see the section. Attributes are ignored. .Pp -.It Xo Ic remain-on-exit -.Op Ic on | off -.Xc -A window with this flag set is not destroyed when the program running in it -exits. -The window may be reactivated with the -.Ic respawn-window -command. -.Pp .It Xo Ic synchronize-panes .Op Ic on | off .Xc Duplicate input to any pane to all other panes in the same window (only for panes that are not in any special mode). .Pp -.It Ic window-active-style Ar style -Set the style for the window's active pane. -For how to specify -.Ar style , -see the -.Sx STYLES -section. -.Pp .It Ic window-status-activity-style Ar style Set status line style for windows with an activity alert. For how to specify @@ -3655,14 +3653,6 @@ command and the .Ic aggressive-resize option. .Pp -.It Ic window-style Ar style -Set the default window style. -For how to specify -.Ar style , -see the -.Sx STYLES -section. -.Pp .It Xo Ic wrap-search .Op Ic on | off .Xc @@ -3679,57 +3669,34 @@ will generate function key sequences; these have a number included to indicate modifiers such as Shift, Alt or Ctrl. .El -.It Xo Ic show-options -.Op Fl AgHqsvw -.Op Fl t Ar target-session | Ar target-window -.Op Ar option -.Xc -.D1 (alias: Ic show ) -Show the window options (or a single window option if given) with -.Fl w -(equivalent to -.Ic show-window-options ) , -the server options with -.Fl s , -otherwise the session options for -.Ar target session . -If -.Ar option -is given and is not a user option, -.Fl w -and -.Fl s -are unnecessary - -.Nm -will infer the type from the option name. -Global session or window options are listed if -.Fl g -is used. -.Fl v -shows only the option value, not the name. -If -.Fl q -is set, no error will be returned if -.Ar option -is unset. -.Fl H -includes hooks (omitted by default). -.Fl A -includes options inherited from a parent set of options, such options are -marked with an asterisk. -.It Xo Ic show-window-options -.Op Fl gv -.Op Fl t Ar target-window -.Op Ar option +.Pp +Available pane options are: +.Pp +.Bl -tag -width Ds -compact +.It Xo Ic remain-on-exit +.Op Ic on | off .Xc -.D1 (alias: Ic showw ) -List the window options or a single option for -.Ar target-window , -or the global window options if -.Fl g -is used. -.Fl v -shows only the option value, not the name. +A pane with this flag set is not destroyed when the program running in it +exits. +The pane may be reactivated with the +.Ic respawn-pane +command. +.Pp +.It Ic window-active-style Ar style +Set the pane style when it is the active pane. +For how to specify +.Ar style , +see the +.Sx STYLES +section. +.Pp +.It Ic window-style Ar style +Set the pane style. +For how to specify +.Ar style , +see the +.Sx STYLES +section. .El .Sh HOOKS .Nm diff --git a/tmux.c b/tmux.c index ac8a131a32..c3fe3ee6fc 100644 --- a/tmux.c +++ b/tmux.c @@ -321,11 +321,11 @@ main(int argc, char **argv) global_s_options = options_create(NULL); global_w_options = options_create(NULL); for (oe = options_table; oe->name != NULL; oe++) { - if (oe->scope == OPTIONS_TABLE_SERVER) + if (oe->scope & OPTIONS_TABLE_SERVER) options_default(global_options, oe); - if (oe->scope == OPTIONS_TABLE_SESSION) + if (oe->scope & OPTIONS_TABLE_SESSION) options_default(global_s_options, oe); - if (oe->scope == OPTIONS_TABLE_WINDOW) + if (oe->scope & OPTIONS_TABLE_WINDOW) options_default(global_w_options, oe); } diff --git a/tmux.h b/tmux.h index 0557e98d78..8adfcba8e8 100644 --- a/tmux.h +++ b/tmux.h @@ -810,6 +810,7 @@ struct window_pane { u_int active_point; struct window *window; + struct options *options; struct layout_cell *layout_cell; struct layout_cell *saved_layout_cell; @@ -836,6 +837,7 @@ struct window_pane { #define PANE_STATUSREADY 0x200 #define PANE_STATUSDRAWN 0x400 #define PANE_EMPTY 0x800 +#define PANE_STYLECHANGED 0x1000 int argc; char **argv; @@ -854,7 +856,8 @@ struct window_pane { struct input_ctx *ictx; - struct style style; + struct style cached_style; + struct style cached_active_style; int *palette; int pipe_fd; @@ -914,7 +917,6 @@ struct window { #define WINDOW_ACTIVITY 0x2 #define WINDOW_SILENCE 0x4 #define WINDOW_ZOOMED 0x8 -#define WINDOW_STYLECHANGED 0x10 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) int alerts_queued; @@ -922,9 +924,6 @@ struct window { struct options *options; - struct style style; - struct style active_style; - u_int references; TAILQ_HEAD(, winlink) winlinks; @@ -1605,12 +1604,11 @@ enum options_table_type { OPTIONS_TABLE_COMMAND }; -enum options_table_scope { - OPTIONS_TABLE_NONE, - OPTIONS_TABLE_SERVER, - OPTIONS_TABLE_SESSION, - OPTIONS_TABLE_WINDOW -}; +#define OPTIONS_TABLE_NONE 0 +#define OPTIONS_TABLE_SERVER 0x1 +#define OPTIONS_TABLE_SESSION 0x2 +#define OPTIONS_TABLE_WINDOW 0x4 +#define OPTIONS_TABLE_PANE 0x8 #define OPTIONS_TABLE_IS_ARRAY 0x1 #define OPTIONS_TABLE_IS_HOOK 0x2 @@ -1618,7 +1616,7 @@ enum options_table_scope { struct options_table_entry { const char *name; enum options_table_type type; - enum options_table_scope scope; + int scope; int flags; u_int minimum; @@ -1780,6 +1778,7 @@ void notify_pane(const char *, struct window_pane *); /* options.c */ struct options *options_create(struct options *); void options_free(struct options *); +void options_set_parent(struct options *, struct options *); struct options_entry *options_first(struct options *); struct options_entry *options_next(struct options_entry *); struct options_entry *options_empty(struct options *, @@ -1819,10 +1818,10 @@ struct options_entry *options_set_number(struct options *, const char *, long long); struct options_entry *options_set_style(struct options *, const char *, int, const char *); -enum options_table_scope options_scope_from_name(struct args *, int, +int options_scope_from_name(struct args *, int, const char *, struct cmd_find_state *, struct options **, char **); -enum options_table_scope options_scope_from_flags(struct args *, int, +int options_scope_from_flags(struct args *, int, struct cmd_find_state *, struct options **, char **); /* options-table.c */ diff --git a/tty.c b/tty.c index 05df4f0ff6..8d3b285863 100644 --- a/tty.c +++ b/tty.c @@ -2132,7 +2132,7 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, /* Ignore cell if it is the same as the last one. */ if (wp != NULL && (int)wp->id == tty->last_wp && - ~(wp->window->flags & WINDOW_STYLECHANGED) && + ~(wp->flags & PANE_STYLECHANGED) && gc->attr == tty->last_cell.attr && gc->fg == tty->last_cell.fg && gc->bg == tty->last_cell.bg) @@ -2514,30 +2514,28 @@ tty_try_colour(struct tty *tty, int colour, const char *type) static void tty_default_colours(struct grid_cell *gc, struct window_pane *wp) { - struct window *w = wp->window; - struct options *oo = w->options; - struct style *active, *pane, *window; - int c; - - if (w->flags & WINDOW_STYLECHANGED) { - w->flags &= ~WINDOW_STYLECHANGED; - active = options_get_style(oo, "window-active-style"); - style_copy(&w->active_style, active); - window = options_get_style(oo, "window-style"); - style_copy(&w->style, window); + struct options *oo = wp->options; + struct style *style, *active_style; + int c; + + if (wp->flags & PANE_STYLECHANGED) { + wp->flags &= ~PANE_STYLECHANGED; + + active_style = options_get_style(oo, "window-active-style"); + style = options_get_style(oo, "window-style"); + + style_copy(&wp->cached_active_style, active_style); + style_copy(&wp->cached_style, style); } else { - active = &w->active_style; - window = &w->style; + active_style = &wp->cached_active_style; + style = &wp->cached_style; } - pane = &wp->style; if (gc->fg == 8) { - if (pane->gc.fg != 8) - gc->fg = pane->gc.fg; - else if (wp == w->active && active->gc.fg != 8) - gc->fg = active->gc.fg; + if (wp == wp->window->active && active_style->gc.fg != 8) + gc->fg = active_style->gc.fg; else - gc->fg = window->gc.fg; + gc->fg = style->gc.fg; if (gc->fg != 8) { c = window_pane_get_palette(wp, gc->fg); @@ -2547,12 +2545,10 @@ tty_default_colours(struct grid_cell *gc, struct window_pane *wp) } if (gc->bg == 8) { - if (pane->gc.bg != 8) - gc->bg = pane->gc.bg; - else if (wp == w->active && active->gc.bg != 8) - gc->bg = active->gc.bg; + if (wp == wp->window->active && active_style->gc.bg != 8) + gc->bg = active_style->gc.bg; else - gc->bg = window->gc.bg; + gc->bg = style->gc.bg; if (gc->bg != 8) { c = window_pane_get_palette(wp, gc->bg); diff --git a/window.c b/window.c index e7941c7040..2578445476 100644 --- a/window.c +++ b/window.c @@ -313,7 +313,7 @@ window_create(u_int sx, u_int sy) w = xcalloc(1, sizeof *w); w->name = NULL; - w->flags = WINDOW_STYLECHANGED; + w->flags = 0; TAILQ_INIT(&w->panes); w->active = NULL; @@ -450,31 +450,37 @@ window_set_active_pane(struct window *w, struct window_pane *wp, int notify) void window_redraw_active_switch(struct window *w, struct window_pane *wp) { - struct style *sy; + struct style *sy1, *sy2; + int c1, c2; if (wp == w->active) return; - /* - * If window-style and window-active-style are the same, we don't need - * to redraw panes when switching active panes. - */ - sy = options_get_style(w->options, "window-active-style"); - if (style_equal(sy, options_get_style(w->options, "window-style"))) - return; - - /* - * If the now active or inactive pane do not have a custom style or if - * the palette is different, they need to be redrawn. - */ - if (window_pane_get_palette(w->active, w->active->style.gc.fg) != -1 || - window_pane_get_palette(w->active, w->active->style.gc.bg) != -1 || - style_is_default(&w->active->style)) - w->active->flags |= PANE_REDRAW; - if (window_pane_get_palette(wp, wp->style.gc.fg) != -1 || - window_pane_get_palette(wp, wp->style.gc.bg) != -1 || - style_is_default(&wp->style)) - wp->flags |= PANE_REDRAW; + for (;;) { + /* + * If the active and inactive styles or palettes are different, + * need to redraw the panes. + */ + sy1 = &wp->cached_style; + sy2 = &wp->cached_active_style; + if (!style_equal(sy1, sy2)) + wp->flags |= PANE_REDRAW; + else { + c1 = window_pane_get_palette(wp, sy1->gc.fg); + c2 = window_pane_get_palette(wp, sy2->gc.fg); + if (c1 != c2) + wp->flags |= PANE_REDRAW; + else { + c1 = window_pane_get_palette(wp, sy1->gc.bg); + c2 = window_pane_get_palette(wp, sy2->gc.bg); + if (c1 != c2) + wp->flags |= PANE_REDRAW; + } + } + if (wp == w->active) + break; + wp = w->active; + } } struct window_pane * @@ -778,6 +784,8 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp = xcalloc(1, sizeof *wp); wp->window = w; + wp->options = options_create(w->options); + wp->flags = PANE_STYLECHANGED; wp->id = next_window_pane_id++; RB_INSERT(window_pane_tree, &all_window_panes, wp); @@ -808,8 +816,6 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->saved_cx = UINT_MAX; wp->saved_cy = UINT_MAX; - style_set(&wp->style, &grid_default_cell); - screen_init(&wp->base, sx, sy, hlimit); wp->screen = &wp->base; @@ -852,6 +858,7 @@ window_pane_destroy(struct window_pane *wp) RB_REMOVE(window_pane_tree, &all_window_panes, wp); + options_free(wp->options); free((void *)wp->cwd); free(wp->shell); cmd_free_argv(wp->argc, wp->argv); From a0e2c1b4cae9269d04ee2e80e1d1cb8adc78cd8a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 20 Jun 2019 13:08:13 +0100 Subject: [PATCH 688/836] Add to CHANGES. --- CHANGES | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGES b/CHANGES index 9129fa3b57..95c8b6192d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,17 @@ CHANGES FROM 3.0 to X.X +* Add pane options, set with set-option -p and displayed with show-options -p. + Pane options inherit from window options (so every pane option is also + a window option). The pane style is now configured by setting window-style + and window-active-style in the pane options; select-pane -P and -g now change + the option but are no longer documented. + +* Do not document set-window-option and show-window-options. set-option -w and + show-options -w should be used instead. + +* Add a -A flag to show-options to show parent options as well (they are marked + with a *). + * Resize panes lazily - do not resize unless they are in an attached, active window. From c1573727f0ea1d8a2530edc1a7848d9aa1d6f590 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 13:39:17 +0000 Subject: [PATCH 689/836] Still need to walk the options tree for user options. --- cmd-show-options.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd-show-options.c b/cmd-show-options.c index 5b22b8bd16..0b9eb096db 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -200,6 +200,12 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item, int scope, u_int idx; int parent; + o = options_first(oo); + while (o != NULL) { + if (options_table_entry(o) == NULL) + cmd_show_options_print(self, item, o, -1, 0); + o = options_next(o); + } for (oe = options_table; oe->name != NULL; oe++) { if (~oe->scope & scope) continue; From fc1df91e034627f674ed905be6a1159da883545e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 13:40:22 +0000 Subject: [PATCH 690/836] allow-rename and alternate-screen can be pane options. --- input.c | 2 +- options-table.c | 4 ++-- tmux.1 | 43 ++++++++++++++++++++----------------------- window.c | 4 ++-- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/input.c b/input.c index 3e85e14f57..7df2a7b0a0 100644 --- a/input.c +++ b/input.c @@ -2259,7 +2259,7 @@ input_exit_rename(struct input_ctx *ictx) { if (ictx->flags & INPUT_DISCARD) return; - if (!options_get_number(ictx->wp->window->options, "allow-rename")) + if (!options_get_number(ictx->wp->options, "allow-rename")) return; log_debug("%s: \"%s\"", __func__, ictx->input_buf); diff --git a/options-table.c b/options-table.c index b287d66081..228cf3f0b8 100644 --- a/options-table.c +++ b/options-table.c @@ -563,13 +563,13 @@ const struct options_table_entry options_table[] = { { .name = "allow-rename", .type = OPTIONS_TABLE_FLAG, - .scope = OPTIONS_TABLE_WINDOW, + .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, .default_num = 0 }, { .name = "alternate-screen", .type = OPTIONS_TABLE_FLAG, - .scope = OPTIONS_TABLE_WINDOW, + .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, .default_num = 1 }, diff --git a/tmux.1 b/tmux.1 index ec7fdc3150..1315e29af1 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3410,29 +3410,6 @@ session; this option is good for full-screen programs which support .Dv SIGWINCH and poor for interactive programs such as shells. .Pp -.It Xo Ic allow-rename -.Op Ic on | off -.Xc -Allow programs to change the window name using a terminal escape -sequence (\eek...\ee\e\e). -The default is off. -.Pp -.It Xo Ic alternate-screen -.Op Ic on | off -.Xc -This option configures whether programs running inside -.Nm -may use the terminal alternate screen feature, which allows the -.Em smcup -and -.Em rmcup -.Xr terminfo 5 -capabilities. -The alternate screen feature preserves the contents of the window when an -interactive application starts and restores it on exit, so that any output -visible before the application starts reappears unchanged after it exits. -The default is on. -.Pp .It Xo Ic automatic-rename .Op Ic on | off .Xc @@ -3673,6 +3650,26 @@ as Shift, Alt or Ctrl. Available pane options are: .Pp .Bl -tag -width Ds -compact +.It Xo Ic allow-rename +.Op Ic on | off +.Xc +Allow programs in the pane to change the window name using a terminal escape +sequence (\eek...\ee\e\e). +.Pp +.It Xo Ic alternate-screen +.Op Ic on | off +.Xc +This option configures whether programs running inside the pane may use the +terminal alternate screen feature, which allows the +.Em smcup +and +.Em rmcup +.Xr terminfo 5 +capabilities. +The alternate screen feature preserves the contents of the window when an +interactive application starts and restores it on exit, so that any output +visible before the application starts reappears unchanged after it exits. +.Pp .It Xo Ic remain-on-exit .Op Ic on | off .Xc diff --git a/window.c b/window.c index 2578445476..77ca2ce228 100644 --- a/window.c +++ b/window.c @@ -944,7 +944,7 @@ window_pane_alternate_on(struct window_pane *wp, struct grid_cell *gc, if (wp->saved_grid != NULL) return; - if (!options_get_number(wp->window->options, "alternate-screen")) + if (!options_get_number(wp->options, "alternate-screen")) return; sx = screen_size_x(s); sy = screen_size_y(s); @@ -972,7 +972,7 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc, struct screen *s = &wp->base; u_int sx, sy; - if (!options_get_number(wp->window->options, "alternate-screen")) + if (!options_get_number(wp->options, "alternate-screen")) return; /* From f4e835754c7e13ed6e810104290608fe27c83cca Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 15:40:14 +0000 Subject: [PATCH 691/836] Fix how regex substitution works with empty matches. --- regsub.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/regsub.c b/regsub.c index 53c83a8f13..89355befe0 100644 --- a/regsub.c +++ b/regsub.c @@ -63,7 +63,8 @@ regsub(const char *pattern, const char *with, const char *text, int flags) { regex_t r; regmatch_t m[10]; - size_t start, end, len = 0; + ssize_t start, end, last, len = 0; + int empty = 0; char *buf = NULL; if (*text == '\0') @@ -72,9 +73,10 @@ regsub(const char *pattern, const char *with, const char *text, int flags) return (NULL); start = 0; + last = 0; end = strlen(text); - while (start != end) { + while (start <= end) { m[0].rm_so = start; m[0].rm_eo = end; @@ -82,14 +84,29 @@ regsub(const char *pattern, const char *with, const char *text, int flags) regsub_copy(&buf, &len, text, start, end); break; } - if (m[0].rm_so == m[0].rm_eo) { - regsub_copy(&buf, &len, text, start, end); - break; - } - regsub_copy(&buf, &len, text, start, m[0].rm_so); - regsub_expand(&buf, &len, with, text, m, nitems(m)); - start = m[0].rm_eo; + /* + * Append any text not part of this match (from the end of the + * last match). + */ + regsub_copy(&buf, &len, text, last, m[0].rm_so); + + /* + * If the last match was empty and this one isn't (it is either + * later or has matched text), expand this match. If it is + * empty, move on one character and try again from there. + */ + if (empty || m[0].rm_so != last || m[0].rm_so != m[0].rm_eo) { + regsub_expand(&buf, &len, with, text, m, nitems(m)); + + last = m[0].rm_eo; + start = m[0].rm_eo; + empty = 0; + } else { + last = m[0].rm_eo; + start = m[0].rm_eo + 1; + empty = 1; + } } buf[len] = '\0'; From cb5e681ef6f238a69ee6d366dd9760a49e28887b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 18:13:04 +0000 Subject: [PATCH 692/836] FIx return of options_scope_from_name on error. --- options.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/options.c b/options.c index bbb6af98b8..21ac82f9c2 100644 --- a/options.c +++ b/options.c @@ -741,7 +741,7 @@ options_scope_from_name(struct args *args, int window, struct window_pane *wp = fs->wp; const char *target = args_get(args, 't'); const struct options_table_entry *oe; - int scope; + int scope = OPTIONS_TABLE_NONE; if (*name == '@') return (options_scope_from_flags(args, window, fs, oo, cause)); @@ -754,21 +754,23 @@ options_scope_from_name(struct args *args, int window, xasprintf(cause, "unknown option: %s", name); return (OPTIONS_TABLE_NONE); } - scope = oe->scope; - - switch (scope) { + switch (oe->scope) { case OPTIONS_TABLE_SERVER: *oo = global_options; + scope = OPTIONS_TABLE_SERVER; break; case OPTIONS_TABLE_SESSION: - if (args_has(args, 'g')) + if (args_has(args, 'g')) { *oo = global_s_options; - else if (s == NULL && target != NULL) + scope = OPTIONS_TABLE_SESSION; + } else if (s == NULL && target != NULL) xasprintf(cause, "no such session: %s", target); else if (s == NULL) xasprintf(cause, "no current session"); - else + else { *oo = s->options; + scope = OPTIONS_TABLE_SESSION; + } break; case OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE: if (args_has(args, 'p')) { @@ -776,21 +778,26 @@ options_scope_from_name(struct args *args, int window, xasprintf(cause, "no such pane: %s", target); else if (wp == NULL) xasprintf(cause, "no current pane"); - else + else { *oo = wp->options; + scope = OPTIONS_TABLE_PANE; + } break; } scope = OPTIONS_TABLE_WINDOW; /* FALLTHROUGH */ case OPTIONS_TABLE_WINDOW: - if (args_has(args, 'g')) + if (args_has(args, 'g')) { *oo = global_w_options; - else if (wl == NULL && target != NULL) + scope = OPTIONS_TABLE_WINDOW; + } else if (wl == NULL && target != NULL) xasprintf(cause, "no such window: %s", target); else if (wl == NULL) xasprintf(cause, "no current window"); - else + else { *oo = wl->window->options; + scope = OPTIONS_TABLE_WINDOW; + } break; } return (scope); From 97a317a656e27523ed7437d8512be36080c739ed Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 19:29:38 +0000 Subject: [PATCH 693/836] Need to always check focus even if not current window. --- server-client.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server-client.c b/server-client.c index 14c2061724..e4862d849e 100644 --- a/server-client.c +++ b/server-client.c @@ -1265,10 +1265,11 @@ server_client_loop(void) break; } TAILQ_FOREACH(wp, &w->panes, entry) { - if (wl != NULL && wp->fd != -1) { + if (wp->fd != -1) { if (focus) server_client_check_focus(wp); - server_client_check_resize(wp); + if (wl != NULL) + server_client_check_resize(wp); } wp->flags &= ~PANE_REDRAW; } From 1d8e545bc1cf9de10b718dc81b422edf81dabe07 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 20:31:04 +0000 Subject: [PATCH 694/836] Add -r to find-window for regex instead of fnmatch. --- cmd-find-window.c | 81 ++++++++++++++++++++++++++++++++--------------- tmux.1 | 8 +++-- 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/cmd-find-window.c b/cmd-find-window.c index c2d230a54d..c29878b526 100644 --- a/cmd-find-window.c +++ b/cmd-find-window.c @@ -32,8 +32,8 @@ const struct cmd_entry cmd_find_window_entry = { .name = "find-window", .alias = "findw", - .args = { "CNt:TZ", 1, 1 }, - .usage = "[-CNTZ] " CMD_TARGET_PANE_USAGE " match-string", + .args = { "CNrt:TZ", 1, 1 }, + .usage = "[-CNrTZ] " CMD_TARGET_PANE_USAGE " match-string", .target = { 't', CMD_FIND_PANE, 0 }, @@ -57,30 +57,59 @@ cmd_find_window_exec(struct cmd *self, struct cmdq_item *item) if (!C && !N && !T) C = N = T = 1; - if (C && N && T) { - xasprintf(&filter, - "#{||:" - "#{C:%s},#{||:#{m:*%s*,#{window_name}}," - "#{m:*%s*,#{pane_title}}}}", - s, s, s); - } else if (C && N) { - xasprintf(&filter, - "#{||:#{C:%s},#{m:*%s*,#{window_name}}}", - s, s); - } else if (C && T) { - xasprintf(&filter, - "#{||:#{C:%s},#{m:*%s*,#{pane_title}}}", - s, s); - } else if (N && T) { - xasprintf(&filter, - "#{||:#{m:*%s*,#{window_name}},#{m:*%s*,#{pane_title}}}", - s, s); - } else if (C) - xasprintf(&filter, "#{C:%s}", s); - else if (N) - xasprintf(&filter, "#{m:*%s*,#{window_name}}", s); - else - xasprintf(&filter, "#{m:*%s*,#{pane_title}}", s); + if (!args_has(args, 'r')) { + if (C && N && T) { + xasprintf(&filter, + "#{||:" + "#{C:%s},#{||:#{m:*%s*,#{window_name}}," + "#{m:*%s*,#{pane_title}}}}", + s, s, s); + } else if (C && N) { + xasprintf(&filter, + "#{||:#{C:%s},#{m:*%s*,#{window_name}}}", + s, s); + } else if (C && T) { + xasprintf(&filter, + "#{||:#{C:%s},#{m:*%s*,#{pane_title}}}", + s, s); + } else if (N && T) { + xasprintf(&filter, + "#{||:#{m:*%s*,#{window_name}}," + "#{m:*%s*,#{pane_title}}}", + s, s); + } else if (C) + xasprintf(&filter, "#{C:%s}", s); + else if (N) + xasprintf(&filter, "#{m:*%s*,#{window_name}}", s); + else + xasprintf(&filter, "#{m:*%s*,#{pane_title}}", s); + } else { + if (C && N && T) { + xasprintf(&filter, + "#{||:" + "#{C/r:%s},#{||:#{m/r:%s,#{window_name}}," + "#{m/r:%s,#{pane_title}}}}", + s, s, s); + } else if (C && N) { + xasprintf(&filter, + "#{||:#{C/r:%s},#{m/r:%s,#{window_name}}}", + s, s); + } else if (C && T) { + xasprintf(&filter, + "#{||:#{C/r:%s},#{m/r:%s,#{pane_title}}}", + s, s); + } else if (N && T) { + xasprintf(&filter, + "#{||:#{m/r:%s,#{window_name}}," + "#{m/r:%s,#{pane_title}}}", + s, s); + } else if (C) + xasprintf(&filter, "#{C/r:%s}", s); + else if (N) + xasprintf(&filter, "#{m/r:%s,#{window_name}}", s); + else + xasprintf(&filter, "#{m/r:%s,#{pane_title}}", s); + } new_args = args_parse("", 1, &argv); if (args_has(args, 'Z')) diff --git a/tmux.1 b/tmux.1 index 1315e29af1..a7b4af05d5 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1828,14 +1828,16 @@ With .Fl b , other commands are not blocked from running until the indicator is closed. .It Xo Ic find-window -.Op Fl CNTZ +.Op Fl rCNTZ .Op Fl t Ar target-pane .Ar match-string .Xc .D1 (alias: Ic findw ) -Search for the +Search for a .Xr fnmatch 3 -pattern +pattern or, with +.Fl r , +regular expression .Ar match-string in window names, titles, and visible content (but not history). The flags control matching behavior: From e3c2772d2f7d876c5284062d7cb1695f5e395e9a Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 21 Jun 2019 07:11:01 +0000 Subject: [PATCH 695/836] Man page fixes from lacygoill at lacygoill dot me. --- tmux.1 | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tmux.1 b/tmux.1 index a7b4af05d5..f4ba74712d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -456,7 +456,7 @@ Will execute .Ic if-shell , the shell command .Xr true 1 , -.Ic new-window +.Ic split-window and .Ic kill-session in that order. @@ -470,7 +470,7 @@ commands and their arguments. This section describes the syntax of commands parsed by .Nm , for example in a configuration file or at the command prompt. -Note the when commands are entered into the shell, they are parsed by the shell +Note that when commands are entered into the shell, they are parsed by the shell - see for example .Xr ksh 1 or @@ -2333,9 +2333,7 @@ spreads the current pane and any panes next to it out evenly. Make pane .Ar target-pane the active pane in window -.Ar target-window , -or set its style (with -.Fl P ) . +.Ar target-window. If one of .Fl D , .Fl L , @@ -4065,7 +4063,7 @@ will expand the format twice, for example .Ql #{E:status-left} is the result of expanding the content of the .Ic status-left -option rather than the content itself. +option rather than the option itself. .Ql T: is like .Ql E: @@ -4101,7 +4099,7 @@ would change into .Ql bxBxbx . .Pp -In addition, the first line of a shell command's output may be inserted using +In addition, the last line of a shell command's output may be inserted using .Ql #() . For example, .Ql #(uptime) @@ -4120,6 +4118,14 @@ global environment set (see the .Sx GLOBAL AND SESSION ENVIRONMENT section). .Pp +An +.Ql l +specifies that a string should be interpreted literally and not expanded. +For example +.Ql #{l:#{?pane_in_mode,yes,no}} +will be replaced by +.Ql #{?pane_in_mode,yes,no} . +.Pp The following variables are available, where appropriate: .Bl -column "XXXXXXXXXXXXXXXXXXX" "XXXXX" .It Sy "Variable name" Ta Sy "Alias" Ta Sy "Replaced with" From f1100f97f7a06fcbebcf18b2c46e7f8f89fdd65b Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 23 Jun 2019 10:00:29 +0000 Subject: [PATCH 696/836] Do not always set scope for panes because the window check might fail, GitHub issue 1810. --- options.c | 1 - 1 file changed, 1 deletion(-) diff --git a/options.c b/options.c index 21ac82f9c2..1be9f8cd75 100644 --- a/options.c +++ b/options.c @@ -784,7 +784,6 @@ options_scope_from_name(struct args *args, int window, } break; } - scope = OPTIONS_TABLE_WINDOW; /* FALLTHROUGH */ case OPTIONS_TABLE_WINDOW: if (args_has(args, 'g')) { From bdab5950955539ea4ffab0816faf182607db4c2b Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 24 Jun 2019 08:20:02 +0000 Subject: [PATCH 697/836] Trim trailing spaces when matching. --- window.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/window.c b/window.c index 77ca2ce228..f900a1b280 100644 --- a/window.c +++ b/window.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -1222,6 +1223,7 @@ window_pane_search(struct window_pane *wp, const char *term, int regex, char *new = NULL, *line; u_int i; int flags = 0, found; + size_t n; if (!regex) { if (ignore) @@ -1236,6 +1238,12 @@ window_pane_search(struct window_pane *wp, const char *term, int regex, for (i = 0; i < screen_size_y(s); i++) { line = grid_view_string_cells(s->grid, 0, i, screen_size_x(s)); + for (n = strlen(line); n > 0; n--) { + if (!isspace((u_char)line[n - 1])) + break; + line[n - 1] = '\0'; + } + log_debug("%s: %s", __func__, line); if (!regex) found = (fnmatch(new, line, 0) == 0); else From 20b938bcb18b8ae8b0535a1bcf8e7e1670a830bc Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 24 Jun 2019 10:04:29 +0000 Subject: [PATCH 698/836] Expand arguments to C and s format modifiers (matches m which already expands). --- format.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/format.c b/format.c index 6b07e67efd..cb67405f3e 100644 --- a/format.c +++ b/format.c @@ -1644,13 +1644,15 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, goto fail; } else if (search != NULL) { /* Search in pane. */ + new = format_expand(ft, copy); if (wp == NULL) { - format_log(ft, "search '%s' but no pane", copy); + format_log(ft, "search '%s' but no pane", new); value = xstrdup("0"); } else { - format_log(ft, "search '%s' pane %%%u", copy, wp->id); - value = format_search(fm, wp, copy); + format_log(ft, "search '%s' pane %%%u", new, wp->id); + value = format_search(fm, wp, new); } + free(new); } else if (cmp != NULL) { /* Comparison of left and right. */ if (format_choose(ft, copy, &left, &right, 1) != 0) { @@ -1780,11 +1782,14 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, /* Perform substitution if any. */ if (sub != NULL) { - new = format_sub(sub, value, sub->argv[0], sub->argv[1]); - format_log(ft, "substituted '%s' to '%s': %s", sub->argv[0], - sub->argv[1], new); + left = format_expand(ft, sub->argv[0]); + right = format_expand(ft, sub->argv[1]); + new = format_sub(sub, value, left, right); + format_log(ft, "substitute '%s' to '%s': %s", left, right, new); free(value); value = new; + free(right); + free(left); } /* Truncate the value if needed. */ From d83f356218fc9144735667e39c9553bcf905d10b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 13:03:47 +0000 Subject: [PATCH 699/836] Add #define for the pane status line option position numbers. --- layout.c | 36 ++++++++++++++++++------------------ options-table.c | 2 +- screen-redraw.c | 22 +++++++++------------- tmux.h | 5 +++++ window.c | 48 ++++++++++++++++++++++++++++++++++++------------ 5 files changed, 69 insertions(+), 44 deletions(-) diff --git a/layout.c b/layout.c index 86d307ef3a..6e78b43932 100644 --- a/layout.c +++ b/layout.c @@ -232,20 +232,20 @@ layout_fix_offsets(struct layout_cell *lc) * case for the most upper panes only. */ static int -layout_need_status(struct layout_cell *lc, int at_top) +layout_need_status(struct layout_cell *lc, int status) { - struct layout_cell *first_lc; + struct layout_cell *next; if (lc->parent != NULL) { if (lc->parent->type == LAYOUT_LEFTRIGHT) - return (layout_need_status(lc->parent, at_top)); + return (layout_need_status(lc->parent, status)); - if (at_top) - first_lc = TAILQ_FIRST(&lc->parent->cells); + if (status == PANE_STATUS_TOP) + next = TAILQ_FIRST(&lc->parent->cells); else - first_lc = TAILQ_LAST(&lc->parent->cells,layout_cells); - if (lc == first_lc) - return (layout_need_status(lc->parent, at_top)); + next = TAILQ_LAST(&lc->parent->cells,layout_cells); + if (lc == next) + return (layout_need_status(lc->parent, status)); return (0); } return (1); @@ -264,8 +264,8 @@ layout_fix_panes(struct window *w) if ((lc = wp->layout_cell) == NULL) continue; - if (status != 0) - shift = layout_need_status(lc, status == 1); + if (status != PANE_STATUS_OFF) + shift = layout_need_status(lc, status); else shift = 0; @@ -317,8 +317,8 @@ layout_resize_check(struct window *w, struct layout_cell *lc, available = lc->sx; else { available = lc->sy; - if (status != 0) - minimum += layout_need_status(lc, status == 1); + if (status != PANE_STATUS_OFF) + minimum += layout_need_status(lc, status); } if (available > minimum) available -= minimum; @@ -862,8 +862,8 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, break; case LAYOUT_TOPBOTTOM: minimum = PANE_MINIMUM * 2 + 1; - if (status != 0) - minimum += layout_need_status(lc, status == 1); + if (status != PANE_STATUS_OFF) + minimum += layout_need_status(lc, status); if (sy < minimum) return (NULL); break; @@ -1030,8 +1030,8 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) size = parent->sx; else if (parent->type == LAYOUT_TOPBOTTOM) { size = parent->sy; - if (status != 0) - size -= layout_need_status(parent, status == 1); + if (status != PANE_STATUS_OFF) + size -= layout_need_status(parent, status); } else return (0); if (size < number - 1) @@ -1050,8 +1050,8 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { this = each; - if (status != 0) - this += layout_need_status(lc, status == 1); + if (status != PANE_STATUS_OFF) + this += layout_need_status(lc, status); change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } diff --git a/options-table.c b/options-table.c index 228cf3f0b8..7bb767c732 100644 --- a/options-table.c +++ b/options-table.c @@ -689,7 +689,7 @@ const struct options_table_entry options_table[] = { .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_WINDOW, .choices = options_table_pane_status_list, - .default_num = 0 + .default_num = PANE_STATUS_OFF }, { .name = "pane-border-style", diff --git a/screen-redraw.c b/screen-redraw.c index 65e890b6aa..2943e73bbe 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -45,10 +45,6 @@ static void screen_redraw_draw_pane(struct screen_redraw_ctx *, #define CELL_BORDERS " xqlkmjwvtun~" -#define CELL_STATUS_OFF 0 -#define CELL_STATUS_TOP 1 -#define CELL_STATUS_BOTTOM 2 - /* Check if cell is on the border of a particular pane. */ static int screen_redraw_cell_border1(struct window_pane *wp, u_int px, u_int py) @@ -112,12 +108,12 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, if (px > w->sx || py > w->sy) return (CELL_OUTSIDE); - if (pane_status != CELL_STATUS_OFF) { + if (pane_status != PANE_STATUS_OFF) { TAILQ_FOREACH(wp, &w->panes, entry) { if (!window_pane_visible(wp)) continue; - if (pane_status == CELL_STATUS_TOP) + if (pane_status == PANE_STATUS_TOP) line = wp->yoff - 1; else line = wp->yoff + wp->sy; @@ -153,7 +149,7 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int py, int pane_status, borders |= 8; if (px <= w->sx && screen_redraw_cell_border(c, px + 1, py)) borders |= 4; - if (pane_status == CELL_STATUS_TOP) { + if (pane_status == PANE_STATUS_TOP) { if (py != 0 && screen_redraw_cell_border(c, px, py - 1)) borders |= 2; } else { @@ -208,9 +204,9 @@ screen_redraw_check_is(u_int px, u_int py, int type, int pane_status, border = screen_redraw_cell_border1(wantwp, px, py); if (border == 0 || border == -1) return (0); - if (pane_status == CELL_STATUS_TOP && border == 4) + if (pane_status == PANE_STATUS_TOP && border == 4) return (0); - if (pane_status == CELL_STATUS_BOTTOM && border == 3) + if (pane_status == PANE_STATUS_BOTTOM && border == 3) return (0); /* If there are more than two panes, that's enough. */ @@ -222,7 +218,7 @@ screen_redraw_check_is(u_int px, u_int py, int type, int pane_status, return (1); /* With status lines mark the entire line. */ - if (pane_status != CELL_STATUS_OFF) + if (pane_status != PANE_STATUS_OFF) return (1); /* Check if the pane covers the whole width. */ @@ -324,7 +320,7 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) s = &wp->status_screen; size = wp->status_size; - if (ctx->pane_status == CELL_STATUS_TOP) + if (ctx->pane_status == PANE_STATUS_TOP) yoff = wp->yoff - 1; else yoff = wp->yoff + wp->sy; @@ -386,7 +382,7 @@ screen_redraw_update(struct client *c, int flags) if (c->overlay_draw != NULL) flags |= CLIENT_REDRAWOVERLAY; - if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) { + if (options_get_number(wo, "pane-border-status") != PANE_STATUS_OFF) { redraw = 0; TAILQ_FOREACH(wp, &w->panes, entry) { if (screen_redraw_make_pane_status(c, w, wp)) @@ -441,7 +437,7 @@ screen_redraw_screen(struct client *c) screen_redraw_set_context(c, &ctx); if (flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) { - if (ctx.pane_status != CELL_STATUS_OFF) + if (ctx.pane_status != PANE_STATUS_OFF) screen_redraw_draw_pane_status(&ctx); screen_redraw_draw_borders(&ctx); } diff --git a/tmux.h b/tmux.h index 8adfcba8e8..ba257ea853 100644 --- a/tmux.h +++ b/tmux.h @@ -955,6 +955,11 @@ TAILQ_HEAD(winlink_stack, winlink); #define WINDOW_SIZE_SMALLEST 1 #define WINDOW_SIZE_MANUAL 2 +/* Pane border status option. */ +#define PANE_STATUS_OFF 0 +#define PANE_STATUS_TOP 1 +#define PANE_STATUS_BOTTOM 2 + /* Layout direction. */ enum layout_type { LAYOUT_LEFTRIGHT, diff --git a/window.c b/window.c index f900a1b280..c8b9b710d9 100644 --- a/window.c +++ b/window.c @@ -1288,25 +1288,35 @@ window_pane_choose_best(struct window_pane **list, u_int size) struct window_pane * window_pane_find_up(struct window_pane *wp) { + struct window *w; struct window_pane *next, *best, **list; u_int edge, left, right, end, size; int status, found; if (wp == NULL) return (NULL); - status = options_get_number(wp->window->options, "pane-border-status"); + w = wp->window; + status = options_get_number(w->options, "pane-border-status"); list = NULL; size = 0; edge = wp->yoff; - if (edge == (status == 1 ? 1 : 0)) - edge = wp->window->sy + 1 - (status == 2 ? 1 : 0); + if (status == PANE_STATUS_TOP) { + if (edge == 1) + edge = w->sy + 1; + } else if (status == PANE_STATUS_BOTTOM) { + if (edge == 0) + edge = w->sy; + } else { + if (edge == 0) + edge = w->sy + 1; + } left = wp->xoff; right = wp->xoff + wp->sx; - TAILQ_FOREACH(next, &wp->window->panes, entry) { + TAILQ_FOREACH(next, &w->panes, entry) { if (next == wp) continue; if (next->yoff + next->sy + 1 != edge) @@ -1335,25 +1345,35 @@ window_pane_find_up(struct window_pane *wp) struct window_pane * window_pane_find_down(struct window_pane *wp) { + struct window *w; struct window_pane *next, *best, **list; u_int edge, left, right, end, size; int status, found; if (wp == NULL) return (NULL); - status = options_get_number(wp->window->options, "pane-border-status"); + w = wp->window; + status = options_get_number(w->options, "pane-border-status"); list = NULL; size = 0; edge = wp->yoff + wp->sy + 1; - if (edge >= wp->window->sy - (status == 2 ? 1 : 0)) - edge = (status == 1 ? 1 : 0); + if (status == PANE_STATUS_TOP) { + if (edge >= w->sy) + edge = 1; + } else if (status == PANE_STATUS_BOTTOM) { + if (edge >= w->sy - 1) + edge = 0; + } else { + if (edge >= wp->sy) + edge = 0; + } left = wp->xoff; right = wp->xoff + wp->sx; - TAILQ_FOREACH(next, &wp->window->panes, entry) { + TAILQ_FOREACH(next, &w->panes, entry) { if (next == wp) continue; if (next->yoff != edge) @@ -1382,24 +1402,26 @@ window_pane_find_down(struct window_pane *wp) struct window_pane * window_pane_find_left(struct window_pane *wp) { + struct window *w; struct window_pane *next, *best, **list; u_int edge, top, bottom, end, size; int found; if (wp == NULL) return (NULL); + w = wp->window; list = NULL; size = 0; edge = wp->xoff; if (edge == 0) - edge = wp->window->sx + 1; + edge = w->sx + 1; top = wp->yoff; bottom = wp->yoff + wp->sy; - TAILQ_FOREACH(next, &wp->window->panes, entry) { + TAILQ_FOREACH(next, &w->panes, entry) { if (next == wp) continue; if (next->xoff + next->sx + 1 != edge) @@ -1428,24 +1450,26 @@ window_pane_find_left(struct window_pane *wp) struct window_pane * window_pane_find_right(struct window_pane *wp) { + struct window *w; struct window_pane *next, *best, **list; u_int edge, top, bottom, end, size; int found; if (wp == NULL) return (NULL); + w = wp->window; list = NULL; size = 0; edge = wp->xoff + wp->sx + 1; - if (edge >= wp->window->sx) + if (edge >= w->sx) edge = 0; top = wp->yoff; bottom = wp->yoff + wp->sy; - TAILQ_FOREACH(next, &wp->window->panes, entry) { + TAILQ_FOREACH(next, &w->panes, entry) { if (next == wp) continue; if (next->xoff != edge) From 80d76612b8e8a572f96a58bcbd217f81d58d9b0f Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 13:05:06 +0000 Subject: [PATCH 700/836] Fix some comments (top/bottom not left/right). --- tty.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tty.c b/tty.c index 8d3b285863..1c0c88d462 100644 --- a/tty.c +++ b/tty.c @@ -1060,17 +1060,17 @@ tty_clamp_area(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py, *y = ctx->yoff + py - ctx->oy; *ry = ny; } else if (yoff < ctx->oy && yoff + ny > ctx->oy + ctx->sy) { - /* Both left and right not visible. */ + /* Both top and bottom not visible. */ *j = ctx->oy; *y = 0; *ry = ctx->sy; } else if (yoff < ctx->oy) { - /* Left not visible. */ + /* Top not visible. */ *j = ctx->oy - (ctx->yoff + py); *y = 0; *ry = ny - *j; } else { - /* Right not visible. */ + /* Bottom not visible. */ *j = 0; *y = (ctx->yoff + py) - ctx->oy; *ry = ctx->sy - *y; From c599ad63f8857bd74e85150e60339fd2efbb9650 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 13:05:24 +0000 Subject: [PATCH 701/836] Log window and pane resizes. --- window.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/window.c b/window.c index c8b9b710d9..8108600dd2 100644 --- a/window.c +++ b/window.c @@ -412,6 +412,7 @@ window_set_name(struct window *w, const char *new_name) void window_resize(struct window *w, u_int sx, u_int sy) { + log_debug("%s: @%u resize %ux%u", __func__, w->id, sx, sy); w->sx = sx; w->sy = sy; } @@ -923,6 +924,7 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) wp->sx = sx; wp->sy = sy; + log_debug("%s: %%%u resize %ux%u", __func__, wp->id, sx, sy); screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL); wme = TAILQ_FIRST(&wp->modes); From 87ea14328ce60fdfb8bd0aef15b7e3b3bdccb1ed Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 18:28:31 +0000 Subject: [PATCH 702/836] Pass keys that aren't 0-9 on to normal key processing when display-panes is active (restores previous behaviour). --- cmd-display-panes.c | 2 +- server-client.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index aa665f08b3..df97819c0b 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -204,7 +204,7 @@ cmd_display_panes_key(struct client *c, struct key_event *event) struct cmd_parse_result *pr; if (event->key < '0' || event->key > '9') - return (1); + return (-1); wp = window_pane_at_index(w, event->key - '0'); if (wp == NULL) diff --git a/server-client.c b/server-client.c index e4862d849e..a982fe8ec9 100644 --- a/server-client.c +++ b/server-client.c @@ -1220,9 +1220,13 @@ server_client_handle_key(struct client *c, struct key_event *event) * blocked so they need to be processed immediately rather than queued. */ if ((~c->flags & CLIENT_READONLY) && c->overlay_key != NULL) { - if (c->overlay_key(c, event) != 0) + switch (c->overlay_key(c, event)) { + case 0: + return (0); + case 1: server_client_clear_overlay(c); - return (0); + return (0); + } } /* From 3a6d90adadfcd4aa6b513df7f8ae5c4dcc05a6dc Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 18:44:22 +0000 Subject: [PATCH 703/836] Fix a typo in window_pane_find_down (w not wp) and a missing PANE_STATUS_TOP. --- layout.c | 4 ++-- window.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/layout.c b/layout.c index 6e78b43932..e84da93682 100644 --- a/layout.c +++ b/layout.c @@ -272,7 +272,7 @@ layout_fix_panes(struct window *w) wp->xoff = lc->xoff; wp->yoff = lc->yoff; - if (shift && status == 1) + if (shift && status == PANE_STATUS_TOP) wp->yoff += 1; window_pane_resize(wp, lc->sx, lc->sy - shift); @@ -1021,7 +1021,7 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) number = 0; TAILQ_FOREACH (lc, &parent->cells, entry) - number++; + number++; if (number <= 1) return (0); status = options_get_number(w->options, "pane-border-status"); diff --git a/window.c b/window.c index 8108600dd2..65097e1c9b 100644 --- a/window.c +++ b/window.c @@ -1368,7 +1368,7 @@ window_pane_find_down(struct window_pane *wp) if (edge >= w->sy - 1) edge = 0; } else { - if (edge >= wp->sy) + if (edge >= w->sy) edge = 0; } From 5a501a8ae27c2d0128870caa48c5708e97528567 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 26 Jun 2019 18:28:31 +0000 Subject: [PATCH 704/836] Pass keys that aren't 0-9 on to normal key processing when display-panes is active (restores previous behaviour). --- cmd-display-panes.c | 2 +- server-client.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd-display-panes.c b/cmd-display-panes.c index aeeb6936bc..7f38cd9eab 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -204,7 +204,7 @@ cmd_display_panes_key(struct client *c, struct key_event *event) struct cmd_parse_result *pr; if (event->key < '0' || event->key > '9') - return (1); + return (-1); wp = window_pane_at_index(w, event->key - '0'); if (wp == NULL) diff --git a/server-client.c b/server-client.c index 7381eb52d8..0d0d561c38 100644 --- a/server-client.c +++ b/server-client.c @@ -1218,9 +1218,13 @@ server_client_handle_key(struct client *c, struct key_event *event) * blocked so they need to be processed immediately rather than queued. */ if ((~c->flags & CLIENT_READONLY) && c->overlay_key != NULL) { - if (c->overlay_key(c, event) != 0) + switch (c->overlay_key(c, event)) { + case 0: + return (0); + case 1: server_client_clear_overlay(c); - return (0); + return (0); + } } /* From dae2868d1227b95fd076fb4a5efa6256c7245943 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 27 Jun 2019 15:17:41 +0000 Subject: [PATCH 705/836] Add support for underscore colours with Setulc capability, mostly from Kai Moschcau. --- colour.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++--- grid.c | 6 ++-- input.c | 11 +++++-- screen-write.c | 2 +- style.c | 2 +- tmux.1 | 30 +++++++++++++++--- tmux.h | 5 ++- tty-term.c | 1 + tty.c | 64 +++++++++++++++++++++++++++++++++++--- 9 files changed, 184 insertions(+), 21 deletions(-) diff --git a/colour.c b/colour.c index eaee60588c..c797287837 100644 --- a/colour.c +++ b/colour.c @@ -230,11 +230,85 @@ colour_fromstring(const char *s) return (-1); } -/* Convert 256 colour palette to 16. */ -u_char -colour_256to16(u_char c) +/* Convert 256 colour to RGB colour. */ +int +colour_256toRGB(int c) +{ + static const int table[256] = { + 0x000000, 0x800000, 0x008000, 0x808000, + 0x000080, 0x800080, 0x008080, 0xc0c0c0, + 0x808080, 0xff0000, 0x00ff00, 0xffff00, + 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff, + 0x000000, 0x00005f, 0x000087, 0x0000af, + 0x0000d7, 0x0000ff, 0x005f00, 0x005f5f, + 0x005f87, 0x005faf, 0x005fd7, 0x005fff, + 0x008700, 0x00875f, 0x008787, 0x0087af, + 0x0087d7, 0x0087ff, 0x00af00, 0x00af5f, + 0x00af87, 0x00afaf, 0x00afd7, 0x00afff, + 0x00d700, 0x00d75f, 0x00d787, 0x00d7af, + 0x00d7d7, 0x00d7ff, 0x00ff00, 0x00ff5f, + 0x00ff87, 0x00ffaf, 0x00ffd7, 0x00ffff, + 0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, + 0x5f00d7, 0x5f00ff, 0x5f5f00, 0x5f5f5f, + 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff, + 0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, + 0x5f87d7, 0x5f87ff, 0x5faf00, 0x5faf5f, + 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff, + 0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, + 0x5fd7d7, 0x5fd7ff, 0x5fff00, 0x5fff5f, + 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff, + 0x870000, 0x87005f, 0x870087, 0x8700af, + 0x8700d7, 0x8700ff, 0x875f00, 0x875f5f, + 0x875f87, 0x875faf, 0x875fd7, 0x875fff, + 0x878700, 0x87875f, 0x878787, 0x8787af, + 0x8787d7, 0x8787ff, 0x87af00, 0x87af5f, + 0x87af87, 0x87afaf, 0x87afd7, 0x87afff, + 0x87d700, 0x87d75f, 0x87d787, 0x87d7af, + 0x87d7d7, 0x87d7ff, 0x87ff00, 0x87ff5f, + 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff, + 0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, + 0xaf00d7, 0xaf00ff, 0xaf5f00, 0xaf5f5f, + 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff, + 0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, + 0xaf87d7, 0xaf87ff, 0xafaf00, 0xafaf5f, + 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff, + 0xafd700, 0xafd75f, 0xafd787, 0xafd7af, + 0xafd7d7, 0xafd7ff, 0xafff00, 0xafff5f, + 0xafff87, 0xafffaf, 0xafffd7, 0xafffff, + 0xd70000, 0xd7005f, 0xd70087, 0xd700af, + 0xd700d7, 0xd700ff, 0xd75f00, 0xd75f5f, + 0xd75f87, 0xd75faf, 0xd75fd7, 0xd75fff, + 0xd78700, 0xd7875f, 0xd78787, 0xd787af, + 0xd787d7, 0xd787ff, 0xd7af00, 0xd7af5f, + 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff, + 0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, + 0xd7d7d7, 0xd7d7ff, 0xd7ff00, 0xd7ff5f, + 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff, + 0xff0000, 0xff005f, 0xff0087, 0xff00af, + 0xff00d7, 0xff00ff, 0xff5f00, 0xff5f5f, + 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff, + 0xff8700, 0xff875f, 0xff8787, 0xff87af, + 0xff87d7, 0xff87ff, 0xffaf00, 0xffaf5f, + 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff, + 0xffd700, 0xffd75f, 0xffd787, 0xffd7af, + 0xffd7d7, 0xffd7ff, 0xffff00, 0xffff5f, + 0xffff87, 0xffffaf, 0xffffd7, 0xffffff, + 0x080808, 0x121212, 0x1c1c1c, 0x262626, + 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e, + 0x585858, 0x626262, 0x6c6c6c, 0x767676, + 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e, + 0xa8a8a8, 0xb2b2b2, 0xbcbcbc, 0xc6c6c6, + 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee + }; + + return (table[c & 0xff] | COLOUR_FLAG_RGB); +} + +/* Convert 256 colour to 16 colour. */ +int +colour_256to16(int c) { - static const u_char table[256] = { + static const char table[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 4, 4, 4, 12, 12, 2, 6, 4, 4, 12, 12, 2, 2, 6, 4, 12, 12, 2, 2, 2, 6, 12, 12, 10, 10, 10, 10, 14, 12, 10, 10, @@ -253,5 +327,5 @@ colour_256to16(u_char c) 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15 }; - return (table[c]); + return (table[c & 0xff]); } diff --git a/grid.c b/grid.c index d185f3647a..cddb587171 100644 --- a/grid.c +++ b/grid.c @@ -37,12 +37,12 @@ /* Default grid cell data. */ const struct grid_cell grid_default_cell = { - 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } + 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } }; /* Cleared grid cell data. */ const struct grid_cell grid_cleared_cell = { - GRID_FLAG_CLEARED, 0, 8, 8, { { ' ' }, 0, 1, 1 } + GRID_FLAG_CLEARED, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } }; static const struct grid_cell_entry grid_cleared_entry = { GRID_FLAG_CLEARED, { .data = { 0, 8, 8, ' ' } } @@ -82,6 +82,8 @@ grid_need_extended_cell(const struct grid_cell_entry *gce, return (1); if ((gc->fg & COLOUR_FLAG_RGB) || (gc->bg & COLOUR_FLAG_RGB)) return (1); + if (gc->us != 0) /* only supports 256 or RGB */ + return (1); return (0); } diff --git a/input.c b/input.c index 7df2a7b0a0..ff8d7a171a 100644 --- a/input.c +++ b/input.c @@ -1829,6 +1829,8 @@ input_csi_dispatch_sgr_256_do(struct input_ctx *ictx, int fgbg, int c) gc->fg = c | COLOUR_FLAG_256; else if (fgbg == 48) gc->bg = c | COLOUR_FLAG_256; + else if (fgbg == 58) + gc->us = c | COLOUR_FLAG_256; } return (1); } @@ -1862,6 +1864,8 @@ input_csi_dispatch_sgr_rgb_do(struct input_ctx *ictx, int fgbg, int r, int g, gc->fg = colour_join_rgb(r, g, b); else if (fgbg == 48) gc->bg = colour_join_rgb(r, g, b); + else if (fgbg == 58) + gc->us = colour_join_rgb(r, g, b); return (1); } @@ -1938,7 +1942,7 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) } return; } - if (n < 2 || (p[0] != 38 && p[0] != 48)) + if (n < 2 || (p[0] != 38 && p[0] != 48 && p[0] != 58)) return; switch (p[1]) { case 2: @@ -1983,7 +1987,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) if (n == -1) continue; - if (n == 38 || n == 48) { + if (n == 38 || n == 48 || n == 58) { i++; switch (input_get(ictx, i, 0, -1)) { case 2: @@ -2078,6 +2082,9 @@ input_csi_dispatch_sgr(struct input_ctx *ictx) case 55: gc->attr &= ~GRID_ATTR_OVERLINE; break; + case 59: + gc->us = 0; + break; case 90: case 91: case 92: diff --git a/screen-write.c b/screen-write.c index 174c7a8274..631328a3c7 100644 --- a/screen-write.c +++ b/screen-write.c @@ -36,7 +36,7 @@ static const struct grid_cell *screen_write_combine(struct screen_write_ctx *, const struct utf8_data *, u_int *); static const struct grid_cell screen_write_pad_cell = { - GRID_FLAG_PADDING, 0, 8, 8, { { 0 }, 0, 0, 0 } + GRID_FLAG_PADDING, 0, 8, 8, 0, { { 0 }, 0, 0, 0 } }; struct screen_write_collect_item { diff --git a/style.c b/style.c index ce78175ae4..4c6174c752 100644 --- a/style.c +++ b/style.c @@ -30,7 +30,7 @@ /* Default style. */ static struct style style_default = { - { 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } }, + { 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } }, STYLE_ALIGN_DEFAULT, STYLE_LIST_OFF, diff --git a/tmux.1 b/tmux.1 index f4ba74712d..8b0932204d 100644 --- a/tmux.1 +++ b/tmux.1 @@ -5044,11 +5044,33 @@ $ printf '\e033]12;red\e033\e\e' .Ed .It Em \&Smol Enable the overline attribute. +The capability is usually SGR 53 and can be added to +.Ic terminal-overrides +as: +.Bd -literal -offset indent +Smol=\eE[53m +.Ed .It Em \&Smulx -Set a styled underline. -The single parameter is one of: 0 for no underline, 1 for normal -underline, 2 for double underline, 3 for curly underline, 4 for dotted -underline and 5 for dashed underline. +Set a styled underscore. +The single parameter is one of: 0 for no underscore, 1 for normal +underscore, 2 for double underscore, 3 for curly underscore, 4 for dotted +underscore and 5 for dashed underscore. +The capability can typically be added to +.Ic terminal-overrides +as: +.Bd -literal -offset indent +Smulx=\eE[4::%p1%dm +.Ed +.It Em \&Setulc +Set the underscore colour. +The argument is (red * 65536) + (green * 256) + blue where each is between 0 +and 255. +The capability can typically be added to +.Ic terminal-overrides +as: +.Bd -literal -offset indent +Setulc=\eE[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m +.Ed .It Em \&Ss , Se Set or reset the cursor style. If set, a sequence such as this may be used diff --git a/tmux.h b/tmux.h index ba257ea853..7126b30fcb 100644 --- a/tmux.h +++ b/tmux.h @@ -427,6 +427,7 @@ enum tty_code_code { TTYC_SETAF, TTYC_SETRGBB, TTYC_SETRGBF, + TTYC_SETULC, TTYC_SGR0, TTYC_SITM, TTYC_SMACS, @@ -599,6 +600,7 @@ struct grid_cell { u_short attr; int fg; int bg; + int us; struct utf8_data data; }; struct grid_cell_entry { @@ -2194,7 +2196,8 @@ int colour_join_rgb(u_char, u_char, u_char); void colour_split_rgb(int, u_char *, u_char *, u_char *); const char *colour_tostring(int); int colour_fromstring(const char *s); -u_char colour_256to16(u_char); +int colour_256toRGB(int); +int colour_256to16(int); /* attributes.c */ const char *attributes_tostring(int); diff --git a/tty-term.c b/tty-term.c index 83bfcdc140..39e2b013ae 100644 --- a/tty-term.c +++ b/tty-term.c @@ -246,6 +246,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_SETAF] = { TTYCODE_STRING, "setaf" }, [TTYC_SETRGBB] = { TTYCODE_STRING, "setrgbb" }, [TTYC_SETRGBF] = { TTYCODE_STRING, "setrgbf" }, + [TTYC_SETULC] = { TTYCODE_STRING, "Setulc" }, [TTYC_SE] = { TTYCODE_STRING, "Se" }, [TTYC_SGR0] = { TTYCODE_STRING, "sgr0" }, [TTYC_SITM] = { TTYCODE_STRING, "sitm" }, diff --git a/tty.c b/tty.c index 1c0c88d462..c3e2f0f64a 100644 --- a/tty.c +++ b/tty.c @@ -49,8 +49,11 @@ static void tty_check_fg(struct tty *, struct window_pane *, struct grid_cell *); static void tty_check_bg(struct tty *, struct window_pane *, struct grid_cell *); +static void tty_check_us(struct tty *, struct window_pane *, + struct grid_cell *); static void tty_colours_fg(struct tty *, const struct grid_cell *); static void tty_colours_bg(struct tty *, const struct grid_cell *); +static void tty_colours_us(struct tty *, const struct grid_cell *); static void tty_region_pane(struct tty *, const struct tty_ctx *, u_int, u_int); @@ -1287,6 +1290,7 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, gcp->attr != last.attr || gcp->fg != last.fg || gcp->bg != last.bg || + gcp->us != last.us || ux + width + gcp->data.width > nx || (sizeof buf) - len < gcp->data.size)) { tty_attributes(tty, &last, wp); @@ -2135,7 +2139,8 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, ~(wp->flags & PANE_STYLECHANGED) && gc->attr == tty->last_cell.attr && gc->fg == tty->last_cell.fg && - gc->bg == tty->last_cell.bg) + gc->bg == tty->last_cell.bg && + gc->us == tty->last_cell.us) return; tty->last_wp = (wp != NULL ? (int)wp->id : -1); memcpy(&tty->last_cell, gc, sizeof tty->last_cell); @@ -2163,14 +2168,18 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, /* Fix up the colours if necessary. */ tty_check_fg(tty, wp, &gc2); tty_check_bg(tty, wp, &gc2); + tty_check_us(tty, wp, &gc2); - /* If any bits are being cleared, reset everything. */ - if (tc->attr & ~gc2.attr) + /* + * If any bits are being cleared or the underline colour is now default, + * reset everything. + */ + if ((tc->attr & ~gc2.attr) || (tc->us != gc2.us && gc2.us == 0)) tty_reset(tty); /* * Set the colours. This may call tty_reset() (so it comes next) and - * may add to (NOT remove) the desired attributes by changing new_attr. + * may add to (NOT remove) the desired attributes. */ tty_colours(tty, &gc2); @@ -2223,7 +2232,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) int have_ax; /* No changes? Nothing is necessary. */ - if (gc->fg == tc->fg && gc->bg == tc->bg) + if (gc->fg == tc->fg && gc->bg == tc->bg && gc->us == tc->us) return; /* @@ -2271,6 +2280,10 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) */ if (!COLOUR_DEFAULT(gc->bg) && gc->bg != tc->bg) tty_colours_bg(tty, gc); + + /* Set the underscore color. */ + if (gc->us != tc->us) + tty_colours_us(tty, gc); } static void @@ -2385,6 +2398,22 @@ tty_check_bg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) gc->bg -= 90; } +static void +tty_check_us(__unused struct tty *tty, struct window_pane *wp, struct grid_cell *gc) +{ + int c; + + /* Perform substitution if this pane has a palette. */ + if (~gc->flags & GRID_FLAG_NOPALETTE) { + if ((c = window_pane_get_palette(wp, gc->us)) != -1) + gc->us = c; + } + + /* Underscore colour is set as RGB so convert a 256 colour to RGB. */ + if (gc->us & COLOUR_FLAG_256) + gc->us = colour_256toRGB (gc->us); +} + static void tty_colours_fg(struct tty *tty, const struct grid_cell *gc) { @@ -2449,6 +2478,31 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) tc->bg = gc->bg; } +static void +tty_colours_us(struct tty *tty, const struct grid_cell *gc) +{ + struct grid_cell *tc = &tty->cell; + u_int c; + u_char r, g, b; + + /* Must be an RGB colour - this should never happen. */ + if (~gc->us & COLOUR_FLAG_RGB) + return; + + /* + * Setulc follows the ncurses(3) one argument "direct colour" + * capability format. Calculate the colour value. + */ + colour_split_rgb(gc->us, &r, &g, &b); + c = (65536 * r) + (256 * g) + b; + + /* Write the colour. */ + tty_putcode1(tty, TTYC_SETULC, c); + + /* Save the new values in the terminal current cell. */ + tc->us = gc->us; +} + static int tty_try_colour(struct tty *tty, int colour, const char *type) { From b434692db20e6ef279ca13b6d25b0d519ac2c134 Mon Sep 17 00:00:00 2001 From: jmc Date: Thu, 27 Jun 2019 17:29:16 +0000 Subject: [PATCH 706/836] minor eol issues; --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 8b0932204d..86f2865bdf 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2333,7 +2333,7 @@ spreads the current pane and any panes next to it out evenly. Make pane .Ar target-pane the active pane in window -.Ar target-window. +.Ar target-window . If one of .Fl D , .Fl L , From 6ce38b73956836c26c8914cdf5002da7900a5d2d Mon Sep 17 00:00:00 2001 From: deraadt Date: Fri, 28 Jun 2019 05:44:09 +0000 Subject: [PATCH 707/836] asprintf returns -1, not an arbitrary value < 0. Also upon error the (very sloppy specification) leaves an undefined value in *ret, so it is wrong to inspect it, the error condition is enough. discussed a little with nicm, and then much more with millert until we were exasperated --- xmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmalloc.c b/xmalloc.c index 22ea3540cf..f249e39731 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -111,7 +111,7 @@ xvasprintf(char **ret, const char *fmt, va_list ap) i = vasprintf(ret, fmt, ap); - if (i < 0 || *ret == NULL) + if (i == -1) fatalx("xasprintf: %s", strerror(errno)); return i; From 4ff7bc3eb32e9d66312d16757fb8c083df2d87d6 Mon Sep 17 00:00:00 2001 From: deraadt Date: Fri, 28 Jun 2019 13:35:05 +0000 Subject: [PATCH 708/836] When system calls indicate an error they return -1, not some arbitrary value < 0. errno is only updated in this case. Change all (most?) callers of syscalls to follow this better, and let's see if this strictness helps us in the future. --- client.c | 2 +- job.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client.c b/client.c index b376b03849..d071b1dbf7 100644 --- a/client.c +++ b/client.c @@ -434,7 +434,7 @@ client_stdin_callback(__unused int fd, __unused short events, struct msg_stdin_data data; data.size = read(STDIN_FILENO, data.data, sizeof data.data); - if (data.size < 0 && (errno == EINTR || errno == EAGAIN)) + if (data.size == -1 && (errno == EINTR || errno == EAGAIN)) return; proc_send(client_peer, MSG_STDIN, -1, &data, sizeof data); diff --git a/job.c b/job.c index 73f62359f8..0c316fd88f 100644 --- a/job.c +++ b/job.c @@ -118,7 +118,7 @@ job_run(const char *cmd, struct session *s, const char *cwd, close(out[0]); nullfd = open(_PATH_DEVNULL, O_RDWR, 0); - if (nullfd < 0) + if (nullfd == -1) fatal("open failed"); if (dup2(nullfd, STDERR_FILENO) == -1) fatal("dup2 failed"); From cf30e0f9357b7e42491645a87eeae06ffb8e8066 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 30 Jun 2019 19:21:53 +0000 Subject: [PATCH 709/836] Do not double free window if pane fails to start. --- spawn.c | 4 +--- tmux.h | 1 - window.c | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/spawn.c b/spawn.c index bae220e1c3..08d0426c06 100644 --- a/spawn.c +++ b/spawn.c @@ -172,10 +172,8 @@ spawn_window(struct spawn_context *sc, char **cause) /* Spawn the pane. */ wp = spawn_pane(sc, cause); if (wp == NULL) { - if (~sc->flags & SPAWN_RESPAWN) { - window_destroy(w); + if (~sc->flags & SPAWN_RESPAWN) winlink_remove(&s->windows, sc->wl); - } return (NULL); } diff --git a/tmux.h b/tmux.h index 7126b30fcb..d6dacf6385 100644 --- a/tmux.h +++ b/tmux.h @@ -2362,7 +2362,6 @@ struct window *window_find_by_id_str(const char *); struct window *window_find_by_id(u_int); void window_update_activity(struct window *); struct window *window_create(u_int, u_int); -void window_destroy(struct window *); void window_pane_set_event(struct window_pane *); struct window_pane *window_get_active_at(struct window *, u_int, u_int); struct window_pane *window_find_string(struct window *, const char *); diff --git a/window.c b/window.c index 65097e1c9b..06145221d6 100644 --- a/window.c +++ b/window.c @@ -338,7 +338,7 @@ window_create(u_int sx, u_int sy) return (w); } -void +static void window_destroy(struct window *w) { log_debug("window @%u destroyed (%d references)", w->id, w->references); From 2da050413c17e587be8bede710112096ce6b5f5a Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 1 Jul 2019 06:56:00 +0000 Subject: [PATCH 710/836] Add a "fill" style attribute to clear the entire format drawing area in a colour, GitHub issue 1815. --- format-draw.c | 15 ++++++++++++++- style.c | 12 ++++++++++++ tmux.1 | 3 +++ tmux.h | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/format-draw.c b/format-draw.c index b589ca5e93..bb5c65fba5 100644 --- a/format-draw.c +++ b/format-draw.c @@ -511,8 +511,9 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, u_int ocx = os->cx, ocy = os->cy, i, width[TOTAL]; u_int map[] = { LEFT, LEFT, CENTRE, RIGHT }; int focus_start = -1, focus_end = -1; - int list_state = -1; + int list_state = -1, fill = -1; enum style_align list_align = STYLE_ALIGN_DEFAULT; + struct grid_cell gc; struct style sy; struct utf8_data *ud = &sy.gc.data; const char *cp, *end; @@ -590,6 +591,10 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, style_tostring(&sy)); free(tmp); + /* If this style has a fill colour, store it for later. */ + if (sy.fill != 8) + fill = sy.fill; + /* Check the list state. */ switch (sy.list) { case STYLE_LIST_ON: @@ -711,6 +716,14 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, fr->argument, names[fr->index], fr->start, fr->end); } + /* Clear the available area. */ + if (fill != -1) { + memcpy(&gc, &grid_default_cell, sizeof gc); + gc.bg = fill; + for (i = 0; i < available; i++) + screen_write_putc(octx, &gc, ' '); + } + /* * Draw the screens. How they are arranged depends on where the list * appearsq. diff --git a/style.c b/style.c index 4c6174c752..f195301f0d 100644 --- a/style.c +++ b/style.c @@ -32,6 +32,7 @@ static struct style style_default = { { 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } }, + 8, STYLE_ALIGN_DEFAULT, STYLE_LIST_OFF, @@ -127,6 +128,10 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) sy->align = STYLE_ALIGN_RIGHT; else goto error; + } else if (end > 5 && strncasecmp(tmp, "fill=", 5) == 0) { + if ((value = colour_fromstring(tmp + 5)) == -1) + goto error; + sy->fill = value; } else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) { if ((value = colour_fromstring(tmp + 3)) == -1) goto error; @@ -213,6 +218,11 @@ style_tostring(struct style *sy) tmp); comma = ","; } + if (sy->fill != 8) { + off += xsnprintf(s + off, sizeof s - off, "%sfill=%s", comma, + colour_tostring(sy->fill)); + comma = ","; + } if (gc->fg != 8) { off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma, colour_tostring(gc->fg)); @@ -290,6 +300,8 @@ style_equal(struct style *sy1, struct style *sy2) return (0); if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK)) return (0); + if (sy1->fill != sy2->fill) + return (0); if (sy1->align != sy2->align) return (0); return (1); diff --git a/tmux.1 b/tmux.1 index 86f2865bdf..44ef4a9656 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4337,6 +4337,9 @@ to unset. .Ic align=right .Xc Align text to the left, centre or right of the available space if appropriate. +.It Xo Ic fill=colour +.Xc +Fill the available space with a background colour if appropriate. .It Xo Ic list=on , .Ic list=focus , .Ic list=left-marker , diff --git a/tmux.h b/tmux.h index d6dacf6385..e43140b22a 100644 --- a/tmux.h +++ b/tmux.h @@ -682,6 +682,7 @@ TAILQ_HEAD(style_ranges, style_range); struct style { struct grid_cell gc; + int fill; enum style_align align; enum style_list list; From 6a489fa7f6360bcd9c0d6b87546d3eb6b0a3654a Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 2 Jul 2019 20:09:19 +0000 Subject: [PATCH 711/836] Command prompt key presses need to avoid the command queue, GitHub issue 1817. Also a tmux.1 fix from jmc. --- server-client.c | 36 +++++++++++++++++------------------- tmux.1 | 3 +-- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/server-client.c b/server-client.c index a982fe8ec9..7aeead41e1 100644 --- a/server-client.c +++ b/server-client.c @@ -1026,16 +1026,6 @@ server_client_key_callback(struct cmdq_item *item, void *data) fatal("gettimeofday failed"); session_update_activity(s, &c->activity_time); - /* Handle status line. */ - if (~c->flags & CLIENT_READONLY) - status_message_clear(c); - if (c->prompt_string != NULL) { - if (c->flags & CLIENT_READONLY) - goto out; - if (status_prompt_key(c, key) == 0) - goto out; - } - /* Check for mouse keys. */ m->valid = 0; if (key == KEYC_MOUSE) { @@ -1216,16 +1206,24 @@ server_client_handle_key(struct client *c, struct key_event *event) return (0); /* - * Key presses in overlay mode are a special case. The queue might be - * blocked so they need to be processed immediately rather than queued. + * Key presses in overlay mode and the command prompt are a special + * case. The queue might be blocked so they need to be processed + * immediately rather than queued. */ - if ((~c->flags & CLIENT_READONLY) && c->overlay_key != NULL) { - switch (c->overlay_key(c, event)) { - case 0: - return (0); - case 1: - server_client_clear_overlay(c); - return (0); + if (~c->flags & CLIENT_READONLY) { + status_message_clear(c); + if (c->prompt_string != NULL) { + if (status_prompt_key(c, event->key) == 0) + return (0); + } + if (c->overlay_key != NULL) { + switch (c->overlay_key(c, event)) { + case 0: + return (0); + case 1: + server_client_clear_overlay(c); + return (0); + } } } diff --git a/tmux.1 b/tmux.1 index 44ef4a9656..02ef1f2cfc 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4337,8 +4337,7 @@ to unset. .Ic align=right .Xc Align text to the left, centre or right of the available space if appropriate. -.It Xo Ic fill=colour -.Xc +.It Ic fill=colour Fill the available space with a background colour if appropriate. .It Xo Ic list=on , .Ic list=focus , From 55c694a4679ee225b1962db63671422f3e641fc6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 5 Jul 2019 07:52:27 +0000 Subject: [PATCH 712/836] Do not use uninitialized buffer name. --- window-copy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index a7cb5dfa28..28d728bb64 100644 --- a/window-copy.c +++ b/window-copy.c @@ -2700,7 +2700,7 @@ window_copy_append_selection(struct window_mode_entry *wme) struct window_pane *wp = wme->wp; char *buf; struct paste_buffer *pb; - const char *bufdata, *bufname; + const char *bufdata, *bufname = NULL; size_t len, bufsize; struct screen_write_ctx ctx; From 3635b3cd6c3343b2ec3f7173facef8a284e7e613 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 6 Jul 2019 20:37:29 +0000 Subject: [PATCH 713/836] Correctly clear underscore colour in grid_get_cell1, also fix struct grid_cell to avoid padding. Fixes increased memory use reported by Suraj N Kurapati. --- format-draw.c | 2 +- grid.c | 5 +++-- screen-write.c | 2 +- style.c | 2 +- tmux.h | 6 +++--- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/format-draw.c b/format-draw.c index bb5c65fba5..e0ca89f0ce 100644 --- a/format-draw.c +++ b/format-draw.c @@ -565,7 +565,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, cp++; } - /* Draw the cell to th current screen. */ + /* Draw the cell to the current screen. */ screen_write_cell(&ctx[current], &sy.gc); width[current] += ud->width; continue; diff --git a/grid.c b/grid.c index cddb587171..cbff99e2b8 100644 --- a/grid.c +++ b/grid.c @@ -37,12 +37,12 @@ /* Default grid cell data. */ const struct grid_cell grid_default_cell = { - 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } + { { ' ' }, 0, 1, 1 }, 0, 0, 8, 8, 0 }; /* Cleared grid cell data. */ const struct grid_cell grid_cleared_cell = { - GRID_FLAG_CLEARED, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } + { { ' ' }, 0, 1, 1 }, 0, GRID_FLAG_CLEARED, 8, 8, 0 }; static const struct grid_cell_entry grid_cleared_entry = { GRID_FLAG_CLEARED, { .data = { 0, 8, 8, ' ' } } @@ -475,6 +475,7 @@ grid_get_cell1(struct grid_line *gl, u_int px, struct grid_cell *gc) gc->bg = gce->data.bg; if (gce->flags & GRID_FLAG_BG256) gc->bg |= COLOUR_FLAG_256; + gc->us = 0; utf8_set(&gc->data, gce->data.data); } diff --git a/screen-write.c b/screen-write.c index 631328a3c7..943e304421 100644 --- a/screen-write.c +++ b/screen-write.c @@ -36,7 +36,7 @@ static const struct grid_cell *screen_write_combine(struct screen_write_ctx *, const struct utf8_data *, u_int *); static const struct grid_cell screen_write_pad_cell = { - GRID_FLAG_PADDING, 0, 8, 8, 0, { { 0 }, 0, 0, 0 } + { { 0 }, 0, 0, 0 }, 0, GRID_FLAG_PADDING, 0, 8, 8 }; struct screen_write_collect_item { diff --git a/style.c b/style.c index f195301f0d..9f9863148b 100644 --- a/style.c +++ b/style.c @@ -30,7 +30,7 @@ /* Default style. */ static struct style style_default = { - { 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } }, + { { { ' ' }, 0, 1, 1 }, 0, 0, 8, 8, 0 }, 8, STYLE_ALIGN_DEFAULT, diff --git a/tmux.h b/tmux.h index e43140b22a..0b0d998e65 100644 --- a/tmux.h +++ b/tmux.h @@ -596,13 +596,13 @@ enum utf8_state { /* Grid cell data. */ struct grid_cell { - u_char flags; + struct utf8_data data; /* 21 bytes */ u_short attr; + u_char flags; int fg; int bg; int us; - struct utf8_data data; -}; +} __packed; struct grid_cell_entry { u_char flags; union { From ddf53d6e4e76463e6d777b2de7304572333935e9 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 6 Jul 2019 20:56:34 +0000 Subject: [PATCH 714/836] Correctly adjust mouse position if the status line is at the top and more than one line. GitHub issue 1822. --- cmd-resize-pane.c | 8 ++++---- cmd.c | 4 ++-- server-client.c | 7 ++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index c978edfb53..8d35d96fb8 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -144,13 +144,13 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m) w = wl->window; y = m->y + m->oy; x = m->x + m->ox; - if (m->statusat == 0 && y > 0) - y--; + if (m->statusat == 0 && y >= m->statuslines) + y -= m->statuslines; else if (m->statusat > 0 && y >= (u_int)m->statusat) y = m->statusat - 1; ly = m->ly + m->oy; lx = m->lx + m->ox; - if (m->statusat == 0 && ly > 0) - ly--; + if (m->statusat == 0 && ly >= m->statuslines) + ly -= m->statuslines; else if (m->statusat > 0 && ly >= (u_int)m->statusat) ly = m->statusat - 1; diff --git a/cmd.c b/cmd.c index a071dec533..c838c53f90 100644 --- a/cmd.c +++ b/cmd.c @@ -597,8 +597,8 @@ cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, } log_debug("%s: x=%u, y=%u%s", __func__, x, y, last ? " (last)" : ""); - if (m->statusat == 0 && y > 0) - y--; + if (m->statusat == 0 && y >= m->statuslines) + y -= m->statuslines; if (x < wp->xoff || x >= wp->xoff + wp->sx) return (-1); diff --git a/server-client.c b/server-client.c index 7aeead41e1..3fd16ec58f 100644 --- a/server-client.c +++ b/server-client.c @@ -524,9 +524,10 @@ server_client_check_mouse(struct client *c, struct key_event *event) /* Is this on the status line? */ m->statusat = status_at_line(c); + m->statuslines = status_line_size(c); if (m->statusat != -1 && y >= (u_int)m->statusat && - y < m->statusat + status_line_size(c)) { + y < m->statusat + m->statuslines) { sr = status_get_range(c, x, y - m->statusat); if (sr == NULL) { where = STATUS_DEFAULT; @@ -555,8 +556,8 @@ server_client_check_mouse(struct client *c, struct key_event *event) /* Not on status line. Adjust position and check for border or pane. */ if (where == NOWHERE) { px = x; - if (m->statusat == 0 && y > 0) - py = y - 1; + if (m->statusat == 0 && y >= m->statuslines) + py = y - m->statuslines; else if (m->statusat > 0 && y >= (u_int)m->statusat) py = m->statusat - 1; else From cbe781203f80b0e45cafa44bc3d1635c8d3cf354 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 8 Jul 2019 11:38:14 +0000 Subject: [PATCH 715/836] Use the clear history function for the 3J sequence rather than doing it manually. --- screen-write.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/screen-write.c b/screen-write.c index 943e304421..98cdf158ad 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1169,11 +1169,7 @@ screen_write_clearscreen(struct screen_write_ctx *ctx, u_int bg) void screen_write_clearhistory(struct screen_write_ctx *ctx) { - struct screen *s = ctx->s; - struct grid *gd = s->grid; - - grid_move_lines(gd, 0, gd->hsize, gd->sy, 8); - gd->hscrolled = gd->hsize = 0; + grid_clear_history(ctx->s->grid); } /* Clear a collected line. */ From a4be028b76b8cc9c2066e30db8dc3866b52418ef Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 8 Jul 2019 20:29:11 +0000 Subject: [PATCH 716/836] Clear search marks before resize, GitHub issue 1823. --- window-copy.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index 28d728bb64..d868631ce4 100644 --- a/window-copy.c +++ b/window-copy.c @@ -577,6 +577,7 @@ window_copy_resize(struct window_mode_entry *wme, u_int sx, u_int sy) struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; + int search; screen_resize(s, sx, sy, 1); if (data->backing != &wp->base) @@ -589,13 +590,15 @@ window_copy_resize(struct window_mode_entry *wme, u_int sx, u_int sy) if (data->oy > screen_hsize(data->backing)) data->oy = screen_hsize(data->backing); + search = (data->searchmark != NULL); window_copy_clear_selection(wme); + window_copy_clear_marks(wme); screen_write_start(&ctx, NULL, s); window_copy_write_lines(wme, &ctx, 0, screen_size_y(s) - 1); screen_write_stop(&ctx); - if (data->searchmark != NULL) + if (search) window_copy_search_marks(wme, NULL); data->searchx = data->cx; data->searchy = data->cy; From b74b8be680bb7ca0a6952adafd29d97e85da5c67 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 9 Jul 2019 12:44:47 +0000 Subject: [PATCH 717/836] Add j and k for navigation in menus, GitHub issue 1828. --- menu.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/menu.c b/menu.c index cc21c79631..da8d89c4c1 100644 --- a/menu.c +++ b/menu.c @@ -206,8 +206,18 @@ menu_key_cb(struct client *c, struct key_event *event) c->flags |= CLIENT_REDRAWOVERLAY; return (0); } + for (i = 0; i < (u_int)count; i++) { + name = menu->items[i].name; + if (name == NULL || *name == '-') + continue; + if (event->key == menu->items[i].key) { + md->choice = i; + goto chosen; + } + } switch (event->key) { case KEYC_UP: + case 'k': if (old == -1) old = 0; do { @@ -220,6 +230,7 @@ menu_key_cb(struct client *c, struct key_event *event) c->flags |= CLIENT_REDRAWOVERLAY; return (0); case KEYC_DOWN: + case 'j': if (old == -1) old = 0; do { @@ -239,15 +250,6 @@ menu_key_cb(struct client *c, struct key_event *event) case 'q': return (1); } - for (i = 0; i < (u_int)count; i++) { - name = menu->items[i].name; - if (name == NULL || *name == '-') - continue; - if (event->key == menu->items[i].key) { - md->choice = i; - goto chosen; - } - } return (0); chosen: From ad11d49d640c911b42c5292b5f5b7dbdffb4908b Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 9 Jul 2019 13:19:36 +0000 Subject: [PATCH 718/836] Do not leak empty lines, GitHub issue 1824. --- control.c | 1 + 1 file changed, 1 insertion(+) diff --git a/control.c b/control.c index 16fa71bb38..c4cf5338b0 100644 --- a/control.c +++ b/control.c @@ -80,6 +80,7 @@ control_callback(struct client *c, int closed, __unused void *data) if (line == NULL) break; if (*line == '\0') { /* empty line exit */ + free(line); c->flags |= CLIENT_EXIT; break; } From fc2016dbb665f01e795a89632a1bb74294bfc4e1 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 9 Jul 2019 14:03:12 +0000 Subject: [PATCH 719/836] Add a -H flag to send-keys to send literal keys given as hex numbers (needed for control clients to send mouse sequences). Also add some format flags for UTF-8 and SGR mouse mode. Requested by Bradley Smith in GitHub issues 1832 and 1833. --- arguments.c | 16 ++++++++-- cmd-send-keys.c | 77 +++++++++++++++++++++++++++++-------------------- format.c | 6 ++++ input-keys.c | 7 +++++ key-string.c | 6 ++++ tmux.1 | 19 ++++++++---- tmux.h | 3 +- 7 files changed, 94 insertions(+), 40 deletions(-) diff --git a/arguments.c b/arguments.c index 751d0607ad..acdaf8aa25 100644 --- a/arguments.c +++ b/arguments.c @@ -38,6 +38,7 @@ TAILQ_HEAD(args_values, args_value); struct args_entry { u_char flag; struct args_values values; + u_int count; RB_ENTRY(args_entry) entry; }; @@ -174,6 +175,7 @@ args_print(struct args *args) size_t len; char *buf; int i; + u_int j; struct args_entry *entry; struct args_value *value; @@ -187,7 +189,8 @@ args_print(struct args *args) if (*buf == '\0') args_print_add(&buf, &len, "-"); - args_print_add(&buf, &len, "%c", entry->flag); + for (j = 0; j < entry->count; j++) + args_print_add(&buf, &len, "%c", entry->flag); } /* Then the flags with arguments. */ @@ -244,7 +247,12 @@ args_escape(const char *s) int args_has(struct args *args, u_char ch) { - return (args_find(args, ch) != NULL); + struct args_entry *entry; + + entry = args_find(args, ch); + if (entry == NULL) + return (0); + return (entry->count); } /* Set argument value in the arguments tree. */ @@ -258,9 +266,11 @@ args_set(struct args *args, u_char ch, const char *s) if (entry == NULL) { entry = xcalloc(1, sizeof *entry); entry->flag = ch; + entry->count = 1; TAILQ_INIT(&entry->values); RB_INSERT(args_tree, &args->tree, entry); - } + } else + entry->count++; if (s != NULL) { value = xcalloc(1, sizeof *value); diff --git a/cmd-send-keys.c b/cmd-send-keys.c index fd1c1ab9b3..9ed50d3d81 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_send_keys_entry = { .name = "send-keys", .alias = "send", - .args = { "lXRMN:t:", 0, -1 }, - .usage = "[-lXRM] [-N repeat-count] " CMD_TARGET_PANE_USAGE " key ...", + .args = { "HlXRMN:t:", 0, -1 }, + .usage = "[-HlXRM] [-N repeat-count] " CMD_TARGET_PANE_USAGE " key ...", .target = { 't', CMD_FIND_PANE, 0 }, @@ -56,9 +56,9 @@ const struct cmd_entry cmd_send_prefix_entry = { }; static struct cmdq_item * -cmd_send_keys_inject(struct client *c, struct cmd_find_state *fs, - struct cmdq_item *item, key_code key) +cmd_send_keys_inject_key(struct client *c, struct cmdq_item *item, key_code key) { + struct cmd_find_state *fs = &item->target; struct window_mode_entry *wme; struct key_table *table; struct key_binding *bd; @@ -81,6 +81,44 @@ cmd_send_keys_inject(struct client *c, struct cmd_find_state *fs, return (item); } +static struct cmdq_item * +cmd_send_keys_inject_string(struct client *c, struct cmdq_item *item, + struct args *args, int i) +{ + const char *s = args->argv[i]; + struct utf8_data *ud, *uc; + wchar_t wc; + key_code key; + char *endptr; + long n; + int literal; + + if (args_has(args, 'H')) { + n = strtol(s, &endptr, 16); + if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0') + return (item); + return (cmd_send_keys_inject_key(c, item, KEYC_LITERAL|n)); + } + + literal = args_has(args, 'l'); + if (!literal) { + key = key_string_lookup_string(s); + if (key != KEYC_NONE && key != KEYC_UNKNOWN) + return (cmd_send_keys_inject_key(c, item, key)); + literal = 1; + } + if (literal) { + ud = utf8_fromcstr(s); + for (uc = ud; uc->size != 0; uc++) { + if (utf8_combine(uc, &wc) != UTF8_DONE) + continue; + item = cmd_send_keys_inject_key(c, item, wc); + } + free(ud); + } + return (item); +} + static enum cmd_retval cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) { @@ -90,11 +128,8 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) struct session *s = item->target.s; struct winlink *wl = item->target.wl; struct mouse_event *m = &item->shared->mouse; - struct cmd_find_state *fs = &item->target; struct window_mode_entry *wme = TAILQ_FIRST(&wp->modes); - struct utf8_data *ud, *uc; - wchar_t wc; - int i, literal; + int i; key_code key; u_int np = 1; char *cause = NULL; @@ -141,7 +176,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) key = options_get_number(s->options, "prefix2"); else key = options_get_number(s->options, "prefix"); - cmd_send_keys_inject(c, fs, item, key); + cmd_send_keys_inject_key(c, item, key); return (CMD_RETURN_NORMAL); } @@ -151,28 +186,8 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) } for (; np != 0; np--) { - for (i = 0; i < args->argc; i++) { - literal = args_has(args, 'l'); - if (!literal) { - key = key_string_lookup_string(args->argv[i]); - if (key != KEYC_NONE && key != KEYC_UNKNOWN) { - item = cmd_send_keys_inject(c, fs, item, - key); - } else - literal = 1; - } - if (literal) { - ud = utf8_fromcstr(args->argv[i]); - for (uc = ud; uc->size != 0; uc++) { - if (utf8_combine(uc, &wc) != UTF8_DONE) - continue; - item = cmd_send_keys_inject(c, fs, item, - wc); - } - free(ud); - } - } - + for (i = 0; i < args->argc; i++) + item = cmd_send_keys_inject_string(c, item, args, i); } return (CMD_RETURN_NORMAL); diff --git a/format.c b/format.c index cb67405f3e..df569bc23d 100644 --- a/format.c +++ b/format.c @@ -2300,6 +2300,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) !!(wp->base.mode & MODE_KKEYPAD)); format_add(ft, "wrap_flag", "%d", !!(wp->base.mode & MODE_WRAP)); + format_add(ft, "origin_flag", "%d", + !!(wp->base.mode & MODE_ORIGIN)); format_add(ft, "mouse_any_flag", "%d", !!(wp->base.mode & ALL_MOUSE_MODES)); @@ -2309,6 +2311,10 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) !!(wp->base.mode & MODE_MOUSE_BUTTON)); format_add(ft, "mouse_all_flag", "%d", !!(wp->base.mode & MODE_MOUSE_ALL)); + format_add(ft, "mouse_utf8_flag", "%d", + !!(wp->base.mode & MODE_MOUSE_UTF8)); + format_add(ft, "mouse_sgr_flag", "%d", + !!(wp->base.mode & MODE_MOUSE_SGR)); format_add_cb(ft, "pane_tabs", format_cb_pane_tabs); } diff --git a/input-keys.c b/input-keys.c index 39401a38ad..6e521ae188 100644 --- a/input-keys.c +++ b/input-keys.c @@ -173,6 +173,13 @@ input_key(struct window_pane *wp, key_code key, struct mouse_event *m) return; } + /* Literal keys go as themselves (can't be more than eight bits). */ + if (key & KEYC_LITERAL) { + ud.data[0] = (u_char)key; + bufferevent_write(wp->event, &ud.data[0], 1); + return; + } + /* * If this is a normal 7-bit key, just send it, with a leading escape * if necessary. If it is a UTF-8 key, split it and send it. diff --git a/key-string.c b/key-string.c index 8442727d34..a1ef4f51ba 100644 --- a/key-string.c +++ b/key-string.c @@ -284,6 +284,12 @@ key_string_lookup_key(key_code key) return (out); } + /* Literal keys are themselves. */ + if (key & KEYC_LITERAL) { + snprintf(out, sizeof out, "%c", (int)(key & 0xff)); + return (out); + } + /* * Special case: display C-@ as C-Space. Could do this below in * the (key >= 0 && key <= 32), but this way we let it be found diff --git a/tmux.1 b/tmux.1 index 02ef1f2cfc..810cb211a0 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2622,7 +2622,7 @@ With only .Ar key-table . .It Xo Ic send-keys -.Op Fl lMRX +.Op Fl HlMRX .Op Fl N Ar repeat-count .Op Fl t Ar target-pane .Ar key Ar ... @@ -2637,10 +2637,16 @@ or .Ql NPage ) to send; if the string is not recognised as a key, it is sent as a series of characters. +All arguments are sent sequentially from first to last. +.Pp The .Fl l -flag disables key name lookup and sends the keys literally. -All arguments are sent sequentially from first to last. +flag disables key name lookup and processes the keys as literal UTF-8 +characters. +The +.Fl H +flag expects each key to be a hexadecimal number for an ASCII character. +.Pp The .Fl R flag causes the terminal state to be reset. @@ -4180,11 +4186,14 @@ The following variables are available, where appropriate: .It Li "mouse_all_flag" Ta "" Ta "Pane mouse all flag" .It Li "mouse_any_flag" Ta "" Ta "Pane mouse any flag" .It Li "mouse_button_flag" Ta "" Ta "Pane mouse button flag" +.It Li "mouse_line" Ta "" Ta "Line under mouse, if any" +.It Li "mouse_sgr_flag" Ta "" Ta "Pane mouse SGR flag" .It Li "mouse_standard_flag" Ta "" Ta "Pane mouse standard flag" +.It Li "mouse_utf8_flag" Ta "" Ta "Pane mouse UTF-8 flag" +.It Li "mouse_word" Ta "" Ta "Word under mouse, if any" .It Li "mouse_x" Ta "" Ta "Mouse X position, if any" .It Li "mouse_y" Ta "" Ta "Mouse Y position, if any" -.It Li "mouse_word" Ta "" Ta "Word under mouse, if any" -.It Li "mouse_line" Ta "" Ta "Line under mouse, if any" +.It Li "origin_flag" Ta "" Ta "Pane origin flag" .It Li "pane_active" Ta "" Ta "1 if active pane" .It Li "pane_at_bottom" Ta "" Ta "1 if pane is at the bottom of window" .It Li "pane_at_left" Ta "" Ta "1 if pane is at the left of window" diff --git a/tmux.h b/tmux.h index 0b0d998e65..fdb0a7c715 100644 --- a/tmux.h +++ b/tmux.h @@ -111,9 +111,10 @@ struct winlink; #define KEYC_CTRL 0x400000000000ULL #define KEYC_SHIFT 0x800000000000ULL #define KEYC_XTERM 0x1000000000000ULL +#define KEYC_LITERAL 0x2000000000000ULL /* Mask to obtain key w/o modifiers. */ -#define KEYC_MASK_MOD (KEYC_ESCAPE|KEYC_CTRL|KEYC_SHIFT|KEYC_XTERM) +#define KEYC_MASK_MOD (KEYC_ESCAPE|KEYC_CTRL|KEYC_SHIFT|KEYC_XTERM|KEYC_LITERAL) #define KEYC_MASK_KEY (~KEYC_MASK_MOD) /* Is this a mouse key? */ From f4d858e7a0888cfd1d09c421f71729e833322851 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 10 Jul 2019 11:20:10 +0000 Subject: [PATCH 720/836] Add -F to refresh-client to specify flags for control clients - one flag at the moment, no-output which turns off forwarding pane output. From Thomas Adam. GitHub issue 1834. --- cmd-refresh-client.c | 62 ++++++++++++++++++++++++++++---------------- control-notify.c | 3 +++ tmux.1 | 11 ++++++-- tmux.h | 1 + 4 files changed, 53 insertions(+), 24 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index e5ae099f2e..49921a745a 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -19,6 +19,7 @@ #include #include +#include #include "tmux.h" @@ -33,8 +34,9 @@ const struct cmd_entry cmd_refresh_client_entry = { .name = "refresh-client", .alias = "refresh", - .args = { "cC:DlLRSt:U", 0, 1 }, - .usage = "[-cDlLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", + .args = { "cC:DF:lLRSt:U", 0, 1 }, + .usage = "[-cDlLRSU] [-C XxY] [-F flags] " CMD_TARGET_CLIENT_USAGE + " [adjustment]", .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec @@ -48,6 +50,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) struct tty *tty; struct window *w; const char *size, *errstr; + char *copy, *next, *s; u_int x, y, adjust; if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) @@ -107,28 +110,43 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'l')) { if (c->session != NULL) tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); - } else if (args_has(args, 'C')) { - if ((size = args_get(args, 'C')) == NULL) { - cmdq_error(item, "missing size"); - return (CMD_RETURN_ERROR); - } - if (sscanf(size, "%u,%u", &x, &y) != 2 && - sscanf(size, "%ux%u", &x, &y)) { - cmdq_error(item, "bad size argument"); - return (CMD_RETURN_ERROR); - } - if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || - y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { - cmdq_error(item, "size too small or too big"); - return (CMD_RETURN_ERROR); + return (CMD_RETURN_NORMAL); + } + + if (args_has(args, 'C') || args_has(args, 'F')) { + if (args_has(args, 'C')) { + if (!(c->flags & CLIENT_CONTROL)) { + cmdq_error(item, "not a control client"); + return (CMD_RETURN_ERROR); + } + size = args_get(args, 'C'); + if (sscanf(size, "%u,%u", &x, &y) != 2 && + sscanf(size, "%ux%u", &x, &y) != 2) { + cmdq_error(item, "bad size argument"); + return (CMD_RETURN_ERROR); + } + if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || + y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { + cmdq_error(item, "size too small or too big"); + return (CMD_RETURN_ERROR); + } + tty_set_size(&c->tty, x, y); + c->flags |= CLIENT_SIZECHANGED; + recalculate_sizes(); } - if (!(c->flags & CLIENT_CONTROL)) { - cmdq_error(item, "not a control client"); - return (CMD_RETURN_ERROR); + if (args_has(args, 'F')) { + if (!(c->flags & CLIENT_CONTROL)) { + cmdq_error(item, "not a control client"); + return (CMD_RETURN_ERROR); + } + s = copy = xstrdup(args_get(args, 'F')); + while ((next = strsep(&s, ",")) != NULL) { + /* Unknown flags are ignored. */ + if (strcmp(next, "no-output") == 0) + c->flags |= CLIENT_CONTROL_NOOUTPUT; + } + free(copy); } - tty_set_size(&c->tty, x, y); - c->flags |= CLIENT_SIZECHANGED; - recalculate_sizes(); return (CMD_RETURN_NORMAL); } diff --git a/control-notify.c b/control-notify.c index 340dab734a..a1e2b7bf73 100644 --- a/control-notify.c +++ b/control-notify.c @@ -36,6 +36,9 @@ control_notify_input(struct client *c, struct window_pane *wp, if (c->session == NULL) return; + if (c->flags & CLIENT_CONTROL_NOOUTPUT) + return; + /* * Only write input if the window pane is linked to a window belonging * to the client's session. diff --git a/tmux.1 b/tmux.1 index 810cb211a0..85d69bf143 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1162,7 +1162,8 @@ is used, the option will not be applied. .It Xo Ic refresh-client .Op Fl cDlLRSU -.Op Fl C Ar width,height +.Op Fl C Ar XxY +.Op Fl F Ar flags .Op Fl t Ar target-client .Op Ar adjustment .Xc @@ -1205,7 +1206,13 @@ window, changing the current window in the attached session will reset it. .Pp .Fl C -sets the width and height of a control client. +sets the width and height of a control client and +.Fl F +sets a comma-separated list of flags. +Currently the only flag available is +.Ql no-output +to disable receiving pane output. +.Pp .Fl l requests the clipboard from the client using the .Xr xterm 1 diff --git a/tmux.h b/tmux.h index fdb0a7c715..b09b52a82c 100644 --- a/tmux.h +++ b/tmux.h @@ -1516,6 +1516,7 @@ struct client { #define CLIENT_STATUSOFF 0x800000 #define CLIENT_REDRAWSTATUSALWAYS 0x1000000 #define CLIENT_REDRAWOVERLAY 0x2000000 +#define CLIENT_CONTROL_NOOUTPUT 0x4000000 #define CLIENT_ALLREDRAWFLAGS \ (CLIENT_REDRAWWINDOW| \ CLIENT_REDRAWSTATUS| \ From 91b6145499c3aa5591fd2d7ed20bd69b15c80d34 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 10 Jul 2019 14:33:24 +0000 Subject: [PATCH 721/836] The command item changes so can't keep getting the target out of it, need to use the one from the first item. Fixes crash reported by M Kelly. --- cmd-send-keys.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 9ed50d3d81..fe20233515 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -56,9 +56,9 @@ const struct cmd_entry cmd_send_prefix_entry = { }; static struct cmdq_item * -cmd_send_keys_inject_key(struct client *c, struct cmdq_item *item, key_code key) +cmd_send_keys_inject_key(struct client *c, struct cmd_find_state *fs, + struct cmdq_item *item, key_code key) { - struct cmd_find_state *fs = &item->target; struct window_mode_entry *wme; struct key_table *table; struct key_binding *bd; @@ -82,8 +82,8 @@ cmd_send_keys_inject_key(struct client *c, struct cmdq_item *item, key_code key) } static struct cmdq_item * -cmd_send_keys_inject_string(struct client *c, struct cmdq_item *item, - struct args *args, int i) +cmd_send_keys_inject_string(struct client *c, struct cmd_find_state *fs, + struct cmdq_item *item, struct args *args, int i) { const char *s = args->argv[i]; struct utf8_data *ud, *uc; @@ -97,14 +97,14 @@ cmd_send_keys_inject_string(struct client *c, struct cmdq_item *item, n = strtol(s, &endptr, 16); if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0') return (item); - return (cmd_send_keys_inject_key(c, item, KEYC_LITERAL|n)); + return (cmd_send_keys_inject_key(c, fs, item, KEYC_LITERAL|n)); } literal = args_has(args, 'l'); if (!literal) { key = key_string_lookup_string(s); if (key != KEYC_NONE && key != KEYC_UNKNOWN) - return (cmd_send_keys_inject_key(c, item, key)); + return (cmd_send_keys_inject_key(c, fs, item, key)); literal = 1; } if (literal) { @@ -112,8 +112,8 @@ cmd_send_keys_inject_string(struct client *c, struct cmdq_item *item, for (uc = ud; uc->size != 0; uc++) { if (utf8_combine(uc, &wc) != UTF8_DONE) continue; - item = cmd_send_keys_inject_key(c, item, wc); - } + item = cmd_send_keys_inject_key(c, fs, item, wc); + } free(ud); } return (item); @@ -124,6 +124,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct client *c = cmd_find_client(item, NULL, 1); + struct cmd_find_state *fs = &item->target; struct window_pane *wp = item->target.wp; struct session *s = item->target.s; struct winlink *wl = item->target.wl; @@ -176,7 +177,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) key = options_get_number(s->options, "prefix2"); else key = options_get_number(s->options, "prefix"); - cmd_send_keys_inject_key(c, item, key); + cmd_send_keys_inject_key(c, fs, item, key); return (CMD_RETURN_NORMAL); } @@ -187,7 +188,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item) for (; np != 0; np--) { for (i = 0; i < args->argc; i++) - item = cmd_send_keys_inject_string(c, item, args, i); + item = cmd_send_keys_inject_string(c, fs, item, args, i); } return (CMD_RETURN_NORMAL); From 6ceeceab7adfb7b6a779df52f811f010aae0721c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jul 2019 18:25:07 +0000 Subject: [PATCH 722/836] Make layout_fix_offsets take a window like layout_fix_panes. --- layout-custom.c | 2 +- layout-set.c | 8 ++++---- layout.c | 30 +++++++++++++++++++++--------- tmux.h | 2 +- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/layout-custom.c b/layout-custom.c index bedcaf1020..d759c206eb 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -165,7 +165,7 @@ layout_parse(struct window *w, const char *layout) layout_assign(&wp, lc); /* Update pane offsets and sizes. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); recalculate_sizes(); diff --git a/layout-set.c b/layout-set.c index 12b4780fe5..82247149b9 100644 --- a/layout-set.c +++ b/layout-set.c @@ -158,7 +158,7 @@ layout_set_even(struct window *w, enum layout_type type) layout_spread_cell(w, lc); /* Fix cell offsets. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -257,7 +257,7 @@ layout_set_main_h(struct window *w) } /* Fix cell offsets. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -344,7 +344,7 @@ layout_set_main_v(struct window *w) } /* Fix cell offsets. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); @@ -453,7 +453,7 @@ layout_set_tiled(struct window *w) } /* Fix cell offsets. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); layout_print_cell(w->layout_root, __func__, 1); diff --git a/layout.c b/layout.c index e84da93682..f6bba34fd7 100644 --- a/layout.c +++ b/layout.c @@ -200,8 +200,8 @@ layout_make_node(struct layout_cell *lc, enum layout_type type) } /* Fix cell offsets based on their sizes. */ -void -layout_fix_offsets(struct layout_cell *lc) +static void +layout_fix_offsets1(struct layout_cell *lc) { struct layout_cell *lcchild; u_int xoff, yoff; @@ -212,7 +212,7 @@ layout_fix_offsets(struct layout_cell *lc) lcchild->xoff = xoff; lcchild->yoff = lc->yoff; if (lcchild->type != LAYOUT_WINDOWPANE) - layout_fix_offsets(lcchild); + layout_fix_offsets1(lcchild); xoff += lcchild->sx + 1; } } else { @@ -221,12 +221,24 @@ layout_fix_offsets(struct layout_cell *lc) lcchild->xoff = lc->xoff; lcchild->yoff = yoff; if (lcchild->type != LAYOUT_WINDOWPANE) - layout_fix_offsets(lcchild); + layout_fix_offsets1(lcchild); yoff += lcchild->sy + 1; } } } +/* Update cell offsets based on their sizes. */ +void +layout_fix_offsets(struct window *w) +{ + struct layout_cell *lc = w->layout_root; + + lc->xoff = 0; + lc->yoff = 0; + + layout_fix_offsets1(lc); +} + /* * Returns 1 if we need to reserve space for the pane status line. This is the * case for the most upper panes only. @@ -507,7 +519,7 @@ layout_resize(struct window *w, u_int sx, u_int sy) layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, ychange); /* Fix cell offsets. */ - layout_fix_offsets(lc); + layout_fix_offsets(w); layout_fix_panes(w); } @@ -567,7 +579,7 @@ layout_resize_layout(struct window *w, struct layout_cell *lc, } /* Fix cell offsets. */ - layout_fix_offsets(w->layout_root); + layout_fix_offsets(w); layout_fix_panes(w); notify_window("window-layout-changed", w); } @@ -988,7 +1000,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, if (full_size) { if (!resize_first) layout_resize_child_cells(wp->window, lc); - layout_fix_offsets(wp->window->layout_root); + layout_fix_offsets(wp->window); } else layout_make_leaf(lc, wp); @@ -1006,7 +1018,7 @@ layout_close_pane(struct window_pane *wp) /* Fix pane offsets and sizes. */ if (w->layout_root != NULL) { - layout_fix_offsets(w->layout_root); + layout_fix_offsets(w); layout_fix_panes(w); } notify_window("window-layout-changed", w); @@ -1073,7 +1085,7 @@ layout_spread_out(struct window_pane *wp) do { if (layout_spread_cell(w, parent)) { - layout_fix_offsets(parent); + layout_fix_offsets(w); layout_fix_panes(w); break; } diff --git a/tmux.h b/tmux.h index b09b52a82c..076a5fe6ac 100644 --- a/tmux.h +++ b/tmux.h @@ -2438,7 +2438,7 @@ void layout_set_size(struct layout_cell *, u_int, u_int, u_int, u_int); void layout_make_leaf(struct layout_cell *, struct window_pane *); void layout_make_node(struct layout_cell *, enum layout_type); -void layout_fix_offsets(struct layout_cell *); +void layout_fix_offsets(struct window *); void layout_fix_panes(struct window *); void layout_resize_adjust(struct window *, struct layout_cell *, enum layout_type, int); From eac055bfaf1b21b71d5fc79bc29a2810aa20085f Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jul 2019 18:43:32 +0000 Subject: [PATCH 723/836] Simplify code to work out if an extra line is needed in the cell. --- layout.c | 105 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 41 deletions(-) diff --git a/layout.c b/layout.c index f6bba34fd7..37214d02cc 100644 --- a/layout.c +++ b/layout.c @@ -39,7 +39,6 @@ static int layout_resize_pane_grow(struct window *, struct layout_cell *, enum layout_type, int, int); static int layout_resize_pane_shrink(struct window *, struct layout_cell *, enum layout_type, int); -static int layout_need_status(struct layout_cell *, int); static u_int layout_new_pane_size(struct window *, u_int, struct layout_cell *, enum layout_type, u_int, u_int, u_int); @@ -199,7 +198,7 @@ layout_make_node(struct layout_cell *lc, enum layout_type type) lc->wp = NULL; } -/* Fix cell offsets based on their sizes. */ +/* Fix cell offsets for a child cell. */ static void layout_fix_offsets1(struct layout_cell *lc) { @@ -239,55 +238,74 @@ layout_fix_offsets(struct window *w) layout_fix_offsets1(lc); } -/* - * Returns 1 if we need to reserve space for the pane status line. This is the - * case for the most upper panes only. - */ +/* Is this a top cell? */ static int -layout_need_status(struct layout_cell *lc, int status) +layout_cell_is_top(struct window *w, struct layout_cell *lc) { struct layout_cell *next; - if (lc->parent != NULL) { - if (lc->parent->type == LAYOUT_LEFTRIGHT) - return (layout_need_status(lc->parent, status)); + while (lc != w->layout_root) { + next = lc->parent; + if (next->type == LAYOUT_TOPBOTTOM && + lc != TAILQ_FIRST(&next->cells)) + return (0); + lc = next; + } + return (1); +} - if (status == PANE_STATUS_TOP) - next = TAILQ_FIRST(&lc->parent->cells); - else - next = TAILQ_LAST(&lc->parent->cells,layout_cells); - if (lc == next) - return (layout_need_status(lc->parent, status)); - return (0); +/* Is this a bottom cell? */ +static int +layout_cell_is_bottom(struct window *w, struct layout_cell *lc) +{ + struct layout_cell *next; + + while (lc != w->layout_root) { + next = lc->parent; + if (next->type == LAYOUT_TOPBOTTOM && + lc != TAILQ_LAST(&next->cells, layout_cells)) + return (0); + lc = next; } return (1); } +/* + * Returns 1 if we need to add an extra line for the pane status line. This is + * the case for the most upper or lower panes only. + */ +static int +layout_add_border(struct window *w, struct layout_cell *lc, int status) +{ + if (status == PANE_STATUS_TOP) + return (layout_cell_is_top(w, lc)); + if (status == PANE_STATUS_BOTTOM) + return (layout_cell_is_bottom(w, lc)); + return (0); +} + /* Update pane offsets and sizes based on their cells. */ void layout_fix_panes(struct window *w) { struct window_pane *wp; struct layout_cell *lc; - int shift, status; + int status; status = options_get_number(w->options, "pane-border-status"); TAILQ_FOREACH(wp, &w->panes, entry) { if ((lc = wp->layout_cell) == NULL) continue; - if (status != PANE_STATUS_OFF) - shift = layout_need_status(lc, status); - else - shift = 0; - wp->xoff = lc->xoff; wp->yoff = lc->yoff; - if (shift && status == PANE_STATUS_TOP) - wp->yoff += 1; - - window_pane_resize(wp, lc->sx, lc->sy - shift); + if (layout_add_border(w, lc, status)) { + if (status == PANE_STATUS_TOP) + wp->yoff++; + window_pane_resize(wp, lc->sx, lc->sy - 1); + } else + window_pane_resize(wp, lc->sx, lc->sy); } } @@ -324,13 +342,15 @@ layout_resize_check(struct window *w, struct layout_cell *lc, status = options_get_number(w->options, "pane-border-status"); if (lc->type == LAYOUT_WINDOWPANE) { /* Space available in this cell only. */ - minimum = PANE_MINIMUM; - if (type == LAYOUT_LEFTRIGHT) + if (type == LAYOUT_LEFTRIGHT) { available = lc->sx; - else { + minimum = PANE_MINIMUM; + } else { available = lc->sy; - if (status != PANE_STATUS_OFF) - minimum += layout_need_status(lc, status); + if (layout_add_border(w, lc, status)) + minimum = PANE_MINIMUM + 1; + else + minimum = PANE_MINIMUM; } if (available > minimum) available -= minimum; @@ -873,9 +893,10 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, return (NULL); break; case LAYOUT_TOPBOTTOM: - minimum = PANE_MINIMUM * 2 + 1; - if (status != PANE_STATUS_OFF) - minimum += layout_need_status(lc, status); + if (layout_add_border(wp->window, lc, status)) + minimum = PANE_MINIMUM * 2 + 2; + else + minimum = PANE_MINIMUM * 2 + 1; if (sy < minimum) return (NULL); break; @@ -1041,9 +1062,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) if (parent->type == LAYOUT_LEFTRIGHT) size = parent->sx; else if (parent->type == LAYOUT_TOPBOTTOM) { - size = parent->sy; - if (status != PANE_STATUS_OFF) - size -= layout_need_status(parent, status); + if (layout_add_border(w, parent, status)) + size = parent->sy - 1; + else + size = parent->sy; } else return (0); if (size < number - 1) @@ -1061,9 +1083,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) change = each - (int)lc->sx; layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { - this = each; - if (status != PANE_STATUS_OFF) - this += layout_need_status(lc, status); + if (layout_add_border(w, lc, status)) + this = each + 1; + else + this = each; change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } From b89f2f28bb5f21bfe836870d907ec6992acb5f28 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 16 Jul 2019 10:30:56 +0000 Subject: [PATCH 724/836] Fix grid clear code to correctly clear with the default background colour rather than ending up with the used count higher than the total size, GitHub issue 1829. --- grid-view.c | 1 - grid.c | 28 ++++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/grid-view.c b/grid-view.c index a4bd5ba2fc..fa3bfbf6a1 100644 --- a/grid-view.c +++ b/grid-view.c @@ -214,7 +214,6 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx, u_int bg) sx = grid_view_x(gd, gd->sx); grid_move_cells(gd, px, px + nx, py, sx - px - nx, bg); - grid_clear(gd, sx - nx, py, px + nx - (sx - nx), 1, bg); } /* Convert cells into a string. */ diff --git a/grid.c b/grid.c index cbff99e2b8..f33eef7238 100644 --- a/grid.c +++ b/grid.c @@ -547,7 +547,7 @@ void grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) { struct grid_line *gl; - u_int xx, yy; + u_int xx, yy, ox, sx; if (nx == 0 || ny == 0) return; @@ -564,16 +564,20 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) for (yy = py; yy < py + ny; yy++) { gl = &gd->linedata[yy]; - if (px + nx >= gd->sx && px < gl->cellused) - gl->cellused = px; - if (px > gl->cellsize && COLOUR_DEFAULT(bg)) - continue; - if (px + nx >= gl->cellsize && COLOUR_DEFAULT(bg)) { - gl->cellsize = px; - continue; + + sx = gd->sx; + if (sx > gl->cellsize) + sx = gl->cellsize; + ox = nx; + if (COLOUR_DEFAULT(bg)) { + if (px > sx) + continue; + if (px + nx > sx) + ox = sx - px; } - grid_expand_line(gd, yy, px + nx, 8); /* default bg first */ - for (xx = px; xx < px + nx; xx++) + + grid_expand_line(gd, yy, px + ox, 8); /* default bg first */ + for (xx = px; xx < px + ox; xx++) grid_clear_cell(gd, xx, yy, bg); } } @@ -1216,6 +1220,10 @@ grid_reflow(struct grid *gd, u_int sx) struct grid_cell gc; u_int yy, width, i, at, first; + /* Do not reflow to the same size. */ + if (sx == gd->sx) + return; + /* * Create a destination grid. This is just used as a container for the * line data and may not be fully valid. From 99852f8401477e90e0887f1f2964fe6bdca86a57 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 16 Jul 2019 14:11:52 +0000 Subject: [PATCH 725/836] Fix check for wrapping when redrawing entire lines, GitHub issue 1836. --- tty.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tty.c b/tty.c index c3e2f0f64a..ab1da9fd39 100644 --- a/tty.c +++ b/tty.c @@ -1217,7 +1217,7 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, const struct grid_cell *gcp; struct grid_line *gl; u_int i, j, ux, sx, width; - int flags, cleared = 0; + int flags, cleared = 0, wrapped = 0; char buf[512]; size_t len; u_int cellsize; @@ -1274,8 +1274,10 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, tty_putcode(tty, TTYC_EL1); cleared = 1; } - } else + } else { log_debug("%s: wrapped line %u", __func__, aty); + wrapped = 1; + } memcpy(&last, &grid_default_cell, sizeof last); len = 0; @@ -1299,13 +1301,15 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, tty_clear_line(tty, wp, aty, atx + ux, width, last.bg); } else { - tty_cursor(tty, atx + ux, aty); + if (!wrapped || atx != 0 || ux != 0) + tty_cursor(tty, atx + ux, aty); tty_putn(tty, buf, len, width); } ux += width; len = 0; width = 0; + wrapped = 0; } if (gcp->flags & GRID_FLAG_SELECTED) @@ -1339,7 +1343,8 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s, log_debug("%s: %zu cleared (end)", __func__, len); tty_clear_line(tty, wp, aty, atx + ux, width, last.bg); } else { - tty_cursor(tty, atx + ux, aty); + if (!wrapped || atx != 0 || ux != 0) + tty_cursor(tty, atx + ux, aty); tty_putn(tty, buf, len, width); } ux += width; From 80b82c8d1484ce02fea49d53daf20c1bf4260c83 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 17 Jul 2019 08:54:46 +0100 Subject: [PATCH 726/836] Mention dependencies earlier. --- .github/README.md | 8 +++----- README | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/README.md b/.github/README.md index ce12f6aab2..50d08c0cb0 100644 --- a/.github/README.md +++ b/.github/README.md @@ -30,7 +30,9 @@ configure with `--enable-utempter` to enable this. ### From version control -To get and build the latest from version control: +To get and build the latest from version control - note that this requires at +least a working C compiler, `make`, `autoconf`, `automake`, `pkg-config` as +well as `libevent` and `ncurses` libraries and headers: ~~~bash git clone https://github.com/tmux/tmux.git @@ -39,10 +41,6 @@ sh autogen.sh ./configure && make ~~~ -(Note that this requires at least a working C compiler, `make`, `autoconf`, -`automake`, `pkg-config` as well as `libevent` and `ncurses` libraries and -headers.) - ## Contributing Bug reports, feature suggestions and especially code contributions are most diff --git a/README b/README index 8a9070b80c..da8f508fd0 100644 --- a/README +++ b/README @@ -26,16 +26,15 @@ To build and install tmux from a release tarball, use: tmux can use the utempter library to update utmp(5), if it is installed - run configure with --enable-utempter to enable this. -To get and build the latest from version control: +To get and build the latest from version control - note that this requires at +least a working C compiler, make, autoconf, automake, pkg-config as well as +libevent and ncurses libraries and headers: $ git clone https://github.com/tmux/tmux.git $ cd tmux $ sh autogen.sh $ ./configure && make -(Note that this requires at least a working C compiler, make, autoconf, -automake, pkg-config as well as libevent and ncurses libraries and headers.) - * Contributing Bug reports, feature suggestions and especially code contributions are most From 7c78ebce45484716e6e02292d7d107e2b15cdbcb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 17 Jul 2019 08:57:22 +0100 Subject: [PATCH 727/836] cc, make, libevent, ncurses are dependencies for all builds so no need to list them for VCS build. --- .github/README.md | 5 ++--- README | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/README.md b/.github/README.md index 50d08c0cb0..2b299cc5b7 100644 --- a/.github/README.md +++ b/.github/README.md @@ -30,9 +30,8 @@ configure with `--enable-utempter` to enable this. ### From version control -To get and build the latest from version control - note that this requires at -least a working C compiler, `make`, `autoconf`, `automake`, `pkg-config` as -well as `libevent` and `ncurses` libraries and headers: +To get and build the latest from version control - note that this requires +`autoconf`, `automake` and `pkg-config`: ~~~bash git clone https://github.com/tmux/tmux.git diff --git a/README b/README index da8f508fd0..4f577060c4 100644 --- a/README +++ b/README @@ -26,9 +26,8 @@ To build and install tmux from a release tarball, use: tmux can use the utempter library to update utmp(5), if it is installed - run configure with --enable-utempter to enable this. -To get and build the latest from version control - note that this requires at -least a working C compiler, make, autoconf, automake, pkg-config as well as -libevent and ncurses libraries and headers: +To get and build the latest from version control - note that this requires +autoconf, automake and pkg-config: $ git clone https://github.com/tmux/tmux.git $ cd tmux From 9e7774bb966f6f90270df8a0d16efb2b2a5ba860 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Jul 2019 17:46:51 +0000 Subject: [PATCH 728/836] Clear overlay on normal key press. --- server-client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/server-client.c b/server-client.c index 3fd16ec58f..d5d8871740 100644 --- a/server-client.c +++ b/server-client.c @@ -1226,6 +1226,7 @@ server_client_handle_key(struct client *c, struct key_event *event) return (0); } } + server_client_clear_overlay(c); } /* From f6a9f6b4ad139f46426ff308669b49a8dc25592e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 17 Jul 2019 17:49:23 +0000 Subject: [PATCH 729/836] Use the right client for if -b. --- cmd-if-shell.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index a992602cb2..2befbc0c18 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -121,7 +121,10 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item) cdata->cmd_else = NULL; memcpy(&cdata->mouse, m, sizeof cdata->mouse); - cdata->client = item->client; + if (!args_has(args, 'b')) + cdata->client = item->client; + else + cdata->client = c; if (cdata->client != NULL) cdata->client->references++; From df7b5292abd220fc7ac8e6f0d1945aa08143fef1 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 19 Jul 2019 07:18:03 +0000 Subject: [PATCH 730/836] More man page fixes from lacygoill at lacygoill dot me, GitHub issue 1805. --- tmux.1 | 58 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/tmux.1 b/tmux.1 index 85d69bf143..f78c910680 100644 --- a/tmux.1 +++ b/tmux.1 @@ -609,7 +609,7 @@ Most commands accept the optional .Fl s ) argument with one of .Ar target-client , -.Ar target-session +.Ar target-session , .Ar target-window , or .Ar target-pane . @@ -776,7 +776,7 @@ may consist entirely of the token .Ql {mouse} (alternative form .Ql = ) -to specify the most recent mouse event +to specify the session, window or pane where the most recent mouse event occurred (see the .Sx MOUSE SUPPORT section) @@ -1361,6 +1361,9 @@ It is also entered when a command that produces output, such as .Ic list-keys , is executed from a key binding. .Pp +In copy mode an indicator is displayed in the top-right corner of the pane with +the current position and the number of lines in the history. +.Pp Commands are sent to copy mode using the .Fl X flag to the @@ -1414,6 +1417,7 @@ The following commands are supported in copy mode: .It Li "jump-to-backward " Ta "T" Ta "" .It Li "jump-to-forward " Ta "t" Ta "" .It Li "middle-line" Ta "M" Ta "M-r" +.It Li "next-matching-bracket" Ta "%" Ta "M-C-f" .It Li "next-paragraph" Ta "}" Ta "M-}" .It Li "next-space" Ta "W" Ta "" .It Li "next-space-end" Ta "E" Ta "" @@ -1423,6 +1427,7 @@ The following commands are supported in copy mode: .It Li "page-down" Ta "C-f" Ta "PageDown" .It Li "page-down-and-cancel" Ta "" Ta "" .It Li "page-up" Ta "C-b" Ta "PageUp" +.It Li "previous-matching-bracket" Ta "" Ta "M-C-b" .It Li "previous-paragraph" Ta "{" Ta "M-{" .It Li "previous-space" Ta "B" Ta "" .It Li "previous-word" Ta "b" Ta "M-b" @@ -3017,6 +3022,18 @@ for all terminal types matching The terminal entry value is passed through .Xr strunvis 3 before interpretation. +.It Ic user-keys[] Ar key +Set list of user-defined key escape sequences. +Each item is associated with a key named +.Ql User0 , +.Ql User1 , +and so on. +.Pp +For example: +.Bd -literal -offset indent +set -s user-keys[0] "\ee[5;30012~" +bind User0 resize-pane -L 3 +.Ed .El .Pp Available session options are: @@ -3223,7 +3240,7 @@ the terminal appears to be .Xr xterm 1 . This option is off by default. .It Ic set-titles-string Ar string -String used to set the window title if +String used to set the client terminal title if .Ic set-titles is on. Formats are expanded, see the @@ -3357,18 +3374,6 @@ removed from the session environment (as if was given to the .Ic set-environment command). -.It Ic user-keys[] Ar key -Set list of user-defined key escape sequences. -Each item is associated with a key named -.Ql User0 , -.Ql User1 , -and so on. -.Pp -For example: -.Bd -literal -offset indent -set -s user-keys[0] "\ee[5;30012~" -bind User0 resize-pane -L 3 -.Ed .It Xo Ic visual-activity .Op Ic on | off | both .Xc @@ -3915,7 +3920,7 @@ flag with a .Ar format argument. This is a string which controls the output format of the command. -Replacement variables are enclosed in +Format variables are enclosed in .Ql #{ and .Ql } , @@ -3974,7 +3979,7 @@ For example: #{?pane_in_mode,#[fg=white#,bg=red],#[fg=red#,bg=white]}#W . .Ed .Pp -Comparisons may be expressed by prefixing two comma-separated +String comparisons may be expressed by prefixing two comma-separated alternatives by .Ql == , .Ql != , @@ -4142,7 +4147,7 @@ will be replaced by The following variables are available, where appropriate: .Bl -column "XXXXXXXXXXXXXXXXXXX" "XXXXX" .It Sy "Variable name" Ta Sy "Alias" Ta Sy "Replaced with" -.It Li "alternate_on" Ta "" Ta "If pane is in alternate screen" +.It Li "alternate_on" Ta "" Ta "1 if pane is in alternate screen" .It Li "alternate_saved_x" Ta "" Ta "Saved cursor X in alternate screen" .It Li "alternate_saved_y" Ta "" Ta "Saved cursor Y in alternate screen" .It Li "buffer_created" Ta "" Ta "Time buffer created" @@ -4213,19 +4218,19 @@ The following variables are available, where appropriate: .It Li "pane_format" Ta "" Ta "1 if format is for a pane (not assuming the current)" .It Li "pane_height" Ta "" Ta "Height of pane" .It Li "pane_id" Ta "#D" Ta "Unique pane ID" -.It Li "pane_in_mode" Ta "" Ta "If pane is in a mode" +.It Li "pane_in_mode" Ta "" Ta "1 if pane is in a mode" .It Li "pane_index" Ta "#P" Ta "Index of pane" -.It Li "pane_input_off" Ta "" Ta "If input to pane is disabled" +.It Li "pane_input_off" Ta "" Ta "1 if input to pane is disabled" .It Li "pane_left" Ta "" Ta "Left of pane" .It Li "pane_marked" Ta "" Ta "1 if this is the marked pane" .It Li "pane_marked_set" Ta "" Ta "1 if a marked pane is set" -.It Li "pane_mode" Ta "" Ta "Name of pane mode, if any." +.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_pipe" Ta "" Ta "1 if pane is being piped" .It Li "pane_right" Ta "" Ta "Right of pane" .It Li "pane_search_string" Ta "" Ta "Last search string in copy mode" .It Li "pane_start_command" Ta "" Ta "Command pane started with" -.It Li "pane_synchronized" Ta "" Ta "If pane is synchronized" +.It Li "pane_synchronized" Ta "" Ta "1 if pane is synchronized" .It Li "pane_tabs" Ta "" Ta "Pane tab positions" .It Li "pane_title" Ta "#T" Ta "Title of pane" .It Li "pane_top" Ta "" Ta "Top of pane" @@ -4590,7 +4595,7 @@ session option. Commands related to the status line are as follows: .Bl -tag -width Ds .It Xo Ic command-prompt -.Op Fl 1i +.Op Fl 1Ni .Op Fl I Ar inputs .Op Fl p Ar prompts .Op Fl t Ar target-client @@ -4640,6 +4645,8 @@ but any quotation marks are escaped. .Fl 1 makes the prompt only accept one key press, in this case the resulting input is a single character. +.Fl N +makes the prompt only accept numeric key presses. .Fl i executes the command every time the prompt input changes instead of when the user exits the command prompt. @@ -4651,7 +4658,7 @@ option: .Bl -column "FunctionXXXXXXXXXXXXXXXXXXXXXXXXX" "viXXXX" "emacsX" -offset indent .It Sy "Function" Ta Sy "vi" Ta Sy "emacs" .It Li "Cancel command prompt" Ta "Escape" Ta "Escape" -.It Li "Delete current word" Ta "" Ta "C-w" +.It Li "Delete from cursor to start of word" Ta "" Ta "C-w" .It Li "Delete entire command" Ta "d" Ta "C-u" .It Li "Delete from cursor to end" Ta "D" Ta "C-k" .It Li "Execute command" Ta "Enter" Ta "Enter" @@ -4769,8 +4776,7 @@ section; information is taken from .Ar target-pane if .Fl t -is given, otherwise the active pane for the session attached to -.Ar target-client . +is given, otherwise the active pane. .Pp .Fl v prints verbose logging as the format is parsed and From bf6d1aeaa44775923a72a4da49def96268dfa304 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 19 Jul 2019 07:20:51 +0000 Subject: [PATCH 731/836] Add a few vi(1) key aliases, from D Ben Knoble. --- mode-tree.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mode-tree.c b/mode-tree.c index 20ac322699..03a91ef8ba 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -933,6 +933,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, case '\016': /* C-n */ mode_tree_down(mtd, 1); break; + case 'g': case KEYC_PPAGE: case '\002': /* C-b */ for (i = 0; i < mtd->height; i++) { @@ -941,6 +942,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, mode_tree_up(mtd, 1); } break; + case 'G': case KEYC_NPAGE: case '\006': /* C-f */ for (i = 0; i < mtd->height; i++) { @@ -1019,6 +1021,8 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, mode_tree_build(mtd); } break; + case '?': + case '/': case '\023': /* C-s */ mtd->references++; status_prompt_set(c, "(search) ", "", From 90dba3ec66b712a9a12f7a61fee89d9647c726f6 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 24 Jul 2019 21:16:17 +0000 Subject: [PATCH 732/836] Mark pane status line jobs with FORMAT_STATUS also so it redraws when they finish, GitHub issue 1852. --- screen-redraw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/screen-redraw.c b/screen-redraw.c index 2943e73bbe..e7f4f0770d 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -266,7 +266,7 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, fmt = options_get_string(w->options, "pane-border-format"); - ft = format_create(c, NULL, FORMAT_PANE|wp->id, 0); + ft = format_create(c, NULL, FORMAT_PANE|wp->id, FORMAT_STATUS); format_defaults(ft, c, NULL, NULL, wp); expanded = format_expand_time(ft, fmt); From 8f40f791d9d45fa70ca5d388eba0f4c2a4cf397b Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 26 Jul 2019 20:08:40 +0000 Subject: [PATCH 733/836] Change "lost server" message to "server exited unexpectedly", from Neal McBurnett in GitHub issue 1857. --- client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client.c b/client.c index d071b1dbf7..a593d9ac54 100644 --- a/client.c +++ b/client.c @@ -202,7 +202,7 @@ client_exit_message(void) case CLIENT_EXIT_TERMINATED: return ("terminated"); case CLIENT_EXIT_LOST_SERVER: - return ("lost server"); + return ("server exited unexpectedly"); case CLIENT_EXIT_EXITED: return ("exited"); case CLIENT_EXIT_SERVER_EXITED: From e19622b8db143545f02b92da674de7f71f8a907a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 26 Jul 2019 21:22:53 +0100 Subject: [PATCH 734/836] Add to CHANGES. --- CHANGES | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 95c8b6192d..952a95a6b0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,23 @@ CHANGES FROM 3.0 to X.X +* Expand arguments to C and s format modifiers to match the m modifier. + +* Add support for underscore colours (Setulc capability must be added with + terminal-overrides as described in tmux(1)). + +* Add a "fill" style attribute for the fill colour of the drawing area (where + appropriate). + +* New -H flag to send-keys to send literal keys. + +* Format variables for pane mouse modes (mouse_utf8_flag and mouse_sgr_flag) + and for origin mode (origin_flag). + +* Add -F to refresh-client for flags for control mode clients, only one flag + (no-output) supported at the moment. + +* Add a few vi(1) keys for menus. + * Add pane options, set with set-option -p and displayed with show-options -p. Pane options inherit from window options (so every pane option is also a window option). The pane style is now configured by setting window-style @@ -16,7 +34,8 @@ CHANGES FROM 3.0 to X.X window. * Add regular expression support for the format search, match and substitute - modifiers and make them able to ignore case. + modifiers and make them able to ignore case. find-window now accepts -r to + use regular expressions. * Do not use $TMUX to find the session because for windows in multiple sessions it is wrong as often as it is right, and for windows in one session it is From b8b865fb17caba880b1c178f8c0bdb855cfe98c8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Jul 2019 10:53:04 +0100 Subject: [PATCH 735/836] Bump 3.0-rc up to master. --- CHANGES | 4 +--- configure.ac | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 952a95a6b0..ad50d54c51 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -CHANGES FROM 3.0 to X.X +CHANGES FROM 2.9 to 3.0 * Expand arguments to C and s format modifiers to match the m modifier. @@ -51,8 +51,6 @@ CHANGES FROM 3.0 to X.X * Support for octal escapes in strings (such as \007) and improve list-keys output so it parses correctly if copied into a configuration file. -CHANGES FROM 2.9 to 3.0 - * INCOMPATIBLE: Add a new {} syntax to the configuration file. This is a string similar to single quotes but also includes newlines and allows commands that take other commands as string arguments to be expressed more clearly and diff --git a/configure.ac b/configure.ac index 5fba1eaf88..21e8926de7 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], next-3.1) +AC_INIT([tmux], 3.0-rc4) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From 2dd9a4fb9cd73987bdca5b8b2f85ca8b1a6e4e73 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 29 Jul 2019 11:03:15 +0100 Subject: [PATCH 736/836] Bump version again. --- CHANGES | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index ad50d54c51..0c75108cdb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +CHANGES FROM 3.0 to X.X + +XXX + CHANGES FROM 2.9 to 3.0 * Expand arguments to C and s format modifiers to match the m modifier. diff --git a/configure.ac b/configure.ac index 21e8926de7..5fba1eaf88 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 3.0-rc4) +AC_INIT([tmux], next-3.1) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) From e698ee01ddf4397f6c2d625281be39d4f4374e8d Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 30 Jul 2019 10:10:02 +0000 Subject: [PATCH 737/836] Reorder some text in the windows & panes section and add some better explanation of modes. --- tmux.1 | 84 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/tmux.1 b/tmux.1 index f78c910680..9f219ffe38 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1344,11 +1344,41 @@ bind-key -Troot a switch-client -Ttable1 .Ed .El .Sh WINDOWS AND PANES -A +Each window displayed by +.Nm +may be split into one or more +.Em panes ; +each pane takes up a certain area of the display and is a separate terminal. +A window may be split into panes using the +.Ic split-window +command. +Windows may be split horizontally (with the +.Fl h +flag) or vertically. +Panes may be resized with the +.Ic resize-pane +command (bound to +.Ql C-Up , +.Ql C-Down +.Ql C-Left +and +.Ql C-Right +by default), the current pane may be changed with the +.Ic select-pane +command and the +.Ic rotate-window +and +.Ic swap-pane +commands may be used to swap panes without changing their position. +Panes are numbered beginning from zero in the order they are created. +.Pp +By default, a .Nm -window may be in one of two modes. -The default permits direct access to the terminal attached to the window. -The other is copy mode, which permits a section of a window or its +pane permits direct access to the terminal contained in the pane. +A pane may also be put into one of several modes: +.Bl -dash -offset indent +.It +Copy mode, which permits a section of a window or its history to be copied to a .Em paste buffer for later insertion into another window. @@ -1357,9 +1387,21 @@ This mode is entered with the command, bound to .Ql \&[ by default. -It is also entered when a command that produces output, such as +.It +View mode, which is like copy mode but is entered when a command that produces +output, such as .Ic list-keys , is executed from a key binding. +.It +Choose mode, which allows an item to be chosen from a list. +This may be a client, a session or window or pane, or a buffer. +This mode is entered with the +.Ic choose-buffer , +.Ic choose-client +and +.Ic choose-tree +commands. +.El .Pp In copy mode an indicator is displayed in the top-right corner of the pane with the current position and the number of lines in the history. @@ -1521,37 +1563,7 @@ bind PageUp copy-mode -eu .Ed .El .Pp -Each window displayed by -.Nm -may be split into one or more -.Em panes ; -each pane takes up a certain area of the display and is a separate terminal. -A window may be split into panes using the -.Ic split-window -command. -Windows may be split horizontally (with the -.Fl h -flag) or vertically. -Panes may be resized with the -.Ic resize-pane -command (bound to -.Ql C-Up , -.Ql C-Down -.Ql C-Left -and -.Ql C-Right -by default), the current pane may be changed with the -.Ic select-pane -command and the -.Ic rotate-window -and -.Ic swap-pane -commands may be used to swap panes without changing their position. -Panes are numbered beginning from zero in the order they are created. -.Pp -A number of preset -.Em layouts -are available. +A number of preset arrangements of panes are available, these are called layouts. These may be selected with the .Ic select-layout command or cycled with From 58bbce09e210ab1fcead4496e3983332b0cb3bf3 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 07:08:13 +0000 Subject: [PATCH 738/836] Remove check for same size - size has already been changed so this breaks reflow. --- grid.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/grid.c b/grid.c index f33eef7238..2f1e9b59cf 100644 --- a/grid.c +++ b/grid.c @@ -1220,10 +1220,6 @@ grid_reflow(struct grid *gd, u_int sx) struct grid_cell gc; u_int yy, width, i, at, first; - /* Do not reflow to the same size. */ - if (sx == gd->sx) - return; - /* * Create a destination grid. This is just used as a container for the * line data and may not be fully valid. From 2db5f9c21528e9a604af6e5d82689af93028d28b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 08:42:34 +0000 Subject: [PATCH 739/836] Add -N to capture-pane to preserve trailing spaces, from Leon Winter. --- cmd-capture-pane.c | 9 +++++---- tmux.1 | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index a3ec066c84..fc6c26e4e0 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -39,8 +39,8 @@ const struct cmd_entry cmd_capture_pane_entry = { .name = "capture-pane", .alias = "capturep", - .args = { "ab:CeE:JpPqS:t:", 0, 0 }, - .usage = "[-aCeJpPq] " CMD_BUFFER_USAGE " [-E end-line] " + .args = { "ab:CeE:JNpPqS:t:", 0, 0 }, + .usage = "[-aCeJNpPq] " CMD_BUFFER_USAGE " [-E end-line] " "[-S start-line] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, @@ -110,7 +110,7 @@ cmd_capture_pane_history(struct args *args, struct cmdq_item *item, struct grid *gd; const struct grid_line *gl; struct grid_cell *gc = NULL; - int n, with_codes, escape_c0, join_lines; + int n, with_codes, escape_c0, join_lines, no_trim; u_int i, sx, top, bottom, tmp; char *cause, *buf, *line; const char *Sflag, *Eflag; @@ -170,11 +170,12 @@ cmd_capture_pane_history(struct args *args, struct cmdq_item *item, with_codes = args_has(args, 'e'); escape_c0 = args_has(args, 'C'); join_lines = args_has(args, 'J'); + no_trim = args_has(args, 'N'); buf = NULL; for (i = top; i <= bottom; i++) { line = grid_string_cells(gd, 0, i, sx, &gc, with_codes, - escape_c0, !join_lines); + escape_c0, !join_lines && !no_trim); linelen = strlen(line); buf = cmd_capture_pane_append(buf, len, line, linelen); diff --git a/tmux.1 b/tmux.1 index 9f219ffe38..20863dfaa4 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1642,7 +1642,7 @@ By default, it uses the format but a different format may be specified with .Fl F . .It Xo Ic capture-pane -.Op Fl aepPqCJ +.Op Fl aepPqCJN .Op Fl b Ar buffer-name .Op Fl E Ar end-line .Op Fl S Ar start-line @@ -1667,8 +1667,10 @@ is given, the output includes escape sequences for text and background attributes. .Fl C also escapes non-printable characters as octal \exxx. +.Fl N +preserves trailing spaces at each line's end and .Fl J -joins wrapped lines and preserves trailing spaces at each line's end. +preserves trailing spaces and joins any wrapped lines. .Fl P captures only any output that the pane has received that is the beginning of an as-yet incomplete escape sequence. From 49bf7dc77e5372a8ec404d1fc2e12b8f68a256d5 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 11:45:34 +0000 Subject: [PATCH 740/836] xterm 348 now disables margins when resized, so send DECLRMM again. --- tty.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tty.c b/tty.c index ab1da9fd39..024aef2712 100644 --- a/tty.c +++ b/tty.c @@ -1879,6 +1879,8 @@ tty_invalidate(struct tty *tty) tty->rlower = tty->rright = UINT_MAX; if (tty->flags & TTY_STARTED) { + if (tty_use_margin(tty)) + tty_puts(tty, "\033[?69h"); /* DECLRMM */ tty_putcode(tty, TTYC_SGR0); tty->mode = ALL_MODES; From 3d660b0023bd1fc8c1f103d214b54e1ac5eb4e4d Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 14:30:31 +0000 Subject: [PATCH 741/836] Select the correct word for select-word when already at the start of a word, GitHub issue 1820. --- window-copy.c | 52 ++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/window-copy.c b/window-copy.c index d868631ce4..f7816d58f0 100644 --- a/window-copy.c +++ b/window-copy.c @@ -110,7 +110,7 @@ static void window_copy_cursor_next_word(struct window_mode_entry *, static void window_copy_cursor_next_word_end(struct window_mode_entry *, const char *); static void window_copy_cursor_previous_word(struct window_mode_entry *, - const char *); + const char *, int); static void window_copy_scroll_up(struct window_mode_entry *, u_int); static void window_copy_scroll_down(struct window_mode_entry *, u_int); static void window_copy_rectangle_toggle(struct window_mode_entry *); @@ -1048,7 +1048,7 @@ window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) tried = 1; goto retry; } - window_copy_cursor_previous_word(wme, "}]) "); + window_copy_cursor_previous_word(wme, "}]) ", 1); } continue; } @@ -1343,7 +1343,7 @@ window_copy_cmd_previous_space(struct window_copy_cmd_state *cs) u_int np = wme->prefix; for (; np != 0; np--) - window_copy_cursor_previous_word(wme, " "); + window_copy_cursor_previous_word(wme, " ", 1); return (WINDOW_COPY_CMD_NOTHING); } @@ -1357,7 +1357,7 @@ window_copy_cmd_previous_word(struct window_copy_cmd_state *cs) ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_previous_word(wme, ws); + window_copy_cursor_previous_word(wme, ws, 1); return (WINDOW_COPY_CMD_NOTHING); } @@ -1477,7 +1477,7 @@ window_copy_cmd_select_word(struct window_copy_cmd_state *cs) data->rectflag = 0; ws = options_get_string(s->options, "word-separators"); - window_copy_cursor_previous_word(wme, ws); + window_copy_cursor_previous_word(wme, ws, 0); window_copy_start_selection(wme); window_copy_cursor_next_word_end(wme, ws); @@ -3314,7 +3314,7 @@ window_copy_cursor_next_word_end(struct window_mode_entry *wme, /* Move to the previous place where a word begins. */ static void window_copy_cursor_previous_word(struct window_mode_entry *wme, - const char *separators) + const char *separators, int already) { struct window_copy_mode_data *data = wme->data; u_int px, py; @@ -3323,25 +3323,27 @@ window_copy_cursor_previous_word(struct window_mode_entry *wme, py = screen_hsize(data->backing) + data->cy - data->oy; /* Move back to the previous word character. */ - for (;;) { - if (px > 0) { - px--; - if (!window_copy_in_set(wme, px, py, separators)) - break; - } else { - if (data->cy == 0 && - (screen_hsize(data->backing) == 0 || - data->oy >= screen_hsize(data->backing) - 1)) - goto out; - window_copy_cursor_up(wme, 0); - - py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wme, py); - - /* Stop if separator at EOL. */ - if (px > 0 && - window_copy_in_set(wme, px - 1, py, separators)) - break; + if (already || window_copy_in_set(wme, px, py, separators)) { + for (;;) { + if (px > 0) { + px--; + if (!window_copy_in_set(wme, px, py, separators)) + break; + } else { + if (data->cy == 0 && + (screen_hsize(data->backing) == 0 || + data->oy >= screen_hsize(data->backing) - 1)) + goto out; + window_copy_cursor_up(wme, 0); + + py = screen_hsize(data->backing) + data->cy - data->oy; + px = window_copy_find_length(wme, py); + + /* Stop if separator at EOL. */ + if (px > 0 && + window_copy_in_set(wme, px - 1, py, separators)) + break; + } } } From c4744620af18de13d4a2981b78992ae9ddfd937a Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 14:31:39 +0000 Subject: [PATCH 742/836] Correctly wrap search in copy mode even if at the very top left, GitHub issue 1845. --- window-copy.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/window-copy.c b/window-copy.c index f7816d58f0..5b197e65be 100644 --- a/window-copy.c +++ b/window-copy.c @@ -60,8 +60,8 @@ static int window_copy_search_rl(struct grid *, struct grid *, u_int *, static int window_copy_search_marks(struct window_mode_entry *, struct screen *); static void window_copy_clear_marks(struct window_mode_entry *); -static void window_copy_move_left(struct screen *, u_int *, u_int *); -static void window_copy_move_right(struct screen *, u_int *, u_int *); +static void window_copy_move_left(struct screen *, u_int *, u_int *, int); +static void window_copy_move_right(struct screen *, u_int *, u_int *, int); static int window_copy_is_lowercase(const char *); static int window_copy_search_jump(struct window_mode_entry *, struct grid *, struct grid *, u_int, u_int, u_int, int, int, @@ -2047,11 +2047,16 @@ window_copy_search_rl(struct grid *gd, } static void -window_copy_move_left(struct screen *s, u_int *fx, u_int *fy) +window_copy_move_left(struct screen *s, u_int *fx, u_int *fy, int wrapflag) { if (*fx == 0) { /* left */ - if (*fy == 0) /* top */ + if (*fy == 0) { /* top */ + if (wrapflag) { + *fx = screen_size_x(s) - 1; + *fy = screen_hsize(s) + screen_size_y(s); + } return; + } *fx = screen_size_x(s) - 1; *fy = *fy - 1; } else @@ -2059,11 +2064,16 @@ window_copy_move_left(struct screen *s, u_int *fx, u_int *fy) } static void -window_copy_move_right(struct screen *s, u_int *fx, u_int *fy) +window_copy_move_right(struct screen *s, u_int *fx, u_int *fy, int wrapflag) { if (*fx == screen_size_x(s) - 1) { /* right */ - if (*fy == screen_hsize(s) + screen_size_y(s)) /* bottom */ + if (*fy == screen_hsize(s) + screen_size_y(s)) { /* bottom */ + if (wrapflag) { + *fx = 0; + *fy = 0; + } return; + } *fx = 0; *fy = *fy + 1; } else @@ -2155,18 +2165,16 @@ window_copy_search(struct window_mode_entry *wme, int direction) screen_write_nputs(&ctx, -1, &grid_default_cell, "%s", data->searchstr); screen_write_stop(&ctx); - if (direction) - window_copy_move_right(s, &fx, &fy); - else - window_copy_move_left(s, &fx, &fy); - wrapflag = options_get_number(wp->window->options, "wrap-search"); cis = window_copy_is_lowercase(data->searchstr); - if (direction) + if (direction) { + window_copy_move_right(s, &fx, &fy, wrapflag); endline = gd->hsize + gd->sy - 1; - else + } else { + window_copy_move_left(s, &fx, &fy, wrapflag); endline = 0; + } found = window_copy_search_jump(wme, gd, ss.grid, fx, fy, endline, cis, wrapflag, direction); From 26f274011096b9eacfd2753d8f7afcb63e796ab9 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 11:45:34 +0000 Subject: [PATCH 743/836] xterm 348 now disables margins when resized, so send DECLRMM again. --- tty.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tty.c b/tty.c index ab1da9fd39..024aef2712 100644 --- a/tty.c +++ b/tty.c @@ -1879,6 +1879,8 @@ tty_invalidate(struct tty *tty) tty->rlower = tty->rright = UINT_MAX; if (tty->flags & TTY_STARTED) { + if (tty_use_margin(tty)) + tty_puts(tty, "\033[?69h"); /* DECLRMM */ tty_putcode(tty, TTYC_SGR0); tty->mode = ALL_MODES; From 45f4ff54850ff9b448070a96b33e63451f973e33 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 5 Aug 2019 06:42:02 +0000 Subject: [PATCH 744/836] Add support for the SD (scroll down) escape sequence, GitHub issue 1861. --- input.c | 7 +++++++ screen-write.c | 25 +++++++++++++++++++++++++ tmux.h | 3 +++ tty-term.c | 1 + tty.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/input.c b/input.c index ff8d7a171a..f37f8fd8d3 100644 --- a/input.c +++ b/input.c @@ -244,6 +244,7 @@ enum input_csi_type { INPUT_CSI_RM, INPUT_CSI_RM_PRIVATE, INPUT_CSI_SCP, + INPUT_CSI_SD, INPUT_CSI_SGR, INPUT_CSI_SM, INPUT_CSI_SM_PRIVATE, @@ -270,6 +271,7 @@ static const struct input_table_entry input_csi_table[] = { { 'M', "", INPUT_CSI_DL }, { 'P', "", INPUT_CSI_DCH }, { 'S', "", INPUT_CSI_SU }, + { 'T', "", INPUT_CSI_SD }, { 'X', "", INPUT_CSI_ECH }, { 'Z', "", INPUT_CSI_CBT }, { '`', "", INPUT_CSI_HPA }, @@ -1525,6 +1527,11 @@ input_csi_dispatch(struct input_ctx *ictx) if (n != -1) screen_write_scrollup(sctx, n, bg); break; + case INPUT_CSI_SD: + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_scrolldown(sctx, n, bg); + break; case INPUT_CSI_TBC: switch (input_get(ictx, 0, 0, 0)) { case -1: diff --git a/screen-write.c b/screen-write.c index 98cdf158ad..66053eaf4c 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1088,6 +1088,31 @@ screen_write_scrollup(struct screen_write_ctx *ctx, u_int lines, u_int bg) ctx->scrolled += lines; } +/* Scroll down. */ +void +screen_write_scrolldown(struct screen_write_ctx *ctx, u_int lines, u_int bg) +{ + struct screen *s = ctx->s; + struct grid *gd = s->grid; + struct tty_ctx ttyctx; + u_int i; + + screen_write_initctx(ctx, &ttyctx); + ttyctx.bg = bg; + + if (lines == 0) + lines = 1; + else if (lines > s->rlower - s->rupper + 1) + lines = s->rlower - s->rupper + 1; + + for (i = 0; i < lines; i++) + grid_view_scroll_region_down(gd, s->rupper, s->rlower, bg); + + screen_write_collect_flush(ctx, 0); + ttyctx.num = lines; + tty_write(tty_cmd_scrolldown, &ttyctx); +} + /* Carriage return (cursor to start of line). */ void screen_write_carriagereturn(struct screen_write_ctx *ctx) diff --git a/tmux.h b/tmux.h index 076a5fe6ac..ef24717bb2 100644 --- a/tmux.h +++ b/tmux.h @@ -420,6 +420,7 @@ enum tty_code_code { TTYC_REV, TTYC_RGB, TTYC_RI, + TTYC_RIN, TTYC_RMACS, TTYC_RMCUP, TTYC_RMKX, @@ -1925,6 +1926,7 @@ void tty_cmd_insertcharacter(struct tty *, const struct tty_ctx *); void tty_cmd_insertline(struct tty *, const struct tty_ctx *); void tty_cmd_linefeed(struct tty *, const struct tty_ctx *); void tty_cmd_scrollup(struct tty *, const struct tty_ctx *); +void tty_cmd_scrolldown(struct tty *, const struct tty_ctx *); void tty_cmd_reverseindex(struct tty *, const struct tty_ctx *); void tty_cmd_setselection(struct tty *, const struct tty_ctx *); void tty_cmd_rawstring(struct tty *, const struct tty_ctx *); @@ -2301,6 +2303,7 @@ void screen_write_reverseindex(struct screen_write_ctx *, u_int); void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int); void screen_write_linefeed(struct screen_write_ctx *, int, u_int); void screen_write_scrollup(struct screen_write_ctx *, u_int, u_int); +void screen_write_scrolldown(struct screen_write_ctx *, u_int, u_int); void screen_write_carriagereturn(struct screen_write_ctx *); void screen_write_clearendofscreen(struct screen_write_ctx *, u_int); void screen_write_clearstartofscreen(struct screen_write_ctx *, u_int); diff --git a/tty-term.c b/tty-term.c index 39e2b013ae..774dc9ed0e 100644 --- a/tty-term.c +++ b/tty-term.c @@ -239,6 +239,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_REV] = { TTYCODE_STRING, "rev" }, [TTYC_RGB] = { TTYCODE_FLAG, "RGB" }, [TTYC_RI] = { TTYCODE_STRING, "ri" }, + [TTYC_RIN] = { TTYCODE_STRING, "rin" }, [TTYC_RMACS] = { TTYCODE_STRING, "rmacs" }, [TTYC_RMCUP] = { TTYCODE_STRING, "rmcup" }, [TTYC_RMKX] = { TTYCODE_STRING, "rmkx" }, diff --git a/tty.c b/tty.c index 024aef2712..1658fb7450 100644 --- a/tty.c +++ b/tty.c @@ -1558,10 +1558,11 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) return; if (ctx->bigger || - !tty_pane_full_width(tty, ctx) || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || - !tty_term_has(tty->term, TTYC_RI) || + (!tty_term_has(tty->term, TTYC_RI) && + !tty_term_has(tty->term, TTYC_RIN)) || ctx->wp->sx == 1 || ctx->wp->sy == 1) { tty_redraw_region(tty, ctx); @@ -1571,10 +1572,13 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) tty_default_attributes(tty, wp, ctx->bg); tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); - tty_margin_off(tty); + tty_margin_pane(tty, ctx); tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); - tty_putcode(tty, TTYC_RI); + if (tty_term_has(tty->term, TTYC_RI)) + tty_putcode(tty, TTYC_RI); + else + tty_putcode1(tty, TTYC_RIN, 1); } void @@ -1652,6 +1656,38 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) } } +void +tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx) +{ + struct window_pane *wp = ctx->wp; + u_int i; + + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + tty_fake_bce(tty, wp, 8) || + !tty_term_has(tty->term, TTYC_CSR) || + (!tty_term_has(tty->term, TTYC_RI) && + !tty_term_has(tty->term, TTYC_RIN)) || + wp->sx == 1 || + wp->sy == 1) { + tty_redraw_region(tty, ctx); + return; + } + + tty_default_attributes(tty, wp, ctx->bg); + + tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); + tty_margin_pane(tty, ctx); + tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); + + if (tty_term_has(tty->term, TTYC_RIN)) + tty_putcode1(tty, TTYC_RIN, ctx->num); + else { + for (i = 0; i < ctx->num; i++) + tty_putcode(tty, TTYC_RI); + } +} + void tty_cmd_clearendofscreen(struct tty *tty, const struct tty_ctx *ctx) { From 0f243f03882671f19d35c9bd2decfc94919979fa Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 14 Aug 2019 09:58:31 +0000 Subject: [PATCH 745/836] Add -Z flag to rotate-window, select-pane, swap-pane, switch-client to preserve zoomed state. GitHub issue 1839. --- cmd-rotate-window.c | 17 ++++++++--------- cmd-select-pane.c | 30 ++++++++++++++++++++---------- cmd-swap-pane.c | 26 ++++++++++++++++++-------- cmd-switch-client.c | 19 ++++++++++++------- tmux.1 | 25 ++++++++++++++++++------- tmux.h | 3 +++ window.c | 22 ++++++++++++++++++++++ 7 files changed, 101 insertions(+), 41 deletions(-) diff --git a/cmd-rotate-window.c b/cmd-rotate-window.c index 6dc0f2a828..cc66116390 100644 --- a/cmd-rotate-window.c +++ b/cmd-rotate-window.c @@ -31,8 +31,8 @@ const struct cmd_entry cmd_rotate_window_entry = { .name = "rotate-window", .alias = "rotatew", - .args = { "Dt:U", 0, 0 }, - .usage = "[-DU] " CMD_TARGET_WINDOW_USAGE, + .args = { "Dt:UZ", 0, 0 }, + .usage = "[-DUZ] " CMD_TARGET_WINDOW_USAGE, .target = { 't', CMD_FIND_WINDOW, 0 }, @@ -50,7 +50,7 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) struct layout_cell *lc; u_int sx, sy, xoff, yoff; - server_unzoom_window(w); + window_push_zoom(w, args_has(self->args, 'Z')); if (args_has(self->args, 'D')) { wp = TAILQ_LAST(&w->panes, window_panes); @@ -77,9 +77,6 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_PREV(w->active, window_panes, entry)) == NULL) wp = TAILQ_LAST(&w->panes, window_panes); - window_set_active_pane(w, wp, 1); - cmd_find_from_winlink_pane(current, wl, wp, 0); - server_redraw_window(w); } else { wp = TAILQ_FIRST(&w->panes); TAILQ_REMOVE(&w->panes, wp, entry); @@ -105,10 +102,12 @@ cmd_rotate_window_exec(struct cmd *self, struct cmdq_item *item) if ((wp = TAILQ_NEXT(w->active, entry)) == NULL) wp = TAILQ_FIRST(&w->panes); - window_set_active_pane(w, wp, 1); - cmd_find_from_winlink_pane(current, wl, wp, 0); - server_redraw_window(w); } + window_set_active_pane(w, wp, 1); + cmd_find_from_winlink_pane(current, wl, wp, 0); + window_pop_zoom(w); + server_redraw_window(w); + return (CMD_RETURN_NORMAL); } diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 52c58dbcea..15f76afeb6 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_select_pane_entry = { .name = "select-pane", .alias = "selectp", - .args = { "DdegLlMmP:RT:t:U", 0, 0 }, /* -P and -g deprecated */ - .usage = "[-DdeLlMmRU] [-T title] " CMD_TARGET_PANE_USAGE, + .args = { "DdegLlMmP:RT:t:UZ", 0, 0 }, /* -P and -g deprecated */ + .usage = "[-DdeLlMmRUZ] [-T title] " CMD_TARGET_PANE_USAGE, .target = { 't', CMD_FIND_PANE, 0 }, @@ -46,8 +46,8 @@ const struct cmd_entry cmd_last_pane_entry = { .name = "last-pane", .alias = "lastp", - .args = { "det:", 0, 0 }, - .usage = "[-de] " CMD_TARGET_WINDOW_USAGE, + .args = { "det:Z", 0, 0 }, + .usage = "[-deZ] " CMD_TARGET_WINDOW_USAGE, .target = { 't', CMD_FIND_WINDOW, 0 }, @@ -111,12 +111,15 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) else if (args_has(self->args, 'd')) lastwp->flags |= PANE_INPUTOFF; else { - server_unzoom_window(w); + if (window_push_zoom(w, args_has(self->args, 'Z'))) + server_redraw_window(w); window_redraw_active_switch(w, lastwp); if (window_set_active_pane(w, lastwp, 1)) { cmd_find_from_winlink(current, wl, 0); cmd_select_pane_redraw(w); } + if (window_pop_zoom(w)) + server_redraw_window(w); } return (CMD_RETURN_NORMAL); } @@ -161,17 +164,21 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) } if (args_has(self->args, 'L')) { - server_unzoom_window(wp->window); + window_push_zoom(w, 1); wp = window_pane_find_left(wp); + window_pop_zoom(w); } else if (args_has(self->args, 'R')) { - server_unzoom_window(wp->window); + window_push_zoom(w, 1); wp = window_pane_find_right(wp); + window_pop_zoom(w); } else if (args_has(self->args, 'U')) { - server_unzoom_window(wp->window); + window_push_zoom(w, 1); wp = window_pane_find_up(wp); + window_pop_zoom(w); } else if (args_has(self->args, 'D')) { - server_unzoom_window(wp->window); + window_push_zoom(w, 1); wp = window_pane_find_down(wp); + window_pop_zoom(w); } if (wp == NULL) return (CMD_RETURN_NORMAL); @@ -196,13 +203,16 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (wp == w->active) return (CMD_RETURN_NORMAL); - server_unzoom_window(wp->window); + if (window_push_zoom(w, args_has(self->args, 'Z'))) + server_redraw_window(w); window_redraw_active_switch(w, wp); if (window_set_active_pane(w, wp, 1)) { cmd_find_from_winlink_pane(current, wl, wp, 0); cmdq_insert_hook(s, item, current, "after-select-pane"); cmd_select_pane_redraw(w); } + if (window_pop_zoom(w)) + server_redraw_window(w); return (CMD_RETURN_NORMAL); } diff --git a/cmd-swap-pane.c b/cmd-swap-pane.c index 994ad0e8bd..3e0e6e600b 100644 --- a/cmd-swap-pane.c +++ b/cmd-swap-pane.c @@ -32,8 +32,8 @@ const struct cmd_entry cmd_swap_pane_entry = { .name = "swap-pane", .alias = "swapp", - .args = { "dDs:t:U", 0, 0 }, - .usage = "[-dDU] " CMD_SRCDST_PANE_USAGE, + .args = { "dDs:t:UZ", 0, 0 }, + .usage = "[-dDUZ] " CMD_SRCDST_PANE_USAGE, .source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED }, .target = { 't', CMD_FIND_PANE, 0 }, @@ -45,6 +45,7 @@ const struct cmd_entry cmd_swap_pane_entry = { static enum cmd_retval cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) { + struct args *args = self->args; struct window *src_w, *dst_w; struct window_pane *tmp_wp, *src_wp, *dst_wp; struct layout_cell *src_lc, *dst_lc; @@ -54,23 +55,27 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) dst_wp = item->target.wp; src_w = item->source.wl->window; src_wp = item->source.wp; - server_unzoom_window(dst_w); - if (args_has(self->args, 'D')) { + if (window_push_zoom(dst_w, args_has(args, 'Z'))) + server_redraw_window(dst_w); + + if (args_has(args, 'D')) { src_w = dst_w; src_wp = TAILQ_NEXT(dst_wp, entry); if (src_wp == NULL) src_wp = TAILQ_FIRST(&dst_w->panes); - } else if (args_has(self->args, 'U')) { + } else if (args_has(args, 'U')) { src_w = dst_w; src_wp = TAILQ_PREV(dst_wp, window_panes, entry); if (src_wp == NULL) src_wp = TAILQ_LAST(&dst_w->panes, window_panes); } - server_unzoom_window(src_w); + + if (src_w != dst_w && window_push_zoom(src_w, args_has(args, 'Z'))) + server_redraw_window(src_w); if (src_wp == dst_wp) - return (CMD_RETURN_NORMAL); + goto out; tmp_wp = TAILQ_PREV(dst_wp, window_panes, entry); TAILQ_REMOVE(&dst_w->panes, dst_wp, entry); @@ -103,7 +108,7 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) dst_wp->xoff = xoff; dst_wp->yoff = yoff; window_pane_resize(dst_wp, sx, sy); - if (!args_has(self->args, 'd')) { + if (!args_has(args, 'd')) { if (src_w != dst_w) { window_set_active_pane(src_w, dst_wp, 1); window_set_active_pane(dst_w, src_wp, 1); @@ -126,5 +131,10 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item) server_redraw_window(src_w); server_redraw_window(dst_w); +out: + if (window_pop_zoom(src_w)) + server_redraw_window(src_w); + if (src_w != dst_w && window_pop_zoom(dst_w)) + server_redraw_window(dst_w); return (CMD_RETURN_NORMAL); } diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 8f51d0fe3c..309a7e7c58 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -34,8 +34,8 @@ const struct cmd_entry cmd_switch_client_entry = { .name = "switch-client", .alias = "switchc", - .args = { "lc:Enpt:rT:", 0, 0 }, - .usage = "[-Elnpr] [-c target-client] [-t target-session] " + .args = { "lc:Enpt:rT:Z", 0, 0 }, + .usage = "[-ElnprZ] [-c target-client] [-t target-session] " "[-T key-table]", /* -t is special */ @@ -54,6 +54,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) struct client *c; struct session *s; struct winlink *wl; + struct window *w; struct window_pane *wp; const char *tablename; struct key_table *table; @@ -72,6 +73,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); s = item->target.s; wl = item->target.wl; + w = wl->window; wp = item->target.wp; if (args_has(args, 'r')) @@ -112,12 +114,15 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) } else { if (item->client == NULL) return (CMD_RETURN_NORMAL); + if (wl != NULL && wp != NULL) { + if (window_push_zoom(w, args_has(self->args, 'Z'))) + server_redraw_window(w); + window_redraw_active_switch(w, wp); + window_set_active_pane(w, wp, 1); + if (window_pop_zoom(w)) + server_redraw_window(w); + } if (wl != NULL) { - server_unzoom_window(wl->window); - if (wp != NULL) { - window_redraw_active_switch(wp->window, wp); - window_set_active_pane(wp->window, wp, 1); - } session_set_current(s, wl); cmd_find_from_session(&item->shared->current, s, 0); } diff --git a/tmux.1 b/tmux.1 index 20863dfaa4..1bac8de87c 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1291,7 +1291,7 @@ Suspend a client by sending .Dv SIGTSTP (tty stop). .It Xo Ic switch-client -.Op Fl Elnpr +.Op Fl ElnprZ .Op Fl c Ar target-client .Op Fl t Ar target-session .Op Fl T Ar key-table @@ -1308,7 +1308,10 @@ may refer to a pane (a target that contains .Ql \&. or .Ql % ) , -in which case the session, window and pane are all changed. +to change session, window and pane. +In that case, +.Fl Z +keeps the window zoomed if it was zoomed. If .Fl l , .Fl n @@ -1934,11 +1937,13 @@ The option kills all but the window given with .Fl t . .It Xo Ic last-pane -.Op Fl de +.Op Fl deZ .Op Fl t Ar target-window .Xc .D1 (alias: Ic lastp ) Select the last (previously selected) pane. +.Fl Z +keeps the window zoomed if it was zoomed. .Fl e enables or .Fl d @@ -2320,7 +2325,7 @@ option has the same meaning as for the .Ic new-window command. .It Xo Ic rotate-window -.Op Fl DU +.Op Fl DUZ .Op Fl t Ar target-window .Xc .D1 (alias: Ic rotatew ) @@ -2328,6 +2333,8 @@ Rotate the positions of the panes within a window, either upward (numerically lower) with .Fl U or downward (numerically higher). +.Fl Z +keeps the window zoomed if it was zoomed. .It Xo Ic select-layout .Op Fl Enop .Op Fl t Ar target-pane @@ -2351,7 +2358,7 @@ applies the last set layout if possible (undoes the most recent layout change). .Fl E spreads the current pane and any panes next to it out evenly. .It Xo Ic select-pane -.Op Fl DdeLlMmRU +.Op Fl DdeLlMmRUZ .Op Fl T Ar title .Op Fl t Ar target-pane .Xc @@ -2368,6 +2375,8 @@ or .Fl U is used, respectively the pane below, to the left, to the right, or above the target pane is used. +.Fl Z +keeps the window zoomed if it was zoomed. .Fl l is the same as using the .Ic last-pane @@ -2473,7 +2482,7 @@ All other options have the same meaning as for the .Ic new-window command. .It Xo Ic swap-pane -.Op Fl dDU +.Op Fl dDUZ .Op Fl s Ar src-pane .Op Fl t Ar dst-pane .Xc @@ -2490,7 +2499,9 @@ swaps with the next pane (after it numerically). .Fl d instructs .Nm -not to change the active pane. +not to change the active pane and +.Fl Z +keeps the window zoomed if it was zoomed. .Pp If .Fl s diff --git a/tmux.h b/tmux.h index ef24717bb2..3bcb120ba7 100644 --- a/tmux.h +++ b/tmux.h @@ -922,6 +922,7 @@ struct window { #define WINDOW_ACTIVITY 0x2 #define WINDOW_SILENCE 0x4 #define WINDOW_ZOOMED 0x8 +#define WINDOW_WASZOOMED 0x10 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE) int alerts_queued; @@ -2381,6 +2382,8 @@ struct window_pane *window_add_pane(struct window *, struct window_pane *, void window_resize(struct window *, u_int, u_int); int window_zoom(struct window_pane *); int window_unzoom(struct window *); +int window_push_zoom(struct window *, int); +int window_pop_zoom(struct window *); void window_lost_pane(struct window *, struct window_pane *); void window_remove_pane(struct window *, struct window_pane *); struct window_pane *window_pane_at_index(struct window *, u_int); diff --git a/window.c b/window.c index 06145221d6..bf4fbb706f 100644 --- a/window.c +++ b/window.c @@ -587,6 +587,28 @@ window_unzoom(struct window *w) return (0); } +int +window_push_zoom(struct window *w, int flag) +{ + log_debug("%s: @%u %d", __func__, w->id, + flag && (w->flags & WINDOW_ZOOMED)); + if (flag && (w->flags & WINDOW_ZOOMED)) + w->flags |= WINDOW_WASZOOMED; + else + w->flags &= ~WINDOW_WASZOOMED; + return (window_unzoom(w) == 0); +} + +int +window_pop_zoom(struct window *w) +{ + log_debug("%s: @%u %d", __func__, w->id, + !!(w->flags & WINDOW_WASZOOMED)); + if (w->flags & WINDOW_WASZOOMED) + return (window_zoom(w->active) == 0); + return (0); +} + struct window_pane * window_add_pane(struct window *w, struct window_pane *other, u_int hlimit, int flags) From 21fae500897fcc3fa1bf561a2da3c439f5b5897b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 14 Aug 2019 10:02:24 +0000 Subject: [PATCH 746/836] Default to previous search string for search-forward and search-backward, from Leah Neukirchen. --- window-copy.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/window-copy.c b/window-copy.c index 5b197e65be..c7c44fe960 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1635,12 +1635,17 @@ window_copy_cmd_search_backward(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; u_int np = wme->prefix; - const char *argument = cs->args->argv[1]; + const char *argument; - if (*argument != '\0') { + if (cs->args->argc == 2) { + argument = cs->args->argv[1]; + if (*argument != '\0') { + free(data->searchstr); + data->searchstr = xstrdup(argument); + } + } + if (data->searchstr != NULL) { data->searchtype = WINDOW_COPY_SEARCHUP; - free(data->searchstr); - data->searchstr = xstrdup(argument); for (; np != 0; np--) window_copy_search_up(wme); } @@ -1653,12 +1658,17 @@ window_copy_cmd_search_forward(struct window_copy_cmd_state *cs) struct window_mode_entry *wme = cs->wme; struct window_copy_mode_data *data = wme->data; u_int np = wme->prefix; - const char *argument = cs->args->argv[1]; + const char *argument; - if (*argument != '\0') { + if (cs->args->argc == 2) { + argument = cs->args->argv[1]; + if (*argument != '\0') { + free(data->searchstr); + data->searchstr = xstrdup(argument); + } + } + if (data->searchstr != NULL) { data->searchtype = WINDOW_COPY_SEARCHDOWN; - free(data->searchstr); - data->searchstr = xstrdup(argument); for (; np != 0; np--) window_copy_search_down(wme); } @@ -1872,11 +1882,11 @@ static const struct { window_copy_cmd_scroll_up }, { "search-again", 0, 0, window_copy_cmd_search_again }, - { "search-backward", 1, 1, + { "search-backward", 0, 1, window_copy_cmd_search_backward }, { "search-backward-incremental", 1, 1, window_copy_cmd_search_backward_incremental }, - { "search-forward", 1, 1, + { "search-forward", 0, 1, window_copy_cmd_search_forward }, { "search-forward-incremental", 1, 1, window_copy_cmd_search_forward_incremental }, From 5644d37876faf69ecf9f34cbd52e6cdfab83cf79 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Aug 2019 08:52:25 +0000 Subject: [PATCH 747/836] grid_view_delete_cells does need to clear, GitHub issue 1871. --- grid-view.c | 1 + 1 file changed, 1 insertion(+) diff --git a/grid-view.c b/grid-view.c index fa3bfbf6a1..a4bd5ba2fc 100644 --- a/grid-view.c +++ b/grid-view.c @@ -214,6 +214,7 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx, u_int bg) sx = grid_view_x(gd, gd->sx); grid_move_cells(gd, px, px + nx, py, sx - px - nx, bg); + grid_clear(gd, sx - nx, py, px + nx - (sx - nx), 1, bg); } /* Convert cells into a string. */ From 37583f0a69d22668bdd47e0b30b61d8dac74bdf6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Aug 2019 11:49:12 +0000 Subject: [PATCH 748/836] Add a flag to reverse sort in the various choose modes, from Benjamin Poirier in GitHub issue 1875. --- cmd-choose-tree.c | 12 ++-- mode-tree.c | 25 ++++--- tmux.1 | 27 +++++--- tmux.h | 9 ++- window-buffer.c | 70 +++++++------------ window-client.c | 106 +++++++++++------------------ window-tree.c | 168 ++++++++++++++++++++++++---------------------- 7 files changed, 198 insertions(+), 219 deletions(-) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index 5eb58ff5e6..8178ec9f55 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -30,8 +30,8 @@ const struct cmd_entry cmd_choose_tree_entry = { .name = "choose-tree", .alias = NULL, - .args = { "F:Gf:NO:st:wZ", 0, 1 }, - .usage = "[-GNsw] [-F format] [-f filter] [-O sort-order] " + .args = { "F:Gf:NO:rst:wZ", 0, 1 }, + .usage = "[-GNrswZ] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -44,8 +44,8 @@ const struct cmd_entry cmd_choose_client_entry = { .name = "choose-client", .alias = NULL, - .args = { "F:f:NO:t:Z", 0, 1 }, - .usage = "[-N] [-F format] [-f filter] [-O sort-order] " + .args = { "F:f:NO:rt:Z", 0, 1 }, + .usage = "[-NrZ] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -58,8 +58,8 @@ const struct cmd_entry cmd_choose_buffer_entry = { .name = "choose-buffer", .alias = NULL, - .args = { "F:f:NO:t:Z", 0, 1 }, - .usage = "[-N] [-F format] [-f filter] [-O sort-order] " + .args = { "F:f:NO:rt:Z", 0, 1 }, + .usage = "[-NrZ] [-F format] [-f filter] [-O sort-order] " CMD_TARGET_PANE_USAGE " [template]", .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/mode-tree.c b/mode-tree.c index 03a91ef8ba..054989fb6b 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -39,7 +39,7 @@ struct mode_tree_data { const char **sort_list; u_int sort_size; - u_int sort_type; + struct mode_tree_sort_criteria sort_crit; mode_tree_build_cb buildcb; mode_tree_draw_cb drawcb; @@ -334,7 +334,6 @@ mode_tree_start(struct window_pane *wp, struct args *args, mtd->sort_list = sort_list; mtd->sort_size = sort_size; - mtd->sort_type = 0; mtd->preview = !args_has(args, 'N'); @@ -342,9 +341,10 @@ mode_tree_start(struct window_pane *wp, struct args *args, if (sort != NULL) { for (i = 0; i < sort_size; i++) { if (strcasecmp(sort, sort_list[i]) == 0) - mtd->sort_type = i; + mtd->sort_crit.field = i; } } + mtd->sort_crit.reversed = args_has(args, 'r'); if (args_has(args, 'f')) mtd->filter = xstrdup(args_get(args, 'f')); @@ -392,10 +392,10 @@ mode_tree_build(struct mode_tree_data *mtd) TAILQ_CONCAT(&mtd->saved, &mtd->children, entry); TAILQ_INIT(&mtd->children); - mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, mtd->filter); + mtd->buildcb(mtd->modedata, &mtd->sort_crit, &tag, mtd->filter); mtd->no_matches = TAILQ_EMPTY(&mtd->children); if (mtd->no_matches) - mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, NULL); + mtd->buildcb(mtd->modedata, &mtd->sort_crit, &tag, NULL); mode_tree_free_items(&mtd->saved); TAILQ_INIT(&mtd->saved); @@ -634,8 +634,9 @@ mode_tree_draw(struct mode_tree_data *mtd) screen_write_cursormove(&ctx, 0, h, 0); screen_write_box(&ctx, w, sy - h); - xasprintf(&text, " %s (sort: %s)", mti->name, - mtd->sort_list[mtd->sort_type]); + xasprintf(&text, " %s (sort: %s%s)", mti->name, + mtd->sort_list[mtd->sort_crit.field], + mtd->sort_crit.reversed ? ", reversed" : ""); if (w - 2 >= strlen(text)) { screen_write_cursormove(&ctx, 1, h, 0); screen_write_puts(&ctx, &gc0, "%s", text); @@ -993,9 +994,13 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, } break; case 'O': - mtd->sort_type++; - if (mtd->sort_type == mtd->sort_size) - mtd->sort_type = 0; + mtd->sort_crit.field++; + if (mtd->sort_crit.field == mtd->sort_size) + mtd->sort_crit.field = 0; + mode_tree_build(mtd); + break; + case 'r': + mtd->sort_crit.reversed = !mtd->sort_crit.reversed; mode_tree_build(mtd); break; case KEYC_LEFT: diff --git a/tmux.1 b/tmux.1 index 1bac8de87c..694e46d06c 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1692,7 +1692,7 @@ the end of the visible pane. The default is to capture only the visible contents of the pane. .It Xo .Ic choose-client -.Op Fl NZ +.Op Fl NrZ .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -1721,7 +1721,8 @@ The following keys may be used in client mode: .It Li "z" Ta "Suspend selected client" .It Li "Z" Ta "Suspend tagged clients" .It Li "f" Ta "Enter a format to filter items" -.It Li "O" Ta "Change sort order" +.It Li "O" Ta "Change sort field" +.It Li "r" Ta "Reverse sort order" .It Li "v" Ta "Toggle preview" .It Li "q" Ta "Exit mode" .El @@ -1736,12 +1737,14 @@ If is not given, "detach-client -t '%%'" is used. .Pp .Fl O -specifies the initial sort order: one of +specifies the initial sort field: one of .Ql name , .Ql size , .Ql creation , or .Ql activity . +.Fl r +reverses the sort order. .Fl f specifies an initial filter: the filter is a format - if it evaluates to zero, the item in the list is not shown, otherwise it is shown. @@ -1753,7 +1756,7 @@ starts without the preview. This command works only if at least one client is attached. .It Xo .Ic choose-tree -.Op Fl GNswZ +.Op Fl GNrswZ .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -1785,7 +1788,8 @@ The following keys may be used in tree mode: .It Li "C-t" Ta "Tag all items" .It Li "\&:" Ta "Run a command for each tagged item" .It Li "f" Ta "Enter a format to filter items" -.It Li "O" Ta "Change sort order" +.It Li "O" Ta "Change sort field" +.It Li "r" Ta "Reverse sort order" .It Li "v" Ta "Toggle preview" .It Li "q" Ta "Exit mode" .El @@ -1800,11 +1804,13 @@ If is not given, "switch-client -t '%%'" is used. .Pp .Fl O -specifies the initial sort order: one of +specifies the initial sort field: one of .Ql index , .Ql name , or .Ql time . +.Fl r +reverses the sort order. .Fl f specifies an initial filter: the filter is a format - if it evaluates to zero, the item in the list is not shown, otherwise it is shown. @@ -4860,7 +4866,7 @@ The buffer commands are as follows: .Bl -tag -width Ds .It Xo .Ic choose-buffer -.Op Fl NZ +.Op Fl NZr .Op Fl F Ar format .Op Fl f Ar filter .Op Fl O Ar sort-order @@ -4887,7 +4893,8 @@ The following keys may be used in buffer mode: .It Li "d" Ta "Delete selected buffer" .It Li "D" Ta "Delete tagged buffers" .It Li "f" Ta "Enter a format to filter items" -.It Li "O" Ta "Change sort order" +.It Li "O" Ta "Change sort field" +.It Li "r" Ta "Reverse sort order" .It Li "v" Ta "Toggle preview" .It Li "q" Ta "Exit mode" .El @@ -4902,11 +4909,13 @@ If is not given, "paste-buffer -b '%%'" is used. .Pp .Fl O -specifies the initial sort order: one of +specifies the initial sort field: one of .Ql time , .Ql name or .Ql size . +.Fl r +reverses the sort order. .Fl f specifies an initial filter: the filter is a format - if it evaluates to zero, the item in the list is not shown, otherwise it is shown. diff --git a/tmux.h b/tmux.h index 3bcb120ba7..0cd2708d50 100644 --- a/tmux.h +++ b/tmux.h @@ -1682,6 +1682,12 @@ struct spawn_context { #define SPAWN_EMPTY 0x40 }; +/* Mode tree sort order. */ +struct mode_tree_sort_criteria { + u_int field; + int reversed; +}; + /* tmux.c */ extern struct options *global_options; extern struct options *global_s_options; @@ -2473,7 +2479,8 @@ u_int layout_set_next(struct window *); u_int layout_set_previous(struct window *); /* mode-tree.c */ -typedef void (*mode_tree_build_cb)(void *, u_int, uint64_t *, const char *); +typedef void (*mode_tree_build_cb)(void *, struct mode_tree_sort_criteria *, + uint64_t *, const char *); typedef void (*mode_tree_draw_cb)(void *, void *, struct screen_write_ctx *, u_int, u_int); typedef int (*mode_tree_search_cb)(void *, void *, const char *); diff --git a/window-buffer.c b/window-buffer.c index 983b16808c..b111518264 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -75,6 +75,7 @@ static const char *window_buffer_sort_list[] = { "name", "size" }; +static struct mode_tree_sort_criteria *window_buffer_sort; struct window_buffer_itemdata { const char *name; @@ -113,43 +114,29 @@ window_buffer_free_item(struct window_buffer_itemdata *item) } static int -window_buffer_cmp_name(const void *a0, const void *b0) +window_buffer_cmp(const void *a0, const void *b0) { - const struct window_buffer_itemdata *const *a = a0; - const struct window_buffer_itemdata *const *b = b0; - - return (strcmp((*a)->name, (*b)->name)); -} - -static int -window_buffer_cmp_time(const void *a0, const void *b0) -{ - const struct window_buffer_itemdata *const *a = a0; - const struct window_buffer_itemdata *const *b = b0; - - if ((*a)->order > (*b)->order) - return (-1); - if ((*a)->order < (*b)->order) - return (1); - return (strcmp((*a)->name, (*b)->name)); -} - -static int -window_buffer_cmp_size(const void *a0, const void *b0) -{ - const struct window_buffer_itemdata *const *a = a0; - const struct window_buffer_itemdata *const *b = b0; - - if ((*a)->size > (*b)->size) - return (-1); - if ((*a)->size < (*b)->size) - return (1); - return (strcmp((*a)->name, (*b)->name)); + const struct window_buffer_itemdata *const *a = a0; + const struct window_buffer_itemdata *const *b = b0; + int result = 0; + + if (window_buffer_sort->field == WINDOW_BUFFER_BY_TIME) + result = (*b)->order - (*a)->order; + else if (window_buffer_sort->field == WINDOW_BUFFER_BY_SIZE) + result = (*b)->size - (*a)->size; + + /* Use WINDOW_BUFFER_BY_NAME as default order and tie breaker. */ + if (result == 0) + result = strcmp((*a)->name, (*b)->name); + + if (window_buffer_sort->reversed) + result = -result; + return (result); } static void -window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, - const char *filter) +window_buffer_build(void *modedata, struct mode_tree_sort_criteria *sort_crit, + __unused uint64_t *tag, const char *filter) { struct window_buffer_modedata *data = modedata; struct window_buffer_itemdata *item; @@ -175,20 +162,9 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, item->order = paste_buffer_order(pb); } - switch (sort_type) { - case WINDOW_BUFFER_BY_NAME: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_buffer_cmp_name); - break; - case WINDOW_BUFFER_BY_TIME: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_buffer_cmp_time); - break; - case WINDOW_BUFFER_BY_SIZE: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_buffer_cmp_size); - break; - } + window_buffer_sort = sort_crit; + qsort(data->item_list, data->item_size, sizeof *data->item_list, + window_buffer_cmp); if (cmd_find_valid_state(&data->fs)) { s = data->fs.s; diff --git a/window-client.c b/window-client.c index d85414ead4..2ca9c01217 100644 --- a/window-client.c +++ b/window-client.c @@ -75,6 +75,7 @@ static const char *window_client_sort_list[] = { "creation", "activity" }; +static struct mode_tree_sort_criteria *window_client_sort; struct window_client_itemdata { struct client *c; @@ -110,60 +111,48 @@ window_client_free_item(struct window_client_itemdata *item) } static int -window_client_cmp_name(const void *a0, const void *b0) +window_client_cmp(const void *a0, const void *b0) { - const struct window_client_itemdata *const *a = a0; - const struct window_client_itemdata *const *b = b0; - - return (strcmp((*a)->c->name, (*b)->c->name)); -} - -static int -window_client_cmp_size(const void *a0, const void *b0) -{ - const struct window_client_itemdata *const *a = a0; - const struct window_client_itemdata *const *b = b0; - - if ((*a)->c->tty.sx < (*b)->c->tty.sx) - return (-1); - if ((*a)->c->tty.sx > (*b)->c->tty.sx) - return (1); - if ((*a)->c->tty.sy < (*b)->c->tty.sy) - return (-1); - if ((*a)->c->tty.sy > (*b)->c->tty.sy) - return (1); - return (strcmp((*a)->c->name, (*b)->c->name)); -} + const struct window_client_itemdata *const *a = a0; + const struct window_client_itemdata *const *b = b0; + const struct window_client_itemdata *itema = *a; + const struct window_client_itemdata *itemb = *b; + struct client *ca = itema->c; + struct client *cb = itemb->c; + int result = 0; + + switch (window_client_sort->field) { + case WINDOW_CLIENT_BY_SIZE: + result = ca->tty.sx - cb->tty.sx; + if (result == 0) + result = ca->tty.sy - cb->tty.sy; + break; + case WINDOW_CLIENT_BY_CREATION_TIME: + if (timercmp(&ca->creation_time, &cb->creation_time, >)) + result = -1; + else if (timercmp(&ca->creation_time, &cb->creation_time, <)) + result = 1; + break; + case WINDOW_CLIENT_BY_ACTIVITY_TIME: + if (timercmp(&ca->activity_time, &cb->activity_time, >)) + result = -1; + else if (timercmp(&ca->activity_time, &cb->activity_time, <)) + result = 1; + break; + } -static int -window_client_cmp_creation_time(const void *a0, const void *b0) -{ - const struct window_client_itemdata *const *a = a0; - const struct window_client_itemdata *const *b = b0; - - if (timercmp(&(*a)->c->creation_time, &(*b)->c->creation_time, >)) - return (-1); - if (timercmp(&(*a)->c->creation_time, &(*b)->c->creation_time, <)) - return (1); - return (strcmp((*a)->c->name, (*b)->c->name)); -} + /* Use WINDOW_CLIENT_BY_NAME as default order and tie breaker. */ + if (result == 0) + result = strcmp(ca->name, cb->name); -static int -window_client_cmp_activity_time(const void *a0, const void *b0) -{ - const struct window_client_itemdata *const *a = a0; - const struct window_client_itemdata *const *b = b0; - - if (timercmp(&(*a)->c->activity_time, &(*b)->c->activity_time, >)) - return (-1); - if (timercmp(&(*a)->c->activity_time, &(*b)->c->activity_time, <)) - return (1); - return (strcmp((*a)->c->name, (*b)->c->name)); + if (window_client_sort->reversed) + result = -result; + return (result); } static void -window_client_build(void *modedata, u_int sort_type, __unused uint64_t *tag, - const char *filter) +window_client_build(void *modedata, struct mode_tree_sort_criteria *sort_crit, + __unused uint64_t *tag, const char *filter) { struct window_client_modedata *data = modedata; struct window_client_itemdata *item; @@ -187,24 +176,9 @@ window_client_build(void *modedata, u_int sort_type, __unused uint64_t *tag, c->references++; } - switch (sort_type) { - case WINDOW_CLIENT_BY_NAME: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_client_cmp_name); - break; - case WINDOW_CLIENT_BY_SIZE: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_client_cmp_size); - break; - case WINDOW_CLIENT_BY_CREATION_TIME: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_client_cmp_creation_time); - break; - case WINDOW_CLIENT_BY_ACTIVITY_TIME: - qsort(data->item_list, data->item_size, sizeof *data->item_list, - window_client_cmp_activity_time); - break; - } + window_client_sort = sort_crit; + qsort(data->item_list, data->item_size, sizeof *data->item_list, + window_client_cmp); for (i = 0; i < data->item_size; i++) { item = data->item_list[i]; diff --git a/window-tree.c b/window-tree.c index b9fc4a6afe..a0127c2f48 100644 --- a/window-tree.c +++ b/window-tree.c @@ -89,6 +89,7 @@ static const char *window_tree_sort_list[] = { "name", "time" }; +static struct mode_tree_sort_criteria *window_tree_sort; enum window_tree_type { WINDOW_TREE_NONE, @@ -184,62 +185,92 @@ window_tree_free_item(struct window_tree_itemdata *item) } static int -window_tree_cmp_session_name(const void *a0, const void *b0) +window_tree_cmp_session(const void *a0, const void *b0) { - const struct session *const *a = a0; - const struct session *const *b = b0; + const struct session *const *a = a0; + const struct session *const *b = b0; + const struct session *sa = *a; + const struct session *sb = *b; + int result; - return (strcmp((*a)->name, (*b)->name)); -} - -static int -window_tree_cmp_session_time(const void *a0, const void *b0) -{ - const struct session *const *a = a0; - const struct session *const *b = b0; + switch (window_tree_sort->field) { + case WINDOW_TREE_BY_INDEX: + result = sa->id - sb->id; + break; + case WINDOW_TREE_BY_TIME: + if (timercmp(&sa->activity_time, &sb->activity_time, >)) { + result = -1; + break; + } + if (timercmp(&sa->activity_time, &sb->activity_time, <)) { + result = 1; + break; + } + /* FALLTHROUGH */ + case WINDOW_TREE_BY_NAME: + result = strcmp(sa->name, sb->name); + break; + } - if (timercmp(&(*a)->activity_time, &(*b)->activity_time, >)) - return (-1); - if (timercmp(&(*a)->activity_time, &(*b)->activity_time, <)) - return (1); - return (strcmp((*a)->name, (*b)->name)); + if (window_tree_sort->reversed) + result = -result; + return (result); } static int -window_tree_cmp_window_name(const void *a0, const void *b0) +window_tree_cmp_window(const void *a0, const void *b0) { - const struct winlink *const *a = a0; - const struct winlink *const *b = b0; - - return (strcmp((*a)->window->name, (*b)->window->name)); -} + const struct winlink *const *a = a0; + const struct winlink *const *b = b0; + const struct winlink *wla = *a; + const struct winlink *wlb = *b; + struct window *wa = wla->window; + struct window *wb = wlb->window; + int result; + + switch (window_tree_sort->field) { + case WINDOW_TREE_BY_INDEX: + result = wla->idx - wlb->idx; + break; + case WINDOW_TREE_BY_TIME: + if (timercmp(&wa->activity_time, &wb->activity_time, >)) { + result = -1; + break; + } + if (timercmp(&wa->activity_time, &wb->activity_time, <)) { + result = 1; + break; + } + /* FALLTHROUGH */ + case WINDOW_TREE_BY_NAME: + result = strcmp(wa->name, wb->name); + break; + } -static int -window_tree_cmp_window_time(const void *a0, const void *b0) -{ - const struct winlink *const *a = a0; - const struct winlink *const *b = b0; - - if (timercmp(&(*a)->window->activity_time, - &(*b)->window->activity_time, >)) - return (-1); - if (timercmp(&(*a)->window->activity_time, - &(*b)->window->activity_time, <)) - return (1); - return (strcmp((*a)->window->name, (*b)->window->name)); + if (window_tree_sort->reversed) + result = -result; + return (result); } static int -window_tree_cmp_pane_time(const void *a0, const void *b0) +window_tree_cmp_pane(const void *a0, const void *b0) { - const struct window_pane *const *a = a0; - const struct window_pane *const *b = b0; + const struct window_pane *const *a = a0; + const struct window_pane *const *b = b0; + int result; - if ((*a)->active_point < (*b)->active_point) - return (-1); - if ((*a)->active_point > (*b)->active_point) - return (1); - return (0); + if (window_tree_sort->field == WINDOW_TREE_BY_TIME) + result = (*a)->active_point - (*b)->active_point; + else { + /* + * Panes don't have names, so use number order for any other + * sort field. + */ + result = (*a)->id - (*b)->id; + } + if (window_tree_sort->reversed) + result *= -1; + return (result); } static void @@ -285,8 +316,9 @@ window_tree_filter_pane(struct session *s, struct winlink *wl, } static int -window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, - u_int sort_type, struct mode_tree_item *parent, const char *filter) +window_tree_build_window(struct session *s, struct winlink *wl, + void* modedata, struct mode_tree_sort_criteria *sort_crit, + struct mode_tree_item *parent, const char *filter) { struct window_tree_modedata *data = modedata; struct window_tree_itemdata *item; @@ -335,16 +367,8 @@ window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, if (n == 0) goto empty; - switch (sort_type) { - case WINDOW_TREE_BY_INDEX: - break; - case WINDOW_TREE_BY_NAME: - /* Panes don't have names, so leave in number order. */ - break; - case WINDOW_TREE_BY_TIME: - qsort(l, n, sizeof *l, window_tree_cmp_pane_time); - break; - } + window_tree_sort = sort_crit; + qsort(l, n, sizeof *l, window_tree_cmp_pane); for (i = 0; i < n; i++) window_tree_build_pane(s, wl, l[i], modedata, mti); @@ -360,7 +384,7 @@ window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, static void window_tree_build_session(struct session *s, void* modedata, - u_int sort_type, const char *filter) + struct mode_tree_sort_criteria *sort_crit, const char *filter) { struct window_tree_modedata *data = modedata; struct window_tree_itemdata *item; @@ -392,20 +416,12 @@ window_tree_build_session(struct session *s, void* modedata, l = xreallocarray(l, n + 1, sizeof *l); l[n++] = wl; } - switch (sort_type) { - case WINDOW_TREE_BY_INDEX: - break; - case WINDOW_TREE_BY_NAME: - qsort(l, n, sizeof *l, window_tree_cmp_window_name); - break; - case WINDOW_TREE_BY_TIME: - qsort(l, n, sizeof *l, window_tree_cmp_window_time); - break; - } + window_tree_sort = sort_crit; + qsort(l, n, sizeof *l, window_tree_cmp_window); empty = 0; for (i = 0; i < n; i++) { - if (!window_tree_build_window(s, l[i], modedata, sort_type, mti, + if (!window_tree_build_window(s, l[i], modedata, sort_crit, mti, filter)) empty++; } @@ -418,8 +434,8 @@ window_tree_build_session(struct session *s, void* modedata, } static void -window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, - const char *filter) +window_tree_build(void *modedata, struct mode_tree_sort_criteria *sort_crit, + uint64_t *tag, const char *filter) { struct window_tree_modedata *data = modedata; struct session *s, **l; @@ -446,19 +462,11 @@ window_tree_build(void *modedata, u_int sort_type, uint64_t *tag, l = xreallocarray(l, n + 1, sizeof *l); l[n++] = s; } - switch (sort_type) { - case WINDOW_TREE_BY_INDEX: - break; - case WINDOW_TREE_BY_NAME: - qsort(l, n, sizeof *l, window_tree_cmp_session_name); - break; - case WINDOW_TREE_BY_TIME: - qsort(l, n, sizeof *l, window_tree_cmp_session_time); - break; - } + window_tree_sort = sort_crit; + qsort(l, n, sizeof *l, window_tree_cmp_session); for (i = 0; i < n; i++) - window_tree_build_session(l[i], modedata, sort_type, filter); + window_tree_build_session(l[i], modedata, sort_crit, filter); free(l); switch (data->type) { From e85ea9f67dcecab91599a658ad694d8e08514509 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Aug 2019 08:52:25 +0000 Subject: [PATCH 749/836] grid_view_delete_cells does need to clear, GitHub issue 1871. --- grid-view.c | 1 + 1 file changed, 1 insertion(+) diff --git a/grid-view.c b/grid-view.c index fa3bfbf6a1..a4bd5ba2fc 100644 --- a/grid-view.c +++ b/grid-view.c @@ -214,6 +214,7 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx, u_int bg) sx = grid_view_x(gd, gd->sx); grid_move_cells(gd, px, px + nx, py, sx - px - nx, bg); + grid_clear(gd, sx - nx, py, px + nx - (sx - nx), 1, bg); } /* Convert cells into a string. */ From 79f09b4d855b2339db2c859266135ab1b6368a61 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 5 Aug 2019 06:42:02 +0000 Subject: [PATCH 750/836] Add support for the SD (scroll down) escape sequence, GitHub issue 1861. --- input.c | 7 +++++++ screen-write.c | 25 +++++++++++++++++++++++++ tmux.h | 3 +++ tty-term.c | 1 + tty.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/input.c b/input.c index ff8d7a171a..f37f8fd8d3 100644 --- a/input.c +++ b/input.c @@ -244,6 +244,7 @@ enum input_csi_type { INPUT_CSI_RM, INPUT_CSI_RM_PRIVATE, INPUT_CSI_SCP, + INPUT_CSI_SD, INPUT_CSI_SGR, INPUT_CSI_SM, INPUT_CSI_SM_PRIVATE, @@ -270,6 +271,7 @@ static const struct input_table_entry input_csi_table[] = { { 'M', "", INPUT_CSI_DL }, { 'P', "", INPUT_CSI_DCH }, { 'S', "", INPUT_CSI_SU }, + { 'T', "", INPUT_CSI_SD }, { 'X', "", INPUT_CSI_ECH }, { 'Z', "", INPUT_CSI_CBT }, { '`', "", INPUT_CSI_HPA }, @@ -1525,6 +1527,11 @@ input_csi_dispatch(struct input_ctx *ictx) if (n != -1) screen_write_scrollup(sctx, n, bg); break; + case INPUT_CSI_SD: + n = input_get(ictx, 0, 1, 1); + if (n != -1) + screen_write_scrolldown(sctx, n, bg); + break; case INPUT_CSI_TBC: switch (input_get(ictx, 0, 0, 0)) { case -1: diff --git a/screen-write.c b/screen-write.c index 98cdf158ad..66053eaf4c 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1088,6 +1088,31 @@ screen_write_scrollup(struct screen_write_ctx *ctx, u_int lines, u_int bg) ctx->scrolled += lines; } +/* Scroll down. */ +void +screen_write_scrolldown(struct screen_write_ctx *ctx, u_int lines, u_int bg) +{ + struct screen *s = ctx->s; + struct grid *gd = s->grid; + struct tty_ctx ttyctx; + u_int i; + + screen_write_initctx(ctx, &ttyctx); + ttyctx.bg = bg; + + if (lines == 0) + lines = 1; + else if (lines > s->rlower - s->rupper + 1) + lines = s->rlower - s->rupper + 1; + + for (i = 0; i < lines; i++) + grid_view_scroll_region_down(gd, s->rupper, s->rlower, bg); + + screen_write_collect_flush(ctx, 0); + ttyctx.num = lines; + tty_write(tty_cmd_scrolldown, &ttyctx); +} + /* Carriage return (cursor to start of line). */ void screen_write_carriagereturn(struct screen_write_ctx *ctx) diff --git a/tmux.h b/tmux.h index 5c10420a4e..9bf9f9336f 100644 --- a/tmux.h +++ b/tmux.h @@ -422,6 +422,7 @@ enum tty_code_code { TTYC_REV, TTYC_RGB, TTYC_RI, + TTYC_RIN, TTYC_RMACS, TTYC_RMCUP, TTYC_RMKX, @@ -1927,6 +1928,7 @@ void tty_cmd_insertcharacter(struct tty *, const struct tty_ctx *); void tty_cmd_insertline(struct tty *, const struct tty_ctx *); void tty_cmd_linefeed(struct tty *, const struct tty_ctx *); void tty_cmd_scrollup(struct tty *, const struct tty_ctx *); +void tty_cmd_scrolldown(struct tty *, const struct tty_ctx *); void tty_cmd_reverseindex(struct tty *, const struct tty_ctx *); void tty_cmd_setselection(struct tty *, const struct tty_ctx *); void tty_cmd_rawstring(struct tty *, const struct tty_ctx *); @@ -2303,6 +2305,7 @@ void screen_write_reverseindex(struct screen_write_ctx *, u_int); void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int); void screen_write_linefeed(struct screen_write_ctx *, int, u_int); void screen_write_scrollup(struct screen_write_ctx *, u_int, u_int); +void screen_write_scrolldown(struct screen_write_ctx *, u_int, u_int); void screen_write_carriagereturn(struct screen_write_ctx *); void screen_write_clearendofscreen(struct screen_write_ctx *, u_int); void screen_write_clearstartofscreen(struct screen_write_ctx *, u_int); diff --git a/tty-term.c b/tty-term.c index eabadf6b56..182edd7d29 100644 --- a/tty-term.c +++ b/tty-term.c @@ -242,6 +242,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_REV] = { TTYCODE_STRING, "rev" }, [TTYC_RGB] = { TTYCODE_FLAG, "RGB" }, [TTYC_RI] = { TTYCODE_STRING, "ri" }, + [TTYC_RIN] = { TTYCODE_STRING, "rin" }, [TTYC_RMACS] = { TTYCODE_STRING, "rmacs" }, [TTYC_RMCUP] = { TTYCODE_STRING, "rmcup" }, [TTYC_RMKX] = { TTYCODE_STRING, "rmkx" }, diff --git a/tty.c b/tty.c index 024aef2712..1658fb7450 100644 --- a/tty.c +++ b/tty.c @@ -1558,10 +1558,11 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) return; if (ctx->bigger || - !tty_pane_full_width(tty, ctx) || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || !tty_term_has(tty->term, TTYC_CSR) || - !tty_term_has(tty->term, TTYC_RI) || + (!tty_term_has(tty->term, TTYC_RI) && + !tty_term_has(tty->term, TTYC_RIN)) || ctx->wp->sx == 1 || ctx->wp->sy == 1) { tty_redraw_region(tty, ctx); @@ -1571,10 +1572,13 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) tty_default_attributes(tty, wp, ctx->bg); tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); - tty_margin_off(tty); + tty_margin_pane(tty, ctx); tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); - tty_putcode(tty, TTYC_RI); + if (tty_term_has(tty->term, TTYC_RI)) + tty_putcode(tty, TTYC_RI); + else + tty_putcode1(tty, TTYC_RIN, 1); } void @@ -1652,6 +1656,38 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) } } +void +tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx) +{ + struct window_pane *wp = ctx->wp; + u_int i; + + if (ctx->bigger || + (!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + tty_fake_bce(tty, wp, 8) || + !tty_term_has(tty->term, TTYC_CSR) || + (!tty_term_has(tty->term, TTYC_RI) && + !tty_term_has(tty->term, TTYC_RIN)) || + wp->sx == 1 || + wp->sy == 1) { + tty_redraw_region(tty, ctx); + return; + } + + tty_default_attributes(tty, wp, ctx->bg); + + tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); + tty_margin_pane(tty, ctx); + tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); + + if (tty_term_has(tty->term, TTYC_RIN)) + tty_putcode1(tty, TTYC_RIN, ctx->num); + else { + for (i = 0; i < ctx->num; i++) + tty_putcode(tty, TTYC_RI); + } +} + void tty_cmd_clearendofscreen(struct tty *tty, const struct tty_ctx *ctx) { From 39c55d5b6fcafd9476528ebc1064192c90f559a4 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 26 Aug 2019 16:35:41 +0000 Subject: [PATCH 751/836] Fix swap-window -d to work as intended, GitHub issue 1879 from Sam Stuewe. --- cmd-swap-window.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd-swap-window.c b/cmd-swap-window.c index f5224194ec..0c15479d56 100644 --- a/cmd-swap-window.c +++ b/cmd-swap-window.c @@ -77,10 +77,10 @@ cmd_swap_window_exec(struct cmd *self, struct cmdq_item *item) wl_src->window = w_dst; TAILQ_INSERT_TAIL(&w_dst->winlinks, wl_src, wentry); - if (!args_has(self->args, 'd')) { - session_select(src, wl_src->idx); + if (args_has(self->args, 'd')) { + session_select(dst, wl_dst->idx); if (src != dst) - session_select(dst, wl_dst->idx); + session_select(src, wl_src->idx); } session_group_synchronize_from(src); server_redraw_session_group(src); From df0334d3b397de03a81411f1101a8e82a55b9be9 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 28 Aug 2019 07:34:32 +0000 Subject: [PATCH 752/836] The resize event was never deciding to actually resize the pane if there was output in the pane faster than the timer would fire, so change how it works to only defer the timer again if the pane was actually resized within the last timer period. Reported by James Tai in GitHub issue 1880. --- server-client.c | 75 +++++++++++++++++++++++++++++-------------------- tmux.h | 1 + window.c | 2 +- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/server-client.c b/server-client.c index d5d8871740..4b60f5c0de 100644 --- a/server-client.c +++ b/server-client.c @@ -44,6 +44,7 @@ static void server_client_set_title(struct client *); static void server_client_reset_state(struct client *); static int server_client_assume_paste(struct session *); static void server_client_clear_overlay(struct client *); +static void server_client_resize_event(int, short, void *); static void server_client_dispatch(struct imsg *, void *); static void server_client_dispatch_command(struct client *, struct imsg *); @@ -1319,19 +1320,11 @@ server_client_resize_force(struct window_pane *wp) return (1); } -/* Resize timer event. */ +/* Resize a pane. */ static void -server_client_resize_event(__unused int fd, __unused short events, void *data) +server_client_resize_pane(struct window_pane *wp) { - struct window_pane *wp = data; - struct winsize ws; - - evtimer_del(&wp->resize_timer); - - if (!(wp->flags & PANE_RESIZE)) - return; - if (server_client_resize_force(wp)) - return; + struct winsize ws; memset(&ws, 0, sizeof ws); ws.ws_col = wp->sx; @@ -1346,35 +1339,55 @@ server_client_resize_event(__unused int fd, __unused short events, void *data) wp->osy = wp->sy; } +/* Start the resize timer. */ +static void +server_client_start_resize_timer(struct window_pane *wp) +{ + struct timeval tv = { .tv_usec = 250000 }; + + if (!evtimer_pending(&wp->resize_timer, NULL)) + evtimer_add(&wp->resize_timer, &tv); +} + +/* Resize timer event. */ +static void +server_client_resize_event(__unused int fd, __unused short events, void *data) +{ + struct window_pane *wp = data; + + evtimer_del(&wp->resize_timer); + + if (~wp->flags & PANE_RESIZE) + return; + log_debug("%s: %%%u timer fired (was%s resized)", __func__, wp->id, + (wp->flags & PANE_RESIZED) ? "" : " not"); + + if (wp->saved_grid == NULL && (wp->flags & PANE_RESIZED)) { + log_debug("%s: %%%u deferring timer", __func__, wp->id); + server_client_start_resize_timer(wp); + } else if (!server_client_resize_force(wp)) { + log_debug("%s: %%%u resizing pane", __func__, wp->id); + server_client_resize_pane(wp); + } + wp->flags &= ~PANE_RESIZED; +} + /* Check if pane should be resized. */ static void server_client_check_resize(struct window_pane *wp) { - struct timeval tv = { .tv_usec = 250000 }; - - if (!(wp->flags & PANE_RESIZE)) + if (~wp->flags & PANE_RESIZE) return; - log_debug("%s: %%%u resize to %u,%u", __func__, wp->id, wp->sx, wp->sy); if (!event_initialized(&wp->resize_timer)) evtimer_set(&wp->resize_timer, server_client_resize_event, wp); - /* - * The first resize should happen immediately, so if the timer is not - * running, do it now. - */ - if (!evtimer_pending(&wp->resize_timer, NULL)) - server_client_resize_event(-1, 0, wp); - - /* - * If the pane is in the alternate screen, let the timer expire and - * resize to give the application a chance to redraw. If not, keep - * pushing the timer back. - */ - if (wp->saved_grid != NULL && evtimer_pending(&wp->resize_timer, NULL)) - return; - evtimer_del(&wp->resize_timer); - evtimer_add(&wp->resize_timer, &tv); + if (!evtimer_pending(&wp->resize_timer, NULL)) { + log_debug("%s: %%%u starting timer", __func__, wp->id); + server_client_resize_pane(wp); + server_client_start_resize_timer(wp); + } else + log_debug("%s: %%%u timer running", __func__, wp->id); } /* Check whether pane should be focused. */ diff --git a/tmux.h b/tmux.h index 0cd2708d50..2b69b00268 100644 --- a/tmux.h +++ b/tmux.h @@ -843,6 +843,7 @@ struct window_pane { #define PANE_STATUSDRAWN 0x400 #define PANE_EMPTY 0x800 #define PANE_STYLECHANGED 0x1000 +#define PANE_RESIZED 0x2000 int argc; char **argv; diff --git a/window.c b/window.c index bf4fbb706f..0b691197b0 100644 --- a/window.c +++ b/window.c @@ -953,7 +953,7 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) if (wme != NULL && wme->mode->resize != NULL) wme->mode->resize(wme, sx, sy); - wp->flags |= PANE_RESIZE; + wp->flags |= (PANE_RESIZE|PANE_RESIZED); } /* From 7ce813513818e58d3d35116c868bd6c8d866c997 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 29 Aug 2019 07:13:48 +0000 Subject: [PATCH 753/836] It is not longer necessary to double-escape ; in %%%, problem reported by Theo Buehler. --- cmd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmd.c b/cmd.c index c838c53f90..bbcd77448e 100644 --- a/cmd.c +++ b/cmd.c @@ -661,7 +661,7 @@ char * cmd_template_replace(const char *template, const char *s, int idx) { char ch, *buf; - const char *ptr, *cp, quote[] = "\"\\$"; + const char *ptr, *cp, quote[] = "\"\\$;"; int replaced, quoted; size_t len; @@ -692,10 +692,6 @@ cmd_template_replace(const char *template, const char *s, int idx) for (cp = s; *cp != '\0'; cp++) { if (quoted && strchr(quote, *cp) != NULL) buf[len++] = '\\'; - if (quoted && *cp == ';') { - buf[len++] = '\\'; - buf[len++] = '\\'; - } buf[len++] = *cp; } buf[len] = '\0'; From 5423bf6db89c14b49fd9059357faa94e19a73e2c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 8 Sep 2019 21:29:22 +0100 Subject: [PATCH 754/836] Missing headers from compat/asprintf.c, from cyyever at outlook dot com. --- compat/asprintf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compat/asprintf.c b/compat/asprintf.c index 95d7843058..187c19f00f 100644 --- a/compat/asprintf.c +++ b/compat/asprintf.c @@ -19,8 +19,10 @@ #include #include #include +#include #include "compat.h" +#include "xmalloc.h" int asprintf(char **ret, const char *fmt, ...) From 9a476c5f29d404128da070f2fe35a66bbe29ed9b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 8 Sep 2019 21:42:26 +0100 Subject: [PATCH 755/836] Fix "make ctags", GitHub issue 1888. --- Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 94b1564b68..ab30263779 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,8 +6,9 @@ CLEANFILES = tmux.1.mdoc tmux.1.man cmd-parse.c # Distribution tarball options. EXTRA_DIST = \ - CHANGES README README.ja COPYING example_tmux.conf compat/*.[ch] \ + CHANGES README README.ja COPYING example_tmux.conf \ osdep-*.c mdoc2man.awk tmux.1 +dist_EXTRA_tmux_SOURCES = compat/*.[ch] # Preprocessor flags. AM_CPPFLAGS += @XOPEN_DEFINES@ -DTMUX_CONF="\"$(sysconfdir)/tmux.conf\"" From b31515fec36e8eb6eb57a75825e9840d8bd68a2e Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 9 Sep 2019 08:01:21 +0000 Subject: [PATCH 756/836] Add cursor-down-and-cancel, from Mark Kelly. --- tmux.1 | 39 ++++++++++++++++++++------------------- window-copy.c | 17 +++++++++++++++++ 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/tmux.1 b/tmux.1 index 694e46d06c..bd96564ffa 100644 --- a/tmux.1 +++ b/tmux.1 @@ -291,6 +291,12 @@ Prompt to search for text in open windows. Display some information about the current window. .It l Move to the previously selected window. +.It m +Mark the current pane (see +.Ic select-pane +.Fl m ) . +.It M +Clear the marked pane. .It n Change to the next window. .It o @@ -301,12 +307,6 @@ Change to the previous window. Briefly display pane indexes. .It r Force redraw of the attached client. -.It m -Mark the current pane (see -.Ic select-pane -.Fl m ) . -.It M -Clear the marked pane. .It s Select a new session for the attached client interactively. .It t @@ -1151,7 +1151,7 @@ The .Fl P option prints information about the new session after it has been created. By default, it uses the format -.Ql #{session_name}: +.Ql #{session_name}:\& but a different format may be specified with .Fl F . .Pp @@ -1445,6 +1445,7 @@ The following commands are supported in copy mode: .It Li "copy-selection-no-clear []" Ta "" Ta "" .It Li "copy-selection-and-cancel []" Ta "Enter" Ta "M-w" .It Li "cursor-down" Ta "j" Ta "Down" +.It Li "cursor-down-and-cancel" Ta "" Ta "" .It Li "cursor-left" Ta "h" Ta "Left" .It Li "cursor-right" Ta "l" Ta "Right" .It Li "cursor-up" Ta "k" Ta "Up" @@ -4086,7 +4087,7 @@ will append if the pane title is more than five characters. .Pp Prefixing a time variable with -.Ql t: +.Ql t:\& will convert it to a string, so if .Ql #{window_activity} gives @@ -4095,34 +4096,34 @@ gives gives .Ql Sun Oct 25 09:25:02 2015 . The -.Ql b: +.Ql b:\& and -.Ql d: +.Ql d:\& prefixes are .Xr basename 3 and .Xr dirname 3 of the variable respectively. -.Ql q: +.Ql q:\& will escape .Xr sh 1 special characters. -.Ql E: +.Ql E:\& will expand the format twice, for example .Ql #{E:status-left} is the result of expanding the content of the .Ic status-left option rather than the option itself. -.Ql T: +.Ql T:\& is like -.Ql E: +.Ql E:\& but also expands .Xr strftime 3 specifiers. -.Ql S: , -.Ql W: +.Ql S:\& , +.Ql W:\& or -.Ql P: +.Ql P:\& will loop over each session, window or pane and insert the format once for each. For windows and panes, two comma-separated formats may be given: @@ -4133,7 +4134,7 @@ For example, to get a list of windows formatted like the status line: .Ed .Pp A prefix of the form -.Ql s/foo/bar/: +.Ql s/foo/bar/:\& will substitute .Ql foo with @@ -4142,7 +4143,7 @@ throughout. The first argument may be an extended regular expression and a final argument may be .Ql i to ignore case, for example -.Ql s/a(.)/\e1x/i: +.Ql s/a(.)/\e1x/i:\& would change .Ql abABab into diff --git a/window-copy.c b/window-copy.c index c7c44fe960..b90130c791 100644 --- a/window-copy.c +++ b/window-copy.c @@ -819,6 +819,21 @@ window_copy_cmd_cursor_down(struct window_copy_cmd_state *cs) return (WINDOW_COPY_CMD_NOTHING); } +static enum window_copy_cmd_action +window_copy_cmd_cursor_down_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; + u_int np = wme->prefix, cy; + + cy = data->cy; + for (; np != 0; np--) + window_copy_cursor_down(wme, 0); + if (cy == data->cy && data->oy == 0) + return (WINDOW_COPY_CMD_CANCEL); + return (WINDOW_COPY_CMD_NOTHING); +} + static enum window_copy_cmd_action window_copy_cmd_cursor_left(struct window_copy_cmd_state *cs) { @@ -1810,6 +1825,8 @@ static const struct { window_copy_cmd_copy_selection_and_cancel }, { "cursor-down", 0, 0, window_copy_cmd_cursor_down }, + { "cursor-down-and-cancel", 0, 0, + window_copy_cmd_cursor_down_and_cancel }, { "cursor-left", 0, 0, window_copy_cmd_cursor_left }, { "cursor-right", 0, 0, From b6b7486423fe5f1f3b1971308393088b03dc4dc8 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 9 Sep 2019 11:47:25 +0000 Subject: [PATCH 757/836] Clarify server options slightly. --- tmux.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index bd96564ffa..c4c5698e3b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2743,7 +2743,7 @@ and .Pp The .Nm -server has a set of global options which do not apply to any particular +server has a set of global server options which do not apply to any particular window or session or pane. These are altered with the .Ic set-option From 4b7e97ba533161e6130b957b91c9bb6aa3da7afa Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 10 Sep 2019 07:50:33 +0000 Subject: [PATCH 758/836] Set up format tree for %if, GitHub issue 1896. --- cmd-parse.y | 16 ++++++++-------- cmd-queue.c | 1 - format.c | 1 - key-bindings.c | 1 - window-copy.c | 1 - 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/cmd-parse.y b/cmd-parse.y index 6d2b970c46..b0a42f7c94 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -176,18 +176,18 @@ expanded : format struct cmd_parse_input *pi = ps->input; struct format_tree *ft; struct client *c = pi->c; - struct cmd_find_state *fs; + struct cmd_find_state *fsp; + struct cmd_find_state fs; int flags = FORMAT_NOJOBS; if (cmd_find_valid_state(&pi->fs)) - fs = &pi->fs; - else - fs = NULL; + fsp = &pi->fs; + else { + cmd_find_from_client(&fs, c, 0); + fsp = &fs; + } ft = format_create(NULL, pi->item, FORMAT_NONE, flags); - if (fs != NULL) - format_defaults(ft, c, fs->s, fs->wl, fs->wp); - else - format_defaults(ft, c, NULL, NULL, NULL); + format_defaults(ft, c, fsp->s, fsp->wl, fsp->wp); $$ = format_expand(ft, $1); format_free(ft); diff --git a/cmd-queue.c b/cmd-queue.c index ef68d5d539..fa6999e82f 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -102,7 +102,6 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item) } while (item != NULL); } - /* Insert a hook. */ void cmdq_insert_hook(struct session *s, struct cmdq_item *item, diff --git a/format.c b/format.c index df569bc23d..6dfec4b751 100644 --- a/format.c +++ b/format.c @@ -946,7 +946,6 @@ format_each(struct format_tree *ft, void (*cb)(const char *, const char *, } } - /* Add a key-value pair. */ void format_add(struct format_tree *ft, const char *key, const char *fmt, ...) diff --git a/key-bindings.c b/key-bindings.c index 0c9ba67bbb..df2dcf46bb 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -69,7 +69,6 @@ " '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" \ " '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}" - static int key_bindings_cmp(struct key_binding *, struct key_binding *); RB_GENERATE_STATIC(key_bindings, key_binding, entry, key_bindings_cmp); static int key_table_cmp(struct key_table *, struct key_table *); diff --git a/window-copy.c b/window-copy.c index b90130c791..76736ab27c 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1108,7 +1108,6 @@ window_copy_cmd_previous_matching_bracket(struct window_copy_cmd_state *cs) return (WINDOW_COPY_CMD_NOTHING); } - static enum window_copy_cmd_action window_copy_cmd_next_matching_bracket(struct window_copy_cmd_state *cs) { From 0feae4d8ae4190b89f486fddab10a691cc7a8fd3 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 10 Sep 2019 19:35:34 +0000 Subject: [PATCH 759/836] Make client exit if pane where input is going is closed. --- window.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/window.c b/window.c index 0b691197b0..e3b20a3eca 100644 --- a/window.c +++ b/window.c @@ -1572,6 +1572,10 @@ window_pane_input_callback(struct client *c, int closed, void *data) wp = window_pane_find_by_id(cdata->wp); if (wp == NULL || closed || c->flags & CLIENT_DEAD) { + if (wp == NULL) + c->flags |= CLIENT_EXIT; + evbuffer_drain(evb, len); + c->stdin_callback = NULL; server_client_unref(c); From a23ce1b45ff8b8999e2817c9e747188c559725e1 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 11 Sep 2019 06:43:17 +0000 Subject: [PATCH 760/836] Add window_marked_flag, GitHub issue 1887. --- format.c | 5 +++++ tmux.1 | 1 + 2 files changed, 6 insertions(+) diff --git a/format.c b/format.c index 6dfec4b751..b9f89bb5c5 100644 --- a/format.c +++ b/format.c @@ -2197,6 +2197,11 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) format_add(ft, "window_end_flag", "%d", !!(wl == RB_MAX(winlinks, &s->windows))); + if (server_check_marked() && marked_pane.wl == wl) + format_add(ft, "window_marked_flag", "1"); + else + format_add(ft, "window_marked_flag", "0"); + format_add(ft, "window_bell_flag", "%d", !!(wl->flags & WINLINK_BELL)); format_add(ft, "window_activity_flag", "%d", diff --git a/tmux.1 b/tmux.1 index c4c5698e3b..8507ae7576 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4305,6 +4305,7 @@ The following variables are available, where appropriate: .It Li "window_last_flag" Ta "" Ta "1 if window is the last used" .It Li "window_layout" Ta "" Ta "Window layout description, ignoring zoomed window panes" .It Li "window_linked" Ta "" Ta "1 if window is linked across sessions" +.It Li "window_marked_flag" Ta "" Ta "1 if window contains the marked pane" .It Li "window_name" Ta "#W" Ta "Name of window" .It Li "window_offset_x" Ta "" Ta "X offset into window if larger than client" .It Li "window_offset_y" Ta "" Ta "Y offset into window if larger than client" From 63e07b245f898af17657c4655f1251aa43e19d0c Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 15 Sep 2019 21:42:57 +0000 Subject: [PATCH 761/836] Add push-default and pop-default in styles to change the default colours and attributes and use them to restore the previous behaviour of window-status-style being the default for window-status-format in the status line. From John Drouhard in GitHub issue 1912. --- format-draw.c | 21 ++++++++++++++++----- options-table.c | 4 ++++ style.c | 39 +++++++++++++++++++-------------------- tmux.1 | 18 +++++++++++++++++- tmux.h | 11 +++++++++-- 5 files changed, 65 insertions(+), 28 deletions(-) diff --git a/format-draw.c b/format-draw.c index e0ca89f0ce..6cced9fd83 100644 --- a/format-draw.c +++ b/format-draw.c @@ -513,8 +513,8 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, int focus_start = -1, focus_end = -1; int list_state = -1, fill = -1; enum style_align list_align = STYLE_ALIGN_DEFAULT; - struct grid_cell gc; - struct style sy; + struct grid_cell gc, current_default; + struct style sy, saved_sy; struct utf8_data *ud = &sy.gc.data; const char *cp, *end; enum utf8_state more; @@ -523,7 +523,8 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, struct format_ranges frs; struct style_range *sr; - style_set(&sy, base); + memcpy(¤t_default, base, sizeof current_default); + style_set(&sy, ¤t_default); TAILQ_INIT(&frs); log_debug("%s: %s", __func__, expanded); @@ -535,7 +536,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, for (i = 0; i < TOTAL; i++) { screen_init(&s[i], size, 1, 0); screen_write_start(&ctx[i], NULL, &s[i]); - screen_write_clearendofline(&ctx[i], base->bg); + screen_write_clearendofline(&ctx[i], current_default.bg); width[i] = 0; } @@ -581,7 +582,8 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, goto out; } tmp = xstrndup(cp + 2, end - (cp + 2)); - if (style_parse(&sy, base, tmp) != 0) { + style_copy(&saved_sy, &sy); + if (style_parse(&sy, ¤t_default, tmp) != 0) { log_debug("%s: invalid style '%s'", __func__, tmp); free(tmp); cp = end + 1; @@ -595,6 +597,15 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, if (sy.fill != 8) fill = sy.fill; + /* If this style pushed or popped the default, update it. */ + if (sy.default_type == STYLE_DEFAULT_PUSH) { + memcpy(¤t_default, &saved_sy.gc, sizeof current_default); + sy.default_type = STYLE_DEFAULT_BASE; + } else if (sy.default_type == STYLE_DEFAULT_POP) { + memcpy(¤t_default, base, sizeof current_default); + sy.default_type = STYLE_DEFAULT_BASE; + } + /* Check the list state. */ switch (sy.list) { case STYLE_LIST_ON: diff --git a/options-table.c b/options-table.c index 7bb767c732..d012f448f1 100644 --- a/options-table.c +++ b/options-table.c @@ -92,7 +92,9 @@ static const char *options_table_window_size_list[] = { "}" \ "}" \ "]" \ + "#[push-default]" \ "#{T:window-status-format}" \ + "#[pop-default]" \ "#[norange default]" \ "#{?window_end_flag,,#{window-status-separator}}" \ "," \ @@ -117,7 +119,9 @@ static const char *options_table_window_size_list[] = { "}" \ "}" \ "]" \ + "#[push-default]" \ "#{T:window-status-current-format}" \ + "#[pop-default]" \ "#[norange list=on default]" \ "#{?window_end_flag,,#{window-status-separator}}" \ "}" \ diff --git a/style.c b/style.c index 9f9863148b..6ba4c524ce 100644 --- a/style.c +++ b/style.c @@ -36,13 +36,15 @@ static struct style style_default = { STYLE_ALIGN_DEFAULT, STYLE_LIST_OFF, - STYLE_RANGE_NONE, 0 + STYLE_RANGE_NONE, 0, + + STYLE_DEFAULT_BASE }; /* - * Parse an embedded style of the form "fg=colour,bg=colour,bright,...". - * Note that this adds onto the given style, so it must have been initialized - * alredy. + * Parse an embedded style of the form "fg=colour,bg=colour,bright,...". Note + * that this adds onto the given style, so it must have been initialized + * already. */ int style_parse(struct style *sy, const struct grid_cell *base, const char *in) @@ -74,7 +76,11 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) sy->gc.bg = base->bg; sy->gc.attr = base->attr; sy->gc.flags = base->flags; - } else if (strcasecmp(tmp, "nolist") == 0) + } else if (strcasecmp(tmp, "push-default") == 0) + sy->default_type = STYLE_DEFAULT_PUSH; + else if (strcasecmp(tmp, "pop-default") == 0) + sy->default_type = STYLE_DEFAULT_POP; + else if (strcasecmp(tmp, "nolist") == 0) sy->list = STYLE_LIST_OFF; else if (strncasecmp(tmp, "list=", 5) == 0) { if (strcasecmp(tmp + 5, "on") == 0) @@ -218,6 +224,14 @@ style_tostring(struct style *sy) tmp); comma = ","; } + if (sy->default_type != STYLE_DEFAULT_BASE) { + if (sy->default_type == STYLE_DEFAULT_PUSH) + tmp = "push-default"; + else if (sy->default_type == STYLE_DEFAULT_POP) + tmp = "pop-default"; + off += xsnprintf(s + off, sizeof s - off, "%s%s", comma, tmp); + comma = ","; + } if (sy->fill != 8) { off += xsnprintf(s + off, sizeof s - off, "%sfill=%s", comma, colour_tostring(sy->fill)); @@ -257,21 +271,6 @@ style_apply(struct grid_cell *gc, struct options *oo, const char *name) gc->attr |= sy->gc.attr; } -/* Apply a style, updating if default. */ -void -style_apply_update(struct grid_cell *gc, struct options *oo, const char *name) -{ - struct style *sy; - - sy = options_get_style(oo, name); - if (sy->gc.fg != 8) - gc->fg = sy->gc.fg; - if (sy->gc.bg != 8) - gc->bg = sy->gc.bg; - if (sy->gc.attr != 0) - gc->attr |= sy->gc.attr; -} - /* Initialize style from cell. */ void style_set(struct style *sy, const struct grid_cell *gc) diff --git a/tmux.1 b/tmux.1 index 8507ae7576..c99e506ca6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4333,7 +4333,9 @@ and .Pp A style may be the single term .Ql default -to specify the default style (which may inherit from another option) or a space +to specify the default style (which may come from an option, for example +.Ic status-style +in the status line) or a space or comma separated list of the following: .Bl -tag -width Ds .It Ic fg=colour @@ -4412,6 +4414,20 @@ and .Ic list=right-marker mark the text to be used to mark that text has been trimmed from the left or right of the list if there is not enough space. +.It Xo Ic push-default , +.Ic pop-default +.Xc +Store the current colours and attributes as the default or reset to the previous +default. +A +.Ic push-default +affects any subsequent use of the +.Ic default +term until a +.Ic pop-default . +Only one default may be pushed (each +.Ic push-default +replaces the previous saved default). .It Xo Ic range=left , .Ic range=right , .Ic range=window|X , diff --git a/tmux.h b/tmux.h index 2b69b00268..5f7e5104f0 100644 --- a/tmux.h +++ b/tmux.h @@ -680,6 +680,13 @@ struct style_range { }; TAILQ_HEAD(style_ranges, style_range); +/* Style default. */ +enum style_default_type { + STYLE_DEFAULT_BASE, + STYLE_DEFAULT_PUSH, + STYLE_DEFAULT_POP +}; + /* Style option. */ struct style { struct grid_cell gc; @@ -690,6 +697,8 @@ struct style { enum style_range_type range_type; u_int range_argument; + + enum style_default_type default_type; }; /* Virtual screen. */ @@ -2648,8 +2657,6 @@ int style_parse(struct style *,const struct grid_cell *, const char *style_tostring(struct style *); void style_apply(struct grid_cell *, struct options *, const char *); -void style_apply_update(struct grid_cell *, struct options *, - const char *); int style_equal(struct style *, struct style *); void style_set(struct style *, const struct grid_cell *); void style_copy(struct style *, struct style *); From 3c355ec3b0b414609606a9cb5dfdf3fab41d2284 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Sep 2019 08:57:22 +0100 Subject: [PATCH 762/836] Add to CHANGES. --- CHANGES | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGES b/CHANGES index 0c75108cdb..c1d8f88cfc 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,29 @@ XXX CHANGES FROM 2.9 to 3.0 +* Add push-default and pop-default for styles which change the colours and + attributes used for #[default]. These are used in status-format to restore + the behaviour of window-status-style being the default for + window-status-format. + +* Add window_marked_flag. + +* Add cursor-down-and-cancel in copy mode. + +* Default to previous search string for search-forward and search-backward. + +* Add -Z flag to rotate-window, select-pane, swap-pane, switch-client to + preserve zoomed state. + +* Add support for the SD (scroll down) escape sequence. + +* xterm 348 now disables margins when resized, so send DECLRMM again after + resize. + +* Add -N to capture-pane to preserve trailing spaces. + +* Add reverse sorting in tree, client and buffer modes. + * Expand arguments to C and s format modifiers to match the m modifier. * Add support for underscore colours (Setulc capability must be added with From 74f150670ab31d1d79d202023cdd0c78197e67fa Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Sep 2019 08:57:56 +0100 Subject: [PATCH 763/836] In the right place. --- CHANGES | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index c1d8f88cfc..d6c0688973 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,5 @@ CHANGES FROM 3.0 to X.X -XXX - -CHANGES FROM 2.9 to 3.0 - * Add push-default and pop-default for styles which change the colours and attributes used for #[default]. These are used in status-format to restore the behaviour of window-status-style being the default for @@ -27,6 +23,8 @@ CHANGES FROM 2.9 to 3.0 * Add reverse sorting in tree, client and buffer modes. +CHANGES FROM 2.9 to 3.0 + * Expand arguments to C and s format modifiers to match the m modifier. * Add support for underscore colours (Setulc capability must be added with From 7e4439beb7a36919a029183506fb1f383217cbdd Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 1 Aug 2019 07:08:13 +0000 Subject: [PATCH 764/836] Remove check for same size - size has already been changed so this breaks reflow. --- grid.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/grid.c b/grid.c index f33eef7238..2f1e9b59cf 100644 --- a/grid.c +++ b/grid.c @@ -1220,10 +1220,6 @@ grid_reflow(struct grid *gd, u_int sx) struct grid_cell gc; u_int yy, width, i, at, first; - /* Do not reflow to the same size. */ - if (sx == gd->sx) - return; - /* * Create a destination grid. This is just used as a container for the * line data and may not be fully valid. From 5e4f3714084dc3edcc8f5e9bfcc86faeb92d900a Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 26 Aug 2019 16:35:41 +0000 Subject: [PATCH 765/836] Fix swap-window -d to work as intended, GitHub issue 1879 from Sam Stuewe. --- cmd-swap-window.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd-swap-window.c b/cmd-swap-window.c index f5224194ec..0c15479d56 100644 --- a/cmd-swap-window.c +++ b/cmd-swap-window.c @@ -77,10 +77,10 @@ cmd_swap_window_exec(struct cmd *self, struct cmdq_item *item) wl_src->window = w_dst; TAILQ_INSERT_TAIL(&w_dst->winlinks, wl_src, wentry); - if (!args_has(self->args, 'd')) { - session_select(src, wl_src->idx); + if (args_has(self->args, 'd')) { + session_select(dst, wl_dst->idx); if (src != dst) - session_select(dst, wl_dst->idx); + session_select(src, wl_src->idx); } session_group_synchronize_from(src); server_redraw_session_group(src); From c45b255a885f36e033e1dfba1776fb5c04bfb6cf Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 29 Aug 2019 07:13:48 +0000 Subject: [PATCH 766/836] It is not longer necessary to double-escape ; in %%%, problem reported by Theo Buehler. --- cmd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmd.c b/cmd.c index 7c9d89c8cd..96cedc974f 100644 --- a/cmd.c +++ b/cmd.c @@ -660,7 +660,7 @@ char * cmd_template_replace(const char *template, const char *s, int idx) { char ch, *buf; - const char *ptr, *cp, quote[] = "\"\\$"; + const char *ptr, *cp, quote[] = "\"\\$;"; int replaced, quoted; size_t len; @@ -691,10 +691,6 @@ cmd_template_replace(const char *template, const char *s, int idx) for (cp = s; *cp != '\0'; cp++) { if (quoted && strchr(quote, *cp) != NULL) buf[len++] = '\\'; - if (quoted && *cp == ';') { - buf[len++] = '\\'; - buf[len++] = '\\'; - } buf[len++] = *cp; } buf[len] = '\0'; From 54670d898fd010831b785d003421fef847de6776 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 8 Sep 2019 21:29:22 +0100 Subject: [PATCH 767/836] Missing headers from compat/asprintf.c, from cyyever at outlook dot com. --- compat/asprintf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compat/asprintf.c b/compat/asprintf.c index 95d7843058..187c19f00f 100644 --- a/compat/asprintf.c +++ b/compat/asprintf.c @@ -19,8 +19,10 @@ #include #include #include +#include #include "compat.h" +#include "xmalloc.h" int asprintf(char **ret, const char *fmt, ...) From 846d57e1b80e78416e0b82d59839eef8b8aea6f2 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 10 Sep 2019 19:35:34 +0000 Subject: [PATCH 768/836] Make client exit if pane where input is going is closed. --- window.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/window.c b/window.c index 409f1df5fb..254ccc8305 100644 --- a/window.c +++ b/window.c @@ -1551,6 +1551,10 @@ window_pane_input_callback(struct client *c, int closed, void *data) wp = window_pane_find_by_id(cdata->wp); if (wp == NULL || closed || c->flags & CLIENT_DEAD) { + if (wp == NULL) + c->flags |= CLIENT_EXIT; + evbuffer_drain(evb, len); + c->stdin_callback = NULL; server_client_unref(c); From f27cac585c4a34396b4ff2f7b0df9bad2019ffda Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Sep 2019 09:00:56 +0100 Subject: [PATCH 769/836] Add to CHANGES. --- CHANGES | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES b/CHANGES index ad50d54c51..f4ff86d2cb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,10 @@ CHANGES FROM 2.9 to 3.0 +* xterm 348 now disables margins when resized, so send DECLRMM again after + resize. + +* Add support for the SD (scroll down) escape sequence. + * Expand arguments to C and s format modifiers to match the m modifier. * Add support for underscore colours (Setulc capability must be added with From 7a1abd66e7f38412f4bdc944d969e88d6b268a13 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Sep 2019 09:01:27 +0100 Subject: [PATCH 770/836] These are in 3.0 now. --- CHANGES | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CHANGES b/CHANGES index cdad8ed8c5..6b0efbd411 100644 --- a/CHANGES +++ b/CHANGES @@ -14,11 +14,6 @@ CHANGES FROM 3.0 to X.X * Add -Z flag to rotate-window, select-pane, swap-pane, switch-client to preserve zoomed state. -* Add support for the SD (scroll down) escape sequence. - -* xterm 348 now disables margins when resized, so send DECLRMM again after - resize. - * Add -N to capture-pane to preserve trailing spaces. * Add reverse sorting in tree, client and buffer modes. From 83be3afc54b783fabb5e57d2588887b9c8c0decf Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 16 Sep 2019 13:27:14 +0000 Subject: [PATCH 771/836] Change menu key bindings to Up and Down and also close it on any mouse press if opened by key. --- key-bindings.c | 4 ++-- menu.c | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index df2dcf46bb..3c96832c53 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -328,10 +328,10 @@ key_bindings_init(void) "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\" " DEFAULT_CLIENT_MENU, "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\" " DEFAULT_SESSION_MENU, "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, - "bind C-m display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, + "bind Up display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, "bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{pane_in_mode}}' 'select-pane -t=; send-keys -M' {display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU "}", "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, - "bind M-m display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, + "bind Down display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, "bind -Tcopy-mode C-Space send -X begin-selection", "bind -Tcopy-mode C-a send -X start-of-line", diff --git a/menu.c b/menu.c index da8d89c4c1..6024ba022f 100644 --- a/menu.c +++ b/menu.c @@ -185,8 +185,11 @@ menu_key_cb(struct client *c, struct key_event *event) const char *name; if (KEYC_IS_MOUSE(event->key)) { - if (md->flags & MENU_NOMOUSE) + if (md->flags & MENU_NOMOUSE) { + if (MOUSE_BUTTONS(m->b) != 0) + return (1); return (0); + } if (m->x < md->px || m->x > md->px + 4 + menu->width || m->y < md->py + 1 || From 697f9383550a8bb60ad09c22a6c208a0cf151e4e Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Sep 2019 11:37:58 +0000 Subject: [PATCH 772/836] Do not set uninitialized signal mask when creating an empty pane. --- spawn.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spawn.c b/spawn.c index 08d0426c06..52763083d1 100644 --- a/spawn.c +++ b/spawn.c @@ -332,14 +332,6 @@ spawn_pane(struct spawn_context *sc, char **cause) cmd_log_argv(new_wp->argc, new_wp->argv, "%s", __func__); environ_log(child, "%s: environment ", __func__); - /* If the command is empty, don't fork a child process. */ - if (sc->flags & SPAWN_EMPTY) { - new_wp->flags |= PANE_EMPTY; - new_wp->base.mode &= ~MODE_CURSOR; - new_wp->base.mode |= MODE_CRLF; - goto complete; - } - /* Initialize the window size. */ memset(&ws, 0, sizeof ws); ws.ws_col = screen_size_x(&new_wp->base); @@ -349,6 +341,14 @@ spawn_pane(struct spawn_context *sc, char **cause) sigfillset(&set); sigprocmask(SIG_BLOCK, &set, &oldset); + /* If the command is empty, don't fork a child process. */ + if (sc->flags & SPAWN_EMPTY) { + new_wp->flags |= PANE_EMPTY; + new_wp->base.mode &= ~MODE_CURSOR; + new_wp->base.mode |= MODE_CRLF; + goto complete; + } + /* Fork the new process. */ new_wp->pid = fdforkpty(ptm_fd, &new_wp->fd, new_wp->tty, NULL, &ws); if (new_wp->pid == -1) { From 1ee40307b5669071cae23c4a3eee87b61ba76041 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Sep 2019 15:09:05 +0000 Subject: [PATCH 773/836] Up and Down are already used, use < and > instead. --- key-bindings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index 3c96832c53..c90924a5a1 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -328,10 +328,10 @@ key_bindings_init(void) "bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\" " DEFAULT_CLIENT_MENU, "bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\" " DEFAULT_SESSION_MENU, "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, - "bind Up display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, + "bind < display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU, "bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{pane_in_mode}}' 'select-pane -t=; send-keys -M' {display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU "}", "bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, - "bind Down display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, + "bind > display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU, "bind -Tcopy-mode C-Space send -X begin-selection", "bind -Tcopy-mode C-a send -X start-of-line", From d01847735903496c25e1d24375b911edffa56ef8 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 19 Sep 2019 08:56:37 +0000 Subject: [PATCH 774/836] Do not use bright when emulating 256 colours on an 8 colour terminal because it is also bold on some terminals. GitHub issue 1914. --- tty.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tty.c b/tty.c index 1658fb7450..f8abb17a40 100644 --- a/tty.c +++ b/tty.c @@ -2374,10 +2374,7 @@ tty_check_fg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) gc->fg &= 7; if (colours >= 16) gc->fg += 90; - else - gc->attr |= GRID_ATTR_BRIGHT; - } else - gc->attr &= ~GRID_ATTR_BRIGHT; + } } return; } From 647887b794c00285047aa54ac0d44ae50c7847d7 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 19 Sep 2019 09:02:30 +0000 Subject: [PATCH 775/836] Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me. --- cmd-break-pane.c | 1 + cmd-new-session.c | 1 + cmd-new-window.c | 1 + cmd-respawn-window.c | 1 + options-table.c | 2 +- resize.c | 183 ++++++++++++++++++++++++++----------------- server-client.c | 21 +++++ spawn.c | 1 + tmux.1 | 6 +- tmux.h | 4 + 10 files changed, 147 insertions(+), 74 deletions(-) diff --git a/cmd-break-pane.c b/cmd-break-pane.c index b4c5b7cd3b..8b430ff7ad 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -81,6 +81,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item) wp->flags |= PANE_STYLECHANGED; TAILQ_INSERT_HEAD(&w->panes, wp, entry); w->active = wp; + w->latest = c; if (!args_has(args, 'n')) { name = default_window_name(w); diff --git a/cmd-new-session.c b/cmd-new-session.c index e054081539..c7c407c617 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -259,6 +259,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) memset(&sc, 0, sizeof sc); sc.item = item; sc.s = s; + sc.c = c; sc.name = args_get(args, 'n'); sc.argc = args->argc; diff --git a/cmd-new-window.c b/cmd-new-window.c index 6cb33dd962..9a1025e9a3 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -72,6 +72,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) memset(&sc, 0, sizeof sc); sc.item = item; sc.s = s; + sc.c = c; sc.name = args_get(args, 'n'); sc.argc = args->argc; diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index aec22912a1..497e401eea 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -59,6 +59,7 @@ cmd_respawn_window_exec(struct cmd *self, struct cmdq_item *item) sc.item = item; sc.s = s; sc.wl = wl; + sc.c = cmd_find_client(item, NULL, 1); sc.name = NULL; sc.argc = args->argc; diff --git a/options-table.c b/options-table.c index d012f448f1..77dbfb1338 100644 --- a/options-table.c +++ b/options-table.c @@ -64,7 +64,7 @@ static const char *options_table_set_clipboard_list[] = { "off", "external", "on", NULL }; static const char *options_table_window_size_list[] = { - "largest", "smallest", "manual", NULL + "largest", "smallest", "manual", "latest", NULL }; /* Status line format. */ diff --git a/resize.c b/resize.c index 0e0b070dcd..b1a4b59075 100644 --- a/resize.c +++ b/resize.c @@ -150,14 +150,121 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, } void -recalculate_sizes(void) +recalculate_size(struct window *w) { struct session *s; struct client *c; - struct window *w; u_int sx, sy, cx, cy; int type, current, has, changed; + if (w->active == NULL) + return; + log_debug("%s: @%u is %u,%u", __func__, w->id, w->sx, w->sy); + + type = options_get_number(w->options, "window-size"); + current = options_get_number(w->options, "aggressive-resize"); + + changed = 1; + switch (type) { + case WINDOW_SIZE_LARGEST: + sx = sy = 0; + TAILQ_FOREACH(c, &clients, entry) { + if (ignore_client_size(c)) + continue; + s = c->session; + + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx > sx) + sx = cx; + if (cy > sy) + sy = cy; + } + if (sx == 0 || sy == 0) + changed = 0; + break; + case WINDOW_SIZE_SMALLEST: + sx = sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if (ignore_client_size(c)) + continue; + s = c->session; + + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx < sx) + sx = cx; + if (cy < sy) + sy = cy; + } + if (sx == UINT_MAX || sy == UINT_MAX) + changed = 0; + break; + case WINDOW_SIZE_LATEST: + sx = sy = UINT_MAX; + TAILQ_FOREACH(c, &clients, entry) { + if (ignore_client_size(c)) + continue; + if (c != w->latest) + continue; + s = c->session; + + if (current) + has = (s->curw->window == w); + else + has = session_has(s, w); + if (!has) + continue; + + cx = c->tty.sx; + cy = c->tty.sy - status_line_size(c); + + if (cx < sx) + sx = cx; + if (cy < sy) + sy = cy; + } + if (sx == UINT_MAX || sy == UINT_MAX) + changed = 0; + break; + case WINDOW_SIZE_MANUAL: + changed = 0; + break; + } + if (changed && w->sx == sx && w->sy == sy) + changed = 0; + + if (!changed) { + tty_update_window_offset(w); + return; + } + log_debug("%s: @%u changed to %u,%u", __func__, w->id, sx, sy); + resize_window(w, sx, sy); +} + +void +recalculate_sizes(void) +{ + struct session *s; + struct client *c; + struct window *w; + /* * Clear attached count and update saved status line information for * each session. @@ -183,74 +290,6 @@ recalculate_sizes(void) } /* Walk each window and adjust the size. */ - RB_FOREACH(w, windows, &windows) { - if (w->active == NULL) - continue; - log_debug("%s: @%u is %u,%u", __func__, w->id, w->sx, w->sy); - - type = options_get_number(w->options, "window-size"); - if (type == WINDOW_SIZE_MANUAL) - continue; - current = options_get_number(w->options, "aggressive-resize"); - - changed = 1; - if (type == WINDOW_SIZE_LARGEST) { - sx = sy = 0; - TAILQ_FOREACH(c, &clients, entry) { - if (ignore_client_size(c)) - continue; - s = c->session; - - if (current) - has = (s->curw->window == w); - else - has = session_has(s, w); - if (!has) - continue; - - cx = c->tty.sx; - cy = c->tty.sy - status_line_size(c); - - if (cx > sx) - sx = cx; - if (cy > sy) - sy = cy; - } - if (sx == 0 || sy == 0) - changed = 0; - } else { - sx = sy = UINT_MAX; - TAILQ_FOREACH(c, &clients, entry) { - if (ignore_client_size(c)) - continue; - s = c->session; - - if (current) - has = (s->curw->window == w); - else - has = session_has(s, w); - if (!has) - continue; - - cx = c->tty.sx; - cy = c->tty.sy - status_line_size(c); - - if (cx < sx) - sx = cx; - if (cy < sy) - sy = cy; - } - if (sx == UINT_MAX || sy == UINT_MAX) - changed = 0; - } - if (w->sx == sx && w->sy == sy) - changed = 0; - - if (!changed) { - tty_update_window_offset(w); - continue; - } - log_debug("%s: @%u changed to %u,%u", __func__, w->id, sx, sy); - resize_window(w, sx, sy); - } + RB_FOREACH(w, windows, &windows) + recalculate_size(w); } diff --git a/server-client.c b/server-client.c index 4b60f5c0de..36ebf85bfb 100644 --- a/server-client.c +++ b/server-client.c @@ -996,6 +996,24 @@ server_client_assume_paste(struct session *s) return (0); } +/* Has the latest client changed? */ +static void +server_client_update_latest(struct client *c) +{ + struct window *w; + + if (c->session == NULL) + return; + w = c->session->curw->window; + + if (w->latest == c) + return; + w->latest = c; + + if (options_get_number(w->options, "window-size") == WINDOW_SIZE_LATEST) + recalculate_size(w); +} + /* * Handle data key input from client. This owns and can modify the key event it * is given and is responsible for freeing it. @@ -1192,6 +1210,8 @@ server_client_key_callback(struct cmdq_item *item, void *data) window_pane_key(wp, c, s, wl, key, m); out: + if (s != NULL) + server_client_update_latest(c); free(event); return (CMD_RETURN_NORMAL); } @@ -1737,6 +1757,7 @@ server_client_dispatch(struct imsg *imsg, void *arg) if (c->flags & CLIENT_CONTROL) break; + server_client_update_latest(c); server_client_clear_overlay(c); tty_resize(&c->tty); recalculate_sizes(); diff --git a/spawn.c b/spawn.c index 52763083d1..1917955e9e 100644 --- a/spawn.c +++ b/spawn.c @@ -164,6 +164,7 @@ spawn_window(struct spawn_context *sc, char **cause) if (s->curw == NULL) s->curw = sc->wl; sc->wl->session = s; + w->latest = sc->c; winlink_set_window(sc->wl, w); } else w = NULL; diff --git a/tmux.1 b/tmux.1 index c99e506ca6..ff19c22550 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3659,7 +3659,7 @@ see the section. .Pp .It Xo Ic window-size -.Ar largest | Ar smallest | Ar manual +.Ar largest | Ar smallest | Ar manual | Ar latest .Xc Configure how .Nm @@ -3674,6 +3674,10 @@ If the size of a new window is set from the .Ic default-size option and windows are resized automatically. +With +.Ar latest , +.Nm +uses the size of the client that had the most recent activity. See also the .Ic resize-window command and the diff --git a/tmux.h b/tmux.h index 5f7e5104f0..6e6fee96ee 100644 --- a/tmux.h +++ b/tmux.h @@ -905,6 +905,7 @@ RB_HEAD(window_pane_tree, window_pane); /* Window structure. */ struct window { u_int id; + void *latest; char *name; struct event name_event; @@ -970,6 +971,7 @@ TAILQ_HEAD(winlink_stack, winlink); #define WINDOW_SIZE_LARGEST 0 #define WINDOW_SIZE_SMALLEST 1 #define WINDOW_SIZE_MANUAL 2 +#define WINDOW_SIZE_LATEST 3 /* Pane border status option. */ #define PANE_STATUS_OFF 0 @@ -1670,6 +1672,7 @@ struct spawn_context { struct session *s; struct winlink *wl; + struct client *c; struct window_pane *wp0; struct layout_cell *lc; @@ -2195,6 +2198,7 @@ void status_prompt_save_history(void); void resize_window(struct window *, u_int, u_int); void default_window_size(struct session *, struct window *, u_int *, u_int *, int); +void recalculate_size(struct window *); void recalculate_sizes(void); /* input.c */ From 77deef733bfc547325d7c6db3e0274b1c52281b9 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 23 Sep 2019 15:41:11 +0000 Subject: [PATCH 776/836] Use the correct size for new windows when window-size is latest, reported by Vamsi Krishna Avula in GitHub issue 1917. --- cmd-resize-window.c | 4 +-- resize.c | 67 +++++++++++++++++++++++++++++++-------------- spawn.c | 2 +- tmux.h | 4 +-- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/cmd-resize-window.c b/cmd-resize-window.c index d780b6ee56..c5a7c5a157 100644 --- a/cmd-resize-window.c +++ b/cmd-resize-window.c @@ -98,9 +98,9 @@ cmd_resize_window_exec(struct cmd *self, struct cmdq_item *item) sy += adjust; if (args_has(args, 'A')) - default_window_size(s, w, &sx, &sy, WINDOW_SIZE_LARGEST); + default_window_size(NULL, s, w, &sx, &sy, WINDOW_SIZE_LARGEST); else if (args_has(args, 'a')) - default_window_size(s, w, &sx, &sy, WINDOW_SIZE_SMALLEST); + default_window_size(NULL, s, w, &sx, &sy, WINDOW_SIZE_SMALLEST); options_set_number(w->options, "window-size", WINDOW_SIZE_MANUAL); resize_window(w, sx, sy); diff --git a/resize.c b/resize.c index b1a4b59075..6432f0031b 100644 --- a/resize.c +++ b/resize.c @@ -76,30 +76,28 @@ ignore_client_size(struct client *c) } void -default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, - int type) +default_window_size(struct client *c, struct session *s, struct window *w, + u_int *sx, u_int *sy, int type) { - struct client *c; + struct client *loop; u_int cx, cy; const char *value; if (type == -1) type = options_get_number(global_w_options, "window-size"); - if (type == WINDOW_SIZE_MANUAL) - goto manual; - - if (type == WINDOW_SIZE_LARGEST) { + switch (type) { + case WINDOW_SIZE_LARGEST: *sx = *sy = 0; - TAILQ_FOREACH(c, &clients, entry) { - if (ignore_client_size(c)) + TAILQ_FOREACH(loop, &clients, entry) { + if (ignore_client_size(loop)) continue; - if (w != NULL && !session_has(c->session, w)) + if (w != NULL && !session_has(loop->session, w)) continue; - if (w == NULL && c->session != s) + if (w == NULL && loop->session != s) continue; - cx = c->tty.sx; - cy = c->tty.sy - status_line_size(c); + cx = loop->tty.sx; + cy = loop->tty.sy - status_line_size(loop); if (cx > *sx) *sx = cx; @@ -108,18 +106,19 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, } if (*sx == 0 || *sy == 0) goto manual; - } else { + break; + case WINDOW_SIZE_SMALLEST: *sx = *sy = UINT_MAX; - TAILQ_FOREACH(c, &clients, entry) { - if (ignore_client_size(c)) + TAILQ_FOREACH(loop, &clients, entry) { + if (ignore_client_size(loop)) continue; - if (w != NULL && !session_has(c->session, w)) + if (w != NULL && !session_has(loop->session, w)) continue; - if (w == NULL && c->session != s) + if (w == NULL && loop->session != s) continue; - cx = c->tty.sx; - cy = c->tty.sy - status_line_size(c); + cx = loop->tty.sx; + cy = loop->tty.sy - status_line_size(loop); if (cx < *sx) *sx = cx; @@ -128,6 +127,34 @@ default_window_size(struct session *s, struct window *w, u_int *sx, u_int *sy, } if (*sx == UINT_MAX || *sy == UINT_MAX) goto manual; + break; + case WINDOW_SIZE_LATEST: + if (c != NULL && !ignore_client_size(c)) { + *sx = c->tty.sx; + *sy = c->tty.sy - status_line_size(c); + } else { + *sx = *sy = UINT_MAX; + TAILQ_FOREACH(loop, &clients, entry) { + if (ignore_client_size(loop)) + continue; + if (w != NULL && loop != w->latest) + continue; + s = loop->session; + + cx = loop->tty.sx; + cy = loop->tty.sy - status_line_size(loop); + + if (cx < *sx) + *sx = cx; + if (cy < *sy) + *sy = cy; + } + if (*sx == UINT_MAX || *sy == UINT_MAX) + goto manual; + } + break; + case WINDOW_SIZE_MANUAL: + goto manual; } goto done; diff --git a/spawn.c b/spawn.c index 1917955e9e..71361c9f0b 100644 --- a/spawn.c +++ b/spawn.c @@ -155,7 +155,7 @@ spawn_window(struct spawn_context *sc, char **cause) xasprintf(cause, "couldn't add window %d", idx); return (NULL); } - default_window_size(s, NULL, &sx, &sy, -1); + default_window_size(sc->c, s, NULL, &sx, &sy, -1); if ((w = window_create(sx, sy)) == NULL) { winlink_remove(&s->windows, sc->wl); xasprintf(cause, "couldn't create window %d", idx); diff --git a/tmux.h b/tmux.h index 6e6fee96ee..60c515f5c2 100644 --- a/tmux.h +++ b/tmux.h @@ -2196,8 +2196,8 @@ void status_prompt_save_history(void); /* resize.c */ void resize_window(struct window *, u_int, u_int); -void default_window_size(struct session *, struct window *, u_int *, - u_int *, int); +void default_window_size(struct client *, struct session *, struct window *, + u_int *, u_int *, int); void recalculate_size(struct window *); void recalculate_sizes(void); From 232050830bbbfd9758d22dc84bcd78ce4c6ff3c5 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 24 Sep 2019 09:58:58 +0000 Subject: [PATCH 777/836] Make select-pane -P set window-active-style also to match previous behaviour, reported by Thomas Sattler. --- cmd-select-pane.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 15f76afeb6..6542c919e4 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -154,6 +154,8 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "bad style: %s", style); return (CMD_RETURN_ERROR); } + options_set_style(wp->options, "window-active-style", 0, + style); wp->flags |= (PANE_REDRAW|PANE_STYLECHANGED); } if (args_has(self->args, 'g')) { From 48c684cbc2b08d55c9790f05ac340e1a38e8bec4 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 24 Sep 2019 14:50:08 +0000 Subject: [PATCH 778/836] Mouse formats don't work in copy mode so don't try to use them. --- format.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/format.c b/format.c index b9f89bb5c5..581fa5829d 100644 --- a/format.c +++ b/format.c @@ -722,6 +722,8 @@ format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe) wp = cmd_mouse_pane(&ft->m, NULL, NULL); if (wp == NULL) return; + if (!TAILQ_EMPTY (&wp->modes)) + return; if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) return; gd = wp->base.grid; @@ -798,6 +800,8 @@ format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) wp = cmd_mouse_pane(&ft->m, NULL, NULL); if (wp == NULL) return; + if (!TAILQ_EMPTY (&wp->modes)) + return; if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) return; gd = wp->base.grid; From e8adcae0f24c6089cae9c60e7b087a00a582f9f9 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 24 Sep 2019 15:52:14 +0000 Subject: [PATCH 779/836] Couple of bits of minor cleanup. --- screen-write.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/screen-write.c b/screen-write.c index 66053eaf4c..6c509e2c80 100644 --- a/screen-write.c +++ b/screen-write.c @@ -100,7 +100,6 @@ void screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, struct screen *s) { - char tmp[32]; u_int y; memset(ctx, 0, sizeof *ctx); @@ -119,12 +118,17 @@ screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp, ctx->scrolled = 0; ctx->bg = 8; - if (wp != NULL) { - snprintf(tmp, sizeof tmp, "pane %%%u (at %u,%u)", wp->id, - wp->xoff, wp->yoff); + if (log_get_level() != 0) { + if (wp != NULL) { + log_debug("%s: size %ux%u, pane %%%u (at %u,%u)", + __func__, screen_size_x(ctx->s), + screen_size_y(ctx->s), wp->id, wp->xoff, wp->yoff); + } else { + log_debug("%s: size %ux%u, no pane", + __func__, screen_size_x(ctx->s), + screen_size_y(ctx->s)); + } } - log_debug("%s: size %ux%u, %s", __func__, screen_size_x(ctx->s), - screen_size_y(ctx->s), wp == NULL ? "no pane" : tmp); } /* Finish writing. */ @@ -1234,7 +1238,6 @@ screen_write_collect_scroll(struct screen_write_ctx *ctx) for (y = s->rupper; y < s->rlower; y++) { cl = &ctx->list[y + 1]; TAILQ_CONCAT(&ctx->list[y].items, &cl->items, entry); - TAILQ_INIT(&cl->items); } } From e3359f8349cf972052604c089b5bab71f5e33095 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 24 Sep 2019 20:44:58 +0000 Subject: [PATCH 780/836] Some minor performance improvements - most notably, don't search the input state table if the next character matches the same state as before. --- grid.c | 22 ++++++++++++---------- input.c | 27 +++++++++++++++++---------- log.c | 3 +++ screen-write.c | 6 ++---- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/grid.c b/grid.c index 2f1e9b59cf..a016dc122d 100644 --- a/grid.c +++ b/grid.c @@ -186,17 +186,19 @@ grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) struct grid_cell *gc; memcpy(gce, &grid_cleared_entry, sizeof *gce); - if (bg & COLOUR_FLAG_RGB) { - grid_get_extended_cell(gl, gce, gce->flags); - gl->flags |= GRID_LINE_EXTENDED; + if (bg != 8) { + if (bg & COLOUR_FLAG_RGB) { + grid_get_extended_cell(gl, gce, gce->flags); + gl->flags |= GRID_LINE_EXTENDED; - gc = &gl->extddata[gce->offset]; - memcpy(gc, &grid_cleared_cell, sizeof *gc); - gc->bg = bg; - } else { - if (bg & COLOUR_FLAG_256) - gce->flags |= GRID_FLAG_BG256; - gce->data.bg = bg; + gc = &gl->extddata[gce->offset]; + memcpy(gc, &grid_cleared_cell, sizeof *gc); + gc->bg = bg; + } else { + if (bg & COLOUR_FLAG_256) + gce->flags |= GRID_FLAG_BG256; + gce->data.bg = bg; + } } } diff --git a/input.c b/input.c index f37f8fd8d3..2ff7a65d21 100644 --- a/input.c +++ b/input.c @@ -888,7 +888,8 @@ input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len) { struct input_ctx *ictx = wp->ictx; struct screen_write_ctx *sctx = &ictx->ctx; - const struct input_transition *itr; + const struct input_state *state = NULL; + const struct input_transition *itr = NULL; size_t off = 0; if (len == 0) @@ -916,16 +917,22 @@ input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len) ictx->ch = buf[off++]; /* Find the transition. */ - itr = ictx->state->transitions; - while (itr->first != -1 && itr->last != -1) { - if (ictx->ch >= itr->first && ictx->ch <= itr->last) - break; - itr++; - } - if (itr->first == -1 || itr->last == -1) { - /* No transition? Eh? */ - fatalx("no transition from state"); + if (ictx->state != state || + itr == NULL || + ictx->ch < itr->first || + ictx->ch > itr->last) { + itr = ictx->state->transitions; + while (itr->first != -1 && itr->last != -1) { + if (ictx->ch >= itr->first && ictx->ch <= itr->last) + break; + itr++; + } + if (itr->first == -1 || itr->last == -1) { + /* No transition? Eh? */ + fatalx("no transition from state"); + } } + state = ictx->state; /* * Any state except print stops the current collection. This is diff --git a/log.c b/log.c index c002663ee2..44b24c671d 100644 --- a/log.c +++ b/log.c @@ -131,6 +131,9 @@ log_debug(const char *msg, ...) { va_list ap; + if (log_file == NULL) + return; + va_start(ap, msg); log_vwrite(msg, ap); va_end(ap); diff --git a/screen-write.c b/screen-write.c index 6c509e2c80..34d16ee83a 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1326,8 +1326,7 @@ screen_write_collect_end(struct screen_write_ctx *ctx) } } - memcpy(&gc, &ci->gc, sizeof gc); - grid_view_set_cells(s->grid, s->cx, s->cy, &gc, ci->data, ci->used); + grid_view_set_cells(s->grid, s->cx, s->cy, &ci->gc, ci->data, ci->used); screen_write_set_cursor(ctx, s->cx + ci->used, -1); for (xx = s->cx; xx < screen_size_x(s); xx++) { @@ -1351,8 +1350,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, /* * Don't need to check that the attributes and whatnot are still the * same - input_parse will end the collection when anything that isn't - * a plain character is encountered. Also nothing should make it here - * that isn't a single ASCII character. + * a plain character is encountered. */ collect = 1; From bbd1032a2a6d76cacaaf729a4b465ec7ca24eef7 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Sep 2019 19:05:59 +0000 Subject: [PATCH 781/836] Style and line length nits. --- input.c | 3 ++- window-tree.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/input.c b/input.c index 2ff7a65d21..d76216f456 100644 --- a/input.c +++ b/input.c @@ -923,7 +923,8 @@ input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len) ictx->ch > itr->last) { itr = ictx->state->transitions; while (itr->first != -1 && itr->last != -1) { - if (ictx->ch >= itr->first && ictx->ch <= itr->last) + if (ictx->ch >= itr->first && + ictx->ch <= itr->last) break; itr++; } diff --git a/window-tree.c b/window-tree.c index a0127c2f48..cc16f27405 100644 --- a/window-tree.c +++ b/window-tree.c @@ -269,7 +269,7 @@ window_tree_cmp_pane(const void *a0, const void *b0) result = (*a)->id - (*b)->id; } if (window_tree_sort->reversed) - result *= -1; + result = -result; return (result); } From f4c7141f5d2abd06bb90443ad9edc7c1a985eb40 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 3 Oct 2019 10:24:05 +0000 Subject: [PATCH 782/836] Do not lazily use BUFSIZ for "I don't care what size" when building strings because it is only guaranteed to be 256 bytes and even the default 1024 is not always enough. Reported by Gregory Pakosz. --- cmd-list-keys.c | 2 +- cmd-parse.y | 4 ++-- cmd.c | 2 +- layout-custom.c | 2 +- tty-term.c | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 57f65c8e14..ef8621016f 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -61,7 +61,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) struct key_table *table; struct key_binding *bd; const char *tablename, *r; - char *key, *cp, tmp[BUFSIZ]; + char *key, *cp, tmp[8192]; int repeat, width, tablewidth, keywidth; if (self->entry == &cmd_list_commands_entry) diff --git a/cmd-parse.y b/cmd-parse.y index b0a42f7c94..0cd7c6bf62 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1245,7 +1245,7 @@ yylex_token_variable(char **buf, size_t *len) { struct environ_entry *envent; int ch, brackets = 0; - char name[BUFSIZ]; + char name[1024]; size_t namelen = 0; const char *value; @@ -1297,7 +1297,7 @@ yylex_token_tilde(char **buf, size_t *len) { struct environ_entry *envent; int ch; - char name[BUFSIZ]; + char name[1024]; size_t namelen = 0; struct passwd *pw; const char *home = NULL; diff --git a/cmd.c b/cmd.c index bbcd77448e..163db73b53 100644 --- a/cmd.c +++ b/cmd.c @@ -385,7 +385,7 @@ cmd_find(const char *name, char **cause) { const struct cmd_entry **loop, *entry, *found = NULL; int ambiguous; - char s[BUFSIZ]; + char s[8192]; ambiguous = 0; for (loop = cmd_table; *loop != NULL; loop++) { diff --git a/layout-custom.c b/layout-custom.c index d759c206eb..4ac90a373a 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -60,7 +60,7 @@ layout_checksum(const char *layout) char * layout_dump(struct layout_cell *root) { - char layout[BUFSIZ], *out; + char layout[8192], *out; *layout = '\0'; if (layout_append(root, layout, sizeof layout) != 0) diff --git a/tty-term.c b/tty-term.c index 774dc9ed0e..c408d968d4 100644 --- a/tty-term.c +++ b/tty-term.c @@ -278,7 +278,7 @@ static char * tty_term_strip(const char *s) { const char *ptr; - static char buf[BUFSIZ]; + static char buf[8192]; size_t len; /* Ignore strings with no padding. */ @@ -306,7 +306,7 @@ tty_term_strip(const char *s) static char * tty_term_override_next(const char *s, size_t *offset) { - static char value[BUFSIZ]; + static char value[8192]; size_t n = 0, at = *offset; if (s[at] == '\0') From 02253d1e5c881be95fd2fc37b4c4209640b6b266 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 3 Oct 2019 10:39:08 +0000 Subject: [PATCH 783/836] Use a malloc'd buffer for lsk since commands can be very long, from Gregory Pakosz. --- cmd-list-keys.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/cmd-list-keys.c b/cmd-list-keys.c index ef8621016f..5113999dce 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -61,8 +61,9 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) struct key_table *table; struct key_binding *bd; const char *tablename, *r; - char *key, *cp, tmp[8192]; + char *key, *cp, *tmp; int repeat, width, tablewidth, keywidth; + size_t tmpsize, tmpused, cplen; if (self->entry == &cmd_list_commands_entry) return (cmd_list_keys_commands(self, item)); @@ -101,6 +102,9 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) table = key_bindings_next_table(table); } + tmpsize = 256; + tmp = xmalloc(tmpsize); + table = key_bindings_first_table (); while (table != NULL) { if (tablename != NULL && strcmp(table->name, tablename) != 0) { @@ -117,20 +121,35 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) r = "-r "; else r = " "; - xsnprintf(tmp, sizeof tmp, "%s-T ", r); + tmpused = xsnprintf(tmp, tmpsize, "%s-T ", r); cp = utf8_padcstr(table->name, tablewidth); - strlcat(tmp, cp, sizeof tmp); - strlcat(tmp, " ", sizeof tmp); + cplen = strlen(cp) + 1; + while (tmpused + cplen + 1>= tmpsize) { + tmpsize *= 2; + tmp = xrealloc(tmp, tmpsize); + } + tmpused = strlcat(tmp, cp, tmpsize); + tmpused = strlcat(tmp, " ", tmpsize); free(cp); cp = utf8_padcstr(key, keywidth); - strlcat(tmp, cp, sizeof tmp); - strlcat(tmp, " ", sizeof tmp); + cplen = strlen(cp) + 1; + while (tmpused + cplen + 1 >= tmpsize) { + tmpsize *= 2; + tmp = xrealloc(tmp, tmpsize); + } + tmpused = strlcat(tmp, cp, tmpsize); + tmpused = strlcat(tmp, " ", tmpsize); free(cp); cp = cmd_list_print(bd->cmdlist, 1); - strlcat(tmp, cp, sizeof tmp); + cplen = strlen(cp); + while (tmpused + cplen + 1 >= tmpsize) { + tmpsize *= 2; + tmp = xrealloc(tmp, tmpsize); + } + strlcat(tmp, cp, tmpsize); free(cp); cmdq_print(item, "bind-key %s", tmp); @@ -141,6 +160,8 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) table = key_bindings_next_table(table); } + free(tmp); + return (CMD_RETURN_NORMAL); } From 4e2cc0ae2a518371d1411bc327f113fc4898954c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 7 Oct 2019 07:14:07 +0000 Subject: [PATCH 784/836] Fix respawn-pane/window if default-command is set, reported by Janos Barbero. --- spawn.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spawn.c b/spawn.c index 71361c9f0b..d74e55f32f 100644 --- a/spawn.c +++ b/spawn.c @@ -253,7 +253,7 @@ spawn_pane(struct spawn_context *sc, char **cause) * Now we have a pane with nothing running in it ready for the new * process. Work out the command and arguments. */ - if (sc->argc == 0) { + if (sc->argc == 0 && (~sc->flags & SPAWN_RESPAWN)) { cmd = options_get_string(s->options, "default-command"); if (cmd != NULL && *cmd != '\0') { argc = 1; From 68d59a16cec91d2c2747c8c2862560e89f8f2d31 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 14 Oct 2019 08:38:07 +0000 Subject: [PATCH 785/836] Memory leaks, from Igor Wong in GitHub issue 1934. --- cmd-parse.y | 1 + options.c | 1 + tmux.c | 1 + 3 files changed, 3 insertions(+) diff --git a/cmd-parse.y b/cmd-parse.y index 0cd7c6bf62..2c924010c4 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -696,6 +696,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds, pr.status = CMD_PARSE_ERROR; pr.error = cmd_parse_get_error(pi->file, line, cause); free(cause); + cmd_list_free(cmdlist); goto out; } cmd_list_append(cmdlist, add); diff --git a/options.c b/options.c index 1be9f8cd75..f683c566e7 100644 --- a/options.c +++ b/options.c @@ -296,6 +296,7 @@ options_remove(struct options_entry *o) else options_value_free(o, &o->value); RB_REMOVE(options_tree, &oo->tree, o); + free((void *)o->name); free(o); } diff --git a/tmux.c b/tmux.c index c3fe3ee6fc..fe2647f56e 100644 --- a/tmux.c +++ b/tmux.c @@ -130,6 +130,7 @@ make_label(const char *label, char **cause) free(base); goto fail; } + free(base); if (mkdir(resolved, S_IRWXU) != 0 && errno != EEXIST) goto fail; From bbe8ebf9c26e45fd8c402627b84b3646db445d45 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 14 Oct 2019 09:16:48 +0000 Subject: [PATCH 786/836] Some old tmux versions can sometimes generate layout strings which have the incorrect size for the top cell. Previously tmux didn't care but now that panes can be partly hidden, the size matters and is checked more strictly. So add some code to fix up the most common problem and a sanity check to reject layouts with any other size problems. Reported by Aleksandrs Ledovskis in GitHub issue 1930. --- cmd-list-keys.c | 2 +- layout-custom.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 5113999dce..8636b70a9a 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -125,7 +125,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) cp = utf8_padcstr(table->name, tablewidth); cplen = strlen(cp) + 1; - while (tmpused + cplen + 1>= tmpsize) { + while (tmpused + cplen + 1 >= tmpsize) { tmpsize *= 2; tmp = xrealloc(tmp, tmpsize); } diff --git a/layout-custom.c b/layout-custom.c index 4ac90a373a..b049f482a1 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -116,13 +116,49 @@ layout_append(struct layout_cell *lc, char *buf, size_t len) return (0); } +/* Check layout sizes fit. */ +static int +layout_check(struct layout_cell *lc) +{ + struct layout_cell *lcchild; + u_int n = 0; + + switch (lc->type) { + case LAYOUT_WINDOWPANE: + break; + case LAYOUT_LEFTRIGHT: + TAILQ_FOREACH(lcchild, &lc->cells, entry) { + if (lcchild->sy != lc->sy) + return (0); + if (!layout_check(lcchild)) + return (0); + n += lcchild->sx + 1; + } + if (n - 1 != lc->sx) + return (0); + break; + case LAYOUT_TOPBOTTOM: + TAILQ_FOREACH(lcchild, &lc->cells, entry) { + if (lcchild->sx != lc->sx) + return (0); + if (!layout_check(lcchild)) + return (0); + n += lcchild->sy + 1; + } + if (n - 1 != lc->sy) + return (0); + break; + } + return (1); +} + /* Parse a layout string and arrange window as layout. */ int layout_parse(struct window *w, const char *layout) { struct layout_cell *lc, *lcchild; struct window_pane *wp; - u_int npanes, ncells; + u_int npanes, ncells, sx = 0, sy = 0; u_short csum; /* Check validity. */ @@ -153,6 +189,37 @@ layout_parse(struct window *w, const char *layout) layout_destroy_cell(w, lcchild, &lc); } + /* + * It appears older versions of tmux were able to generate layouts with + * an incorrect top cell size - if it is larger than the top child then + * correct that (if this is still wrong the check code will catch it). + */ + switch (lc->type) { + case LAYOUT_WINDOWPANE: + break; + case LAYOUT_LEFTRIGHT: + TAILQ_FOREACH(lcchild, &lc->cells, entry) { + sy = lcchild->sy + 1; + sx += lcchild->sx + 1; + } + break; + case LAYOUT_TOPBOTTOM: + TAILQ_FOREACH(lcchild, &lc->cells, entry) { + sx = lcchild->sx + 1; + sy += lcchild->sy + 1; + } + break; + } + if (lc->sx != sx || lc->sy != sy) { + log_debug("fix layout %u,%u to %u,%u", lc->sx, lc->sy, sx,sy); + layout_print_cell(lc, __func__, 0); + lc->sx = sx - 1; lc->sy = sy - 1; + } + + /* Check the new layout. */ + if (!layout_check(lc)) + return (-1); + /* Resize to the layout size. */ window_resize(w, lc->sx, lc->sy); From f18cd5b19c3c8e3941c714f9d7e51914fb5d81f0 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 14 Oct 2019 09:19:40 +0000 Subject: [PATCH 787/836] Turn automatic-rename back on if the rename escape sequence is used with an empty name, GitHub issue 1921. --- input.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/input.c b/input.c index d76216f456..fc08f42c3b 100644 --- a/input.c +++ b/input.c @@ -2279,6 +2279,9 @@ input_enter_rename(struct input_ctx *ictx) static void input_exit_rename(struct input_ctx *ictx) { + struct window_pane *wp = ictx->wp; + struct options_entry *oe; + if (ictx->flags & INPUT_DISCARD) return; if (!options_get_number(ictx->wp->options, "allow-rename")) @@ -2287,6 +2290,13 @@ input_exit_rename(struct input_ctx *ictx) if (!utf8_isvalid(ictx->input_buf)) return; + + if (ictx->input_len == 0) { + oe = options_get(wp->window->options, "automatic-rename"); + if (oe != NULL) + options_remove(oe); + return; + } window_set_name(ictx->wp->window, ictx->input_buf); options_set_number(ictx->wp->window->options, "automatic-rename", 0); server_status_window(ictx->wp->window); From b598bbcc2e8b26855e4d34dfff9c222c28080cd7 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 14 Oct 2019 09:24:06 +0000 Subject: [PATCH 788/836] Do not crash with pane_current_command if the pane is newly created and has no shell set, from Thomas Adam. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/format.c b/format.c index 581fa5829d..dd69512fa4 100644 --- a/format.c +++ b/format.c @@ -574,7 +574,7 @@ format_cb_current_command(struct format_tree *ft, struct format_entry *fe) struct window_pane *wp = ft->wp; char *cmd; - if (wp == NULL) + if (wp == NULL || wp->shell == NULL) return; cmd = get_proc_name(wp->fd, wp->tty); From 0c5e9c6efae5c3fae84c35f655754fef242c6acc Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 15 Oct 2019 08:25:37 +0000 Subject: [PATCH 789/836] Add support for percentage sizes for resize-pane ("-x 10%"). Also change split-window and join-pane -l to accept similar percentages and deprecate -p. From Anindya Mukherjee. --- cmd-join-pane.c | 39 +++++++++++++++++++------- cmd-resize-pane.c | 69 ++++++++++++++++++++++++++++++++++++---------- cmd-split-window.c | 36 +++++++++++++++++------- tmux.1 | 32 +++++++++++---------- 4 files changed, 126 insertions(+), 50 deletions(-) diff --git a/cmd-join-pane.c b/cmd-join-pane.c index 4a0c733917..b6eff0fe3e 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -21,6 +21,7 @@ #include #include +#include #include #include "tmux.h" @@ -36,7 +37,7 @@ const struct cmd_entry cmd_join_pane_entry = { .alias = "joinp", .args = { "bdhvp:l:s:t:", 0, 0 }, - .usage = "[-bdhv] [-p percentage|-l size] " CMD_SRCDST_PANE_USAGE, + .usage = "[-bdhv] [-l size] " CMD_SRCDST_PANE_USAGE, .source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED }, .target = { 't', CMD_FIND_PANE, 0 }, @@ -68,11 +69,13 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) struct winlink *src_wl, *dst_wl; struct window *src_w, *dst_w; struct window_pane *src_wp, *dst_wp; - char *cause; - int size, percentage, dst_idx; + char *cause, *copy; + const char *errstr, *p; + size_t plen; + int size, percentage, dst_idx, not_same_window; + int flags; enum layout_type type; struct layout_cell *lc; - int not_same_window, flags; if (self->entry == &cmd_join_pane_entry) not_same_window = 1; @@ -105,12 +108,28 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) type = LAYOUT_LEFTRIGHT; size = -1; - if (args_has(args, 'l')) { - size = args_strtonum(args, 'l', 0, INT_MAX, &cause); - if (cause != NULL) { - cmdq_error(item, "size %s", cause); - free(cause); - return (CMD_RETURN_ERROR); + if ((p = args_get(args, 'l')) != NULL) { + plen = strlen(p); + if (p[plen - 1] == '%') { + copy = xstrdup(p); + copy[plen - 1] = '\0'; + percentage = strtonum(copy, 0, INT_MAX, &errstr); + free(copy); + if (errstr != NULL) { + cmdq_error(item, "percentage %s", errstr); + return (CMD_RETURN_ERROR); + } + if (type == LAYOUT_TOPBOTTOM) + size = (dst_wp->sy * percentage) / 100; + else + size = (dst_wp->sx * percentage) / 100; + } else { + size = args_strtonum(args, 'l', 0, INT_MAX, &cause); + if (cause != NULL) { + cmdq_error(item, "size %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } } } else if (args_has(args, 'p')) { percentage = args_strtonum(args, 'p', 0, 100, &cause); diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 8d35d96fb8..3962546d91 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -19,6 +19,7 @@ #include #include +#include #include "tmux.h" @@ -55,10 +56,11 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) struct window *w = wl->window; struct client *c = item->client; struct session *s = item->target.s; - const char *errstr; - char *cause; + const char *errstr, *p; + char *cause, *copy; u_int adjust; - int x, y; + int x, y, percentage; + size_t plen; if (args_has(args, 'M')) { if (cmd_mouse_window(&shared->mouse, &s) == NULL) @@ -91,21 +93,58 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) } } - if (args_has(args, 'x')) { - x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause); - if (cause != NULL) { - cmdq_error(item, "width %s", cause); - free(cause); - return (CMD_RETURN_ERROR); + if ((p = args_get(args, 'x')) != NULL) { + plen = strlen(p); + if (p[plen - 1] == '%') { + copy = xstrdup(p); + copy[plen - 1] = '\0'; + percentage = strtonum(copy, 0, INT_MAX, &errstr); + free(copy); + if (errstr != NULL) { + cmdq_error(item, "width %s", errstr); + return (CMD_RETURN_ERROR); + } + x = (w->sx * percentage) / 100; + if (x < PANE_MINIMUM) + x = PANE_MINIMUM; + if (x > INT_MAX) + x = INT_MAX; + } else { + x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, + &cause); + if (cause != NULL) { + cmdq_error(item, "width %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } } layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x); } - if (args_has(args, 'y')) { - y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause); - if (cause != NULL) { - cmdq_error(item, "height %s", cause); - free(cause); - return (CMD_RETURN_ERROR); + if ((p = args_get(args, 'y')) != NULL) { + plen = strlen(p); + if (p[plen - 1] == '%') { + copy = xstrdup(p); + copy[plen - 1] = '\0'; + percentage = strtonum(copy, 0, INT_MAX, &errstr); + free(copy); + if (errstr != NULL) { + cmdq_error(item, "height %s", errstr); + return (CMD_RETURN_ERROR); + } + y = (w->sy * percentage) / 100; + if (y < PANE_MINIMUM) + y = PANE_MINIMUM; + if (y > INT_MAX) + y = INT_MAX; + } + else { + y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, + &cause); + if (cause != NULL) { + cmdq_error(item, "height %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } } layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y); } diff --git a/cmd-split-window.c b/cmd-split-window.c index d004aa95f4..748ae49b19 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -42,8 +42,7 @@ const struct cmd_entry cmd_split_window_entry = { .args = { "bc:de:fF:hIl:p:Pt:v", 0, -1 }, .usage = "[-bdefhIPv] [-c start-directory] [-e environment] " - "[-F format] [-p percentage|-l size] " CMD_TARGET_PANE_USAGE - " [command]", + "[-F format] [-l size] " CMD_TARGET_PANE_USAGE " [command]", .target = { 't', CMD_FIND_PANE, 0 }, @@ -65,20 +64,37 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item) struct layout_cell *lc; struct cmd_find_state fs; int size, percentage, flags, input; - const char *template, *add; - char *cause, *cp; + const char *template, *add, *errstr, *p; + char *cause, *cp, *copy; + size_t plen; struct args_value *value; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; else type = LAYOUT_TOPBOTTOM; - if (args_has(args, 'l')) { - size = args_strtonum(args, 'l', 0, INT_MAX, &cause); - if (cause != NULL) { - cmdq_error(item, "create pane failed: -l %s", cause); - free(cause); - return (CMD_RETURN_ERROR); + if ((p = args_get(args, 'l')) != NULL) { + plen = strlen(p); + if (p[plen - 1] == '%') { + copy = xstrdup(p); + copy[plen - 1] = '\0'; + percentage = strtonum(copy, 0, INT_MAX, &errstr); + free(copy); + if (errstr != NULL) { + cmdq_error(item, "percentage %s", errstr); + return (CMD_RETURN_ERROR); + } + if (type == LAYOUT_TOPBOTTOM) + size = (wp->sy * percentage) / 100; + else + size = (wp->sx * percentage) / 100; + } else { + size = args_strtonum(args, 'l', 0, INT_MAX, &cause); + if (cause != NULL) { + cmdq_error(item, "lines %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } } } else if (args_has(args, 'p')) { percentage = args_strtonum(args, 'p', 0, INT_MAX, &cause); diff --git a/tmux.1 b/tmux.1 index ff19c22550..9405a11aa6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1891,9 +1891,7 @@ zooms the pane. This command works only if at least one client is attached. .It Xo Ic join-pane .Op Fl bdhv -.Oo Fl l -.Ar size | -.Fl p Ar percentage Oc +.Op Fl l Ar size .Op Fl s Ar src-pane .Op Fl t Ar dst-pane .Xc @@ -2030,9 +2028,7 @@ flag, see the section. .It Xo Ic move-pane .Op Fl bdhv -.Oo Fl l -.Ar size | -.Fl p Ar percentage Oc +.Op Fl l Ar size .Op Fl s Ar src-pane .Op Fl t Ar dst-pane .Xc @@ -2241,8 +2237,14 @@ or .Fl y . The .Ar adjustment -is given in lines or cells (the default is 1). -.Pp +is given in lines or columns (the default is 1); +.Fl x +and +.Fl y +may be a given as a number of lines or columns or followed by +.Ql % +for a percentage of the window size (for example +.Ql -x 10% ) . With .Fl Z , the active pane is toggled between zoomed (occupying the whole of the window) @@ -2434,9 +2436,7 @@ the command behaves like .Op Fl bdfhIvP .Op Fl c Ar start-directory .Op Fl e Ar environment -.Oo Fl l -.Ar size | -.Fl p Ar percentage Oc +.Op Fl l Ar size .Op Fl t Ar target-pane .Op Ar shell-command .Op Fl F Ar format @@ -2452,10 +2452,12 @@ a vertical split; if neither is specified, is assumed. The .Fl l -and -.Fl p -options specify the size of the new pane in lines (for vertical split) or in -cells (for horizontal split), or as a percentage, respectively. +option specifies the size of the new pane in lines (for vertical split) or in +columns (for horizontal split); +.Ar size +may be followed by +.Ql % +to specify a percentage of the available space. The .Fl b option causes the new pane to be created to the left of or above From 9fd62efcf0392cda0ddd1b7836e98da08d0a6f9f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 15 Oct 2019 08:30:36 +0000 Subject: [PATCH 790/836] Rewrite options_array_set to be clearer and remove a spurious warning with newer GCC. From Ben Boeckel. --- options.c | 53 ++++++++++++++++++++++++++++++++++----------------- window-tree.c | 4 ++-- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/options.c b/options.c index f683c566e7..6bc54ef898 100644 --- a/options.c +++ b/options.c @@ -321,6 +321,17 @@ options_array_item(struct options_entry *o, u_int idx) return (RB_FIND(options_array, &o->value.array, &a)); } +static struct options_array_item * +options_array_new(struct options_entry *o, u_int idx) +{ + struct options_array_item *a; + + a = xcalloc(1, sizeof *a); + a->index = idx; + RB_INSERT(options_array, &o->value.array, a); + return (a); +} + static void options_array_free(struct options_entry *o, struct options_array_item *a) { @@ -368,7 +379,14 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, return (-1); } - if (OPTIONS_IS_COMMAND(o) && value != NULL) { + if (value == NULL) { + a = options_array_item(o, idx); + if (a != NULL) + options_array_free(o, a); + return (0); + } + + if (OPTIONS_IS_COMMAND(o)) { pr = cmd_parse_from_string(value, NULL); switch (pr->status) { case CMD_PARSE_EMPTY: @@ -384,34 +402,33 @@ options_array_set(struct options_entry *o, u_int idx, const char *value, case CMD_PARSE_SUCCESS: break; } - } - a = options_array_item(o, idx); - if (value == NULL) { - if (a != NULL) - options_array_free(o, a); + a = options_array_item(o, idx); + if (a == NULL) + a = options_array_new(o, idx); + else + options_value_free(o, &a->value); + a->value.cmdlist = pr->cmdlist; return (0); } if (OPTIONS_IS_STRING(o)) { + a = options_array_item(o, idx); if (a != NULL && append) xasprintf(&new, "%s%s", a->value.string, value); else new = xstrdup(value); + if (a == NULL) + a = options_array_new(o, idx); + else + options_value_free(o, &a->value); + a->value.string = new; + return (0); } - if (a == NULL) { - a = xcalloc(1, sizeof *a); - a->index = idx; - RB_INSERT(options_array, &o->value.array, a); - } else - options_value_free(o, &a->value); - - if (OPTIONS_IS_STRING(o)) - a->value.string = new; - else if (OPTIONS_IS_COMMAND(o)) - a->value.cmdlist = pr->cmdlist; - return (0); + if (cause != NULL) + *cause = xstrdup("wrong array type"); + return (-1); } int diff --git a/window-tree.c b/window-tree.c index cc16f27405..4dce1fe828 100644 --- a/window-tree.c +++ b/window-tree.c @@ -191,7 +191,7 @@ window_tree_cmp_session(const void *a0, const void *b0) const struct session *const *b = b0; const struct session *sa = *a; const struct session *sb = *b; - int result; + int result = 0; switch (window_tree_sort->field) { case WINDOW_TREE_BY_INDEX: @@ -226,7 +226,7 @@ window_tree_cmp_window(const void *a0, const void *b0) const struct winlink *wlb = *b; struct window *wa = wla->window; struct window *wb = wlb->window; - int result; + int result = 0; switch (window_tree_sort->field) { case WINDOW_TREE_BY_INDEX: From 2cb268d51b71d74cf32e9cd1f67892681a9563e1 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 19 Oct 2019 12:40:42 +0000 Subject: [PATCH 791/836] Do not crash trying to fix layout size if only one cell, from Azat Khuzhin. --- layout-custom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layout-custom.c b/layout-custom.c index b049f482a1..d737129281 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -210,7 +210,7 @@ layout_parse(struct window *w, const char *layout) } break; } - if (lc->sx != sx || lc->sy != sy) { + if (lc->type != LAYOUT_WINDOWPANE && (lc->sx != sx || lc->sy != sy)) { log_debug("fix layout %u,%u to %u,%u", lc->sx, lc->sy, sx,sy); layout_print_cell(lc, __func__, 0); lc->sx = sx - 1; lc->sy = sy - 1; From 56e5067c462a8c03fd35fbd5833c5fe17c23b0fa Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 19 Oct 2019 19:20:14 +0000 Subject: [PATCH 792/836] Add formats for cursor and selection position in copy mode, from Jason Felice. --- tmux.1 | 6 ++++++ window-copy.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/tmux.1 b/tmux.1 index 9405a11aa6..9d392a90aa 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4214,6 +4214,8 @@ The following variables are available, where appropriate: .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands" .It Li "command_list_name" Ta "" Ta "Command name if listing commands" .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands" +.It Li "copy_cursor_x" Ta "" Ta "Cursor X position in copy mode" +.It Li "copy_cursor_y" Ta "" Ta "Cursor Y position in copy mode" .It Li "cursor_character" Ta "" Ta "Character at cursor in pane" .It Li "cursor_flag" Ta "" Ta "Pane cursor flag" .It Li "cursor_x" Ta "" Ta "Cursor X position in pane" @@ -4279,7 +4281,11 @@ The following variables are available, where appropriate: .It Li "scroll_position" Ta "" Ta "Scroll position in copy mode" .It Li "scroll_region_lower" Ta "" Ta "Bottom of scroll region in pane" .It Li "scroll_region_upper" Ta "" Ta "Top of scroll region in pane" +.It Li "selection_end_x" Ta "" Ta "X position of the end of the selection" +.It Li "selection_end_y" Ta "" Ta "Y position of the end of the selection" .It Li "selection_present" Ta "" Ta "1 if selection started in copy mode" +.It Li "selection_start_x" Ta "" Ta "X position of the start of the selection" +.It Li "selection_start_y" Ta "" Ta "Y position of the start of the selection" .It Li "session_activity" Ta "" Ta "Time of session last activity" .It Li "session_alerts" Ta "" Ta "List of window indexes with alerts" .It Li "session_attached" Ta "" Ta "Number of clients session is attached to" diff --git a/window-copy.c b/window-copy.c index 76736ab27c..bca236e3f7 100644 --- a/window-copy.c +++ b/window-copy.c @@ -565,9 +565,19 @@ window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft) { struct window_copy_mode_data *data = wme->data; - format_add(ft, "selection_present", "%d", data->screen.sel != NULL); format_add(ft, "scroll_position", "%d", data->oy); format_add(ft, "rectangle_toggle", "%d", data->rectflag); + + format_add(ft, "copy_cursor_x", "%d", data->cx); + format_add(ft, "copy_cursor_y", "%d", data->cy); + + format_add(ft, "selection_present", "%d", data->screen.sel != NULL); + if (data->screen.sel != NULL) { + format_add(ft, "selection_start_x", "%d", data->selx); + format_add(ft, "selection_start_y", "%d", data->sely); + format_add(ft, "selection_end_x", "%d", data->endselx); + format_add(ft, "selection_end_y", "%d", data->endsely); + } } static void From f7fb5df54312fb4d7421ba7b25fa00987085ac65 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 23 Oct 2019 07:42:05 +0000 Subject: [PATCH 793/836] Use the existing code in format.c to add foramts for word and line at cursor position in copy mode, from Anindya Mukherjee. --- format.c | 75 ++++++++++++++++++++++++++++++++++----------------- tmux.1 | 2 ++ tmux.h | 2 ++ window-copy.c | 13 +++++++++ 4 files changed, 67 insertions(+), 25 deletions(-) diff --git a/format.c b/format.c index dd69512fa4..7d8700a6f2 100644 --- a/format.c +++ b/format.c @@ -703,30 +703,19 @@ format_cb_cursor_character(struct format_tree *ft, struct format_entry *fe) xasprintf(&fe->value, "%.*s", (int)gc.data.size, gc.data.data); } -/* Callback for mouse_word. */ -static void -format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe) +/* Return word at given coordinates. Caller frees. */ +char * +format_grid_word(struct grid *gd, u_int x, u_int y) { - struct window_pane *wp; - u_int x, y, end; - struct grid *gd; struct grid_line *gl; struct grid_cell gc; const char *ws; struct utf8_data *ud = NULL; + u_int end; size_t size = 0; int found = 0; + char *s = NULL; - if (!ft->m.valid) - return; - wp = cmd_mouse_pane(&ft->m, NULL, NULL); - if (wp == NULL) - return; - if (!TAILQ_EMPTY (&wp->modes)) - return; - if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) - return; - gd = wp->base.grid; ws = options_get_string(global_s_options, "word-separators"); y = gd->hsize + y; @@ -779,21 +768,19 @@ format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe) } if (size != 0) { ud[size].size = 0; - fe->value = utf8_tocstr(ud); + s = utf8_tocstr(ud); free(ud); } + return (s); } -/* Callback for mouse_line. */ +/* Callback for mouse_word. */ static void -format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) +format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe) { struct window_pane *wp; u_int x, y; - struct grid *gd; - struct grid_cell gc; - struct utf8_data *ud = NULL; - size_t size = 0; + char *s; if (!ft->m.valid) return; @@ -804,7 +791,21 @@ format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) return; if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) return; - gd = wp->base.grid; + + s = format_grid_word(wp->base.grid, x, y); + if (s != NULL) + fe->value = s; +} + +/* Return line at given coordinates. Caller frees. */ +char * +format_grid_line(struct grid *gd, u_int y) +{ + struct grid_cell gc; + struct utf8_data *ud = NULL; + u_int x; + size_t size = 0; + char *s = NULL; y = gd->hsize + y; for (x = 0; x < grid_line_length(gd, y); x++) { @@ -817,9 +818,33 @@ format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) } if (size != 0) { ud[size].size = 0; - fe->value = utf8_tocstr(ud); + s = utf8_tocstr(ud); free(ud); } + return (s); +} + +/* Callback for mouse_line. */ +static void +format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp; + u_int x, y; + char *s; + + if (!ft->m.valid) + return; + wp = cmd_mouse_pane(&ft->m, NULL, NULL); + if (wp == NULL) + return; + if (!TAILQ_EMPTY (&wp->modes)) + return; + if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0) + return; + + s = format_grid_line(wp->base.grid, y); + if (s != NULL) + fe->value = s; } /* Merge a format tree. */ diff --git a/tmux.1 b/tmux.1 index 9d392a90aa..d21e9e8f60 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4214,6 +4214,8 @@ The following variables are available, where appropriate: .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands" .It Li "command_list_name" Ta "" Ta "Command name if listing commands" .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands" +.It Li "copy_cursor_line" Ta "" Ta "Line the cursor is on in copy mode" +.It Li "copy_cursor_word" Ta "" Ta "Word under cursor in copy mode" .It Li "copy_cursor_x" Ta "" Ta "Cursor X position in copy mode" .It Li "copy_cursor_y" Ta "" Ta "Cursor Y position in copy mode" .It Li "cursor_character" Ta "" Ta "Character at cursor in pane" diff --git a/tmux.h b/tmux.h index 60c515f5c2..a68c7cbfdd 100644 --- a/tmux.h +++ b/tmux.h @@ -1787,6 +1787,8 @@ void format_defaults_pane(struct format_tree *, void format_defaults_paste_buffer(struct format_tree *, struct paste_buffer *); void format_lost_client(struct client *); +char *format_grid_word(struct grid *, u_int, u_int); +char *format_grid_line(struct grid *, u_int); /* format-draw.c */ void format_draw(struct screen_write_ctx *, diff --git a/window-copy.c b/window-copy.c index bca236e3f7..473112e3af 100644 --- a/window-copy.c +++ b/window-copy.c @@ -564,6 +564,7 @@ static void window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft) { struct window_copy_mode_data *data = wme->data; + char *s; format_add(ft, "scroll_position", "%d", data->oy); format_add(ft, "rectangle_toggle", "%d", data->rectflag); @@ -578,6 +579,18 @@ window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft) format_add(ft, "selection_end_x", "%d", data->endselx); format_add(ft, "selection_end_y", "%d", data->endsely); } + + s = format_grid_word(data->screen.grid, data->cx, data->cy); + if (s != NULL) { + format_add(ft, "copy_cursor_word", "%s", s); + free(s); + } + + s = format_grid_line(data->screen.grid, data->cy); + if (s != NULL) { + format_add(ft, "copy_cursor_line", "%s", s); + free(s); + } } static void From 6700018ce519025883b33e7df7d09708b1f9526b Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 23 Oct 2019 14:10:13 +0000 Subject: [PATCH 794/836] Document Any key, from Jason Felice. --- tmux.1 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tmux.1 b/tmux.1 index d21e9e8f60..8c9fad394b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2600,6 +2600,10 @@ bind-key '"' split-window bind-key "'" new-window .Ed .Pp +A command bound to the +.Em Any +key will execute for all keys which do not have a more specific binding. +.Pp Commands related to key bindings are as follows: .Bl -tag -width Ds .It Xo Ic bind-key From ccdebead79d4c20a0ad82f247d9339224af19a82 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 28 Oct 2019 09:07:59 +0000 Subject: [PATCH 795/836] Start with empty rather than NULL window name to avoid NULL printf if window_name is evaluated early. Reported by Mikolaj Kucharski. --- window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window.c b/window.c index e3b20a3eca..21bf366f71 100644 --- a/window.c +++ b/window.c @@ -313,7 +313,7 @@ window_create(u_int sx, u_int sy) struct window *w; w = xcalloc(1, sizeof *w); - w->name = NULL; + w->name = xstrdup(""); w->flags = 0; TAILQ_INIT(&w->panes); From a1006db91b3adb2de1ee0bd8cedfa8794dbf4c6c Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 29 Oct 2019 16:59:15 +0000 Subject: [PATCH 796/836] Create FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..c4f1ae0d53 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +liberapay: tmux From d9c95c900c91e1eed411f587a72e76975d4efda9 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 1 Nov 2019 09:09:53 +0000 Subject: [PATCH 797/836] Handle the various different forms of rgb colour strings. --- input.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/input.c b/input.c index fc08f42c3b..ee12301cca 100644 --- a/input.c +++ b/input.c @@ -2338,6 +2338,54 @@ input_top_bit_set(struct input_ctx *ictx) return (0); } +/* Parse colour from OSC. */ +static int +input_osc_parse_colour(const char *p, u_int *r, u_int *g, u_int *b) +{ + u_int rsize, gsize, bsize; + const char *cp, *s = p; + + if (sscanf(p, "rgb:%x/%x/%x", r, g, b) != 3) + return (0); + p += 4; + + cp = strchr(p, '/'); + rsize = cp - p; + if (rsize == 1) + (*r) = (*r) | ((*r) << 4); + else if (rsize == 3) + (*r) >>= 4; + else if (rsize == 4) + (*r) >>= 8; + else if (rsize != 2) + return (0); + + p = cp + 1; + cp = strchr(p, '/'); + gsize = cp - p; + if (gsize == 1) + (*g) = (*g) | ((*g) << 4); + else if (gsize == 3) + (*g) >>= 4; + else if (gsize == 4) + (*g) >>= 8; + else if (gsize != 2) + return (0); + + bsize = strlen(cp + 1); + if (bsize == 1) + (*b) = (*b) | ((*b) << 4); + else if (bsize == 3) + (*b) >>= 4; + else if (bsize == 4) + (*b) >>= 8; + else if (bsize != 2) + return (0); + + log_debug("%s: %s = %02x%02x%02x", __func__, s, *r, *g, *b); + return (1); +} + /* Handle the OSC 4 sequence for setting (multiple) palette entries. */ static void input_osc_4(struct input_ctx *ictx, const char *p) @@ -2356,7 +2404,7 @@ input_osc_4(struct input_ctx *ictx, const char *p) goto bad; s = strsep(&next, ";"); - if (sscanf(s, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) { + if (!input_osc_parse_colour(s, &r, &g, &b)) { s = next; continue; } @@ -2381,8 +2429,11 @@ input_osc_10(struct input_ctx *ictx, const char *p) u_int r, g, b; char tmp[16]; - if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) - goto bad; + if (strcmp(p, "?") == 0) + return; + + if (!input_osc_parse_colour(p, &r, &g, &b)) + goto bad; xsnprintf(tmp, sizeof tmp, "fg=#%02x%02x%02x", r, g, b); options_set_style(wp->options, "window-style", 1, tmp); options_set_style(wp->options, "window-active-style", 1, tmp); @@ -2402,7 +2453,10 @@ input_osc_11(struct input_ctx *ictx, const char *p) u_int r, g, b; char tmp[16]; - if (sscanf(p, "rgb:%2x/%2x/%2x", &r, &g, &b) != 3) + if (strcmp(p, "?") == 0) + return; + + if (!input_osc_parse_colour(p, &r, &g, &b)) goto bad; xsnprintf(tmp, sizeof tmp, "bg=#%02x%02x%02x", r, g, b); options_set_style(wp->options, "window-style", 1, tmp); From bad95db8785f4ee6b6e17750500c024642e83134 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 1 Nov 2019 20:26:21 +0000 Subject: [PATCH 798/836] Limit lazy resize to panes in attached sessions only - those in unattached are likely to have been resized by something like split-window where the user probably wants the resize to happen immediately. GitHub issue 1963. --- server-client.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server-client.c b/server-client.c index 36ebf85bfb..26b246c1c8 100644 --- a/server-client.c +++ b/server-client.c @@ -1268,7 +1268,7 @@ server_client_loop(void) struct window_pane *wp; struct winlink *wl; struct session *s; - int focus; + int focus, attached, resize; TAILQ_FOREACH(c, &clients, entry) { server_client_check_exit(c); @@ -1281,19 +1281,33 @@ server_client_loop(void) /* * Any windows will have been redrawn as part of clients, so clear * their flags now. Also check pane focus and resize. + * + * As an optimization, panes in windows that are in an attached session + * but not the current window are not resized (this reduces the amount + * of work needed when, for example, resizing an X terminal a + * lot). Windows in no attached session are resized immediately since + * that is likely to have come from a command like split-window and be + * what the user wanted. */ focus = options_get_number(global_options, "focus-events"); RB_FOREACH(w, windows, &windows) { + attached = resize = 0; TAILQ_FOREACH(wl, &w->winlinks, wentry) { s = wl->session; - if (s->attached != 0 && s->curw == wl) + if (s->attached != 0) + attached = 1; + if (s->attached != 0 && s->curw == wl) { + resize = 1; break; + } } + if (!attached) + resize = 1; TAILQ_FOREACH(wp, &w->panes, entry) { if (wp->fd != -1) { if (focus) server_client_check_focus(wp); - if (wl != NULL) + if (resize) server_client_check_resize(wp); } wp->flags &= ~PANE_REDRAW; From c225262e132ded1b4e1e8c0bd21884e9da78ddb3 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 7 Nov 2019 07:11:25 +0000 Subject: [PATCH 799/836] Add -F flag to send-keys to expand formats in search-backward and forward copy mode commands, this makes it easier to use the cursor_word and cursor_line formats. From Anindya Mukherjee in GitHub issue 1964. --- cmd-send-keys.c | 5 +++-- tmux.1 | 6 ++++-- window-copy.c | 32 ++++++++++++++++++++++++++++---- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/cmd-send-keys.c b/cmd-send-keys.c index fe20233515..ddbab6f781 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -33,8 +33,9 @@ const struct cmd_entry cmd_send_keys_entry = { .name = "send-keys", .alias = "send", - .args = { "HlXRMN:t:", 0, -1 }, - .usage = "[-HlXRM] [-N repeat-count] " CMD_TARGET_PANE_USAGE " key ...", + .args = { "FHlMN:Rt:X", 0, -1 }, + .usage = "[-FHlMRX] [-N repeat-count] " CMD_TARGET_PANE_USAGE + " key ...", .target = { 't', CMD_FIND_PANE, 0 }, diff --git a/tmux.1 b/tmux.1 index 8c9fad394b..2a1735d896 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2672,7 +2672,7 @@ With only .Ar key-table . .It Xo Ic send-keys -.Op Fl HlMRX +.Op Fl FHlMRX .Op Fl N Ar repeat-count .Op Fl t Ar target-pane .Ar key Ar ... @@ -2711,7 +2711,9 @@ the .Sx WINDOWS AND PANES section. .Fl N -specifies a repeat count. +specifies a repeat count and +.Fl F +expands formats in arguments where appropriate. .It Xo Ic send-prefix .Op Fl 2 .Op Fl t Ar target-pane diff --git a/window-copy.c b/window-copy.c index 473112e3af..01dc1f8578 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1673,12 +1673,24 @@ window_copy_cmd_search_backward(struct window_copy_cmd_state *cs) struct window_copy_mode_data *data = wme->data; u_int np = wme->prefix; const char *argument; + char *expanded; if (cs->args->argc == 2) { argument = cs->args->argv[1]; if (*argument != '\0') { - free(data->searchstr); - data->searchstr = xstrdup(argument); + if (args_has(cs->args, 'F')) { + expanded = format_single(NULL, argument, NULL, + NULL, NULL, wme->wp); + if (*expanded == '\0') { + free(expanded); + return (WINDOW_COPY_CMD_NOTHING); + } + free(data->searchstr); + data->searchstr = expanded; + } else { + free(data->searchstr); + data->searchstr = xstrdup(argument); + } } } if (data->searchstr != NULL) { @@ -1696,12 +1708,24 @@ window_copy_cmd_search_forward(struct window_copy_cmd_state *cs) struct window_copy_mode_data *data = wme->data; u_int np = wme->prefix; const char *argument; + char *expanded; if (cs->args->argc == 2) { argument = cs->args->argv[1]; if (*argument != '\0') { - free(data->searchstr); - data->searchstr = xstrdup(argument); + if (args_has(cs->args, 'F')) { + expanded = format_single(NULL, argument, NULL, + NULL, NULL, wme->wp); + if (*expanded == '\0') { + free(expanded); + return (WINDOW_COPY_CMD_NOTHING); + } + free(data->searchstr); + data->searchstr = expanded; + } else { + free(data->searchstr); + data->searchstr = xstrdup(argument); + } } } if (data->searchstr != NULL) { From 08b07b1a08ad02f7a195437deead0a60f971e1ee Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Nov 2019 07:55:01 +0000 Subject: [PATCH 800/836] Add an option to set the key sent by backspace for those whose system uses ^H rather than ^?. GitHub issue 1969. --- input-keys.c | 10 +++++++--- key-string.c | 12 ++++++++---- options-table.c | 6 ++++++ spawn.c | 9 +++++++-- tmux.1 | 4 ++++ 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/input-keys.c b/input-keys.c index 6e521ae188..1325e813f4 100644 --- a/input-keys.c +++ b/input-keys.c @@ -43,9 +43,6 @@ struct input_key_ent { }; static const struct input_key_ent input_keys[] = { - /* Backspace key. */ - { KEYC_BSPACE, "\177", 0 }, - /* Paste keys. */ { KEYC_PASTE_START, "\033[200~", 0 }, { KEYC_PASTE_END, "\033[201~", 0 }, @@ -180,6 +177,13 @@ input_key(struct window_pane *wp, key_code key, struct mouse_event *m) return; } + /* Is this backspace? */ + if ((key & KEYC_MASK_KEY) == KEYC_BSPACE) { + key = options_get_number(global_options, "backspace"); + if (key >= 0x7f) + key = '\177'; + } + /* * If this is a normal 7-bit key, just send it, with a leading escape * if necessary. If it is a UTF-8 key, split it and send it. diff --git a/key-string.c b/key-string.c index a1ef4f51ba..0505623e08 100644 --- a/key-string.c +++ b/key-string.c @@ -159,7 +159,7 @@ key_string_get_modifiers(const char **string) key_code key_string_lookup_string(const char *string) { - static const char *other = "!#()+,-.0123456789:;<=>?'\r\t"; + static const char *other = "!#()+,-.0123456789:;<=>'\r\t"; key_code key; u_int u; key_code modifiers; @@ -196,7 +196,7 @@ key_string_lookup_string(const char *string) /* Is this a standard ASCII key? */ if (string[1] == '\0' && (u_char)string[0] <= 127) { key = (u_char)string[0]; - if (key < 32 || key == 127) + if (key < 32) return (KEYC_UNKNOWN); } else { /* Try as a UTF-8 key. */ @@ -226,6 +226,8 @@ key_string_lookup_string(const char *string) key -= 64; else if (key == 32) key = 0; + else if (key == '?') + key = 127; else if (key == 63) key = KEYC_BSPACE; else @@ -329,7 +331,7 @@ key_string_lookup_key(key_code key) } /* Invalid keys are errors. */ - if (key == 127 || key > 255) { + if (key > 255) { snprintf(out, sizeof out, "Invalid#%llx", key); return (out); } @@ -343,7 +345,9 @@ key_string_lookup_key(key_code key) } else if (key >= 32 && key <= 126) { tmp[0] = key; tmp[1] = '\0'; - } else if (key >= 128) + } else if (key == 127) + xsnprintf(tmp, sizeof tmp, "C-?"); + else if (key >= 128) xsnprintf(tmp, sizeof tmp, "\\%llo", key); strlcat(out, tmp, sizeof out); diff --git a/options-table.c b/options-table.c index 77dbfb1338..cbe5197d1f 100644 --- a/options-table.c +++ b/options-table.c @@ -147,6 +147,12 @@ static const char *options_table_status_format_default[] = { /* Top-level options. */ const struct options_table_entry options_table[] = { /* Server options. */ + { .name = "backspace", + .type = OPTIONS_TABLE_KEY, + .scope = OPTIONS_TABLE_SERVER, + .default_num = '\177', + }, + { .name = "buffer-limit", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SERVER, diff --git a/spawn.c b/spawn.c index d74e55f32f..dfa39ad792 100644 --- a/spawn.c +++ b/spawn.c @@ -217,6 +217,7 @@ spawn_pane(struct spawn_context *sc, char **cause) u_int hlimit; struct winsize ws; sigset_t set, oldset; + key_code key; spawn_log(__func__, sc); @@ -378,13 +379,17 @@ spawn_pane(struct spawn_context *sc, char **cause) /* * Update terminal escape characters from the session if available and - * force VERASE to tmux's \177. + * force VERASE to tmux's backspace. */ if (tcgetattr(STDIN_FILENO, &now) != 0) _exit(1); if (s->tio != NULL) memcpy(now.c_cc, s->tio->c_cc, sizeof now.c_cc); - now.c_cc[VERASE] = '\177'; + key = options_get_number(global_options, "backspace"); + if (key >= 0x7f) + now.c_cc[VERASE] = '\177'; + else + now.c_cc[VERASE] = key; if (tcsetattr(STDIN_FILENO, TCSANOW, &now) != 0) _exit(1); diff --git a/tmux.1 b/tmux.1 index 2a1735d896..3fb01ee4f8 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2925,6 +2925,10 @@ omitted to toggle). .Pp Available server options are: .Bl -tag -width Ds +.It Ic backspace Ar key +Set the key sent by +.Nm +for backspace. .It Ic buffer-limit Ar number Set the number of buffers; as new buffers are added to the top of the stack, old ones are removed from the bottom if necessary to maintain this maximum From eb399e64d5c8f1b18e912fdf1c5488d602f78d80 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Nov 2019 07:56:32 +0000 Subject: [PATCH 801/836] CUB and CUF are also limited by the margins so use CUP instead when margins are enabled (we already do this for linefeed). --- tty.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tty.c b/tty.c index f8abb17a40..d77bb4402a 100644 --- a/tty.c +++ b/tty.c @@ -2106,7 +2106,9 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) if ((u_int) abs(change) > cx && tty_term_has(term, TTYC_HPA)) { tty_putcode1(tty, TTYC_HPA, cx); goto out; - } else if (change > 0 && tty_term_has(term, TTYC_CUB)) { + } else if (change > 0 && + tty_term_has(term, TTYC_CUB) && + !tty_use_margin(tty)) { if (change == 2 && tty_term_has(term, TTYC_CUB1)) { tty_putcode(tty, TTYC_CUB1); tty_putcode(tty, TTYC_CUB1); @@ -2114,7 +2116,9 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) } tty_putcode1(tty, TTYC_CUB, change); goto out; - } else if (change < 0 && tty_term_has(term, TTYC_CUF)) { + } else if (change < 0 && + tty_term_has(term, TTYC_CUF) && + !tty_use_margin(tty)) { tty_putcode1(tty, TTYC_CUF, -change); goto out; } From 2dbf062a891e992b438a0923b9ffd79638014872 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Nov 2019 08:00:30 +0000 Subject: [PATCH 802/836] Change new-session -A without a session name (that is, no -s option also) to attach to the best existing session like attach-session rather than creating a new one. --- cmd-new-session.c | 33 +++++++++++++++++++-------------- input.c | 2 +- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index c7c407c617..c76b564e4d 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -94,26 +94,31 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) return (CMD_RETURN_ERROR); } - if (args_has(args, 's')) { - newname = format_single(item, args_get(args, 's'), c, NULL, - NULL, NULL); + tmp = args_get(args, 's'); + if (tmp != NULL) { + newname = format_single(item, tmp, c, NULL, NULL, NULL); if (!session_check_name(newname)) { cmdq_error(item, "bad session name: %s", newname); goto fail; } - if ((as = session_find(newname)) != NULL) { - if (args_has(args, 'A')) { - retval = cmd_attach_session(item, - newname, args_has(args, 'D'), - args_has(args, 'X'), 0, NULL, - args_has(args, 'E')); - free(newname); - return (retval); - } - cmdq_error(item, "duplicate session: %s", newname); - goto fail; + } + if (args_has(args, 'A')) { + if (newname != NULL) + as = session_find(newname); + else + as = item->target.s; + if (as != NULL) { + retval = cmd_attach_session(item, as->name, + args_has(args, 'D'), args_has(args, 'X'), 0, NULL, + args_has(args, 'E')); + free(newname); + return (retval); } } + if (newname != NULL && session_find(newname) != NULL) { + cmdq_error(item, "duplicate session: %s", newname); + goto fail; + } /* Is this going to be part of a session group? */ group = args_get(args, 't'); diff --git a/input.c b/input.c index ee12301cca..cec46a9963 100644 --- a/input.c +++ b/input.c @@ -876,7 +876,7 @@ input_set_state(struct window_pane *wp, const struct input_transition *itr) void input_parse(struct window_pane *wp) { - struct evbuffer *evb = wp->event->input; + struct evbuffer *evb = wp->event->input; input_parse_buffer(wp, EVBUFFER_DATA(evb), EVBUFFER_LENGTH(evb)); evbuffer_drain(evb, EVBUFFER_LENGTH(evb)); From 16b77194182569cad8f34a4cf1fa494409900236 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Nov 2019 15:37:19 +0000 Subject: [PATCH 803/836] Fix parsing of DA with only one argument in the response and add 65 for VT520. --- cmd-kill-pane.c | 2 +- tmux.h | 10 +++++++++- tty-keys.c | 7 ++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cmd-kill-pane.c b/cmd-kill-pane.c index 01b1f51883..f0aacb2a62 100644 --- a/cmd-kill-pane.c +++ b/cmd-kill-pane.c @@ -37,7 +37,7 @@ const struct cmd_entry cmd_kill_pane_entry = { .target = { 't', CMD_FIND_PANE, 0 }, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_kill_pane_exec }; diff --git a/tmux.h b/tmux.h index a68c7cbfdd..894a9820a0 100644 --- a/tmux.h +++ b/tmux.h @@ -1202,6 +1202,7 @@ struct tty { TTY_VT220, TTY_VT320, TTY_VT420, + TTY_VT520, TTY_UNKNOWN } term_type; @@ -1218,7 +1219,14 @@ struct tty { struct tty_key *key_tree; }; #define TTY_TYPES \ - { "VT100", "VT101", "VT102", "VT220", "VT320", "VT420", "Unknown" } + { "VT100", \ + "VT101", \ + "VT102", \ + "VT220", \ + "VT320", \ + "VT420", \ + "VT520", \ + "Unknown" } /* TTY command context. */ struct tty_ctx { diff --git a/tty-keys.c b/tty-keys.c index f70b2c8dd4..66f0201a38 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -1040,7 +1040,9 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, b = strtoul(endptr + 1, &endptr, 10); if (*endptr != '\0' && *endptr != ';') b = 0; - } else + } else if (*endptr == '\0') + b = 0; + else a = b = 0; /* Store terminal type. */ @@ -1064,6 +1066,9 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, case 64: type = TTY_VT420; break; + case 65: + type = TTY_VT520; + break; } tty_set_type(tty, type); From 1f966c495ca021858fdba00f6619d024ecbc41d4 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 14 Nov 2019 16:23:23 +0000 Subject: [PATCH 804/836] Change window-size default from smallest to latest. --- options-table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options-table.c b/options-table.c index cbe5197d1f..6e2db178b0 100644 --- a/options-table.c +++ b/options-table.c @@ -730,7 +730,7 @@ const struct options_table_entry options_table[] = { .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_WINDOW, .choices = options_table_window_size_list, - .default_num = WINDOW_SIZE_SMALLEST + .default_num = WINDOW_SIZE_LATEST }, { .name = "window-style", From f3dc38dcae472286c7d7c2708e4dbfe70a6c2d57 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Nov 2019 11:16:53 +0000 Subject: [PATCH 805/836] Handle OSC 7 (a VTE extension) and put the result in a new format (pane_path). --- format.c | 1 + input.c | 7 +++++++ screen.c | 8 ++++++++ tmux.1 | 9 +++++---- tmux.h | 2 ++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/format.c b/format.c index 7d8700a6f2..5804692eae 100644 --- a/format.c +++ b/format.c @@ -2267,6 +2267,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_width", "%u", wp->sx); format_add(ft, "pane_height", "%u", wp->sy); format_add(ft, "pane_title", "%s", wp->base.title); + format_add(ft, "pane_path", "%s", wp->base.path); format_add(ft, "pane_id", "%%%u", wp->id); format_add(ft, "pane_active", "%d", wp == w->active); format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); diff --git a/input.c b/input.c index cec46a9963..d2c1b8a6f0 100644 --- a/input.c +++ b/input.c @@ -132,6 +132,7 @@ static void input_set_state(struct window_pane *, static void input_reset_cell(struct input_ctx *); static void input_osc_4(struct input_ctx *, const char *); +static void input_osc_7(struct input_ctx *, const char *); static void input_osc_10(struct input_ctx *, const char *); static void input_osc_11(struct input_ctx *, const char *); static void input_osc_52(struct input_ctx *, const char *); @@ -2211,6 +2212,12 @@ input_exit_osc(struct input_ctx *ictx) case 4: input_osc_4(ictx, p); break; + case 7: + if (utf8_isvalid(p)) { + screen_set_path(sctx->s, p); + server_status_window(ictx->wp->window); + } + break; case 10: input_osc_10(ictx, p); break; diff --git a/screen.c b/screen.c index d24f4ba41e..9db0f60972 100644 --- a/screen.c +++ b/screen.c @@ -159,6 +159,14 @@ screen_set_title(struct screen *s, const char *title) utf8_stravis(&s->title, title, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); } +/* Set screen path. */ +void +screen_set_path(struct screen *s, const char *path) +{ + free(s->path); + utf8_stravis(&s->path, path, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); +} + /* Push the current title onto the stack. */ void screen_push_title(struct screen *s) diff --git a/tmux.1 b/tmux.1 index 3fb01ee4f8..e617ec6178 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4267,7 +4267,7 @@ The following variables are available, where appropriate: .It Li "pane_current_command" Ta "" Ta "Current command if available" .It Li "pane_dead" Ta "" Ta "1 if pane is dead" .It Li "pane_dead_status" Ta "" Ta "Exit status of process in dead pane" -.It Li "pane_format" Ta "" Ta "1 if format is for a pane (not assuming the current)" +.It Li "pane_format" Ta "" Ta "1 if format is for a pane" .It Li "pane_height" Ta "" Ta "Height of pane" .It Li "pane_id" Ta "#D" Ta "Unique pane ID" .It Li "pane_in_mode" Ta "" Ta "1 if pane is in a mode" @@ -4277,6 +4277,7 @@ The following variables are available, where appropriate: .It Li "pane_marked" Ta "" Ta "1 if this is the marked pane" .It Li "pane_marked_set" Ta "" Ta "1 if a marked pane is set" .It Li "pane_mode" Ta "" Ta "Name of pane mode, if any" +.It Li "pane_path" Ta "#T" Ta "Path of pane (can be set by application)" .It Li "pane_pid" Ta "" Ta "PID of first process in pane" .It Li "pane_pipe" Ta "" Ta "1 if pane is being piped" .It Li "pane_right" Ta "" Ta "Right of pane" @@ -4284,7 +4285,7 @@ The following variables are available, where appropriate: .It Li "pane_start_command" Ta "" Ta "Command pane started with" .It Li "pane_synchronized" Ta "" Ta "1 if pane is synchronized" .It Li "pane_tabs" Ta "" Ta "Pane tab positions" -.It Li "pane_title" Ta "#T" Ta "Title of pane" +.It Li "pane_title" Ta "#T" Ta "Title of pane (can be set by application)" .It Li "pane_top" Ta "" Ta "Top of pane" .It Li "pane_tty" Ta "" Ta "Pseudo terminal of pane" .It Li "pane_width" Ta "" Ta "Width of pane" @@ -4302,7 +4303,7 @@ The following variables are available, where appropriate: .It Li "session_alerts" Ta "" Ta "List of window indexes with alerts" .It Li "session_attached" Ta "" Ta "Number of clients session is attached to" .It Li "session_created" Ta "" Ta "Time session created" -.It Li "session_format" Ta "" Ta "1 if format is for a session (not assuming the current)" +.It Li "session_format" Ta "" Ta "1 if format is for a session" .It Li "session_group" Ta "" Ta "Name of session group" .It Li "session_group_list" Ta "" Ta "List of sessions in group" .It Li "session_group_size" Ta "" Ta "Size of session group" @@ -4322,7 +4323,7 @@ The following variables are available, where appropriate: .It Li "window_bigger" Ta "" Ta "1 if window is larger than client" .It Li "window_end_flag" Ta "" Ta "1 if window has the highest index" .It Li "window_flags" Ta "#F" Ta "Window flags" -.It Li "window_format" Ta "" Ta "1 if format is for a window (not assuming the current)" +.It Li "window_format" Ta "" Ta "1 if format is for a window" .It Li "window_height" Ta "" Ta "Height of window" .It Li "window_id" Ta "" Ta "Unique window ID" .It Li "window_index" Ta "#I" Ta "Index of window" diff --git a/tmux.h b/tmux.h index 894a9820a0..ac57dbf3f7 100644 --- a/tmux.h +++ b/tmux.h @@ -706,6 +706,7 @@ struct screen_sel; struct screen_titles; struct screen { char *title; + char *path; struct screen_titles *titles; struct grid *grid; /* grid data */ @@ -2359,6 +2360,7 @@ void screen_reset_tabs(struct screen *); void screen_set_cursor_style(struct screen *, u_int); void screen_set_cursor_colour(struct screen *, const char *); void screen_set_title(struct screen *, const char *); +void screen_set_path(struct screen *, const char *); void screen_push_title(struct screen *); void screen_pop_title(struct screen *); void screen_resize(struct screen *, u_int, u_int, int); From 5dfe9db78820aedd5d4dfe60728e871f935bff36 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 15 Nov 2019 11:21:32 +0000 Subject: [PATCH 806/836] Do not add path if it is NULL, duh. --- format.c | 3 ++- input.c | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 5804692eae..71d4e11628 100644 --- a/format.c +++ b/format.c @@ -2267,7 +2267,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_width", "%u", wp->sx); format_add(ft, "pane_height", "%u", wp->sy); format_add(ft, "pane_title", "%s", wp->base.title); - format_add(ft, "pane_path", "%s", wp->base.path); + if (wp->base.path != NULL) + format_add(ft, "pane_path", "%s", wp->base.path); format_add(ft, "pane_id", "%%%u", wp->id); format_add(ft, "pane_active", "%d", wp == w->active); format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); diff --git a/input.c b/input.c index d2c1b8a6f0..96fd5d3334 100644 --- a/input.c +++ b/input.c @@ -132,7 +132,6 @@ static void input_set_state(struct window_pane *, static void input_reset_cell(struct input_ctx *); static void input_osc_4(struct input_ctx *, const char *); -static void input_osc_7(struct input_ctx *, const char *); static void input_osc_10(struct input_ctx *, const char *); static void input_osc_11(struct input_ctx *, const char *); static void input_osc_52(struct input_ctx *, const char *); From 4bc445f080ff53268ff1af26564d19c35c17e980 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Nov 2019 09:42:09 +0000 Subject: [PATCH 807/836] Keep modifiers on backspace when translating it. --- input-keys.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/input-keys.c b/input-keys.c index 1325e813f4..01f9ad9d08 100644 --- a/input-keys.c +++ b/input-keys.c @@ -157,7 +157,7 @@ input_key(struct window_pane *wp, key_code key, struct mouse_event *m) u_int i; size_t dlen; char *out; - key_code justkey; + key_code justkey, newkey; struct utf8_data ud; log_debug("writing key 0x%llx (%s) to %%%u", key, @@ -179,9 +179,10 @@ input_key(struct window_pane *wp, key_code key, struct mouse_event *m) /* Is this backspace? */ if ((key & KEYC_MASK_KEY) == KEYC_BSPACE) { - key = options_get_number(global_options, "backspace"); - if (key >= 0x7f) - key = '\177'; + newkey = options_get_number(global_options, "backspace"); + if (newkey >= 0x7f) + newkey = '\177'; + key = newkey|(key & KEYC_MASK_MOD); } /* From 350a43493952e1f10173b4e341ff1fbd8ed8440d Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 18 Nov 2019 09:43:31 +0000 Subject: [PATCH 808/836] Add -f for full size to join-pane (like split-window), from Theo Buehler. --- cmd-join-pane.c | 13 ++++++++----- tmux.1 | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cmd-join-pane.c b/cmd-join-pane.c index b6eff0fe3e..5344f3eccc 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -36,8 +36,8 @@ const struct cmd_entry cmd_join_pane_entry = { .name = "join-pane", .alias = "joinp", - .args = { "bdhvp:l:s:t:", 0, 0 }, - .usage = "[-bdhv] [-l size] " CMD_SRCDST_PANE_USAGE, + .args = { "bdfhvp:l:s:t:", 0, 0 }, + .usage = "[-bdfhv] [-l size] " CMD_SRCDST_PANE_USAGE, .source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED }, .target = { 't', CMD_FIND_PANE, 0 }, @@ -143,10 +143,13 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) else size = (dst_wp->sx * percentage) / 100; } + + flags = 0; if (args_has(args, 'b')) - flags = SPAWN_BEFORE; - else - flags = 0; + flags |= SPAWN_BEFORE; + if (args_has(args, 'f')) + flags |= SPAWN_FULLSIZE; + lc = layout_split_pane(dst_wp, type, size, flags); if (lc == NULL) { cmdq_error(item, "create pane failed: pane too small"); diff --git a/tmux.1 b/tmux.1 index e617ec6178..3649e0f650 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1890,7 +1890,7 @@ zooms the pane. .Pp This command works only if at least one client is attached. .It Xo Ic join-pane -.Op Fl bdhv +.Op Fl bdfhv .Op Fl l Ar size .Op Fl s Ar src-pane .Op Fl t Ar dst-pane From 0ed96c4609f887b37ee0ee4a017c24c361452320 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 18 Nov 2019 12:56:10 +0000 Subject: [PATCH 809/836] Update CHANGES. --- CHANGES | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/CHANGES b/CHANGES index 6b0efbd411..2b6ddb7fde 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,49 @@ CHANGES FROM 3.0 to X.X +* Do not use bright when emulating 256 colours on an 8 colour terminal because + it is also bold on some terminals. + +* Add a "latest" window-size option which tries to size windows based on the + most recently used client. This is now the default. + +* Make select-pane -P set window-active-style also to match previous behaviour. + +* Do not truncate list-keys output. + +* Workaround invalid layout strings generated by older tmux versions and add + some additional sanity checks + +* Turn automatic-rename back on if the \033k rename escape sequence is used + with an empty name. + +* Add support for percentage sizes for resize-pane ("-x 10%"). Also change + split-window and join-pane -l to accept similar percentages and deprecate the + -p flag. + +* Add -F flag to send-keys to expand formats in search-backward and forward + copy mode commands, this makes it easier to use the cursor_word and + cursor_line formats. + +* Add formats for word and line at cursor position in copy mode. + +* Add formats for cursor and selection position in copy mode + +* Support all the forms of RGB colour strings in OSC sequences rather than + requiring two digits. + +* Limit lazy resize to panes in attached sessions only + +* Add an option to set the key sent by backspace for those whose system uses ^H + rather than ^? + +* Change new-session -A without a session name (that is, no -s option also) to + attach to the best existing session like attach-session rather than a new + one. + +* Change window-size default from smallest to latest. + +* Add simple support for OSC 7 (result is available in the pane_path format). + * Add push-default and pop-default for styles which change the colours and attributes used for #[default]. These are used in status-format to restore the behaviour of window-status-style being the default for From 3c312a915094fe566c323aee35387d144cdeb6b2 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 20 Nov 2019 11:42:51 +0000 Subject: [PATCH 810/836] Do not check the client readonly flag when there is no client, GitHub issue 1980. --- key-bindings.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/key-bindings.c b/key-bindings.c index c90924a5a1..a2534b440d 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -508,12 +508,16 @@ key_bindings_dispatch(struct key_binding *bd, struct cmdq_item *item, struct cmdq_item *new_item; int readonly; - readonly = 1; - TAILQ_FOREACH(cmd, &bd->cmdlist->list, qentry) { - if (!(cmd->entry->flags & CMD_READONLY)) - readonly = 0; + if (c == NULL || (~c->flags & CLIENT_READONLY)) + readonly = 1; + else { + readonly = 1; + TAILQ_FOREACH(cmd, &bd->cmdlist->list, qentry) { + if (~cmd->entry->flags & CMD_READONLY) + readonly = 0; + } } - if (!readonly && (c->flags & CLIENT_READONLY)) + if (!readonly) new_item = cmdq_get_callback(key_bindings_read_only, NULL); else { new_item = cmdq_get_command(bd->cmdlist, fs, m, 0); From 20c1f1aec6f29a87d738897f80242c6dff4c808b Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 24 Nov 2019 18:37:23 +0000 Subject: [PATCH 811/836] Only substitute patterns starting with ^ once. --- regsub.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/regsub.c b/regsub.c index 89355befe0..199b217148 100644 --- a/regsub.c +++ b/regsub.c @@ -107,6 +107,12 @@ regsub(const char *pattern, const char *with, const char *text, int flags) start = m[0].rm_eo + 1; empty = 1; } + + /* Stop now if anchored to start. */ + if (*pattern == '^') { + regsub_copy(&buf, &len, text, start, end); + break; + } } buf[len] = '\0'; From 5d0504ee115a7edd4fe53476a2721c180b0cbc26 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Nov 2019 15:02:48 +0000 Subject: [PATCH 812/836] Allow multiple substitutions in a single format. --- format.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/format.c b/format.c index 71d4e11628..4a37728705 100644 --- a/format.c +++ b/format.c @@ -1560,15 +1560,15 @@ static int format_replace(struct format_tree *ft, const char *key, size_t keylen, char **buf, size_t *len, size_t *off) { - struct window_pane *wp = ft->wp; - const char *errptr, *copy, *cp, *marker = NULL; - char *copy0, *condition, *found, *new; - char *value, *left, *right; - size_t valuelen; - int modifiers = 0, limit = 0, j; - struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; - struct format_modifier *sub = NULL; - u_int i, count; + struct window_pane *wp = ft->wp; + const char *errptr, *copy, *cp, *marker = NULL; + char *copy0, *condition, *found, *new; + char *value, *left, *right; + size_t valuelen; + int modifiers = 0, limit = 0, j; + struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; + struct format_modifier **sub = NULL; + u_int i, count, nsub = 0; /* Make a copy of the key. */ copy = copy0 = xstrndup(key, keylen); @@ -1597,7 +1597,9 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, case 's': if (fm->argc < 2) break; - sub = fm; + sub = xreallocarray (sub, nsub + 1, + sizeof *sub); + sub[nsub++] = fm; break; case '=': if (fm->argc < 1) @@ -1809,10 +1811,10 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, } /* Perform substitution if any. */ - if (sub != NULL) { - left = format_expand(ft, sub->argv[0]); - right = format_expand(ft, sub->argv[1]); - new = format_sub(sub, value, left, right); + for (i = 0; i < nsub; i++) { + left = format_expand(ft, sub[i]->argv[0]); + right = format_expand(ft, sub[i]->argv[1]); + new = format_sub(sub[i], value, left, right); format_log(ft, "substitute '%s' to '%s': %s", left, right, new); free(value); value = new; @@ -1855,12 +1857,15 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, format_log(ft, "replaced '%s' with '%s'", copy0, value); free(value); + free(sub); format_free_modifiers(list, count); free(copy0); return (0); fail: format_log(ft, "failed %s", copy0); + + free(sub); format_free_modifiers(list, count); free(copy0); return (-1); From 1ebd8c123415a60960dcd088d75d13f761bd3b3b Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Nov 2019 15:04:15 +0000 Subject: [PATCH 813/836] Add p format modifier for padding to width. --- format.c | 25 +++++++++++++++++++++++-- tmux.1 | 6 ++++++ tmux.h | 1 + utf8.c | 23 ++++++++++++++++++++++- 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/format.c b/format.c index 4a37728705..ffa9b8d576 100644 --- a/format.c +++ b/format.c @@ -1299,7 +1299,7 @@ format_build_modifiers(struct format_tree *ft, const char **s, u_int *count) } /* Now try single character with arguments. */ - if (strchr("mCs=", cp[0]) == NULL) + if (strchr("mCs=p", cp[0]) == NULL) break; c = cp[0]; @@ -1565,7 +1565,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, char *copy0, *condition, *found, *new; char *value, *left, *right; size_t valuelen; - int modifiers = 0, limit = 0, j; + int modifiers = 0, limit = 0, width = 0, j; struct format_modifier *list, *fm, *cmp = NULL, *search = NULL; struct format_modifier **sub = NULL; u_int i, count, nsub = 0; @@ -1611,6 +1611,14 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, if (fm->argc >= 2 && fm->argv[1] != NULL) marker = fm->argv[1]; break; + case 'p': + if (fm->argc < 1) + break; + width = strtonum(fm->argv[0], INT_MIN, INT_MAX, + &errptr); + if (errptr != NULL) + width = 0; + break; case 'l': modifiers |= FORMAT_LITERAL; break; @@ -1845,6 +1853,19 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen, format_log(ft, "applied length limit %d: %s", limit, value); } + /* Pad the value if needed. */ + if (width > 0) { + new = utf8_padcstr(value, width); + free(value); + value = new; + format_log(ft, "applied padding width %d: %s", width, value); + } else if (width < 0) { + new = utf8_rpadcstr(value, -width); + free(value); + value = new; + format_log(ft, "applied padding width %d: %s", width, value); + } + /* Expand the buffer and copy in the value. */ valuelen = strlen(value); while (*len - *off < valuelen + 1) { diff --git a/tmux.1 b/tmux.1 index 3649e0f650..6cf8df2477 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4101,6 +4101,12 @@ appended or prepended to the string if the length has been trimmed, for example will append .Ql ... if the pane title is more than five characters. +Similarly, +.Ql p +pads the string to a given width, for example +.Ql #{p10:pane_title} +will result in a width of at least 10 characters. +A positive width pads on the left, a negative on the right. .Pp Prefixing a time variable with .Ql t:\& diff --git a/tmux.h b/tmux.h index ac57dbf3f7..5b6a1716e3 100644 --- a/tmux.h +++ b/tmux.h @@ -2638,6 +2638,7 @@ struct utf8_data *utf8_fromcstr(const char *); char *utf8_tocstr(struct utf8_data *); u_int utf8_cstrwidth(const char *); char *utf8_padcstr(const char *, u_int); +char *utf8_rpadcstr(const char *, u_int); int utf8_cstrhas(const char *, const struct utf8_data *); /* procname.c */ diff --git a/utf8.c b/utf8.c index aa840b13b8..3f378fb38a 100644 --- a/utf8.c +++ b/utf8.c @@ -390,7 +390,7 @@ utf8_cstrwidth(const char *s) return (width); } -/* Pad UTF-8 string to width. Caller frees. */ +/* Pad UTF-8 string to width on the left. Caller frees. */ char * utf8_padcstr(const char *s, u_int width) { @@ -411,6 +411,27 @@ utf8_padcstr(const char *s, u_int width) return (out); } +/* Pad UTF-8 string to width on the right. Caller frees. */ +char * +utf8_rpadcstr(const char *s, u_int width) +{ + size_t slen; + char *out; + u_int n, i; + + n = utf8_cstrwidth(s); + if (n >= width) + return (xstrdup(s)); + + slen = strlen(s); + out = xmalloc(slen + 1 + (width - n)); + for (i = 0; i < width - n; i++) + out[i] = ' '; + memcpy(out + i, s, slen); + out[i + slen] = '\0'; + return (out); +} + int utf8_cstrhas(const char *s, const struct utf8_data *ud) { From c2fde58701d3d0a55ba15ba6004df7ca009175b9 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Nov 2019 20:42:18 +0000 Subject: [PATCH 814/836] Do not clear search marks on cursor movement with vi(1) keys, from Eric Pruitt in GitHub issue 1985. --- window-copy.c | 139 +++++++++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 65 deletions(-) diff --git a/window-copy.c b/window-copy.c index 01dc1f8578..e3191983f0 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1837,133 +1837,134 @@ static const struct { const char *command; int minargs; int maxargs; + int ismotion; enum window_copy_cmd_action (*f)(struct window_copy_cmd_state *); } window_copy_cmd_table[] = { - { "append-selection", 0, 0, + { "append-selection", 0, 0, 0, window_copy_cmd_append_selection }, - { "append-selection-and-cancel", 0, 0, + { "append-selection-and-cancel", 0, 0, 0, window_copy_cmd_append_selection_and_cancel }, - { "back-to-indentation", 0, 0, + { "back-to-indentation", 0, 0, 0, window_copy_cmd_back_to_indentation }, - { "begin-selection", 0, 0, + { "begin-selection", 0, 0, 0, window_copy_cmd_begin_selection }, - { "bottom-line", 0, 0, + { "bottom-line", 0, 0, 1, window_copy_cmd_bottom_line }, - { "cancel", 0, 0, + { "cancel", 0, 0, 0, window_copy_cmd_cancel }, - { "clear-selection", 0, 0, + { "clear-selection", 0, 0, 0, window_copy_cmd_clear_selection }, - { "copy-end-of-line", 0, 1, + { "copy-end-of-line", 0, 1, 0, window_copy_cmd_copy_end_of_line }, - { "copy-line", 0, 1, + { "copy-line", 0, 1, 0, window_copy_cmd_copy_line }, - { "copy-pipe-no-clear", 1, 2, + { "copy-pipe-no-clear", 1, 2, 0, window_copy_cmd_copy_pipe_no_clear }, - { "copy-pipe", 1, 2, + { "copy-pipe", 1, 2, 0, window_copy_cmd_copy_pipe }, - { "copy-pipe-and-cancel", 1, 2, + { "copy-pipe-and-cancel", 1, 2, 0, window_copy_cmd_copy_pipe_and_cancel }, - { "copy-selection-no-clear", 0, 1, + { "copy-selection-no-clear", 0, 1, 0, window_copy_cmd_copy_selection_no_clear }, - { "copy-selection", 0, 1, + { "copy-selection", 0, 1, 0, window_copy_cmd_copy_selection }, - { "copy-selection-and-cancel", 0, 1, + { "copy-selection-and-cancel", 0, 1, 0, window_copy_cmd_copy_selection_and_cancel }, - { "cursor-down", 0, 0, + { "cursor-down", 0, 0, 1, window_copy_cmd_cursor_down }, - { "cursor-down-and-cancel", 0, 0, + { "cursor-down-and-cancel", 0, 0, 0, window_copy_cmd_cursor_down_and_cancel }, - { "cursor-left", 0, 0, + { "cursor-left", 0, 0, 1, window_copy_cmd_cursor_left }, - { "cursor-right", 0, 0, + { "cursor-right", 0, 0, 1, window_copy_cmd_cursor_right }, - { "cursor-up", 0, 0, + { "cursor-up", 0, 0, 1, window_copy_cmd_cursor_up }, - { "end-of-line", 0, 0, + { "end-of-line", 0, 0, 1, window_copy_cmd_end_of_line }, - { "goto-line", 1, 1, + { "goto-line", 1, 1, 1, window_copy_cmd_goto_line }, - { "halfpage-down", 0, 0, + { "halfpage-down", 0, 0, 1, window_copy_cmd_halfpage_down }, - { "halfpage-down-and-cancel", 0, 0, + { "halfpage-down-and-cancel", 0, 0, 0, window_copy_cmd_halfpage_down_and_cancel }, - { "halfpage-up", 0, 0, + { "halfpage-up", 0, 0, 1, window_copy_cmd_halfpage_up }, - { "history-bottom", 0, 0, + { "history-bottom", 0, 0, 1, window_copy_cmd_history_bottom }, - { "history-top", 0, 0, + { "history-top", 0, 0, 1, window_copy_cmd_history_top }, - { "jump-again", 0, 0, + { "jump-again", 0, 0, 1, window_copy_cmd_jump_again }, - { "jump-backward", 1, 1, + { "jump-backward", 1, 1, 1, window_copy_cmd_jump_backward }, - { "jump-forward", 1, 1, + { "jump-forward", 1, 1, 1, window_copy_cmd_jump_forward }, - { "jump-reverse", 0, 0, + { "jump-reverse", 0, 0, 1, window_copy_cmd_jump_reverse }, - { "jump-to-backward", 1, 1, + { "jump-to-backward", 1, 1, 1, window_copy_cmd_jump_to_backward }, - { "jump-to-forward", 1, 1, + { "jump-to-forward", 1, 1, 1, window_copy_cmd_jump_to_forward }, - { "middle-line", 0, 0, + { "middle-line", 0, 0, 1, window_copy_cmd_middle_line }, - { "next-matching-bracket", 0, 0, + { "next-matching-bracket", 0, 0, 0, window_copy_cmd_next_matching_bracket }, - { "next-paragraph", 0, 0, + { "next-paragraph", 0, 0, 1, window_copy_cmd_next_paragraph }, - { "next-space", 0, 0, + { "next-space", 0, 0, 1, window_copy_cmd_next_space }, - { "next-space-end", 0, 0, + { "next-space-end", 0, 0, 1, window_copy_cmd_next_space_end }, - { "next-word", 0, 0, + { "next-word", 0, 0, 1, window_copy_cmd_next_word }, - { "next-word-end", 0, 0, + { "next-word-end", 0, 0, 1, window_copy_cmd_next_word_end }, - { "other-end", 0, 0, + { "other-end", 0, 0, 1, window_copy_cmd_other_end }, - { "page-down", 0, 0, + { "page-down", 0, 0, 1, window_copy_cmd_page_down }, - { "page-down-and-cancel", 0, 0, + { "page-down-and-cancel", 0, 0, 0, window_copy_cmd_page_down_and_cancel }, - { "page-up", 0, 0, + { "page-up", 0, 0, 1, window_copy_cmd_page_up }, - { "previous-matching-bracket", 0, 0, + { "previous-matching-bracket", 0, 0, 0, window_copy_cmd_previous_matching_bracket }, - { "previous-paragraph", 0, 0, + { "previous-paragraph", 0, 0, 1, window_copy_cmd_previous_paragraph }, - { "previous-space", 0, 0, + { "previous-space", 0, 0, 1, window_copy_cmd_previous_space }, - { "previous-word", 0, 0, + { "previous-word", 0, 0, 1, window_copy_cmd_previous_word }, - { "rectangle-toggle", 0, 0, + { "rectangle-toggle", 0, 0, 0, window_copy_cmd_rectangle_toggle }, - { "scroll-down", 0, 0, + { "scroll-down", 0, 0, 1, window_copy_cmd_scroll_down }, - { "scroll-down-and-cancel", 0, 0, + { "scroll-down-and-cancel", 0, 0, 0, window_copy_cmd_scroll_down_and_cancel }, - { "scroll-up", 0, 0, + { "scroll-up", 0, 0, 1, window_copy_cmd_scroll_up }, - { "search-again", 0, 0, + { "search-again", 0, 0, 0, window_copy_cmd_search_again }, - { "search-backward", 0, 1, + { "search-backward", 0, 1, 0, window_copy_cmd_search_backward }, - { "search-backward-incremental", 1, 1, + { "search-backward-incremental", 1, 1, 0, window_copy_cmd_search_backward_incremental }, - { "search-forward", 0, 1, + { "search-forward", 0, 1, 0, window_copy_cmd_search_forward }, - { "search-forward-incremental", 1, 1, + { "search-forward-incremental", 1, 1, 0, window_copy_cmd_search_forward_incremental }, - { "search-reverse", 0, 0, + { "search-reverse", 0, 0, 0, window_copy_cmd_search_reverse }, - { "select-line", 0, 0, + { "select-line", 0, 0, 0, window_copy_cmd_select_line }, - { "select-word", 0, 0, + { "select-word", 0, 0, 0, window_copy_cmd_select_word }, - { "start-of-line", 0, 0, + { "start-of-line", 0, 0, 1, window_copy_cmd_start_of_line }, - { "stop-selection", 0, 0, + { "stop-selection", 0, 0, 0, window_copy_cmd_stop_selection }, - { "top-line", 0, 0, + { "top-line", 0, 0, 1, 1, window_copy_cmd_top_line }, }; @@ -1977,6 +1978,7 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, enum window_copy_cmd_action action; const char *command; u_int i; + int ismotion, keys; if (args->argc == 0) return; @@ -1999,16 +2001,23 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, if (args->argc - 1 < window_copy_cmd_table[i].minargs || args->argc - 1 > window_copy_cmd_table[i].maxargs) break; + ismotion = window_copy_cmd_table[i].ismotion; action = window_copy_cmd_table[i].f (&cs); break; } } if (strncmp(command, "search-", 7) != 0 && data->searchmark != NULL) { - window_copy_clear_marks(wme); + keys = options_get_number(wme->wp->window->options, "mode-keys"); + if (keys != MODEKEY_VI || !ismotion) { + window_copy_clear_marks(wme); + data->searchx = data->searchy = -1; + } else if (data->searchthis != -1) { + data->searchthis = -1; + action = WINDOW_COPY_CMD_REDRAW; + } if (action == WINDOW_COPY_CMD_NOTHING) action = WINDOW_COPY_CMD_REDRAW; - data->searchx = data->searchy = -1; } wme->prefix = 1; From 87a11a921455538ba4594e0852439f84e7b84a4c Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Nov 2019 20:43:32 +0000 Subject: [PATCH 815/836] Fix a warning in previous. --- window-copy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index e3191983f0..8b03cfcf24 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1964,7 +1964,7 @@ static const struct { window_copy_cmd_start_of_line }, { "stop-selection", 0, 0, 0, window_copy_cmd_stop_selection }, - { "top-line", 0, 0, 1, 1, + { "top-line", 0, 0, 1, window_copy_cmd_top_line }, }; From 58f870ef6ec4b9dfb5646cf4eafabaac6ea125bc Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 25 Nov 2019 22:38:36 +0000 Subject: [PATCH 816/836] Don't use motion flag uninitialized. --- window-copy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index 8b03cfcf24..16708d046d 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1978,7 +1978,7 @@ window_copy_command(struct window_mode_entry *wme, struct client *c, enum window_copy_cmd_action action; const char *command; u_int i; - int ismotion, keys; + int ismotion = 0, keys; if (args->argc == 0) return; From c16faa4fedd510ccd10ddceb0ea76cd1e1a792a3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 26 Nov 2019 14:12:05 +0000 Subject: [PATCH 817/836] Fixes to CHANGES. --- CHANGES | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 2b6ddb7fde..7b352f56ca 100644 --- a/CHANGES +++ b/CHANGES @@ -10,9 +10,6 @@ CHANGES FROM 3.0 to X.X * Do not truncate list-keys output. -* Workaround invalid layout strings generated by older tmux versions and add - some additional sanity checks - * Turn automatic-rename back on if the \033k rename escape sequence is used with an empty name. @@ -34,7 +31,7 @@ CHANGES FROM 3.0 to X.X * Limit lazy resize to panes in attached sessions only * Add an option to set the key sent by backspace for those whose system uses ^H - rather than ^? + rather than ^?. * Change new-session -A without a session name (that is, no -s option also) to attach to the best existing session like attach-session rather than a new @@ -64,6 +61,9 @@ CHANGES FROM 3.0 to X.X CHANGES FROM 2.9 to 3.0 +* Workaround invalid layout strings generated by older tmux versions and add + some additional sanity checks + * xterm 348 now disables margins when resized, so send DECLRMM again after resize. From fef8ee23c05eb8023931a35584acdfa0c756208c Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 26 Nov 2019 15:35:56 +0000 Subject: [PATCH 818/836] Add default # and * binding with vi(1) keys. --- key-bindings.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/key-bindings.c b/key-bindings.c index a2534b440d..175af8f4b4 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -402,6 +402,8 @@ key_bindings_init(void) "bind -Tcopy-mode C-Up send -X scroll-up", "bind -Tcopy-mode C-Down send -X scroll-down", + "bind -Tcopy-mode-vi '#' send -FX search-backward '#{copy_cursor_word}'", + "bind -Tcopy-mode-vi * send -FX search-forward '#{copy_cursor_word}'", "bind -Tcopy-mode-vi C-c send -X cancel", "bind -Tcopy-mode-vi C-d send -X halfpage-down", "bind -Tcopy-mode-vi C-e send -X scroll-down", From eb4d60b1ce0e2dc917bd47b10a3ce89de840448a Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 27 Nov 2019 20:54:30 +0000 Subject: [PATCH 819/836] REG_STARTEND is not portable, but it turns out we don't actually need it. From Evan Green, GitHub issue 1982. --- regsub.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/regsub.c b/regsub.c index 199b217148..22e236dc79 100644 --- a/regsub.c +++ b/regsub.c @@ -77,10 +77,7 @@ regsub(const char *pattern, const char *with, const char *text, int flags) end = strlen(text); while (start <= end) { - m[0].rm_so = start; - m[0].rm_eo = end; - - if (regexec(&r, text, nitems(m), m, REG_STARTEND) != 0) { + if (regexec(&r, text + start, nitems(m), m, 0) != 0) { regsub_copy(&buf, &len, text, start, end); break; } @@ -89,22 +86,25 @@ regsub(const char *pattern, const char *with, const char *text, int flags) * Append any text not part of this match (from the end of the * last match). */ - regsub_copy(&buf, &len, text, last, m[0].rm_so); + regsub_copy(&buf, &len, text, last, m[0].rm_so + start); /* * If the last match was empty and this one isn't (it is either * later or has matched text), expand this match. If it is * empty, move on one character and try again from there. */ - if (empty || m[0].rm_so != last || m[0].rm_so != m[0].rm_eo) { - regsub_expand(&buf, &len, with, text, m, nitems(m)); - - last = m[0].rm_eo; - start = m[0].rm_eo; + if (empty || + start + m[0].rm_so != last || + m[0].rm_so != m[0].rm_eo) { + regsub_expand(&buf, &len, with, text + start, m, + nitems(m)); + + last = start + m[0].rm_eo; + start += m[0].rm_eo; empty = 0; } else { - last = m[0].rm_eo; - start = m[0].rm_eo + 1; + last = start + m[0].rm_eo; + start += m[0].rm_eo + 1; empty = 1; } From 7fb8eec8f13bf54b3a6c06763d2cf0b29df51281 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 08:38:04 +0000 Subject: [PATCH 820/836] status-left and status-right need push-default also, reported by Eric Pruitt in GitHub issue 1989. --- options-table.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/options-table.c b/options-table.c index 6e2db178b0..1d22b662fa 100644 --- a/options-table.c +++ b/options-table.c @@ -70,7 +70,10 @@ static const char *options_table_window_size_list[] = { /* Status line format. */ #define OPTIONS_TABLE_STATUS_FORMAT1 \ "#[align=left range=left #{status-left-style}]" \ - "#{T;=/#{status-left-length}:status-left}#[norange default]" \ + "#[push-default]" \ + "#{T;=/#{status-left-length}:status-left}" \ + "#[pop-default]" \ + "#[norange default]" \ "#[list=on align=#{status-justify}]" \ "#[list=left-marker]<#[list=right-marker]>#[list=on]" \ "#{W:" \ @@ -126,7 +129,10 @@ static const char *options_table_window_size_list[] = { "#{?window_end_flag,,#{window-status-separator}}" \ "}" \ "#[nolist align=right range=right #{status-right-style}]" \ - "#{T;=/#{status-right-length}:status-right}#[norange default]" + "#[push-default]" \ + "#{T;=/#{status-right-length}:status-right}" \ + "#[pop-default]" \ + "#[norange default]" #define OPTIONS_TABLE_STATUS_FORMAT2 \ "#[align=centre]#{P:#{?pane_active,#[reverse],}" \ "#{pane_index}[#{pane_width}x#{pane_height}]#[default] }" From 067604bf8cb23c1a208d26d94dbae7c2ab46dabf Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 09:05:34 +0000 Subject: [PATCH 821/836] Store xpixel/ypixel from TIOCGWINSZ and add formats. --- cmd-refresh-client.c | 2 +- format.c | 2 ++ tmux.1 | 4 +++- tmux.h | 4 +++- tty.c | 23 +++++++++++++++++------ 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index 49921a745a..b4c5e844fa 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -130,7 +130,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "size too small or too big"); return (CMD_RETURN_ERROR); } - tty_set_size(&c->tty, x, y); + tty_set_size(&c->tty, x, y, 0, 0); c->flags |= CLIENT_SIZECHANGED; recalculate_sizes(); } diff --git a/format.c b/format.c index ffa9b8d576..45320bf5e9 100644 --- a/format.c +++ b/format.c @@ -2158,6 +2158,8 @@ format_defaults_client(struct format_tree *ft, struct client *c) format_add(ft, "client_pid", "%ld", (long) c->pid); format_add(ft, "client_height", "%u", tty->sy); format_add(ft, "client_width", "%u", tty->sx); + format_add(ft, "client_cell_width", "%u", tty->xpixel); + format_add(ft, "client_cell_height", "%u", tty->ypixel); format_add(ft, "client_tty", "%s", c->ttyname); format_add(ft, "client_control_mode", "%d", !!(c->flags & CLIENT_CONTROL)); diff --git a/tmux.1 b/tmux.1 index 6cf8df2477..fc42b3933e 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4209,6 +4209,8 @@ The following variables are available, where appropriate: .It Li "buffer_sample" Ta "" Ta "Sample of start of buffer" .It Li "buffer_size" Ta "" Ta "Size of the specified buffer in bytes" .It Li "client_activity" Ta "" Ta "Time client last had activity" +.It Li "client_cell_height" Ta "" Ta "Height of each client cell in pixels" +.It Li "client_cell_width" Ta "" Ta "Width of each client cell in pixels" .It Li "client_control_mode" Ta "" Ta "1 if client is in control mode" .It Li "client_created" Ta "" Ta "Time client created" .It Li "client_discarded" Ta "" Ta "Bytes discarded when client behind" @@ -4223,7 +4225,7 @@ The following variables are available, where appropriate: .It Li "client_termname" Ta "" Ta "Terminal name of client" .It Li "client_termtype" Ta "" Ta "Terminal type of client" .It Li "client_tty" Ta "" Ta "Pseudo terminal of client" -.It Li "client_utf8" Ta "" Ta "1 if client supports utf8" +.It Li "client_utf8" Ta "" Ta "1 if client supports UTF-8" .It Li "client_width" Ta "" Ta "Width of client" .It Li "client_written" Ta "" Ta "Bytes written to client" .It Li "command" Ta "" Ta "Name of command in use, if any" diff --git a/tmux.h b/tmux.h index 5b6a1716e3..d2a4196afe 100644 --- a/tmux.h +++ b/tmux.h @@ -1148,6 +1148,8 @@ struct tty { u_int sx; u_int sy; + u_int xpixel; + u_int ypixel; u_int cx; u_int cy; @@ -1927,7 +1929,7 @@ void tty_putc(struct tty *, u_char); void tty_putn(struct tty *, const void *, size_t, u_int); int tty_init(struct tty *, struct client *, int, char *); void tty_resize(struct tty *); -void tty_set_size(struct tty *, u_int, u_int); +void tty_set_size(struct tty *, u_int, u_int, u_int, u_int); void tty_start_tty(struct tty *); void tty_stop_tty(struct tty *); void tty_set_title(struct tty *, const char *); diff --git a/tty.c b/tty.c index d77bb4402a..9efd78a09f 100644 --- a/tty.c +++ b/tty.c @@ -127,29 +127,40 @@ tty_resize(struct tty *tty) { struct client *c = tty->client; struct winsize ws; - u_int sx, sy; + u_int sx, sy, xpixel, ypixel; if (ioctl(tty->fd, TIOCGWINSZ, &ws) != -1) { sx = ws.ws_col; - if (sx == 0) + if (sx == 0) { sx = 80; + xpixel = 0; + } else + xpixel = ws.ws_xpixel / sx; sy = ws.ws_row; - if (sy == 0) + if (sy == 0) { sy = 24; + ypixel = 0; + } else + ypixel = ws.ws_ypixel / sy; } else { sx = 80; sy = 24; + xpixel = 0; + ypixel = 0; } - log_debug("%s: %s now %ux%u", __func__, c->name, sx, sy); - tty_set_size(tty, sx, sy); + log_debug("%s: %s now %ux%u (%ux%u)", __func__, c->name, sx, sy, + xpixel, ypixel); + tty_set_size(tty, sx, sy, xpixel, ypixel); tty_invalidate(tty); } void -tty_set_size(struct tty *tty, u_int sx, u_int sy) +tty_set_size(struct tty *tty, u_int sx, u_int sy, u_int xpixel, u_int ypixel) { tty->sx = sx; tty->sy = sy; + tty->xpixel = xpixel; + tty->ypixel = ypixel; } static void From 2349b1dbef7cd0b4a165cd234d6757c34d5e02e6 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 09:45:15 +0000 Subject: [PATCH 822/836] Make a best effort to set xpixel and ypixel for each pane and add formats for them. --- cmd-break-pane.c | 2 +- cmd-resize-window.c | 14 ++++++++----- format.c | 2 ++ layout-custom.c | 2 +- layout-set.c | 8 +++---- resize.c | 51 +++++++++++++++++++++++++++++++++++++++------ server-client.c | 15 ++----------- spawn.c | 9 +++++--- tmux.1 | 2 ++ tmux.h | 15 +++++++++---- window.c | 42 ++++++++++++++++++++++++++++++++++--- 11 files changed, 122 insertions(+), 40 deletions(-) diff --git a/cmd-break-pane.c b/cmd-break-pane.c index 8b430ff7ad..6c63810372 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -76,7 +76,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item) window_lost_pane(w, wp); layout_close_pane(wp); - w = wp->window = window_create(w->sx, w->sy); + w = wp->window = window_create(w->sx, w->sy, w->xpixel, w->ypixel); options_set_parent(wp->options, w->options); wp->flags |= PANE_STYLECHANGED; TAILQ_INSERT_HEAD(&w->panes, wp, entry); diff --git a/cmd-resize-window.c b/cmd-resize-window.c index c5a7c5a157..9cc74e829f 100644 --- a/cmd-resize-window.c +++ b/cmd-resize-window.c @@ -53,6 +53,7 @@ cmd_resize_window_exec(struct cmd *self, struct cmdq_item *item) const char *errstr; char *cause; u_int adjust, sx, sy; + int xpixel = -1, ypixel = -1; if (args->argc == 0) adjust = 1; @@ -97,13 +98,16 @@ cmd_resize_window_exec(struct cmd *self, struct cmdq_item *item) } else if (args_has(args, 'D')) sy += adjust; - if (args_has(args, 'A')) - default_window_size(NULL, s, w, &sx, &sy, WINDOW_SIZE_LARGEST); - else if (args_has(args, 'a')) - default_window_size(NULL, s, w, &sx, &sy, WINDOW_SIZE_SMALLEST); + if (args_has(args, 'A')) { + default_window_size(NULL, s, w, &sx, &sy, &xpixel, &ypixel, + WINDOW_SIZE_LARGEST); + } else if (args_has(args, 'a')) { + default_window_size(NULL, s, w, &sx, &sy, &xpixel, &ypixel, + WINDOW_SIZE_SMALLEST); + } options_set_number(w->options, "window-size", WINDOW_SIZE_MANUAL); - resize_window(w, sx, sy); + resize_window(w, sx, sy, xpixel, ypixel); return (CMD_RETURN_NORMAL); } diff --git a/format.c b/format.c index 45320bf5e9..86878cda99 100644 --- a/format.c +++ b/format.c @@ -2211,6 +2211,8 @@ format_defaults_window(struct format_tree *ft, struct window *w) format_add(ft, "window_name", "%s", w->name); format_add(ft, "window_width", "%u", w->sx); format_add(ft, "window_height", "%u", w->sy); + format_add(ft, "window_cell_width", "%u", w->xpixel); + format_add(ft, "window_cell_height", "%u", w->ypixel); format_add_cb(ft, "window_layout", format_cb_window_layout); format_add_cb(ft, "window_visible_layout", format_cb_window_visible_layout); diff --git a/layout-custom.c b/layout-custom.c index d737129281..097dabe6b0 100644 --- a/layout-custom.c +++ b/layout-custom.c @@ -221,7 +221,7 @@ layout_parse(struct window *w, const char *layout) return (-1); /* Resize to the layout size. */ - window_resize(w, lc->sx, lc->sy); + window_resize(w, lc->sx, lc->sy, -1, -1); /* Destroy the old layout and swap to the new. */ layout_free_cell(w->layout_root); diff --git a/layout-set.c b/layout-set.c index 82247149b9..f712b0592f 100644 --- a/layout-set.c +++ b/layout-set.c @@ -163,7 +163,7 @@ layout_set_even(struct window *w, enum layout_type type) layout_print_cell(w->layout_root, __func__, 1); - window_resize(w, lc->sx, lc->sy); + window_resize(w, lc->sx, lc->sy, -1, -1); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -262,7 +262,7 @@ layout_set_main_h(struct window *w) layout_print_cell(w->layout_root, __func__, 1); - window_resize(w, lc->sx, lc->sy); + window_resize(w, lc->sx, lc->sy, -1, -1); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -349,7 +349,7 @@ layout_set_main_v(struct window *w) layout_print_cell(w->layout_root, __func__, 1); - window_resize(w, lc->sx, lc->sy); + window_resize(w, lc->sx, lc->sy, -1, -1); notify_window("window-layout-changed", w); server_redraw_window(w); } @@ -458,7 +458,7 @@ layout_set_tiled(struct window *w) layout_print_cell(w->layout_root, __func__, 1); - window_resize(w, lc->sx, lc->sy); + window_resize(w, lc->sx, lc->sy, -1, -1); notify_window("window-layout-changed", w); server_redraw_window(w); } diff --git a/resize.c b/resize.c index 6432f0031b..9f74b33e3b 100644 --- a/resize.c +++ b/resize.c @@ -23,7 +23,7 @@ #include "tmux.h" void -resize_window(struct window *w, u_int sx, u_int sy) +resize_window(struct window *w, u_int sx, u_int sy, int xpixel, int ypixel) { int zoomed; @@ -50,7 +50,7 @@ resize_window(struct window *w, u_int sx, u_int sy) sx = w->layout_root->sx; if (sy < w->layout_root->sy) sy = w->layout_root->sy; - window_resize(w, sx, sy); + window_resize(w, sx, sy, xpixel, ypixel); log_debug("%s: @%u resized to %u,%u; layout %u,%u", __func__, w->id, sx, sy, w->layout_root->sx, w->layout_root->sy); @@ -77,7 +77,7 @@ ignore_client_size(struct client *c) void default_window_size(struct client *c, struct session *s, struct window *w, - u_int *sx, u_int *sy, int type) + u_int *sx, u_int *sy, u_int *xpixel, u_int *ypixel, int type) { struct client *loop; u_int cx, cy; @@ -88,6 +88,7 @@ default_window_size(struct client *c, struct session *s, struct window *w, switch (type) { case WINDOW_SIZE_LARGEST: *sx = *sy = 0; + *xpixel = *ypixel = 0; TAILQ_FOREACH(loop, &clients, entry) { if (ignore_client_size(loop)) continue; @@ -103,12 +104,19 @@ default_window_size(struct client *c, struct session *s, struct window *w, *sx = cx; if (cy > *sy) *sy = cy; + + if (loop->tty.xpixel > *xpixel && + loop->tty.ypixel > *ypixel) { + *xpixel = loop->tty.xpixel; + *ypixel = loop->tty.ypixel; + } } if (*sx == 0 || *sy == 0) goto manual; break; case WINDOW_SIZE_SMALLEST: *sx = *sy = UINT_MAX; + *xpixel = *ypixel = 0; TAILQ_FOREACH(loop, &clients, entry) { if (ignore_client_size(loop)) continue; @@ -124,6 +132,12 @@ default_window_size(struct client *c, struct session *s, struct window *w, *sx = cx; if (cy < *sy) *sy = cy; + + if (loop->tty.xpixel > *xpixel && + loop->tty.ypixel > *ypixel) { + *xpixel = loop->tty.xpixel; + *ypixel = loop->tty.ypixel; + } } if (*sx == UINT_MAX || *sy == UINT_MAX) goto manual; @@ -132,8 +146,11 @@ default_window_size(struct client *c, struct session *s, struct window *w, if (c != NULL && !ignore_client_size(c)) { *sx = c->tty.sx; *sy = c->tty.sy - status_line_size(c); + *xpixel = c->tty.xpixel; + *ypixel = c->tty.ypixel; } else { *sx = *sy = UINT_MAX; + *xpixel = *ypixel = 0; TAILQ_FOREACH(loop, &clients, entry) { if (ignore_client_size(loop)) continue; @@ -148,6 +165,12 @@ default_window_size(struct client *c, struct session *s, struct window *w, *sx = cx; if (cy < *sy) *sy = cy; + + if (loop->tty.xpixel > *xpixel && + loop->tty.ypixel > *ypixel) { + *xpixel = loop->tty.xpixel; + *ypixel = loop->tty.ypixel; + } } if (*sx == UINT_MAX || *sy == UINT_MAX) goto manual; @@ -181,7 +204,7 @@ recalculate_size(struct window *w) { struct session *s; struct client *c; - u_int sx, sy, cx, cy; + u_int sx, sy, cx, cy, xpixel = 0, ypixel = 0; int type, current, has, changed; if (w->active == NULL) @@ -214,6 +237,11 @@ recalculate_size(struct window *w) sx = cx; if (cy > sy) sy = cy; + + if (c->tty.xpixel > xpixel && c->tty.ypixel > ypixel) { + xpixel = c->tty.xpixel; + ypixel = c->tty.ypixel; + } } if (sx == 0 || sy == 0) changed = 0; @@ -239,6 +267,11 @@ recalculate_size(struct window *w) sx = cx; if (cy < sy) sy = cy; + + if (c->tty.xpixel > xpixel && c->tty.ypixel > ypixel) { + xpixel = c->tty.xpixel; + ypixel = c->tty.ypixel; + } } if (sx == UINT_MAX || sy == UINT_MAX) changed = 0; @@ -266,6 +299,11 @@ recalculate_size(struct window *w) sx = cx; if (cy < sy) sy = cy; + + if (c->tty.xpixel > xpixel && c->tty.ypixel > ypixel) { + xpixel = c->tty.xpixel; + ypixel = c->tty.ypixel; + } } if (sx == UINT_MAX || sy == UINT_MAX) changed = 0; @@ -281,8 +319,9 @@ recalculate_size(struct window *w) tty_update_window_offset(w); return; } - log_debug("%s: @%u changed to %u,%u", __func__, w->id, sx, sy); - resize_window(w, sx, sy); + log_debug("%s: @%u changed to %u,%u (%ux%u)", __func__, w->id, sx, sy, + xpixel, ypixel); + resize_window(w, sx, sy, xpixel, ypixel); } void diff --git a/server-client.c b/server-client.c index 26b246c1c8..27173ef18b 100644 --- a/server-client.c +++ b/server-client.c @@ -1321,7 +1321,6 @@ static int server_client_resize_force(struct window_pane *wp) { struct timeval tv = { .tv_usec = 100000 }; - struct winsize ws; /* * If we are resizing to the same size as when we entered the loop @@ -1342,12 +1341,8 @@ server_client_resize_force(struct window_pane *wp) wp->sy <= 1) return (0); - memset(&ws, 0, sizeof ws); - ws.ws_col = wp->sx; - ws.ws_row = wp->sy - 1; - if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) - fatal("ioctl failed"); log_debug("%s: %%%u forcing resize", __func__, wp->id); + window_pane_send_resize(wp, -1); evtimer_add(&wp->resize_timer, &tv); wp->flags |= PANE_RESIZEFORCE; @@ -1358,14 +1353,8 @@ server_client_resize_force(struct window_pane *wp) static void server_client_resize_pane(struct window_pane *wp) { - struct winsize ws; - - memset(&ws, 0, sizeof ws); - ws.ws_col = wp->sx; - ws.ws_row = wp->sy; - if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) - fatal("ioctl failed"); log_debug("%s: %%%u resize to %u,%u", __func__, wp->id, wp->sx, wp->sy); + window_pane_send_resize(wp, 0); wp->flags &= ~PANE_RESIZE; diff --git a/spawn.c b/spawn.c index dfa39ad792..6cf7c73bb4 100644 --- a/spawn.c +++ b/spawn.c @@ -85,7 +85,7 @@ spawn_window(struct spawn_context *sc, char **cause) struct window_pane *wp; struct winlink *wl; int idx = sc->idx; - u_int sx, sy; + u_int sx, sy, xpixel, ypixel; spawn_log(__func__, sc); @@ -155,8 +155,9 @@ spawn_window(struct spawn_context *sc, char **cause) xasprintf(cause, "couldn't add window %d", idx); return (NULL); } - default_window_size(sc->c, s, NULL, &sx, &sy, -1); - if ((w = window_create(sx, sy)) == NULL) { + default_window_size(sc->c, s, NULL, &sx, &sy, &xpixel, &ypixel, + -1); + if ((w = window_create(sx, sy, xpixel, ypixel)) == NULL) { winlink_remove(&s->windows, sc->wl); xasprintf(cause, "couldn't create window %d", idx); return (NULL); @@ -338,6 +339,8 @@ spawn_pane(struct spawn_context *sc, char **cause) memset(&ws, 0, sizeof ws); ws.ws_col = screen_size_x(&new_wp->base); ws.ws_row = screen_size_y(&new_wp->base); + ws.ws_xpixel = w->xpixel * ws.ws_col; + ws.ws_ypixel = w->ypixel * ws.ws_row; /* Block signals until fork has completed. */ sigfillset(&set); diff --git a/tmux.1 b/tmux.1 index fc42b3933e..56ebeb8706 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4329,6 +4329,8 @@ The following variables are available, where appropriate: .It Li "window_activity_flag" Ta "" Ta "1 if window has activity" .It Li "window_bell_flag" Ta "" Ta "1 if window has bell" .It Li "window_bigger" Ta "" Ta "1 if window is larger than client" +.It Li "window_cell_height" Ta "" Ta "Height of each cell in pixels" +.It Li "window_cell_width" Ta "" Ta "Width of each cell in pixels" .It Li "window_end_flag" Ta "" Ta "1 if window has the highest index" .It Li "window_flags" Ta "#F" Ta "Window flags" .It Li "window_format" Ta "" Ta "1 if format is for a window" diff --git a/tmux.h b/tmux.h index d2a4196afe..6d142ab99e 100644 --- a/tmux.h +++ b/tmux.h @@ -78,6 +78,10 @@ struct winlink; /* Maximum size of data to hold from a pane. */ #define READ_SIZE 4096 +/* Default pixel cell sizes. */ +#define DEFAULT_XPIXEL 16 +#define DEFAULT_YPIXEL 32 + /* Attribute to make GCC check printf-like arguments. */ #define printflike(a, b) __attribute__ ((format (printf, a, b))) @@ -928,6 +932,8 @@ struct window { u_int sx; u_int sy; + u_int xpixel; + u_int ypixel; int flags; #define WINDOW_BELL 0x1 @@ -2208,9 +2214,9 @@ void status_prompt_load_history(void); void status_prompt_save_history(void); /* resize.c */ -void resize_window(struct window *, u_int, u_int); +void resize_window(struct window *, u_int, u_int, int, int); void default_window_size(struct client *, struct session *, struct window *, - u_int *, u_int *, int); + u_int *, u_int *, u_int *, u_int *, int); void recalculate_size(struct window *); void recalculate_sizes(void); @@ -2402,7 +2408,7 @@ void winlink_stack_remove(struct winlink_stack *, struct winlink *); struct window *window_find_by_id_str(const char *); struct window *window_find_by_id(u_int); void window_update_activity(struct window *); -struct window *window_create(u_int, u_int); +struct window *window_create(u_int, u_int, u_int, u_int); void window_pane_set_event(struct window_pane *); struct window_pane *window_get_active_at(struct window *, u_int, u_int); struct window_pane *window_find_string(struct window *, const char *); @@ -2413,7 +2419,8 @@ void window_redraw_active_switch(struct window *, struct window_pane *); struct window_pane *window_add_pane(struct window *, struct window_pane *, u_int, int); -void window_resize(struct window *, u_int, u_int); +void window_resize(struct window *, u_int, u_int, int, int); +void window_pane_send_resize(struct window_pane *, int); int window_zoom(struct window_pane *); int window_unzoom(struct window *); int window_push_zoom(struct window *, int); diff --git a/window.c b/window.c index 21bf366f71..bde9693ba1 100644 --- a/window.c +++ b/window.c @@ -308,10 +308,15 @@ window_update_activity(struct window *w) } struct window * -window_create(u_int sx, u_int sy) +window_create(u_int sx, u_int sy, u_int xpixel, u_int ypixel) { struct window *w; + if (xpixel == 0) + xpixel = DEFAULT_XPIXEL; + if (ypixel == 0) + ypixel = DEFAULT_YPIXEL; + w = xcalloc(1, sizeof *w); w->name = xstrdup(""); w->flags = 0; @@ -324,6 +329,8 @@ window_create(u_int sx, u_int sy) w->sx = sx; w->sy = sy; + w->xpixel = xpixel; + w->ypixel = ypixel; w->options = options_create(global_w_options); @@ -410,11 +417,40 @@ window_set_name(struct window *w, const char *new_name) } void -window_resize(struct window *w, u_int sx, u_int sy) +window_resize(struct window *w, u_int sx, u_int sy, int xpixel, int ypixel) { - log_debug("%s: @%u resize %ux%u", __func__, w->id, sx, sy); + if (xpixel == 0) + xpixel = DEFAULT_XPIXEL; + if (ypixel == 0) + ypixel = DEFAULT_YPIXEL; + + log_debug("%s: @%u resize %ux%u (%ux%u)", __func__, w->id, sx, sy, + xpixel == -1 ? w->xpixel : xpixel, + ypixel == -1 ? w->ypixel : ypixel); w->sx = sx; w->sy = sy; + if (xpixel != -1) + w->xpixel = xpixel; + if (ypixel != -1) + w->ypixel = ypixel; +} + +void +window_pane_send_resize(struct window_pane *wp, int yadjust) +{ + struct window *w = wp->window; + struct winsize ws; + + if (wp->fd == -1) + return; + + memset(&ws, 0, sizeof ws); + ws.ws_col = wp->sx; + ws.ws_row = wp->sy + yadjust; + ws.ws_xpixel = w->xpixel * ws.ws_col; + ws.ws_ypixel = w->ypixel * ws.ws_row; + if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) + fatal("ioctl failed"); } int From 9ea05b2fb32395d717ead5d7904acdfaa852b068 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 09:50:09 +0000 Subject: [PATCH 823/836] Bump the escape sequence timeout to five seconds to allow for longer legitimate sequences. --- input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input.c b/input.c index 96fd5d3334..452eac7f87 100644 --- a/input.c +++ b/input.c @@ -740,7 +740,7 @@ input_timer_callback(__unused int fd, __unused short events, void *arg) static void input_start_timer(struct input_ctx *ictx) { - struct timeval tv = { .tv_usec = 100000 }; + struct timeval tv = { .tv_sec = 5, .tv_usec = 0 }; event_del(&ictx->timer); event_add(&ictx->timer, &tv); From c416fe0da43f9caffd8b5f6c1a627c8f7a16f881 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 09:51:58 +0000 Subject: [PATCH 824/836] Add xrecallocarray. --- xmalloc.c | 14 ++++++++++++++ xmalloc.h | 1 + 2 files changed, 15 insertions(+) diff --git a/xmalloc.c b/xmalloc.c index f249e39731..d11d8dc78d 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -71,6 +71,20 @@ xreallocarray(void *ptr, size_t nmemb, size_t size) return new_ptr; } +void * +xrecallocarray(void *ptr, size_t oldnmemb, size_t nmemb, size_t size) +{ + void *new_ptr; + + if (nmemb == 0 || size == 0) + fatalx("xrecallocarray: zero size"); + new_ptr = recallocarray(ptr, oldnmemb, nmemb, size); + if (new_ptr == NULL) + fatalx("xrecallocarray: allocating %zu * %zu bytes: %s", + nmemb, size, strerror(errno)); + return new_ptr; +} + char * xstrdup(const char *str) { diff --git a/xmalloc.h b/xmalloc.h index a3ee486fe4..3fe4f1cc62 100644 --- a/xmalloc.h +++ b/xmalloc.h @@ -23,6 +23,7 @@ void *xmalloc(size_t); void *xcalloc(size_t, size_t); void *xrealloc(void *, size_t); void *xreallocarray(void *, size_t, size_t); +void *xrecallocarray(void *, size_t, size_t, size_t); char *xstrdup(const char *); char *xstrndup(const char *, size_t); int xasprintf(char **, const char *, ...) From bc5881c4d2fe0d9172636cfb2d756372995c8359 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 09:56:25 +0000 Subject: [PATCH 825/836] Long lines and spacing fixes. --- server-client.c | 3 ++- tmux.h | 4 ++-- tty-term.c | 3 ++- tty.c | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/server-client.c b/server-client.c index 27173ef18b..c644bb0183 100644 --- a/server-client.c +++ b/server-client.c @@ -543,7 +543,8 @@ server_client_check_mouse(struct client *c, struct key_event *event) where = STATUS_RIGHT; break; case STYLE_RANGE_WINDOW: - wl = winlink_find_by_index(&s->windows, sr->argument); + wl = winlink_find_by_index(&s->windows, + sr->argument); if (wl == NULL) return (KEYC_UNKNOWN); m->w = wl->window->id; diff --git a/tmux.h b/tmux.h index 6d142ab99e..bcdc99a4d4 100644 --- a/tmux.h +++ b/tmux.h @@ -1244,8 +1244,8 @@ struct tty_ctx { const struct grid_cell *cell; int wrapped; - u_int num; - void *ptr; + u_int num; + void *ptr; /* * Cursor and region position before the screen was updated - this is diff --git a/tty-term.c b/tty-term.c index c408d968d4..52468faf08 100644 --- a/tty-term.c +++ b/tty-term.c @@ -636,7 +636,8 @@ tty_term_string2(struct tty_term *term, enum tty_code_code code, int a, int b) } const char * -tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b, int c) +tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b, + int c) { return (tparm((char *) tty_term_string(term, code), a, b, c)); } diff --git a/tty.c b/tty.c index 9efd78a09f..594f02face 100644 --- a/tty.c +++ b/tty.c @@ -2454,7 +2454,8 @@ tty_check_bg(struct tty *tty, struct window_pane *wp, struct grid_cell *gc) } static void -tty_check_us(__unused struct tty *tty, struct window_pane *wp, struct grid_cell *gc) +tty_check_us(__unused struct tty *tty, struct window_pane *wp, + struct grid_cell *gc) { int c; From 08e28285923cb87168ba383011b42aac76925e07 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 10:17:22 +0000 Subject: [PATCH 826/836] Parse out DA features. --- screen-write.c | 3 ++- tty-keys.c | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/screen-write.c b/screen-write.c index 34d16ee83a..43cb42b48a 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1636,7 +1636,8 @@ screen_write_overwrite(struct screen_write_ctx *ctx, struct grid_cell *gc, grid_view_get_cell(gd, xx, s->cy, &tmp_gc); if (~tmp_gc.flags & GRID_FLAG_PADDING) break; - log_debug("%s: overwrite at %u,%u", __func__, xx, s->cy); + log_debug("%s: overwrite at %u,%u", __func__, xx, + s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); done = 1; } diff --git a/tty-keys.c b/tty-keys.c index 66f0201a38..6be40d0eeb 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -1002,8 +1002,8 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, size_t *size) { struct client *c = tty->client; - u_int i, a, b; - char tmp[64], *endptr; + u_int i, n = 0; + char tmp[64], *endptr, p[32] = { 0 }, *cp, *next; static const char *types[] = TTY_TYPES; int type; @@ -1035,23 +1035,21 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, *size = 4 + i; /* Convert version numbers. */ - a = strtoul(tmp, &endptr, 10); - if (*endptr == ';') { - b = strtoul(endptr + 1, &endptr, 10); + cp = tmp; + while ((next = strsep(&cp, ";")) != NULL) { + p[n] = strtoul(next, &endptr, 10); if (*endptr != '\0' && *endptr != ';') - b = 0; - } else if (*endptr == '\0') - b = 0; - else - a = b = 0; + p[n] = 0; + n++; + } /* Store terminal type. */ type = TTY_UNKNOWN; - switch (a) { + switch (p[0]) { case 1: - if (b == 2) + if (p[1] == 2) type = TTY_VT100; - else if (b == 0) + else if (p[1] == 0) type = TTY_VT101; break; case 6: @@ -1070,6 +1068,8 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, type = TTY_VT520; break; } + for (i = 2; i < n; i++) + log_debug("%s: DA feature: %d", c->name, p[i]); tty_set_type(tty, type); log_debug("%s: received DA %.*s (%s)", c->name, (int)*size, buf, From fa409194d3dfe0095bf6572a253772f2825f5dec Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 10:55:45 +0000 Subject: [PATCH 827/836] Missing after-kill-pane option. --- options-table.c | 1 + 1 file changed, 1 insertion(+) diff --git a/options-table.c b/options-table.c index 1d22b662fa..d8612ff2ab 100644 --- a/options-table.c +++ b/options-table.c @@ -811,6 +811,7 @@ const struct options_table_entry options_table[] = { OPTIONS_TABLE_HOOK("after-copy-mode", ""), OPTIONS_TABLE_HOOK("after-display-message", ""), OPTIONS_TABLE_HOOK("after-display-panes", ""), + OPTIONS_TABLE_HOOK("after-kill-pane", ""), OPTIONS_TABLE_HOOK("after-list-buffers", ""), OPTIONS_TABLE_HOOK("after-list-clients", ""), OPTIONS_TABLE_HOOK("after-list-keys", ""), From e00730d14952a0e16c7b3011c28d7bd851f68660 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 28 Nov 2019 12:30:43 +0000 Subject: [PATCH 828/836] Fix bad merge. --- server-client.c | 24 ------------------------ window.c | 9 +++++++++ 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/server-client.c b/server-client.c index d8907f2aa8..2cfd883883 100644 --- a/server-client.c +++ b/server-client.c @@ -1340,14 +1340,6 @@ server_client_resize_force(struct window_pane *wp) wp->sy <= 1) return (0); - memset(&ws, 0, sizeof ws); - ws.ws_col = wp->sx; - ws.ws_row = wp->sy - 1; - if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) -#ifdef __sun - if (errno != EINVAL && errno != ENXIO) -#endif - fatal("ioctl failed"); log_debug("%s: %%%u forcing resize", __func__, wp->id); window_pane_send_resize(wp, -1); @@ -1360,22 +1352,6 @@ server_client_resize_force(struct window_pane *wp) static void server_client_resize_pane(struct window_pane *wp) { - struct winsize ws; - - memset(&ws, 0, sizeof ws); - ws.ws_col = wp->sx; - ws.ws_row = wp->sy; - if (wp->fd != -1 && ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) -#ifdef __sun - /* - * Some versions of Solaris apparently can return an error when - * resizing; don't know why this happens, can't reproduce on - * other platforms and ignoring it doesn't seem to cause any - * issues. - */ - if (errno != EINVAL && errno != ENXIO) -#endif - fatal("ioctl failed"); log_debug("%s: %%%u resize to %u,%u", __func__, wp->id, wp->sx, wp->sy); window_pane_send_resize(wp, 0); diff --git a/window.c b/window.c index d921cd1294..242ad48d61 100644 --- a/window.c +++ b/window.c @@ -448,6 +448,15 @@ window_pane_send_resize(struct window_pane *wp, int yadjust) ws.ws_xpixel = w->xpixel * ws.ws_col; ws.ws_ypixel = w->ypixel * ws.ws_row; if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) +#ifdef __sun + /* + * Some versions of Solaris apparently can return an error when + * resizing; don't know why this happens, can't reproduce on + * other platforms and ignoring it doesn't seem to cause any + * issues. + */ + if (errno != EINVAL && errno != ENXIO) +#endif fatal("ioctl failed"); } From 743939ec84f4652f1d3288e70a4c1aca327a0e07 Mon Sep 17 00:00:00 2001 From: Thomas Adam Date: Thu, 28 Nov 2019 12:30:36 +0000 Subject: [PATCH 829/836] add missing definition --- server-client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/server-client.c b/server-client.c index 2cfd883883..a1a51b5f85 100644 --- a/server-client.c +++ b/server-client.c @@ -1320,6 +1320,7 @@ static int server_client_resize_force(struct window_pane *wp) { struct timeval tv = { .tv_usec = 100000 }; + struct winsize ws; /* * If we are resizing to the same size as when we entered the loop From 3bb11ec4843e1cd942e703bb386369e42466acd8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 28 Nov 2019 14:36:32 +0000 Subject: [PATCH 830/836] Revert "add missing definition" This reverts commit 743939ec84f4652f1d3288e70a4c1aca327a0e07. --- server-client.c | 1 - 1 file changed, 1 deletion(-) diff --git a/server-client.c b/server-client.c index a1a51b5f85..2cfd883883 100644 --- a/server-client.c +++ b/server-client.c @@ -1320,7 +1320,6 @@ static int server_client_resize_force(struct window_pane *wp) { struct timeval tv = { .tv_usec = 100000 }; - struct winsize ws; /* * If we are resizing to the same size as when we entered the loop From c5d74b1debc404340dd2049c708f9eb599be706e Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 28 Nov 2019 21:18:38 +0000 Subject: [PATCH 831/836] Do not crash when a format doesn't exist, reported by Thomas Sattler. --- format.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/format.c b/format.c index 86878cda99..e74de9c12f 100644 --- a/format.c +++ b/format.c @@ -1112,11 +1112,10 @@ format_find(struct format_tree *ft, const char *key, int modifiers) xasprintf(&found, "%lld", (long long)fe->t); goto found; } - if (fe->value == NULL && fe->cb != NULL) { + if (fe->value == NULL && fe->cb != NULL) fe->cb(ft, fe); - if (fe->value == NULL) - fe->value = xstrdup(""); - } + if (fe->value == NULL) + fe->value = xstrdup(""); found = xstrdup(fe->value); goto found; } From 67d995d1003ef215b292f772a8e5394eb50569c4 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 29 Nov 2019 16:04:07 +0000 Subject: [PATCH 832/836] If a window appears in only one attached session, there is no point in worrying about which is the latest client (there is only one). --- cmd-attach-session.c | 2 ++ resize.c | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 6de734e512..477d351740 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -127,6 +127,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, gettimeofday(&s->last_attached_time, NULL); server_redraw_client(c); s->curw->flags &= ~WINLINK_ALERTFLAGS; + s->curw->window->latest = c; } else { if (server_client_open(c, &cause) != 0) { cmdq_error(item, "open terminal failed: %s", cause); @@ -159,6 +160,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, gettimeofday(&s->last_attached_time, NULL); server_redraw_client(c); s->curw->flags &= ~WINLINK_ALERTFLAGS; + s->curw->window->latest = c; if (~c->flags & CLIENT_CONTROL) proc_send(c->peer, MSG_READY, -1, NULL, 0); diff --git a/resize.c b/resize.c index 9f74b33e3b..054b025f21 100644 --- a/resize.c +++ b/resize.c @@ -80,7 +80,7 @@ default_window_size(struct client *c, struct session *s, struct window *w, u_int *sx, u_int *sy, u_int *xpixel, u_int *ypixel, int type) { struct client *loop; - u_int cx, cy; + u_int cx, cy, n; const char *value; if (type == -1) @@ -149,12 +149,22 @@ default_window_size(struct client *c, struct session *s, struct window *w, *xpixel = c->tty.xpixel; *ypixel = c->tty.ypixel; } else { + if (w == NULL) + goto manual; + n = 0; + TAILQ_FOREACH(loop, &clients, entry) { + if (!ignore_client_size(loop) && + session_has(loop->session, w)) { + if (++n > 1) + break; + } + } *sx = *sy = UINT_MAX; *xpixel = *ypixel = 0; TAILQ_FOREACH(loop, &clients, entry) { if (ignore_client_size(loop)) continue; - if (w != NULL && loop != w->latest) + if (n > 1 && loop != w->latest) continue; s = loop->session; @@ -204,7 +214,7 @@ recalculate_size(struct window *w) { struct session *s; struct client *c; - u_int sx, sy, cx, cy, xpixel = 0, ypixel = 0; + u_int sx, sy, cx, cy, xpixel = 0, ypixel = 0, n; int type, current, has, changed; if (w->active == NULL) @@ -277,11 +287,19 @@ recalculate_size(struct window *w) changed = 0; break; case WINDOW_SIZE_LATEST: + n = 0; + TAILQ_FOREACH(c, &clients, entry) { + if (!ignore_client_size(c) && + session_has(c->session, w)) { + if (++n > 1) + break; + } + } sx = sy = UINT_MAX; TAILQ_FOREACH(c, &clients, entry) { if (ignore_client_size(c)) continue; - if (c != w->latest) + if (n > 1 && c != w->latest) continue; s = c->session; From 0806db31743e1c372b072c12fc76898bbe59f8de Mon Sep 17 00:00:00 2001 From: CS DVRX Date: Mon, 27 Sep 2021 02:07:06 -0500 Subject: [PATCH 833/836] Sixel support from 2020, with fresh screenshots --- Makefile.am | 1 + README.md | 540 +++++ README => README.tmux.orig | 0 config/.terminfo.src/capabilities.sh | Bin 0 -> 90 bytes config/.terminfo.src/config.sh | 7 + config/.terminfo.src/sixel-tmux.terminfo | 61 + config/.terminfo.src/terminal.sh | 111 + config/.terminfo/73/sixel-tmux | Bin 0 -> 1964 bytes config/.terminfo/74/tmux-256color | Bin 0 -> 2464 bytes config/.terminfo/74/tmux-256color-italic | Bin 0 -> 2472 bytes config/.terminfo/74/tmux-italic | Bin 0 -> 1492 bytes config/.terminfo/74/tmux-sixel | Bin 0 -> 1837 bytes config/.terminfo/t/tmux-256color | Bin 0 -> 2305 bytes config/.terminfo/t/tmux-256color-italic | Bin 0 -> 2313 bytes config/.terminfo/t/tmux-italic | Bin 0 -> 1461 bytes config/.terminfo/t/tmux-sixel | Bin 0 -> 1807 bytes ...i-vt52-inside-sixel-tmux-inside-mintty.jpg | Bin 0 -> 170306 bytes ...ide-sixel-tmux-inside-windows-terminal.jpg | Bin 0 -> 155876 bytes examples/cutexterm_sixel-tmux.png | Bin 0 -> 1168603 bytes .../cutexterm_sixel-tmux_derasterized.png | Bin 0 -> 333482 bytes examples/font-programming-ligatures.jpg | Bin 0 -> 40437 bytes .../sixel-tmux-inside-windows-terminal.gif | Bin 0 -> 4882688 bytes examples/sixel-tmux-night.jpg | Bin 0 -> 185720 bytes examples/sixel-tmux.jpg | Bin 0 -> 263428 bytes examples/sixel-tmux_2-vertical-tabs.gif | Bin 0 -> 2450925 bytes examples/sixel-tmux_mintty.gif | Bin 0 -> 3027938 bytes examples/snake.six | 1 + examples/truecolor-test1-small.jpg | Bin 0 -> 117109 bytes examples/truecolor-test2-fullwidth.jpg | Bin 0 -> 140422 bytes ...dows-terminal-solarized-custom-palette.jpg | Bin 0 -> 118998 bytes .../windows-terminal-solarized-custom.jpg | Bin 0 -> 291109 bytes examples/windows-terminal-wrong-palette.jpg | Bin 0 -> 147841 bytes screen-write.c | 41 + server-client.c | 13 +- sixel.c | 1812 +++++++++++++++++ tmux.c | 7 +- tmux.exe | Bin 0 -> 4786162 bytes tmux.h | 19 +- tty-keys.c | 6 +- tty.c | 51 +- 40 files changed, 2662 insertions(+), 8 deletions(-) create mode 100644 README.md rename README => README.tmux.orig (100%) create mode 100644 config/.terminfo.src/capabilities.sh create mode 100644 config/.terminfo.src/config.sh create mode 100644 config/.terminfo.src/sixel-tmux.terminfo create mode 100644 config/.terminfo.src/terminal.sh create mode 100644 config/.terminfo/73/sixel-tmux create mode 100644 config/.terminfo/74/tmux-256color create mode 100644 config/.terminfo/74/tmux-256color-italic create mode 100644 config/.terminfo/74/tmux-italic create mode 100644 config/.terminfo/74/tmux-sixel create mode 100644 config/.terminfo/t/tmux-256color create mode 100644 config/.terminfo/t/tmux-256color-italic create mode 100644 config/.terminfo/t/tmux-italic create mode 100644 config/.terminfo/t/tmux-sixel create mode 100644 examples/ansi-vt52-inside-sixel-tmux-inside-mintty.jpg create mode 100644 examples/ansi-vt52-inside-sixel-tmux-inside-windows-terminal.jpg create mode 100644 examples/cutexterm_sixel-tmux.png create mode 100644 examples/cutexterm_sixel-tmux_derasterized.png create mode 100644 examples/font-programming-ligatures.jpg create mode 100644 examples/sixel-tmux-inside-windows-terminal.gif create mode 100644 examples/sixel-tmux-night.jpg create mode 100644 examples/sixel-tmux.jpg create mode 100644 examples/sixel-tmux_2-vertical-tabs.gif create mode 100644 examples/sixel-tmux_mintty.gif create mode 100644 examples/snake.six create mode 100644 examples/truecolor-test1-small.jpg create mode 100644 examples/truecolor-test2-fullwidth.jpg create mode 100644 examples/windows-terminal-solarized-custom-palette.jpg create mode 100644 examples/windows-terminal-solarized-custom.jpg create mode 100644 examples/windows-terminal-wrong-palette.jpg create mode 100644 sixel.c create mode 100644 tmux.exe diff --git a/Makefile.am b/Makefile.am index ab30263779..7ac3d6ac21 100644 --- a/Makefile.am +++ b/Makefile.am @@ -161,6 +161,7 @@ dist_tmux_SOURCES = \ server-fn.c \ server.c \ session.c \ + sixel.c \ spawn.c \ status.c \ style.c \ diff --git a/README.md b/README.md new file mode 100644 index 0000000000..571e5aa698 --- /dev/null +++ b/README.md @@ -0,0 +1,540 @@ +> sixel-tmux : a terminal multiplexer that display graphics one way or another! + +## Live examples + +![mintty running sixel-tmux displaying sixels inside](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/sixel-tmux_mintty.gif) + +![mintty running sixel-tmux with 2 vertical tabs](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/sixel-tmux_2-vertical-tabs.gif) + +## What is sixel-tmux? + +sixel-tmux is a fork of tmux, focusing on proper graphic (sixels) and text +attributes preservation and representation (bold, underline...). + +While tmux now has a better support of text attributes, it still eats these +yummy sixels! + +The initial description of sixel-tmux said it could display graphics simply +"because it does not eat escape sequences" that constitutes the sixels. + +This new version still does that, but now with with a more ambitious 2nd mode: + +- not only it does not eat escape sequences containing the sixels, which is + the "sixel passthrough" mode, to pass them to any connected terminal that + supports sixels, + +- but it if detects it's connected to a terminal that can't display sixels at + all (like most Linux terminal emulators based on VTE, or hum uhm, a certain + Windows Terminal...), the sixel images are converted into a text rendition + thanks to https://github.com/csdvrx/derasterize which is the ambitious + "fallback mode" + +This is sixel-tmux running inside https://github.com/csdvrx/cutexterm in "sixel passthrough" mode, as you can see from the XTerm right-click menu: +![cutexterm running sixel-tmux and displaying sixels inside](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/cutexterm_sixel-tmux.png) + +This is another sixel-tmux running inside another cutexterm in "sixel fallback" mode, with all the sixel graphics converted into what is often called "ascii-art" by derasterize +![cutexterm running sixel-tmux with derasterized sixels](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/cutexterm_sixel-tmux_derasterized.png) + +Since cutexterm uses xterm, which features proper sixel support, and both cutexterm and mintty examples consist of running the client and the server the same terminal, you may say it's easy, and still not convinced sixel-tmux is cool. + +Here's a regular off-the-shelf (off the Windows store?) Windows Terminal Preview connecting to a session that has been opened in mintty, with both terminals side-by-side on Windows 10, and Windows Terminal automatically benefitting from the desrasterized fallback mode of the previously viewed sixels. +![sixel-tmux offering derasterized sixels from mintty to Windows Terminal Preview](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/sixel-tmux-inside-windows-terminal.gif) + +Now, is that cool or what? + +## It's cool but explain me in plain english like I'm 5 + +You can now see cute pictures in your terminal, even if you shouldn't be able to do that!! + +This is why this second mode is very ambitious: it is like "putting magical +glasses" on your existing terminal blind to sixels graphics + +Thanks to having sixel-tmux magical glasses on, your terminal can now see +sixels without any extra change: while before it showed you nothing or just an +empty square (due to your terminal not supporting sixels), your terminal now +shows you the best it can do with the sixels! + +Of course, the glasses are not really magical, therefore they are imperfect: +the picture will be blocky due to the technical limitations of derasterizing in +character sized block. Also, the picture will be made with a possibly limited +color palette: if your terminal only supports 16 or 256 colors, sixel-tmux +can't invent the colors you'll be missing. + +Derasterize is simply the best it can do, but still, I believe it is far better +than the alternative of having no picture shown at all! + +## Limitations: the sixels can be replaced by derasterize + +It is a work in progress: for the first mode (pass through) ideally sixel-tmux +should keep a sixel scrollback buffer to store actual sixels sequences instead +of their derasterized versions, to "clip them" as necessary and let the +terminal display them. + +At the moment, a scrollback will often cause the sixels to be replaced by blocks +coming from derasterize, unless you have very specific conditions, like using +your terminal native scrollback buffer with just one tmux window (or not +switching to the others). Also, you must take the precaution of moving tmux +menu bar to the botton of the screen: this is just so you can scrollback +without the textual menu bar messing up your pretty pictures! + +It may sound quite a constraining, but I provide here known good configurations +files, along with some help to configure recommended terminal emulators. + +## Ambitions: having sixel use become mainstream thanks to sixel-tmux (short rant) + +If you've followed on the "magical glasses" analogy, you can see how +derasterize is much more ambitious than just a "fallback" mode for sixel-tmux: +I basically want to force sixels down every (willing) Linux user throats +(because consent is a thing!), to stop the current deadlock situation of +competing formats that has set back the progress of console graphics for decades. + +In case it's not clear enough, I will be very blunt: releasing sixel-tmux with +derasterize support baked-in is my "activist action" to democratize sixels, by +weaponizing my own fork of tmux against all those who have decided that running out +the clock (my apologies for this football metaphor) was a fair move to ensure +the victory for their favorite non-sixel terminal graphic format. + +You don't believe me? They have been blocking patches adding sixels support for +spurious reasons, causing over 5 years of delays for most Linux users. + +Skip if you don't care about the politics, but you can get more details on the +situation if you can stomach my long https://github.com/csdvrx/sixel-tmux/RANTS.md + +### Testing sixel-tmux + +sixel-tmux is a fork of tmux, with just one goal: having the most reliable +support of graphics. + +In a console, this means: + 1. ANSI blocks and box-drawing characters to display ASCII and ANSI art + 2. ANSI escape codes, with a focus on SGR parameters to render text attributes + 3. and the best of all: sixel graphics to display graphs + +This seems very simple requirements, yet a regular tmux fails on all 3: + 1. ANSI art is corrupted, + 2. some SGR parameters are supported, but the more exotic features like overline do not work, and some sequences may be intercepted and improperly changed + 3. sixels are not supported. + +For a proper support of all these features, sixel-tmux is necessary but +not sufficient: the terminal must be able to decode and render the sequences +passed by sixel-tmux. + +Therefore, a separate test suite +is provided to first check if a terminal can achieve these goals. + +If you are dissatisfied by your current terminal, please consider mlterm + or mintty that are +tested and known to work well. + +Microsoft Window Terminal is very promising, but does not support sixels yet. +Please upvote the feature request + +You can find a longer list of alternative terminals and terminal multiplexers through +related works such as + +Below, we'll be using the test suite to configure your terminal. If that seems +too complicated, install msys2 and use mintty. If you like tabs and regret +their absence in mintty, try Windows Terminal Preview instead. + +## Configuration + +In an ideal world, each piece of software would seemlessly integrate with the +others, and work flawlessly right after installation. + +We do not live in such a world, so you may need to configure your terminal to +make sure sixel-tmux will work fine. + +The configuration step is optional, but recommended for best results - after +all, if you care to install sixel-tmux instead of sticking to tmux, you may +care about graphics! + +While I may recommend some defaults and test for them, you may have to make +some choices, as terminal issues are extremely complicated: it is sometimes +impossible to achieve perfect results without tweaking applications, since +they often have contradictory requirements. + +#### Step 1. Deploying then using terminfo files with the TERM variable + +Step 1 is to deploy then use a new terminfo that will accurately describe the +capabilities of sixel-tmux, and do the same if necessary for the terminal into +which you will run sixel-tmux: this is achieved by referring to this terminfo +in the TERM variable prior to running sixel-tmux, then referring to another +termifo from within sixel-tmux. + +The terminfo list the capabilities of your terminal. Some prodding and guessing +is possible, but for best results, you want a terminfo that: + +- accurately describes your terminal capabilities, without minimizing them or + overestimating them, (more on that below) + +- uses a name that is common enough to avoid confusing software but not so + common that it tries to make clever guesses based on the name alone, for the + sake of compability with software that has been dead or ununsed for tens of + years + +A gleaming example of such issues is MC, which treats screen-256color as xterm +then proceeds to ignore the kmous entry of the terminfo unless DISPLAY is set, cf +https://unix.stackexchange.com/questions/304960/midnight-commander-force-xterm-permanently +"Midnight Commander treats that as 'xterm' (and decides it supports a mouse) +only if DISPLAY also is set. Ignore the comment (it is wrong), and just read +the source code. The function return value is used in one place, from main.c +(again, ignore the comment...). Midnight Commander ignores the actual contents +of the terminal description, which happens to say that this configuration +supports xterm-style mouse (i.e., the existence of kmous=\E[M, in the +description). It does this to work around its problems using slang, which also +ignores the terminal description, looking only at TERM. This is an old bug, +dating back to the 1990s" + +The main tmux branch has had similar problems with terminfo entries in the +past; ultimately patches have been added to support the core features such as +24-bit color: if you are curious, check +https://sunaku.github.io/tmux-24bit-color.html#usage which describes the +history of the process and explain the basics of what we'll be doing. + +As many applications hardcode workarounds, I have decided to use the "sixel-" +prefix: if they expect tmux or xterm, we should be able to catch them by +surprise! + +### Step 1.1 compiling the provided terminfo + +1. install sixel-tmux.terminfo: `tic sixel-tmux.terminfo; tic -o ~/.terminfo sixel-tmux.terminfo` +2. start sixel-tmux: `sixel-tmux` +3. select sixel-tmux: `export TERM=sixel-tmux` +4. verify sixel-tmux is used: `tput smglr|base64` should return GzcbWz82OWgbWyVpJXAxJWQ7JXAyJWRzGzg= : most sixel aware applications will check for smglr and other sequences before outputting long strings of sixels. + +Once you are done with these 4 steps, you will have a valid sixel-tmux to use +inside sixel-tmux (!!) + +However, before starting sixel-tmux, you must export the appropriate TERM for your +terminal: otherwise, sixel-tmux will know know what your terminal is capable of +(say, how many colors it may support) and could give you ugly graphics. + +#### Step 1.2 exporting TERM to say which terminfo to use + +If you are using mintty, mlterm or the cutexterm configuration of XTerm, you +can safely skip ahead and just use xterm-256color with: `export +TERM=xterm-256color` : all 3 terminals supports the best possible set of features: +most of the fancy text attributes, 256 colors, and truecolors on top! + +If you are using Windows Terminal Preview, you are mostly in the good, but +there are different versions and you may be stuck with an old version or there +may have been regression, so please follow the next 2 steps. + +#### Step 2: Configuring the msys2 features + +I am not a huge fan of WSL2: WSL1 was technically more ambitious. WSL2 is just +a glorified VM. + +I like my processes to interact with eachother, so I'm sticking to MSYS2, and +if you want a great command-line experience on Windows, I recommend you do the +same (especially if you do not have a large amount of RAM!) + +So install msys2 from https://www.msys2.org/, which comes with mintty which you +may want to use as it's currently better than Windows Terminal (unless you need +tabs more than sixels!) + +If you are using msys2 within Windows Terminal, I recommend a commandline of +`C:/msys64/usr/bin/env.exe MSYS='enable_pcon winsymlinks:nativestrict' +MSYSTEM=MSYS /bin/bash.exe --login -i` + +If you want to immediately start sixel-tmux, you will need to use script to create a pseudotty: for example replace the call to bash with `/usr/bin/script -c '/usr/bin/tmux c' /dev/null` to create a new session, or `/usr/bin/script -c '/usr/bin/tmux a' /dev/null` to attach to any existing sixel-tmux session. + +To run from within bash inside Windows Terminal, you do the same, due to the way the console is handled; see https://cygwin.com/pipermail/cygwin/2020-May/244878.html for more details. + +### Step 3: Configuring your 16 colors palette + +You should also use a color palette (called "color scheme" in Windows Terminal) +separating the light colors from the regular colors: Windows Terminal knows the +difference, as you can test yourself from Powershell, for example with +https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd + +If you want to check if you can do the same in bash, the simplest is comparing +red to bright-red (as red is kept unaffected by Solarized which uses 6 of the 8 +colors for shades of grey) with: + +``` +printf "\e[31mTest red \e[91mTest bright red\e[39 +\e[35mTest purple \e[95mTest bright purple\e" +``` + +### Step 3.1: Defining your 16 colors palette + +Here is for example a custom Solarized Light palette, inverting the highlight and regular colors compared to Windows Terminal default Solarized Light theme: +![Windows Terminal Solarized Light custom palette](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/windows-terminal-solarized-custom-palette.jpg) + +The inversion is deliberate: most command-line tools know how to use colors, but very few know how to use SGR attributes, so it makes sense to tweak the rare tools that will take advantage of SGR or the Solarized theme, while keeping everything else on its default settings + +If you want to do the same and add this customized Solarized to your Windows +Terminal, here is the relevant JSON: + +```json + { + "background": "#FFFDE7", + "black": "#073642", + "blue": "#839496", + "brightBlack": "#002B36", + "brightBlue": "#268BD2", + "brightCyan": "#2AA198", + "brightGreen": "#859900", + "brightPurple": "#D33682", + "brightRed": "#DC322F", + "brightWhite": "#EEE8D5", + "brightYellow": "#B58900", + "cursorColor": "#002B36", + "cyan": "#93A1A1", + "foreground": "#58584D", + "green": "#586E75", + "name": "Solarized Light Custom", + "purple": "#6C71C4", + "red": "#CB4B16", + "selectionBackground": "#FFFFFF", + "white": "#FDF6E3", + "yellow": "#657B83" + }, + { + "background": "#002B36", + "black": "#002B36", + "blue": "#839496", + "brightBlack": "#073642", + "brightBlue": "#268BD2", + "brightCyan": "#2AA198", + "brightGreen": "#859900", + "brightPurple": "#D33682", + "brightRed": "#DC322F", + "brightWhite": "#EEE8D5", + "brightYellow": "#B58900", + "cursorColor": "#FFFFFF", + "cyan": "#93A1A1", + "foreground": "#839496", + "green": "#586E75", + "name": "Solarized Dark Custom", + "purple": "#6C71C4", + "red": "#CB4B16", + "selectionBackground": "#FFFFFF", + "white": "#FDF6E3", + "yellow": "#657B83" + }, +``` + +You can also use command line scripts to dynamically change your palette, +here's for example +https://github.com/csdvrx/sixel-testsuite/toggle-solarized-light.sh: (there is a similar file for solarized-dark) + +``` +#!/bin/sh + +# With 24 bit colors support, dynamically change your current palette to solarized-light +echo "attempting toggle of solarized-light" +echo -ne '\eP\e]10;#657B83\a' # Foreground -> base00 +echo -ne '\eP\e]11;#FDF6E3\a' # Background -> base3 +echo -ne '\eP\e]12;#DC322F\a' # Cursor -> red +echo -ne '\eP\e]4;0;#073642\a' # black -> Base02 +echo -ne '\eP\e]4;8;#002B36\a' # bold black -> Base03 +echo -ne '\eP\e]4;1;#DC322F\a' # red -> red +echo -ne '\eP\e]4;9;#CB4B16\a' # bold red -> orange +echo -ne '\eP\e]4;2;#859900\a' # green -> green +echo -ne '\eP\e]4;10;#586E75\a' # bold green -> base01 * +echo -ne '\eP\e]4;3;#B58900\a' # yellow -> yellow +echo -ne '\eP\e]4;11;#657B83\a' # bold yellow -> base00 * +echo -ne '\eP\e]4;4;#268BD2\a' # blue -> blue +echo -ne '\eP\e]4;12;#839496\a' # bold blue -> base0 * +echo -ne '\eP\e]4;5;#D33682\a' # magenta -> magenta +echo -ne '\eP\e]4;13;#6C71C4\a' # bold magenta -> violet +echo -ne '\eP\e]4;6;#2AA198\a' # cyan -> cyan +echo -ne '\eP\e]4;14;#93A1A1\a' # bold cyan -> base1 * +echo -ne '\eP\e]4;7;#EEE8D5\a' # white -> Base2 +echo -ne '\eP\e]4;15;#FDF6E3\a' # bold white -> Base3 +``` + +### Step 3.2: Testing both your 16 colors palette and accessing it through AIXTerm SGR support + +Supporting AIXTerm SGR allow to properly control brightness separately from +bold, using AIXTerm SGR 90 to 96 and 100 to 107 for a brightness control +independant of the SGR 1 attribute that often just means "bold" on Linux. + +In Windows Terminal, AIXTERM SGR codes nicely complement the setting +`"intenseTextStyle": "bold"` for SGR1, allowing Linux users to still access +brightness control through different SGR attributes. + +This is nothing new: it's an approach that has been long known and documented, +cf this example from 7 years ago in +https://unix.stackexchange.com/questions/93814/cant-apply-brightness-to-terminals-background-color + +Given the compatibility matrix of existing terminals from +https://unix-junkie.github.io/christmas/Comparison%20of%20Terminal%20Emulators%20-%20Colour%20Support.html +the support of AIXTerm sequences for brightness control seem highly desirable +to match the behavior of most terminal emulators: if you are not using mintty or Windows Terminal, you should really check if this feature is suported! + +Therefore, another script provides a more complete test: here is what both +the minimal red-purple-brightred-brightpurple script from +https://github.com/csdvrx/sixel-testsuite/aixterm-minimal.sh and the more +complete 16 colors script from +https://github.com/csdvrx/sixel-testsuite/16-colors.sh look like in a Windows +Terminal with a custom Solarized Light palette +![Windows Terminal with Solarized custom running tests](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/windows-terminal-solarized-custom.jpg) + +If you did not do the previous step, the colors may look identical: Windows +Terminal supports AIXTerm SGR attributes for brightness, so it just means you +have a bad palette, for example: + +![Windows Terminal with a bad Solarized custom palette next to mintty](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/windows-terminal-wrong-palette.jpg) + +### Step 4: Configuring 256 colors and 24 bit colors + +Most terminals now support 256 colors, and a few support 24 bit colors, but +ideally, you want both. Fortunately, this is far less complicated than proper +16 color support. + +However, Solarized users do not like 256 color mode, because it often means +approximations of the RGB values of the precise Solarize colors are used, +instead of keeping the 16 precise true color sequences. + +Still, it's a nice thing to have a 256 color mode, as many tools don't know how +to call colors from a 24 bit palette (the setaf, setab capabilities from +terminfo) let alone juggle with the 3 incompatible variants if they don't know +what a terminfo capability is (check +https://github.com/alacritty/alacritty/issues/1485 for an clear presentation of +why SGR 38/48 in ECMA-48 is vague) + +So start with ``tput colors`` which should return 256, if not, you need to go +back to step 1 and export a TERM that will fully represent your terminal, yet +give you the expected answer of 256 when asked with tput. + +For 24-bit or "truecolor" mode, try ``tput setab`` (or tput setaf for the +foreground) if with either you get a string containing e48 of about 63 +characters (use ``tput setab|grep e48|wc`` after the export TERM), you should +be good. + +If you need more explanation, check in sixel-tmux.terminfo source from +config/.terminfo.src: it's meant to be didactic, so it doesn't include any +other terminfo but defines paramters from scratch, and instead fully define +each and every capability, with a few comments for the crunchy parts! + +You will see that Tc is another option, but setaf/setab should be preferred, +and that colors should not return the true value because until 2018 the +terminfo format was constrained to signed 16 bit ; see also +https://stackoverflow.com/questions/36158093/terminal-color-using-terminfo/36163656#36163656 + +``` +# 16m color was Tc, now obsoleted: use setaf, setab +# https://github.com/jwilm/alacritty/issues/1485#issue-346291738 +# +# 256 colors was: colors#0x100, but colors#16777216 is not signed 16 bit so use colors#0x100 +# along with setaf setbg to get 256 as fallback for apps not knowing setaf/setab +``` + +In 2021, the terminfo format change is relatively recent (3 years) ; to play it +safe I have decided to keep using the same colors string: apps are likely to +keep using the alternative ways for a while (like checking for setab). + +If you are interested in more details, including clever ways to detect if +truecolor is supported (try setting the color to a specific truecolor value +then ask the terminal what color it's using and compare the value to what's +expected if it could comply) check https://gist.github.com/XVilka/8346728 + +### Step 5: testing colors + +Now, try sixel-testsuite/256-colors.pl to confirm the 256 colors are working, +then see if you are lucky and can indeed use a 24 bits palette with +sixel-testsuite/24-bit-color.sh which does not use anything form terminfo + +It's a new awk-based script that is both faster and nicer that the previous version, by taking into account the width of your terminal to scale + +Here's what it looks like in Windows Terminal: + +![Windows Terminal in restricted width running the truecolor test](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/truecolor-test1-small.jpg) + +![Windows Terminal in full width running the truecolor test](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/truecolor-test2-fullwidth.jpg) + +### Step 6: font test + +In this final test, we will check if the font you've selected supports the various drawing characters used by terminal tools: +1. start with `cat font-ansi-blocks.txt` to see block drawing characters and a test bear +2. run `font-vt100.sh` to see the basic box drawing characters +2. `cat font-ansi-box.txt` to see the full set of box drawing characters +3. `cat font-dec.txt` to check DEC VT220 extra characters +4. `cat font-test-all.txt` to check unicode support and overall support of the drawing characters +5. Type in the console echo followed by the sign less than, then a space, then the sign equal, then another space, then bring back this line and remove the spaces. + +For the first test, you should see a bear without lines insides its head: +![Font test 1](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/font-test-1.jpg) + +For the second test, you should see thin lines: +![Font test 2](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/font-test-2.jpg) + +For the third test, you should see lines: +![Font test 3](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/font-test-3.jpg) + +For the fourth test, you should see text in various languages, followed by the most important: grids of various patterns: +![Font test 4](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/font-test-4.jpg) + +In this test, boxes should be properly aligned, and lines should intersect cleanly. + +In the fifth and final test, if you see a double arrow, congratulations! Your font even supports the programming ligatures! + +![Windows Terminal with Iosevka SS04 supports programming ligatures](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/font-programming-ligatures.jpg) + +If the font test fails, you may need to change your font as it may not support every character; I recommend using Iosevka which supports about everything: I personally like SS04 best, but if you are into fine tuning, check the alternatives options! + +Alternatively, when using mlterm you can tell it to extend your preferred font with one or more other fonts, for example: + +``` + ISO8859_1 = Iosevka SS04 18 + ISO8859_15 = Iosevka SS04 18 + ISO10646_UCS2_1 =Iosevka SS04 18 + ISO10646_UCS2_1_BOLD = Iosevka SS04 18 + U+2500-25ff=Segoe UI Symbol + U+25C6 = Tera Special # Diamond ◆ + U+2409 = Tera Special # Horizontal tab ␉ + U+240C = Tera Special # Form feed ␌ + U+240D = Tera Special # Carrier return ␍ + U+240A = Tera Special # Linefeed ␊ + U+2424 = Tera Special # Newline ␤ + U+240B = Tera Special # Vertical tab ␋ + U+23BA = Tera Special # Horizontal line 1 ⎺ + U+23BB = Tera Special # Horizontal line 3 ⎻ + U+2500 = Tera Special # Horizontal line 5 ─ + U+23BC = Tera Special # Horizontal line 7 ⎼ + U+23BD = Tera Special # Horizontal line 9 ⎽ +``` + +When everything works to your satisfaction, compile sixel-tmux, or run the provided msys2 binary + +### Compiling sixel-tmux + +To compile, first install libevent2 and ncurses along with the C development packages (gcc, make etc) + +If you are using msys2 use pacman -S to install the relevant development packages after checking their version with pacman -sS: +``` +pacman -sS libevent +pacman -sS ncurses +pacman -S msys/libevent-devel +pacman -S msys/ncurses-devel +``` + +After installing them, here is what you should get: + +![pacman from msys2 inside Windows Terminal](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/msys2-ncurses-libevent-installed.jpg) + +You can then compile with: `./configure && make && make -j8 install` + +if you want to run it from Windows Terminal, please use script to create a pty instead of /dev/consN, for example `/usr/bin/script -c '/usr/bin/tmux c' /dev/null` to create a new session or `/usr/bin/script -c '/usr/bin/tmux a' /dev/null` to attach to an existing session. + +You can then run gain the sixel test-suite from to check if what was working in your terminal before sixel-tmux is still working. + +If it isn't, oops: it means sixel-tmux broke something. Patches are welcome! +(this outcome is extremely unlikely, but you know, prepare for the worst, and hope for the best!) + +### Current status and tests failed + +Sixels fully work, but images are not redrawn when returning from another buffer (snake.six) + +vertical split does not plays well with ansi and sixel in passthrough mode + +Overlines and double underlines are not working yet (ansi-vte52.sh) ; the situation is slightly better in mintty: +![ansi-vt52 inside sixel-tmux inside mintty](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/ansi-vt52-inside-sixel-tmux-inside-mintty.jpg) + +than inside Windows Terminal: +![ansi-vt52 inside sixel-tmux inside Windows Terminal](https://raw.githubusercontent.com/csdvrx/sixel-tmux/main/examples/ansi-vt52-inside-sixel-tmux-inside-windows-terminal.jpg) + +dynamic switching of the 16 colors palette is not working (toggle-solarized-dark.sh/toggle-solarized-light.sh) diff --git a/README b/README.tmux.orig similarity index 100% rename from README rename to README.tmux.orig diff --git a/config/.terminfo.src/capabilities.sh b/config/.terminfo.src/capabilities.sh new file mode 100644 index 0000000000000000000000000000000000000000..f36fe83599d79d707f173284037fdbc8507a7bf9 GIT binary patch literal 90 zcmY#Z)KALH(=X28%FIj4PtGk+&^1)3Q79==&`nWLXW-OP2lA3jOB8g|41q%Gwjh3b kQ7TYfnSzo^h-;9q5>TW#zo-PHFh8d>H%~z~*}{Me0B-0RCIA2c literal 0 HcmV?d00001 diff --git a/config/.terminfo.src/config.sh b/config/.terminfo.src/config.sh new file mode 100644 index 0000000000..da5ea79004 --- /dev/null +++ b/config/.terminfo.src/config.sh @@ -0,0 +1,7 @@ +#Add the terminfo to .terminfo and /etc/terminfo: +rm -fr $HOME/.terminfo/s $HOME/.terminfo/t $HOME/.terminfo/x + +for i in $HOME/.terminfo.src/*.terminfo ; do \ + tic -xo $HOME/.terminfo $i ; + tic -x $i ; done + diff --git a/config/.terminfo.src/sixel-tmux.terminfo b/config/.terminfo.src/sixel-tmux.terminfo new file mode 100644 index 0000000000..67cc79424e --- /dev/null +++ b/config/.terminfo.src/sixel-tmux.terminfo @@ -0,0 +1,61 @@ +# A tmux TERMINFO that adds the escape sequences for italics and sixel, +# Usage: export TERM=sixel-tmux +# Test: tput smglr|base64 +# Assert: GzcbWz82OWgbWyVpJXAxJWQ7JXAyJWRzGzg= +# Install: +# tic -x sixel-tmux.terminfo; tic -xo ~/.terminfo sixel-tmux.terminfo +# +# am, km, mir, msgr, xenl, +# am, bce, hs, km, mir, msgr, npc, xenl, +# ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, +# sgr=\E[0%?%p6%t;1%;%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;, +# sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;, +# rev=\E[7m, ri=\EM, ritm=\E[23m, rmacs=^O, rmcup=\E[?1049l, +# sgr0=\E[m\017, sitm=\E[3m, smacs=^N, smcup=\E[?1049h, +# smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m, +# rs2=\Ec\E[?1000l\E[?25h, sc=\E7, +# sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, + +# 16m color was Tc, now obsoleted: use setaf, setab +# https://github.com/jwilm/alacritty/issues/1485#issue-346291738 +# +# 256 colors was: colors#0x100, but colors#16777216 is not signed 16 bit so use colors#0x100 +# along with setaf setbg to get 256 as fallback for apps not knowing setaf/setab +# +# Also using -x for strike through and setrgb custom string (should be setaf, setab) +# rmxx=\E[29m, smxx=\E[9m, +# setrgbf=\E[38;2;#1%d;#2%d;#3%dm, setrgbb=\E[48;2;#1%d;#2%d;#3%dm, + +sixel-tmux|standalone sixel-tmux with 24 bit colors, BCE, italics and sixel support, + am, bce, ccc, km, mir, msgr, xenl, + colors#0x100, Tc, + cols#80, it#8, lines#24, pairs#0x010000, + bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, + clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=\r, + csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, + cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, + cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, + cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, + dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, + enacs=\E(B\E)0, flash=\Eg, hpa=\E[%i%p1%dG, home=\E[H, ht=^I, + hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, indn=\E[%p1%dS, + initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, + invis=\E[8m, is2=\E)0, kbs=^H, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, + kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~, + kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, + kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, + khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, + nel=\EE, oc=\E]104\007, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, + ritm=\E[23m, rmacs=^O, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, + rmso=\E[23m\E[m\017, rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7, + setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, + setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, + sgr=\E[0%?%p6%t;1%;%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;, + setrgbf=\E[38;2;#1%d;#2%d;#3%dm, setrgbb=\E[48;2;#1%d;#2%d;#3%dm, + sgr0=\E[m\017, sitm=\E[3m, smacs=^N, smcup=\E[?1049h, + smglr=\E7\E[?69h\E[%i%p1%d;%p2%ds\E8, mgc=\E7\E[?69l\E8, + rmxx=\E[29m, smxx=\E[9m, + smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m\E[7m, smul=\E[4m, + tbc=\E[3g, vpa=\E[%i%p1%dd, + +# vi:ft=terminfo: diff --git a/config/.terminfo.src/terminal.sh b/config/.terminfo.src/terminal.sh new file mode 100644 index 0000000000..b504d20937 --- /dev/null +++ b/config/.terminfo.src/terminal.sh @@ -0,0 +1,111 @@ +#! /bin/bash + +############################################################################# +# Detect and report terminal type, name, version. +# works with bash, dash, posh, zsh, ksh->mksh +# not with tcsh, fish + +case "$1" in +-h) echo "Usage: $0 [-t|-n|-v|-p]" + echo "Query and report the terminal type, using Secondary Device Attribute report." + echo + echo Arguments: + echo " -t report numeric type" + echo " -n report terminal name" + echo " -v report version" + echo " -p report 3rd parameter" + return + ;; +esac + +############################################################################# +# query functions + +query () { + echo -n "$*" > /dev/tty + dd < /dev/tty 2> /dev/null +} + +terminaltype () { + +case "$BASH" in +?*) # try simplified query as suggested by Brian Inglis: + # https://github.com/mintty/mintty/issues/776#issuecomment-475761566 + read -s -dc -p $'\E[>c' da < /dev/tty + da=${da##$'\E'[>} + set - ${da//;/ } + ;; +*) # other shells do not have flexible read and string operations + # so it's a bit more tricky... + test -t 0 && stty=`stty -g` + test -t 0 && stty raw -echo min 0 time 5 + da=`query "[>c"` + test -t 0 && stty "$stty" + da=${da#??} + type="${da%%;*}" + rest="${da#*;}" + vers="${rest%%;*}" + rest="${rest#*;}" + rest="${rest%%c}" + set - $type $vers $rest +;; +esac + +case "$1" in +0) t=VT100 + case "$2" in + 95) t=tmux;; + 115) t=KDE-konsole;; + 136) t=PuTTY;; + 304) t=VT125;; + esac;; +1) t=VT220 + case "$2" in + 2) t=openwin-xterm;; + 96) t=mlterm;; + 304) t=VT241/VT382;; + 1115) t=gnome-terminal;; + esac + if [ 0$2 -ge 2000 ] + then t=gnome-terminal + fi + ;; +2) t=VT240;; +24) t=VT320;; +18) t=VT330;; +19) t=VT340;; +41) t=VT420;; +61) t=VT510;; +64) t=VT520;; +65) t=VT525;; +28) t=DECterm;; +67) t=cygwin;; +77) t=mintty;; +82) t=rxvt;; +83) t=screen;; +84) t=tmux; set - $1 200;; +85) t=rxvt-unicode;; +*) t=unknown;; +esac + +tt=$1 +v=$2 +pc=$3 + +} + +############################################################################# +# invoke the query and report as requested + +terminaltype + +case "$1" in +-t) echo $tt;; +-n) echo $t;; +-v) echo $v;; +-p) echo $pc;; +*) echo $tt $t $v $pc;; +esac + +############################################################################# +# end diff --git a/config/.terminfo/73/sixel-tmux b/config/.terminfo/73/sixel-tmux new file mode 100644 index 0000000000000000000000000000000000000000..f834e8927ebba4d7de70796aaad1424ca09078e1 GIT binary patch literal 1964 zcmcgtL5Lew82(>Ux>jf_c(DwwBkKcKx_0Kx%qDTv)UBnf?UGtcS(*yXCfQB8Gf6fx z+08ba+Jk}@1<`{jUi9ciMCertMeyQD@Zdqbc<@jthG*{IpC2Xk@Q>+eKyrB$m0?N;5~W6iB*+%T1Et~6t_+78;? z=%~4H;^a}Y8CQa4H8K&Dj5niRr_=7nL_+`A0BFsK8@#hH4?!M-jQ(Lur$WR&+K=cX zG)vH;x4yguqjsZT0)x+gGm+20J^$;We((MKYdV zNRGi}UpZQ9Y~w!Vu$%cppf}?be7Asedjr>C3dZ$y5&Z7j%5!`l2g>t?@)Ez26p zV^Te6jc;@$E1qzrf}WA86QS@cI}9}eJxM*Hy%b@4^Y;!Zz;uNk($B`ae- n<8cb9tgYze!Y4e{)}O8@Bi8l7a@2Kxqwr>M7ltf$hw9MW>5jWEW|hXBO1MCikL zE9f1F`w`Xu`RAOFA=x}+FJ?>GgKQOB3x@)0W?NV*+X23db)xNM18kg48TaGtdG;cE z1^g6yk9`0ORx$MrQ-!aVw@eA*B_umH8_JVA78!q^1}KaiJTF z>NH4$3KUIpOc{A%x!EQrX7;=jHcwFaCDM!sme$dXN8ATln^bMmib?m1#xMvP)?+&M z>z5uVgGFhKJj8k^Tggnn2J#?tAufKm_U~sTp9vT`R9vP`rMn?}H9vd4U zpO`puWO8z9YI^!8-OFx7F-K)q%%L7oOAk|J#&lhD%2BFm8m?=Tg(iTW70vzHUNS4v zIcqAQk|rNYrkewxga}YY1h$Y|TFznKVZovf9Adt4bQ{vKo0lfmJF(u0^-i3(E7R0s z-eJKayp66yhmphBVwh&Fch-7mt#{UWo4O8jsl~j*f<<^69o`lrhq1*ljjVTMy(8-# zId5}%@V1zDSg;6hd%7@jXJRpS^U~OQ$JRSG-t<#e%oga;qh#@e*G_VFfMiulgHT6t zlFj7{d)pvUM1?dipyXWn?~POQdeY&pgX_!_(Md9`R^h1xK`^ZvlwPZMHc$~y-ex4O zJ>u`7)vyxEhT291J(EyP=BHJoszhdC)nTMCYqY}5I9{phh;X-dd*+qQO^<7&hryiu R_@;cE6n>89{Bsy#{{pa?ZF2ws literal 0 HcmV?d00001 diff --git a/config/.terminfo/74/tmux-256color-italic b/config/.terminfo/74/tmux-256color-italic new file mode 100644 index 0000000000000000000000000000000000000000..7e9523b24835b13256afff8f66a42c215840b831 GIT binary patch literal 2472 zcma)7TWDNG7@j#Z+gPFYArG}2TBCGqExnvG=bXLt)U5WRp{67nFKxHQrnzprNjBL{ zlQv0Fv|tsypdjLdqKIH0`e4NyR_H^E3RV=<7ZIT#^`(M{4+`t|&rBj)Q!(s6-#6dP z|IO^oKbzHFmaSsT**IUnq&_k^y-_FGzOl;K#Kv;Hw^Ht#ovsf|jI>Ra>%(nUY3m*B zZ^NuMGp)uLHy;8J(-NT%dfnhRAZ|u9{^y^wLWX2ZkiC+vX1BBTY!e&`Y!~Z<>m%TM z*&y1(Y?Mv2S>yf~dy<`E&w{_s-eT_n&#<%XLw1f`WM8na(Z9^Du&eBMGrQ4f;dVzp#+k{8eA! zZ3U*MPc_xvaR3;&J(NH4$IuuQEOc{A%xrHVsX7;=XHrput5^2T*OY3OfBd$Q!CRLlX zVlupDYZwHZ+c6#c^-H%_!J;%q9-g$L+ag+cmUA@B}|}{!klUI zrY%sb1GHTo#E9$w$&yafyXY{&RKt}3$I@kw#;#iohy6P-gs%~qjT=G-V7@Hv!;szc zgnW#0*F2$}8KrZc&<2b`Ya8<5JfXGAh?ttB%xJWaCTTSj&Z&*6{}A*0`~$d|7R>n9 zLFFO3vgl`ijtXHnQ$X!o2vZ|hjDkYkLYD+a}Y-y;fk(xz6XZtZ| zVrdREuTorb2V06mn?f8zOd`e+HFoe|Z|~sX&``O2`0$Yywj5k4{ZZPaivW{P@hw?Cjj!3A&Vhh+>XTxR^sNblroX(~VNPJh~$&1m->$M02UO zmn?{MzM6`rq+^#%H-==C4FM{Lz!r~7%Q?(DELhZmL(DghZbLeD^U}n6C)PW$-ih;e zrI}jHJ1kg)x6yUzFmf1M4AZRj&RXxR_0BqPQ_Nv5wU~EUun2FX!`ouyFt!+`k@b$O zcVxXI=WR|8-WKx?3l`yRPZuWcOf1H3UK(5P*m}ptn|{8E*#bRulq!DY`bo}?lB`N; z5b7vSvblWWKp!NEsF215l$tC11956zO*%1jXp4CoI!Wf#dOVRJ2Y15`H z3hGHk5JUtoA{0G%6GiOBli-uHg<&6|0l-CWQ&f~9hyFjaJkg!*yj&l zduTsNYM~G+JLx3#Qi{%lFHi=WqY0X(vf5>is&tvIfp5_r<=mqO^boX6kLfA$b9zOu z>5ZE6ytlRd4*7kJKOldsvFClF&-8`9(l`1}KXA(pVvE==b_vhhhX@KO4kGi_E=+N# z#=f&wyD`@zPK!Y?ENoE}RdE&0&2=m8DrZ?d5zoX6@lvdaZ2`~Qfv9)wgg>}uF1=>N zYc8&H>h1LJUN+$Tr%t86>{I#8x+`_&uGjJY^qg+g_P8CmAJEc6w2`)wmX@|G7%~%= z1yg2P2v_6`lBnetnWQ!%89&W+ab)2$owpHOhgHk=C!QJahojPfgH> z12I?@-7yOspd@-Xt>!H9af*;e2KJFH-ej)29M4l z&LYmiF(Po%MpS91(ip3$D^>_e9f#M!Bd$;3DN;uq>01Tvp&V@Q1A2_AC)M>lvKhf~bn>MChBBl@`M9}@E)%lQA>Ftk^d<+AlK3c$tj}f3L;|{NjNw-N}YL;=*lC+6hTie<~q4suNA08eV85_%Hb2-}{ zAD@`W=N)Hqa%!qjn4T^cOC{GWmuF^XXDgMtx%v5Obzxy~afwfCh_nOU{wuL~Y=)I8 bHu&chj>WAQzvD2AsgxfntPX=ct42Qo`!xUz literal 0 HcmV?d00001 diff --git a/config/.terminfo/74/tmux-sixel b/config/.terminfo/74/tmux-sixel new file mode 100644 index 0000000000000000000000000000000000000000..71d03332c7ca5adbd3ead42367d86332924937cc GIT binary patch literal 1837 zcmcgsO=whC6h3!S8Y`#^Hw_QtNPD3vrg^{f<5MS1DyEt+(LxE1LdMJ_Gs$~1lbJV3 zCX>-DEOet#bRmkHcIie$$hH(hp&M6)F1ipmU35_>6mb#8@7y;*Mn`BZc$xE^?|k>3 zd+t5&y%~(0p+j_lmc`w^z^|_j*NSU-Z=)7uOS!C9F6E=FMpuhLA!<6Yxw2QT){aKU z#!nrM7K5x;oU28#G^)~~wR)vet_DOx{n&vhWX1#0G~6E8hp_g)9G$I@@gBX8>;W1i zNkcS@9TM~=OsYfH*8Z7VY*BY*?5g4$s3CDRH{P zL!}$jm^&{rA}4&YBCd*W#dlEdyq58UQXYvd@srpVKZ{?)V5HqX0_!zCf`_qe?-f@m7_tMXpC~y&?1O9{RH$+JEiSPG=9%H`>>oyV<8@E>J)1 zBP}C~vSP@bD=VhVRUudlfC(*g2JS43eP_|>mo!{IL3<%hz*45;;fq1KT~JX0e4Ml? zC3(PU*c9ytIzGT)NEy1F1h z`GR(Wv{Rs}k6cTUsa=8-gv#hH;p%G5n%AV&Ckr4 z5m~X`IAiyo(Jta77Ao-@1LU@at!gG(^0*8vRaoZPHI10kk}AObu*}K4m2jQ#cxczF Y>2{BFL+{GByYs^~;8W@P{%UB;3+S_FMgRZ+ literal 0 HcmV?d00001 diff --git a/config/.terminfo/t/tmux-256color b/config/.terminfo/t/tmux-256color new file mode 100644 index 0000000000000000000000000000000000000000..2f9d96540f761f8398341c375f1ad62e3cb19c31 GIT binary patch literal 2305 zcma)6U1(fI6h3ojVysfDK3MIwHl-P@!8Uv6-n&2EnAO^}Atr3Jg~qPMw)x#;lWdbs zlXjD)Vl8T^FBSxU9*R(eA_^iDL`6#dK>2Gh0-c>>V$TPt20nFkL7QHDIVg$0h-o{t+P2mI(bA z>xLWQPKcLzfW`9w0&c(+cfmbyFEqhcT$zCm=!9>PWCU0|QE&)60A zjm`LxU1Pr>|Bd~vBeyuWId?l7oQ+PS^NbV6CvaSUPS(5^k$tSai_U_^FKTnu^w7p5|G;ljryz{xl!t<9wRW z^OO8EKf_<+Z}Ri}J^lf|$Uo;-_*MQrzs7&%fAW~ui#1}c*dXo`%_1dQMVsgpyF^~} ziV-m>D&kpjO1vyy6=%g;g7*9W&)edH_)uID3*xf)dWGCn-BP`lWnxQL{dZ)W)!0$@ zT%DWW3-z!X+`KHvk|+BjSyHlZ0t5aanszs@IuIYjL1BuPRYG%3(d4#cEJ+@%&(VMPB89R9ScROagxNUj4Y?12+lI6H zU(wE*bX5r@>d3=YLTAyD&MKiDb%Zw4WOtR&W(6DpnGj8{yAP{ekKU3pq%ml(xDVVE zU1}G|tSn_@8LvwAW3^@E<`Wc4%5vn%h-ipZ8LE&5hI+E(%USeO#t)E&hNh6FWrX+E z4y&*tZLoj;fdc~rgM)>_@bJh;u{b(9Ha0$9DjhmBF)=w=E>BGzK0G}=Gjrs~(W8~h z?Cjj!F{*}Gl z!L-GULDV+YMG;#QgMnQa1x7nC+JV-lPZ0JdexdrvPmZCg++#s0 literal 0 HcmV?d00001 diff --git a/config/.terminfo/t/tmux-256color-italic b/config/.terminfo/t/tmux-256color-italic new file mode 100644 index 0000000000000000000000000000000000000000..847176d18449a1fc402d46ede6ebb4228aa1cafa GIT binary patch literal 2313 zcma)6U1(fI6h5;vG1?GB1+Bfbtk{v#HqG9-_wMfPt=Vd;4Qb+5Bcyg)Y|Q3olTEVS zY?|L~s)*H>>WdViAoW2XTBw2|MQTB?A|e3=6`>DB1<{8-h$4ur=gdqt#3bUf=X~Ee zbIvz+XU^VDED4+8PAIS|4VBT!=@u0v`^Jmo<(5LFw^-<#pRV+mN8?k4%23>7;=N<} zI9A1V*#rR7UjiiB6QM6ghv0VD2(>jnz-kKs0&c^K`(X<_1lwU3R))|4o!Hld{23TP zKMZ3q4f9&%G`t9}z**$y;5=MFd>bypyYK;g44=T~7=H!d!VUOASJ!I4TWn;tS`!+5 zni21|yjHuHZDMh@m2G1?nPO?y#`d!g_5`kXqxG<(te5q(BJv3~#TM#)M(f}H410~e z!QNsQ+57A&yUrHbcedju`-%O6{1*FDXEwx|V;f^mY;!CgtHx@z(`d_|7wXYV$Uf51 zwb-Zi>~bZsFJg=9tgNhC8GWsLzOQ%QjQt$DrK3O4|84VvFLyQZyZC*43zvK+_jttj z@q@gZ=Xf6<;S+q8KhIz0ukv&JP5utQ%s=GU_-A~Pf5UI^ANjBRH~tsrqDkB%9Pyyo zA(RNkUU5KVMUQw^42p3vB^JaPaaO!8&Wq(;{|~z$E{XTV6>(Ku7hkT^yQ5*XQeutV z>Zy+mlI0-8@QK-cFS!xL`AXw?y< zF=?+i4^E0Mv_I&q?0o|vdqCMQpxoSK@R zo|&1QotvAVuU1dd@g70Tq-aJmDZJI}<7jkpUPRYGr;Ql`eKYl>z8(_=^(390qU+Bo z-!{{2U^5N?0nPw{83WsvvY56Q8dM33Sg#fB11aCuMS;-{jCNqO1FLO^EHaq37#c)v zomZ|!&!TV8jgm$?X|$6@J88A`Sh}gmVA^765Vdt4wGDa}eS>b~8EwyKdq&%{+WPcR z+hE#aXb`o{>7s}|6NA33i+rQ)8*N`}(`yH365mRBij!mLGI*+eh-6+E`5_LH9qMC# zq~|{>4?ee>USxAB2&!_soWp;AqAFXZ+NBP+(rB)?;;+5p9HrfGCma&;G-fpXuAEC( rA{-{?#jhecl*Gi`ZL*teE_?Y- z1Vym1QBXulV{2n&C0JO9jfI7kg@uKcAOs7G_5WrskdPoK;@-{w{oa4x%` z@o~hRSm0IW;!ZH+I>SrMjk8WrYK)A=>5A`9mIET8z8nCek80@vh1*=U)Paf}v=bEv z=@3b3Qgv}^$4oc%Aj?rd^ePR~D2=Jv3G%5z3*g&yS2_3SK0N|GrB!-{_?%wQOM0c| z!tix9zCnCj<#&khs~mxeiiPEygTZlAQI>Xd1xCh9xOgqF#xAL>1nwd&rz{uRhmoT?Xu^XSEEz+$Q(S3s zW-}$3l-M5LVy)n@s6yVwW--;gi2@CG*rdbirJGP|g|vJp1|Mb`oL#`Uh;a#yk$_V$ zl1kf@rdUl~u|i0`8(u4CT%X5NJ(M+HVZKNf+wY;M)GtzIBLE4aMMgwR?XaemBEnqT28<>bN0W@XW z<8>(+)X5w5GEG{Rc2RS4OG`X{{J5?U4h{{CjuwlhlH-hxjgPyo=S@sZPWt}TRJlAo z9R!ui%*^cU+}!;9!ouR>($ezs3U_CKv}2u7`)$rmZhyg4Z1DfZN~P@-|DG0$sgxhd KQXOE=uF@|KDE)E( literal 0 HcmV?d00001 diff --git a/config/.terminfo/t/tmux-sixel b/config/.terminfo/t/tmux-sixel new file mode 100644 index 0000000000000000000000000000000000000000..127e4efbc5fd9e217188167d0842ec0079d8ee2a GIT binary patch literal 1807 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 CiYOlg!I- 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%0A^TX(?7n&s5jlZvVFzU_Mz!jK>#i~ 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 M{x7|5{5|vk0K7gYyZ`_I literal 0 HcmV?d00001 diff --git a/examples/ansi-vt52-inside-sixel-tmux-inside-windows-terminal.jpg b/examples/ansi-vt52-inside-sixel-tmux-inside-windows-terminal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79bf6f158de3587cfb29ee40346fb8990d9246f5 GIT binary patch literal 155876 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 X@e^_HTAH8-6S&Kgp2}43=?< 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 am?0Wb00iiP%6BPUW|Bhx=Wm2}-v0-63EDLP literal 0 HcmV?d00001 diff --git a/examples/cutexterm_sixel-tmux.png b/examples/cutexterm_sixel-tmux.png new file mode 100644 index 0000000000000000000000000000000000000000..2c21a75fc24a885c087f3242d8826d8cf646c6c7 GIT binary patch literal 1168603 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
F&V3t8^Z9x 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

=Hk$gZz#elK@#G($p^mec6SBy-J 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 N6#dGiO+oFThqK>`s?MoFXY=n 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

G$^Dz|dXc0$WS)-tp>HRrR1^#VEWIVlQS&z*B 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⪙?l;)DLhMbkBMd2?S+(wSdvsG_!V=0KI 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

35!bQ2UD5%ydBOk;l~jjFZ0fi9I_2i{ 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 z

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ⅅ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 by*pY1cYvz?p+5^hj^+MWpC2gShyCq8%P!80 literal 0 HcmV?d00001 diff --git a/examples/cutexterm_sixel-tmux_derasterized.png b/examples/cutexterm_sixel-tmux_derasterized.png new file mode 100644 index 0000000000000000000000000000000000000000..52a40e9077e038d2507325094a6f9b293e9eaa8f GIT binary patch literal 333482 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�aiSW-wV6?YBgH_z$EQC|YttW?qkBz*Etlg#>p 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�RHsYs5*BL@3xQ3n2U14g3FXz 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

TO;kM<_CFht=S_x?q|It?}l);G) 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%0A$X4*X3ZHFB2Myp40Yh)B)$gl9i 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%0ACK)f0t@8_=gYa!#?Sm{D1A}S8Y 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≪wdmNiR1!# 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 literal 0 HcmV?d00001 diff --git a/examples/font-programming-ligatures.jpg b/examples/font-programming-ligatures.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18e6c672f5e5501bef16f5f2702d32cbe0b37792 GIT binary patch literal 40437 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�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

ujiBqyo9>IXPxc8hQ7~pq{1q1QW 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 SEKBFWzfp?+P4}?-G4(&dpi*)G literal 0 HcmV?d00001 diff --git a/examples/sixel-tmux-inside-windows-terminal.gif b/examples/sixel-tmux-inside-windows-terminal.gif new file mode 100644 index 0000000000000000000000000000000000000000..08bcbe891257a338e7d4cb4f24f5df8aa6851210 GIT binary patch literal 4882688 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 z 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

O0dL<%H)ZfRIV16 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�uf^U)x-Xl2hRPG5+ZF*~oOeyTg&YMk|` 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%0Do4`qciX3XQb>xWtJKUbzv+RB16*2j-je32%( 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 My$NqW$(n+o81)7cf9pwaKqet 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 H{zeiRs_e}OqwtFxIi@@*k|c7FJ)1j! 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 _%A~h#=$tSLMi_I-7lWW3b9<0*zZ5|&0COiA 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 z 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

kF%`*x+>0~l4j74$IK{{KCjfsu$%!0O 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⩔$L6L<)QHaf$ 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

`=Odu6f^E3%5L{bzzQ6-&9 z_N+=LEgvYAB`MX%_o!08ywUv3QXS>eJkh2Yz#I%AvcXBIHl4# zB?plF#vBDrJ(bik25LRVa?NGHOgZR(PTx>=2X$=R8!gf)LlJPc->KXJxO|15_=8TWgXWgE!XHg*JzE>X`ND1 zW!E}IRXD^@g4IxiMM#9j4~3mo*Q{08eAoqzSd7d{X~j)y{nv}VQajaHE#=q@_1J?1 zS;r9Brxer#J=qpbS@>MpiEY`6_0>7OR$;B#g1y;t%-P1+*+8XLPW{;?4cZHe&lrW! z8GTu#4OpdJTAOX!V|-f1h+0kUSzE1IPrX_T%379{QI|ajfW=sMP1Uev+OaLhvR#a` z#g9$(S&nE=L+w|Jjnj4Y+PW23yzN-M-P>1P$yjC0kxkE%T~EPXQ^J+lH#OWvP28Bx z*iEEa#tlyX$9>$6SVGA?Ps$Zn%U#j6#nrZ5p0_31xHVeDt0N&u0 zN^<=TZZO{CU8mzc-jMZ(;gt*Jh2Ga||$l>r&}gYD(s?iG$m0N?NxU+`TN z&n;Ct-3vpdu-;`~_W9l51zzV()8d8RqEFygLF;Us3$^=0BT7MU1^;^C!X z<-OqLwc`B6;wU7krsGt$<4Fc!R}SJ!HegLYUt69eT-N1ihSMibSq4t$7G~#x-r6yw=6CiDQU+#IHd|DdN>%=5?A2#W=I1c>=g$S`K~`si z=IG+!Wj9`AY%XPOre|)pXK%*mV}4~={ta?2=Zg+VXFefl?&zBCjgO{UcsAZRHeMXo z2pvXg|K;LJ_TGvnVwjF;P7Y|BX6g&U>A+3sUzVLh+uz`6ZcyESkY8%1=7|2`i7x6`9$#tmYCrB|vexUHc4Bw7X5UEbwQg&- zhF`euV!0k+qmBf-MryoX>b-{SmoRISMQeHPX-vh4!6t0rHEg0zY`PX-{>FxB$JS_p zj_lJGiOIfPz_x6)#_WsG?9J|M#NOUZ7VV2B?OWbx)aLDuQ0>>P?2(@5Z>?vk-0a|; z?X6bq+xF+&e&*fo?dZmc-zHwx7VgVN*5Zc8AJS>#>Vf* z-tPyW?!M;kCl-#ter=10ZNi@KWM1wCpVMb8@31~^2tRE^p7089ZNYZl3EyyW4sY-s zZ%qX81}|+AxAA{4aqdR(>vrwzhHnBt?iSzY7hh}-uhJPe;{3k;asAHmAaa_YDJ%@i;{C6ISvim+mIt>?faUh8FOS*oHJ$^EFR%7B}$2#`50Kaw8AO zE=S-m2lL(*bHXO`XrSsd=Lj|z^lfl+E6?XR=Z!g!v{JS6^2PH!N9{d#>puVUg!PC) zXY)emVmPPo4qtReZFI0EAF+mXo0fEHrgSs6bTr3wHP`f^rfrtaas~hN56{&QAN3J0 zb(=1&(xQf62lin9^$FL8VmJ0wWv7K_hjwT`-d0z0WVd#0m~d>+_HE~O zZOB2llZSJK=*XlLUdsFc6ax8hxc}GljQ#Bf_k_2dbfmpw}f4n?p{wO zVF!3>AogoN_GUMDX^8fOpLS~B27*8KZ147n|MqYn_opcLk~sHtNB4D)_m1!QdAEss zzjuA#cYg0}fA^q(7xsa7cx^cNW>5HNUwCS7`C^Coi0Af+2ltA1ii;VZcFYNPamO6&@cEGddUc;9 zqDOmlF#4lM`YurVrAO@pdwO7xdV-(&Wv}{YpZQj=d2HuyuFrX|r}(fZ_klZ!vfuc# zPy3-?dn;&rx7T;LkNe7+`(fwqzQ22C&-=Z{^!~ozdal=bu-}}*SH8pNE{#w86Iy)6 zU;D>@d&!4vxv%`XzxK>W_|3n1hWGrx2mG$ToUiBkrWkvXK>REa`qhW`#&`Y5hyB>6 z{MorBSVFl`5^QTD5ZP{<`fe*sx!vlGWDqY&JP+*RoaXjEcmD1mD+BLdv0CccYXh^8C>}A;^vU^N2lB( za~yeu9f1WJcp!oaDj1!1+i_>qdfB9>jd)g($CX#-fi+=-?XmTqT=B_AUnaoa2Uvc^ z4Yy(zTDbTkj4pC9BaJoA7+@Fv&Mmkjk3IVMBaqfL7}SFht~X(YRb7~sc^ZzDUWXpK z1y^n&@4uE!m`#9Ihwj zly6nJ+lcgK8QhjCc8L&}F^*|tnFF@@D5Q}}Iw@sueimnhNM6MXr=2cI3!WNI7z?ST zno264w^0cnpjQfNUqQ?rI;)q7zPMZp6Q+X zY%HmQsM}leL4hT#1j$M(x3=Dj>x}`L87#TwntQH+mJ*vOotq}h%BP{8H!8HIO1o-^ zt@h^Ipp6XcUj-OwKQE{DDP|Z0?lz;9-r-M$ZE&BSlcEG+_cJeOFlW}3gR7_-Zt~?H+g`& zCb-6g|M@ZEY0tDa z>Z-fVI=GR~{{B4l(eG3{Qn%yWF0#6NeX;NF0x!DZ)?$17$jK{z(A&+&y|VP}yZ?Sl z)E{NN*4XQ;{og&G*L||zlihK?NLRG_kPm6*J74;6be#3!w;en6Zdx%!nFW zw8TX%{!osNd}P&z6{kAdQHJiqq8|C^N3nq~fMNV00SQ^iAs(^|iA*3Pn+VBOvT{;` zcqJ@j`N~JovX-8>B`$TL%U$wPm#+9FFoP*fVEUq%#ta5BlL?DuGIN;2d<8V4DNShF zqMFvcW;KDK&24fM7{s^&IKwGUaHgZ2=EMU!(;10%va_A*yaPPrDNlGdt!ZGmCqDCe z&oJ<_pZ?_M7y>HLfd)uhu*DK=Ny&6c`UoG>k?OlMlt zcH(rNIt5ox^$FB}4waxqHRw^1y41b$l|W66;d;}uX2on;mHSTS=G3`jg6=-08&v8N^{)Qc)h>Vo zyc6z9)VomyZ+OMa(TucW{;n%17xX4CU35pF|(G}OW z#=yuegJEpmk)rn%Or~v(Dg09S%2d9QAOo1gEM_qGn8Wxj1DeyUW;BC%$VWXgoZ}pl zBv16aS9UU#U;NP+pZB*{o^6(IjN_PgS-xXFG#ScFqYkgR(Pe0}e~B#TNf(*U6kYP4 z@jPDLO4-4Ee(axz5okeMIKGBPw3rn=BSt$~&5#zcq$w@y09zWWD*nE6jq{AvJx_U~ zRSxy2Z(Qm^D;L$NRyC_z&1U|(d7-m@c6Mtm*jqDM)4?Qfr<+;TPy?I2S{~=H(}{+0 zle^sGHg=es24oN`JI${)>YJf0@6}4%&ehKKrlZVjPmh$_nfA7zuMlo@n!Dg=KsT8Q zwr>8md)Y#cbiC&+ai!Lq+AFrUi+2rDes9#@xSnvp2aX4Wn;YSYR``b*-tc$hHP#b< zc`FG#SbJZ*#)-xDVsozZV0irA6W#^TgD!NSXEw7WFSp6Xp!B6PUFi#_Zo?lZu(u%(MPTna>>4A0O_`Ilc3-C$r}@|M}3$mJSd&918vX9;D2+nfa)xLIdxBcJ%za8>RmwR35UU|D?-r1YKy#qVn_0LZ>^r9dAVoPt^)1#i~ zsvmjdTkm=?z<#K*AE@OoUwhT!zWVUf{mgkUR^KZY_&XPVlf7O1pdTOktbhFSoi6#g zQy%)3pFZ`iFaPLapXP_Rx$nLIeeeTX{Nvw6`8A&7p0>_qAZ~y`cYT;PDBd^0}T34ipZKfezMQ4^H9S z{NUgH+XS*85q{JKirNvzU=ng54SL}E#a;sD;0Q_~6|N!7SfM8bVK)uo7M7h6W*``< zo)UK8@-?AAJz*4L9vcQ?%eWyNa+4g+A7l~A>{F4K=~mi;@u{`;<N zN;h`nH;$u09^{pk<5ivGyQt$jz9U4&W5d}aMVBt6b#Jk?}B-sCIkBvk?lPkJLb0;N`Vp->hRQF4k=BBeVjWvek| zQ#M>ax|2q3q*M+7XBVx(HGWm~!> zTqY)h$fYIFrCmNIx8bE;@?~HCC13`oQ^FHevZYiire_uiV>%{ej^>Iz=Vgp1d1|G3?i_jo({DaxWwz&gwp&`Z(^@7cZQ7@TN(O!+m`dcQzwM{a z_2)1BCrh#?b`Ger6(~C$sB$hSi2nLSgM!zCLTIQ-XwFfnD_H1JV(4&cXsdDPI(cY< zhNz9^#E9BfiJIt@q3B|%D2oPXd%CA~5-4FBsA1OVjV>uobmK*dW^L^#kIoiM5Z+;N zk&p^#V8Wl59p*nWDVWNHllBsn(w3A?X_b=QmF7^EX6TkqUzd6*PKGI+y2P0BQkha| zN=#{#zJ!%l6_&avYq}@e-DUYV<*sbXWwdsq#Y3;@7p(3WD zc4|p5sxCPyq?)Lt?i{7^kEOEai3miYD%Yk?rKiTKNPwy?i0Yp5sh+yTpN>?Z1}Ju} zDkZe)X1yw>%4)3As;!~~{;uX~OYG`K^{QA7DXRa_owEY<_}l$o3YX%4^BeE6VOHC#dYzv8U>EYo&R*h=i!POQ}C71b(f+Ab;9x~Yutw3+o+!J51hZysOE?+#;ezOnF6oMHE1WLso^GxOOY(ysLS zt?eo*?&j|9Uasa2?(d3(@U8^$hTid(Zt|jT>#FYZx-NRbuIx^)`x037%Ifu6ZuV~P zN%U#w3hw9PpZJdN=$0?~Hm~`n@993T(?;+6CU8^5Z>-L*?$&SbZtg$iZ=bqE_zE5X zXK?bKZ!7+AumR^R0xPfx!x95~ssn#Q_WpwXngsp=@9$Rd{$?QtYcLISum`U%^tSH^ zk8lZh>ItXt3YSC+d$0ZuFaORk4QH?o6L2ehaLI=74l8gETW{_@@a_gNNeprD7BTo9 zao8oX1~0Jy7cdSVuntFY0#9+G{xAfKWA|<`3>&cwe=!&Xuo$y~^Oi9PpD`M{uNv1W z8(;A_zVQp2=}TNN9oO*&Gw}`o7W?+G6#sFU1~Tuu@dUf@CC70W&+*MEa{1nI9y@Xl zLvk8RGMG}b_73tT6R{?%1R{5`Co?Y|5AYZ_u^vA$ACvOzn(`@EF$%YF$4W2-8?pu0 zSpF=>GAOIBD4Ve^`!O#sDJrXQ1at2y!!a?(@NgZoCnqx*FY_KZ^YlJ5RUQIJkn=y7 zvpJ(gG-L5dXmKGks~l&uHrFvX+p;&~GB``GIO`-jm$N^o#3Q6I5OcBbTJ!gQuanI) zJu`6zS6S>nG(<;qKGW_#=VU*h^FOPzKm#*8uLKOQD=S|!NF=mECou;%GG$xOeD`-s1v^2M}1iv#EBlJ%5 zv=aMt`2uxNL-bHXZc*FkQOorA7Bo|9^7mF5REM!tCoff3H56ZU)n;{gZuLfY{`FF4 za?#>6Nr?4W+i_Wk@?)X3RjYN&vUPpBwLrr)HGefthc$ZLHD1>;O8*vLv$S6aEnv4b zQm3*~7q(ma|-rAU-tdlbTEs=Ewr|4zjkYLc4r6hEYmP( zSG8!bHEGwTX>)W=*Yq%dFKiF@Ey(t4pY%_s^ke68Zgbaemv&_*HBEbUW^*xd!?tmE zHgZq3azA!+f9G@ac61YVY6rJZ)Gw|G}Jd9$!;$LvU;cX}uG zY}0aWYp^f-@^Ujbd`Fag&o@%nw-Dd=T!Vyu$2NcWcL(P+>IQff4|sw8`{RLsW^W5J zYTLJYYx08^cZByhd#A32=Prh4xN~o~Vs`jUcQke1w1Ypmdf)YlS9pq3?uxVcU%9wq z4uap|QYRF-kso;{ID`L=ZiLa#-G%~`N4b=TLNag>{Q%G15(`HHxr+<=kb44>hq;n3 zIW9E0^*s5MPkEK+(3Oi#mdDAKbNPXL`H+V>l8^b4oB8dad74N0nqN?x1I?QkNu0}h zc+kXv$`JeMopli(C zT1ug3I%y+%*LAw5lX;n|my?HWr2F}#-%h1Ft*T=>tGD{5!+QRb%X+A1&8Vk&sdvw* z*GsCu$*TW4Tf6$q3HzrXZ?R*|v8#EmXU?wYY_G#Fv`_XRGy=JoySbA)wG%t7pSi8y zx}>u?rHf5q1=hE>c(_OVx#xQ$q&t~k`^{v#lqb9IEIYK!`%~5XYu!6wkGsB`JHO}o zy6<_r-@3q048cE(!A}&z|G2_uHN!VNy2E<48?V3H48Y?$yz9EWXFM%!`~r7;QGYzh zKYXJ{{G(5Nq*wgAT>Po9e9Jq#ufzO4%Y4JrJgD2esN+1TZ@beZF%&$$LFWn7r6) zd&+0dI_y2)_x;{KJ=%Aq+OPf97k=9#8OWEr+?Q^#|3e3WJ%)Ez%f8}^ygMYn@-Kh#w}bOPKlD5Q?UR1)?|w3{1NLXX_G3TucfULQ zKHmqwb__r9GqCZ8e5X5u_cMR=w|_fKKlMNU>HGQi*FQU~|MG+X-=F>F+k5#>F+dDz zG>~Ayft?U0RM^RxJBJS;I&3$QV#SHFFlPMM{(&RM4gW-i6ge_fNs}i-C1baeWy_Tj zVY*v4lV;7Ck8tMHiStlTpFevJ5;~M9(SJvgCRMtWX;Y_9p+=QDm1zmoaD7yt%5{wFTQQd>h!^T#M*Xr~Ze6HR}Se|1}=O7p337ElE2h zZ1eC=#Xw~<<~*EuapT94Cs)3lIa1G`4~9-SI>8#VvJMpaSOM`+GGbS=g)b30)QC#y$@<@9TMhD}xa*#YB zja1S}DP3w$5B2jCCP1+>6Sk&iQ;|);TzoUeMy;$=)m2$-^~M@4iB;BFExCt3{_x3F z*MErU^`8$CNMK3EE-BX7V=w-}=hobGZMIn|Mj3^XX{oJtPFJzbR@-gogOyfVZCy4n zXYt{c2&97TPBvuORaRWM$aNN4X{)XGT5j>pSKoan^Y&X=!+jSfa(O+f+;oQ}id|&g z6*!`JpN+O&dnM%8;)^lP*eZYjt<~Xyokc3wU;aq|#iABIw&9N*f>_siC$_d?jcKmg zW_~&TH(-|CA^0C%Nj6zsVpA@5WtLse73P?yz4zv)p^jS8oWI=}>5!ZK<&%HXB)aIM zKTaB-rI~hG>a)>Kdq=9l<@q78wdVTdp^7%z?Us`!J7%-h?%VIb#e(1 zxNfi=7F+L$`379_$^I$dOmKkx$z1czIqzI^xIaOB?m_BK_U@kZmY8WqBCp)_*I_5? z@>uWj-1gf+|K!ocg({tKfgM-9?3rUP-uUCQn!VQBnddzB-RJiG^x)|oo;~ET&t7{= zCF~gU=D~md(X-<$aD*>C@KoS*yg&;NdX`0w9;{;9V*)~(Nd z1vH@A;3vQN87_3}@tyu4$dCU`P#*zYUF!~*K@DasfeOSO19cai2SzY|6#SnBtrwgP zu8@To>!1fcN5965kc9g)VgFF5zU#G+hdtER3t{Ly5IWF)HMHRkD~LV;V$g?8bfTSr z7{t#FQG`V_{vr|qsKg5r@QGdY;+CQ)MSsZ9YbnEr5s!Go972wZUv%ReU)4SDEl-S_ zBO}VJSVJr((PfXL*bdLuCkU`93?=~61PHHiQvKi$oVQD!^cFdBO%-vIHs7FS!QiqR>#H>`fmV*}8)ESfh1qC`;Sc(}p#*o|WuS(fV553Np53oh?l{tJ=1*)>ykW?i>Dl z+tuI3HL$`hD{+f;Tv&Pu6a=$W3{PRiY$g~h6}vm z*2zfabBoI{ohe+Ii{C0Y`O489^P9;$N2L z&GU14b3157ORCUJJu_Uf`(+J>dC`@oQ=`55Xuyv5&VaV`r|mSOP+$QI%&W@glHyZU zSAx~8u7rd>!3tJ@&ncRFN-?y41HjHM5UG?0OiR)yST8^J<;BTj!d)(l$4as159?2s_)v=Ju=E6YFoQdnwpv zinF18Zhc!Q-PR7ay|w*rZ!4QA_Ff9U%e`-fQ>fpzySBK8?QU)l9Nf!>cvBD_--U0S zJ`MNW!~KzJi5r{Z^j3<&m6GuYbDZVy@p$JzF7j1RJl@H!c)>4z{%>+?yyZP#&dWI$ z^N7!!*501PEUhkYAoar2X`qzmQb(BAa>LYh` z$&s#grDMG7I|lpPH6!+|L#6CQKfBShe)72|MdeRxQC%LeO-*SqRd zu6#E)pZi#OKHX<8{nAta@@c>R;`7~o^+Vfin-x&O!Rx4(YqO96>sTSujzVF|9&tB|E~rs?*<3Z30+VLmr(thu>Rgp;B3$Q2(SwM?h3IGLPo9H zj1c;^F#Z^0{=AS1kud$lkomH30@H8^*RTjfum#_c1mjQ+$?(_O(Eoyv3nMTP>97Ek zFA2l251Fqpdu7wkrGX@7xMuXu|O4BvHM&R5@XR4YcUyb@e`dw z7k5z-eeo2VCl%3b7`d+)BXJawF&Sxb8FTR&NiiCo4H$*d8XHkUUJ(|xaTd9;8*lL& z!OH7^~47eGePeQ53ha9W&7zK`|cXaUOrM9?KCQUr!&8ksbZ zl6j~Rt`M^K6mlJzry*_eA)8SkC6XNP@ghGjBl(dbIdUHW@*^XXAVtz5NwOr-@f8e zBwf-co6;%&PADglC>zo!mjWqcQ7LbyBEgC)pOQV&u_mXID#cPM$Z{0T(st1Dsnini zyiyXu(jVh8DdtiX>(X=X(y8*YE1@zQPtqp2aT)&-DIS3rBy%z;Q!)p$a|+X@4ioP7 zQWhCg86DFTbFnf>lNTa}{&*>2{NOf^#x`Gd7!XIVJNJq;oo{Q#x(oIa;j`uB({|{yIqfqz z@sm3BGduaSKRK>5m7zf$^g$amKz(ySXR|=3^FXmPK^1i27!*Q1R6=2sLQB&^trJ7t zlPS}3Ll^WrW6?uD6guluHldS5*V9BbR7LfzLtWHCK{PZ)lr(A7L{Ib}adh8wbVrq; zM;-G=D>F!K6h-l}NEPl#cT`Cq^C%*7MoCmiZ&XU7jY?hAO0DuJ(Q`|mlt{f)+Q9Th zmorA6Q%fzBOQF;-)AZ>a;ZE`NPC;Q$K>-*1^iTgZ7X)=s3AIr9^iUBMDmI}|88sIG z^-=va7Z7z)L7}1QRNwOcG*1r|QUkS78@pMy7 zl~fruRryp=WmQm3HBf1FPgj*yqs>+IluvW@Rta@iLBUpUHCH3mSbNo1cMVt_0aiJc zSO?WukyTce6&FyIR-4sXKMh)?6;i2HP_0!|i8WidHC4OSTPqD*g*8^kwOpNIRIycA z(-lHuhmrwr2i6_GUp%WOw#fdv+;)c4mWCU2T?V2hC_-mSkhrWb1WUJ@%iVmStTv zVNVriQ&naem1g;rT_kpEp-gJU6>LFOYzvia_tb2k7H#27Z55Vn8`f$$7HbhzZikj` zqc&$Pc4~RHWasrKEd=_iAHxQl(cosFz{|cVx47Mu-UAw>{XmZryik;n#dcb$-*AcS-ktQH*&7b$=m5QTlYZ3~b{!bXYGg_rrGXPhHc-WbGkDB4I7T{neVs#sf1`It z7{yB1K~5Nhxko}m7=>Gyge8Q7V;FqtNre@Ig>SgSc6f+wmWX3Gh!xFCFBgvI!b9ixojOpVd_DcpEM z*jUWs*iq8hjpx{m>)3<$czp6W%lf#8_xO*sERgwlkO^6X4OxbjqK^|)WxyMG?lP4LJPuYc2`AV8tlUq5)UKy54 zS(az{#A?}(ZyAqsS(j`1j@9^=f%%n%`HYF#!*=W87uxdU--G76>y*ldjAaipw};<6}tNv`twL3q9uBwDY~L9`l2y9qcwV?Il7}g z`lCTQq(yq9NxGy>`lL}hrB!;RQ~IGjkELNcre%7jX}YFu`lfL@r*%4{UHb9d%fAa zz1{o0;XA(Nd%o$rzU}+I@jJiu+r0H}zy15a0X)D3e8363zzzJs5&XUTJHh2!0My{Y zAzTegfWaxe!Y%y5F+9UFTv8Z-3L^Z$i(o4lKpui%TO42>zF-dQfDcMQ1Bj!;O~A#I zLc`Zv9_rx6aa<2bfW~>e$9??Afn38SMFF}1$8r2zvVs8Ipbqw61hRzzs=&zW;0{h; zI4EEqro75$JiHe`3-}-eG9UonfCxAs!yBLqbUet_e9hUs&D}h{S!EyUpv13&0t6rq zZk!LC+*Pjp#`Qo6qyW$P00cPW0p>vt>OjZ09J~V{4u(JjGXB8EPe8*LU<>*H%-=lI zHGR`LoyJ+k#!Ub#007VJAP6`hTZp_4h@biKnUDB+qeC@ z^_}1S-QAP@+@0Oty&c@Y+uX-J-sk)`D1TnHfjyUV`q(Y_AUp4zqG#xLEy+1~B@J?`xs&;9=H*L&^B4-+=Bh zAG}jP?HL{cK!5Ms`||((y93|#?VjS#JNA43yAyx$8y~%q0{7t_7xSp)&3}U|L~il(l6aAx_sz!{sH8H){VUW2tME_=;6ktKP-&?#_ym6M1AO+0s!FO zD$ak5n43UESXSf`U9dCNda2h%lkTg$x@iq*n(8!vtOQn9z_R!4^Fw z3?6V}5hDVSBn(mvnQ>#s3=ZbKse>mD9}f-{endG^Pst27OJLN(7gGjZD6mcn zp&mgN&AGGX%a}8n9=!RKWK$v>tSXcWQzp%;Zn%0)Nc5-5rZ}}`tXLH2O0ZPNTE!~T zZBMmFg{C#SQeo1iHUIs?`wyyNx?&AGehk?#V#SBca)^u>bJ~A$C4=ACXBL zsSrRMM4a{Ce#-f$TYm>Zq+d-58gw5+BVotXgc!2zKhm8)kfx zz+Ig5Js?kPs}<3Kor)g!K>ihG8pe}tt4%uTjw)WdP@H>=z|aE)d=TV#S`>GX0$I>! zkf)$Nh^j%KX0T7IRxL292&JA{pLcyA$*PbIsT!(65a>pjP_&Y2kg2l18mq4k9cyc{ zxKdc+rOe7ot%E88+pDO^W}vKo+)^9iwazvK?X9Tl$}726jhg|43k|CjQ~yBgSh$XT z`cJdl;cJ+_|3KuNovM0C-@RMxif|CjCA?j7xIOk!9b7He!Uvb($;Sta9_Qx8fyzlI zW`dUd?{_B@_@)=EeGKzye?n?dm?@p9XSgN-_Z&xEtJp( z5xrVLAF-#Pw(SAU{&Z7(fMAu=89;5cLi1$}ZWVS2(bYj-gIy2=RooF6LkgIUc0*$$ zTOa# zzVrKbVMh@jD>}1y48}*RUF~gvO+nOMAcv$d4dH1;(+NX9;ioe zPI^-j1lx7~5PDgyCKmi!19u|9Do`*X@#|pC#B{;kl!O6T*aHrx0EHi{iiN9jVL~Q| z!mrivhB@5fr9NmP7@81+K|}}=5dy@sln`tgEDJ(77`L-Lk#E&1i~=clLdXCSGc6R| z^TY&3CVp;+IMg8-duYbYe6TV^K$8{VW-=>mYC8vbiO3w29M@rnc6msT8vj8k?OjK9 z39t!6f(=Bbe+KCpl3J8D0`3e(R+(G9;)N=x6=7k~N{BOy zbrAk`okd>Kq-NqeaF77JfleyA=0f@yIjeBfQPU(RLbR!nGKQ*~UdD8OMz} zv}FIJRG%JG#?d)SlBi3RVJ0fO#~3qWt0|aaek8+(9ZCu>fmoPiLz_0NW=v*I@z^+<2I&u7(d*#i~=^1l8z4gb#Q+!HJ6V50<@&r>jBh zSBn5umKp|6tEr=7955f4unClJGTu#znSmBzgmKE;8Nrz1%+?sBb$ET#g^ZXiNB$`` zA*8WOywrf%%wjf1j78sLMRk+|+_Phs)of;CWKGE?GlW3$N@pDlImlLaA*5UFYm4w% zrxM`5lXk!B4oDV^doQQ;oFE-RJDsWT4Qk=TZJT6xPEhk;!0~;HE`Cso{cW8 zLOWVe(IdN?r7d$4B0{e$mAkO*7-TAox!^*Fz0h^9ZjYN>$kg^U)19jpI3k(wVg{nx zaa&H&gauAU2B-At9qsHofH2@ebQMe8z_w}}1>C@XCyQyLa@jlGZZ42I6{KV6Wrq`l z_$7!kFcC%qx3Pl2zzx1|o<3Y-5jzHUxjgZF>>$35RV)a-+cC+)v$(L){_tCcy;SHV zGyvNWVQ5y+3HmDK}4ZB*x@|Fv)Euai7o$ddCChB zCuyw`Co7vd%LxH9Q}SG9{qY$9a-bRw^Jx`7o2bx3!vdm(vSle#SQQ9G~RGnA^tXv#SnP*F;?mqxvY zHWQ)9kU0@ipF>0N==Yu$hK!)lS{aKyW&%ZSq{Up5SDSY9J2QFAKesklZhH==Cw&aL zd3`)??~h|1NOlmyw5#ZFfMdpcum-+uJa#{(0Qk$~OVbmCKGxy>2rlz?zL@PfQIQj( zP1f0x5BimP$N>*2*g!V7um>sl7F5kbNJ}POafVdLE8fZY#$hEZ3b^kMK~T-P81iw7 zTU;THiVw*#u5taL+*c!?70yrI@uwNFZ|&*%K^QP}n_DI3Aus07bsltsFn#6^!I95R z4)v6;yybDO$}4zaX=vJ3Za(wL>~|RH>b*Lq_GgW4X&8rfuK+v)M0w z$+5S69nbxAVu|TN8w_-6zTYK2LR476@y0R6qE4GrkY4l6~)I(bdl{ep8Y!{G*rOA>psd z_E*(?!L-gR#E(8kr{9qG8|HG5Ng5x4zd!uvCwPQx<@X!RhZ#RYfX{I|vbGxQgBho1 zW6J?bZKgfWL2su4J&+MU5SUi!L3n#-KL__FBN#uMG=R8#%(fSQLQ zzaaqw00qCK08}ssy@wfjB}np69>arK;)4fj5Kya2o=q*~<5LVa_4q!ITr)g4{0sd6jM4BRo4#9=d!iEenhiBo2HBpB` zL55MdNM2Zljsk^Fn1xcLhIyC}$MS}m0*F^=hDw)culEmZ=xkZI9dW35Uziz^cpO%E z9EfN#H5607(SVTgVNX-3Ttz`I zObHQ?2&Il05|3$kj|mx$@~BYdxP|_h{*D;Jj`J7?@8}Q@=@9hT9_J`K__%G@QHhIm za3mRtE)_89cpML@89jh*ABZTJ^NoIW9HTg2C*=St351szI|gM6ofJI@@JqU}fTZ{)cmh8~*+0ovGX2w(==K2f5C;~qC@k|weN=nT zWR31YSd;}h5cg%Qfe^4U1bKmu`DYn~xIp?OCKz#8Qs*cm)DRaUmmc>vXqbk5X%Kda z5x-{^T4qUkX(Dv#mv;$G+QL_;*_xthhF#*sKA2v$y zd6)Fbp109Egkl69^I=24F<ffa&EDq=17`n(MTWa9|E8k7-cJXb#hEGq8*u$^=K6*3Zg3dXv`#C z_f(=o;h{I`76n3D2f8T;c^eI(qv0eIphBePXKk}dEgXsvHkzU$+M{rIrA$GkAxc5$ z)S`tFd_obU(Kn;+VWa*^f}=61Nk>V7HTW23%B8#}q#o0x-o~SBx}m4xrT^ff26u`| z)rsl`dFe45OdwQd=9S@bI~p*JU?rfXwv^>Ii(4fH!m~9jg9k`Zsm{2PK*a^I0iXXg z8=qR90_Ui0H3G+h8 zrnM3RF=|2;l&Rt<#j083Cz?D`C~Kyy+LB0X_7bnzDb1Q)fnkPspqTQJtg%FxnMqrB znvLVStQSPBFu^n>C8ew~LQvDLc<`<~%9t5Itler5$l9*!y06Asb>+H|)2as5DnUOs zgxU&r+$ykw3I47!VzAYU9Jbn~Z0fHEORhWSDD`TJ{{XL#5wOo{7}vV6p{P1}=Nr=~ zsfi>?#$j!|`joIiDQ19*9o8FVGAX>_vXoLfm4tY>3Q9rC8>|$xYmyjlfJZwh2fX7M zHH(TpJ1IX~R1dlx8qunc!Gv95d%)@!ox@L?RHUgg4+44zMo@for9ESNY4PxVOfi;b zi?#{T5@ve@t%fe&p-612tC8s*aT`l>D}Qg>nKB`lfP1!D*Z}jOtVbY*v&66pIDU)U zxNk@R0$LOvMfXykg zrJJ~r{z18^E4##LxH6@;Ya5lQdk1%W8e_yA5>uVO6FkH71D+FmFepFmBcL9l8uIg< zzA-&@xsdP(A5uKD{9T0=fq)aJ?pmy5K9mzC)H~ z$sNvwBC5wBcj&bhGzXS4zz2-L39P`tDy$3azz>`d&nUqY3^M@~9^2t2l1jlF%)xe2 zF)E80x7m0dtY47irw~8@8MB5i&;qaP!14mYF)YI~EW?}mm^6&TZArpA%)_YHZQQ|E zCfUP7OvFP8RKK_aCpG{~peF}9phJvlW`-F#%n;Nsm%DpViin6=2K?1={!UtfJ zgsjWW?99&$&Cz^&!%WT9Y|YnP&C;yR+sw_~yv^7Q&fzT1<4n%wY|iJ5&grbq>&(vW z?9T5D&+#nJ^Gwh6Y|rZTU4bmYk(*DEISF#WzeHw+)%L;MP32hK|G5|;r zJ@bGBDqzP9&;v(s!6?ns>KxNEUDG|i!3xbCEG^WKq0t__(i(jnCC$Sz9Y@UU)RA%0 zhVjz|LDMQw(hk4_I&IXltkl541mu$$IPKLh4c1Kk992!y2;J01od8UL1ap1XjuF>$ zjRZQK8EkD5OyIa-{ni;!06|SNZXMWw&DMo2*o2+dXssP_eLWt1*L2-3+HutxkkwAD z(uYmdj-l3T{nZY!(Vv~zNZr|>t<-J}*b`jZsO{K|J=KTp*{3bapZ?t&vE9K??HjZ` z+f{wpna$B$eb#FI)nZN7RBhHEq}av1+X%hc&3)1d-~&pa1W8cWz%kv`t=ClT+!+wl zHND!meGr3f)5~q!DXrS+J>K9A+qmr;knLrhk=@p<+{f|T;9b(sE#8UE+`qxlqV3vA zjnR!=)JzTF;r)!QE!$FU(nO8mnta}xtlRs&*A?y2_pQ~z-POF(*5>`%oH5oTNHfXp z(GmRMrd`koe&Vp*;r>J7xSibGo#G1J*N)rZ2tnSx?cSW-;wDbx6;0mxt>7sQ-#z{{ zIbGksf#Dyn;{k5u{k`8WUE;jW<5NE4Os?3Y-Ps3DGd(=v z=d=|?dJag=L`c9T&tZwhUzT8

s}7;uYT=2uI7gA(gbh*C)2?LNq_`DPy)h)CDg(24o_@Q zZ2&!x*DC<=Hzn~6KLW_?@9mBRD-q}0-Qo&A@ejWkJb>3NuS-Wq=qc_1HlPG^tpqDD z7SA#BHID>0pYux6@f7dW@NEOuy#lV`A3^`|uTAZd(ezmk>v4|PHvSkEkMT#K@gh3_ zOMnDGKmv@O^b6ncDsR;zZvZ}!@hS=QV(;)X_YYQ|@otYuTi^9xKkg_$_8SlPSP$`B z-ST*?A0(~m9L?+8F7hM~?F(+(yiMGr4(?Ho@EsoM`X2cMf9<6n+Wd{t;mz0oz4@8% z`Rcve|4!=?yk$0D-8Efgr{D9buL4CD(>VT+1k^p(<*g*&P2CLt`UNi@IquyfKkRaz z<*c9ksvqaH-}*`*S1>=^9IXHt-}(#>1fX&p&yV`jPyNL2`osp=Hqi6B-#gk5{!{(* zXhP`E&eB|+`+r^aNFe*jZ~GD8{jKl*gf0HY|Mo~w1GAs{Dc~CS4-hIeWcW7#363O6 zlpsN(A_Kt)HW(^A*pMIvgGdx6X{g~}!Gj4GHvH&-2StqvQ#}0lFav`gM?$zHXwbyR zj|515EU?pH36?lN(iB?MsLP==2?`~8v}w|%N(o90T2!e~t4NXJe9CkyR;*XOR?SK^ zs@bJ2(T+_Em8x5*aK)lMyO!?MwfaF^fZ(Fc|jV54nWW+}VF-d$Rd}Q&z#Ew5^ zETMryfh0#nFfRP~K;gq-w`z@RQl?wZh95?L%o&IWr+BX#1k&N-1Bng=A0RVXVO#ja&#HyOlnMAF^_gSUUUg}DL{-X`F>C&KV2R_02ABi~y;|{P zB$EF{f8029agazVU(PIopn3V!V^1~W-pg;l@itS7u-CYI2s@&5N6{?kp$4uiVuAJal8aVa6UGswt?81$g2D}RbA0uETx@u#HF z5JwY-jZv;G?|SRXyr# zN!+x|1DD4eo62%8akoR@TUD88@IxE_=_$Es^ZNG#dL?tI+;jhFOiQcSb;;eLumekC z8GRizs0!6Z@}GMCOWl~=q3(S*Z`n-q=PIwqNbEwUta~ceD1|rkn2d!XJ4p(JQ!6ly${ytInEhX>}C4t7>hv zTHC-L;2|Z2CZjVf*Sqp22f;;~k4eJK$M4cRH@;+miZd&hv`x zda9*Hw&MO@zb{|s(STh)Z0ws&mVNCP$5v~!!7_;<{`r3`RdB6Zh!VrOItAZEo2$qKDEHN47Vx61L>9A6|zNHQ)tAkJL>PC`S z$qt5(Yanuvm#EG$u!apX(^3ZbL4y3Sh73`h0GAiE2o9@NX%Umpx|OXek&kKFGaC5n zGPNoeEsOYjR)$U#tfvrVX~DYMt-|QOVNpw0-J75Mwpd25l`(%{!5bYlH#ZzA?{34> zn{B*yJ`YyMD4=Uv2*K7g2@v2snA@I961hm&Z4N7j6bk5uLYTdk@H8hh;nyz2LXfzS zC;lWMrw`0cMF5)SP(~_q8ZWF@1m`qkwf@hg59vgRA}H_bV6ERS}=NxfG1fjikUX5)fb z9J|?)EP}3RT06GhJ6mzx&Vwz-_={Bh~rUg=x zp>*B42Ku{?;V@JKflscf@*R-7y#CLs8T0g@1eWvM9w1qh8PcjC0YGV*mt z3W|gdYL%Q~G-9393kvfp8;MGfomJsWk)uBzp$VO`QdY67RsmJF;V zUwF$fr-aO&t&w#1$2%n`j>~HPa#8M;5*vyy1C^t*fv3i2FaI*lUM_QiAIOzKkGX?P z!Awd#D!VQ#;U;=cfDgQ^kRODmhm_q|M8u2)D4}@(k>*GW&SemUc-hnsnX{^!R8rzu zpMMbXKl&^KHq-*19iv|s*ommH|&PP4~Cu5vVw z)#fbbNPO8mc9SD4Vd)|*g~Hrw{wQDo9&~vH3H!&n(~X25lpw6TKJ%i`&5=xd#B3pY zhz|QF=zD8q-B=0u4~BNX3~X>B&FO8zEx2$VyBpu~zGnoFB5`<+pi)UWw+}GLmyUn@ zTDVeCDBywL@mQ@|F*_-8xTLS!q)6 zgXi4ifBlF8&|7UcZdcjJ{Uer@9pzn3-N#yO_Ee?n~S81H+xyInKMcfbc;@Mp)Omi`BS__>FjxPZqp;@v)N$46fB zlc#+CP+ob=|3d%`&V1)9uXru8-SeME8j?W|cdd`U@Yz*;>x*@I*YmxHu}3_06qNXF z(;o4;&$8ilKY6h89`B9+J+ysaeASx``G4K*k3W6Em%jRTXFc}4 z|9$WyK6&Afd!_wMe)QvB^y$xj>hFGi_QzlT^QV9P?SFs#=U@N(=YRkG|9=1sKmi;; z0xUoSJU|3YKm}Yt25dkFd_V|{Kna{c3amg2yg&@hKn>hL4(vb={6ME#KM)*25-dRz zJi!pGI}|!Rrjk6^LqQl!8pw-58jL>$f-E3`{=UU}sAb!`79>3GD!KS*D9+#?x3iD9 z6FSthI^rt|B}A?a38Aex4u;@C%A3I~3%&LG!5Zws`@6yP+6^6Ks34=h^f|65w6rm^ z!b;l+x626XX}c$EJA`XOUh}E^k;0&8!!;zrD}=v>Ln8{G!(SA|qY=iRB1U8W97p7v7dgVXc$+tW zw|Jb#6*x3>^sY;49vjGvohyobbBlMhzP->PRH`rou(>0ED+&TSARqyu+sA!sAp`KZ zh8!J=R7i$&$lHKOiQEa8d$)81l67PVylSlIDT>KDslU=bY|%4*3%;vMBV{qJFeFEv zq&;(NibPv84?>BySqZ4PDFv{(K1;fOIZ83(h~&7nrd%{60s@Ipv_dPqf^0=l)De@| zh=hcXR2zvY@iaWcft~otj`*w^NQjT9vv$h}LQAKRKndz0ONubdjX}$+42-UvN0q3H zoB9a*dI+7^7%8)s!wfgYY`p&9!pYQ;#hr}I!|TZ@d^-GKo?!F3G8%w?sEwJ*jcdag zmzA$IcE9`n6Tb${QQjo*Tir|n-XZ)pK zXiDE@=7V7{%zVWCN*H{^Mg=o3L}O5oe9XHVcIgYCVaB_3#Bk~SIl_zQ9=xH6hIMA7 z1|(%LxHvO(Ms-k5-tO*4cRyEdX(N?EarMonb(gFV+hB%gTPNMH?sond5oJ!I${cZ9 zB0TbGpHsvohbG^fZ@O^%OXXs;;DI6JK>DrdUvbX-7EA=F1Q%UipM4&rX2v z8KI&a)+|nTHX}^9lIvrCzjuEGeOm8k1^Yd$l$y`IbO}rnP!4`5Jp=#I!^@jB_7Fdh zr$Kg&3Lk2i5@;wBjFp$b@_A#*9^(&9p^COo-JT>U4vu#kHunU{Kg{IxbFri}gHhpe z5=1awgo;PU6TvM|gZ{*^dV_7GrM+zf`Bs1CC<-fFnkrHTx58~0uP6Aissuc$m3w7U^hqwRxLREVt?o!$<8&?|w!%+XWmJ!>FU3B6tZ*om zXRH}-45`$1;HQT9e2^`2q_ucNl5tdlg@xc=-tDjg{nkN?))84Ibq1a47!?{P3#pp- zEZXYyU{Cev4D}hloWjXR@h0{7Bng=@S-AP6^d|UmIjWl6K6v?knS4VQ>~Ilr^*sAj zPig|+_vZ{t9yPpF!{nI2cp4p*6CS;AJB^S%ItQ8b>?#uq9<|X&qL`XuB(vAX6E-CBP#x5sk!I3MPSeUjv6d!bEf@T@`Z}|@`x`# zhK-RtTJnRloRg0npOow;P@S5B_JbQH%82v9U%byHYJQZ(6r9Yv-}<;vA|L&Hy5VbK zV+MDK8(m_n{}dCUk50m^z$(zrbY;df{!Z08(V6x4lecbRy~8Rzn^qVHEBIKX*vqf- zR*_=udCxZx&n`93C+(+Us@Y?22xxZwad)#HE=-|(`rwpYyB~Yro<}ZUDEvrCv1naz zDeZ;wG(LH5?nlqUb(2ioa4k~znMMTy+R4kD&8j_{4~DL2%{EniMm>6yuPvOwv*>$c z%s@bDNWkIACG9T*7clvyzOc|TzRcRAsnwj&Bvurj>m5@_U zIwQM0k)`F#0_BndWoX4q%X2CsrEHC8x=aB-3>{|MF4eCBEGr5`ru?1_T1~I?@xwyi`q{h~XiviCDtDs8=(z z^v%k*XMOO6skDx%p8kx;tAo2!wW63f%ldVC#!k&aN6+=Vm+l(%>X~1Bd){~X=o|^X z?C2{&EekDuTT^{ICw==MeQ=UK1flOxrw{Gbcbw7xN`fKqQQt)aTX{j>4RQBuikr*P zTPAanvmxHLd1AOR-q&NWMdq-b_G;V(T?4<|0mHF_j|@aZdfn(&_f%c3eOw79=?ZP3pDqMlBuzFiMdo{kz?@T||o&GQkdu%4{@=hZc4m`uK2cV-#Z((}_ z6Bq`j4|eb}c8pU)0s>o935z`hbSEXZ*TDrGf}KZhn1JVUlM*X_Zo;v9S=ahzHhSsO!S?Qrbd`l4H-NiB-Aad4f@$o4!t`V-^{^*K}g%NBEsv0tl&@y7kHm;vBXfZHka(Oq6w=q0oy3uw! z7UAATcdqrw+2F&s5W=wGX^HlH87nooCU_KLMghW~p z)RUB#xqE0}A3WGT)3<%$QY5_19QV@J+MV0wXDv!rS9cK+xFO!n(yL6A)R65Jrf8A< zgB1}<0~6kNnP<=4ka>50bq8^6{bq+*_l@-r%l-{|rUW70N37ds32E14Fp;t@*ZQ#o zHDb8?u_>C~i5F}%p0yVL;Df_vP2sm96taC&)>y9zUy>eA>ce><9%~tI>lvLracAp$ zxc(vq?gZ0;3f=(^oX^W;S>GRxQlH)1F?WZ}w2IN&C?y9!aK5f`b@%Gsn$9}ol1dQS zHy_8F#v(jetOlz~M?UtH>$R7WdUmTFM`y#X6}VsTJGf2}U_cMD3&(0%wm?~}TLkBF zE4jr&Ph@R=da(2eZ54LyyK(V9^5~wFE_z9U+XmBt6{6o+S-6mYbYY$UlwU9Mp>F?>9g-LvlTd#!&GUgIWS40h>q4+7Y}8-) z-3J+WL|nj9)+aOHNP^mTW_}dtuLx}JOyAk-N9W;2=|wk$WH)eQ4Hw?p*nh)wD!7+% z)2X6=D~W#bqwP_&i_@D&PIXEy97t?NS&{_2qqiSc;$2)gD0hoc7&}7Fd*0L=qkt8# zy~(!)R6(^txsl7qtLAfJXCJL?5Q%Toy9nF3anaZ}DAF=vH*^oANi;X$Vl{MRhrh+c zb30c8s5EuxXhg(s6B>WyS-6X%dbHq!gQc3H;C<(d$K0wFo06O0{F|vyW~p?icyG2-RW1j%&V1{iG4%KN58$LK3wXXZbz=&^_g0y zD?2PJ9|{_LrG)!w5?-dtds%tC(N$`NP1ZS3;ZA=^ksqo#hkXfW`{vG@GUli%Mu`yD zND&q;cXBx8jg9k!V@Vwh&kFV1LvF}sLZ9ByC$8N$&0l;f)Hl#@zgpKt_finMk`wf1 zlF+A}X?Mei%tg_qMqO?Wxrzl&qF)ZSW}AbrJKy>GdHcybs`p0?@qRSqgNuaE`B4$L z51R1z8dUFPqyq`DQi}}vy$ms>BNrQMDZ(>*G%G_-BzPaUKNlq;L*Kn@yFy5RQ4k0H zT7qG&P4k-=Lm$nZO(IXr0$9hK_ZiwZgp$C#$K}Fj{1&lum-BQdo~a0s16tNY+<3e0 z=TtAWQv{eLpSrU1Jn{U7L)l`bWHR9G?&SGIhM;Pbg-mHh*Kq!xK6z-Sgcl>L5{4NZ zOqW=y+rJzGecz6Y*KLv=EvCDWebv~~E9LpwsmT7z>5WTNaIEJ%W3hHIgO$-R&q|9J zE$6dqE6>~~D01_P2cPEVmv`c3_-;OrnHRITB{$@$BsVat5H$SKn@FK#zMl{_Jr+f* ziFR!d!75ZA7jqU?!yzH9d~!rdq5|*0AsO?%Zz{i>`sGr&k|XDvGDRzhfl#MHVPQu)2plRCsa}p3d=o0Z@Z(rsAj!j z8E!hy+EEYpH>3x6vV?D>fjteq32FAqZVcb4o}?$Dzsb`_;|(6&AI-27r9xpF5m{^D z5(a9dAr~gfXPvR>D)OOKxQ(wTSbaTxszDti_h?YBw=rI_1#qZ|Jg-=|OE8s!zMJQ} zqV1M(rje*z?V|O(3sLq_ozjqPf;Pn2n@USL0C5Ixuo)bl&4d?^&tB~;_SxDb5XDrw zBUwZ7x^=-!R4Ur~qu$|KTVbj9S23^X=*L>5=f#MKL<&bphv^j#IX*6MF2N1zdCRqZ z2qWK-s;xYX{Y+yEFO-%gQ|FT0DeC^r!B-sc)lm0g@yy#i?Yb`+eYf9PskhUp*Y8RZ zVpxVeS>RA@R3S5ml25$&b|k~g2~#rX&}2OKtfI;5c9-a&9R8vpF2_Y_9BcHmq(&S* z%%DSTiRLfuZenF2koS#N$@0Fje$E3rcn|-ZE-gguGe1Md#Zk35*aLU z40iP9NzrI3YVfCB@dfPErw=R@FY+r&xu(Arz~8xwR<;bT8Bc?1u!lShz#{hoqtp+|##QhST)m2(1xp&7DvYeho zb1}zoHYnWe(NJ5cVK_u_AJF2p3>wWK<%jOC7*Vj+EH3F^R|6#EXRv*aT{c5Wd4$t93>?hV;SnKAo?tb!t6ujol#@_d<);Wr5jb$zKqt`FL>AdOSXCAFFu=4#5-iumQbxlqWUZLWfYv7TqFN>@)U>?^{+X5gh_C z$`oI(5=^CQHr}#w7%%?9YX!68rqZqaWKNXJwBpBv37LW$5I(rnVv7BaX$R-(XRWj% z*GEt9Q$W+19)}R#Ol7!|a>o9i*aAh08)dsqMhuoWeghSgxq#nt)4Xmlf}U$lM)=XI zdK|sV;d>j-#;kr$WNsPOfcBa)E5?*i-Nm3+=#|lAD{VEn_Y88^hee(d?^(LuDtedk z=!Se3+u^wvJ{Kv{{5$!cPYe=Q8q(#iYpSWJq_jQfj7K=2lpnrT9Hci)qn9F^woLw_ zcDYF7K#e!?rZRbP)jlRT&c~Y?&Qrso#lyfM%pDspAxo-jc$>lXy)&6rQ9y$ywAk3U zvkEGIr@yV~gAvYIQE`dL8!6|+?+~!QW_!a@zYb<(yMxgn7c?Ckl9iH-))4E$Z1BE^vNy!heCm#5j-o`iDqzVlVhU#9p*-*~|C z(i(KQ#`*U1jPH>}zbW0?mAhY)@E;t$7dt9;?_7txyz@T##mr_qCB5OLX~2&3D6sXY zLB>-``GD7F8BaL~GcMX0aniJnW0DqXu|&7d*?1WpCb+3k=bIR@1gw zBdvpSmBt8_zlC##?i}uC4_pcVj#e2g1yAHH^ySxaTtt%?TS;A?lnI|G3WSDY=u)Js zPtj6}%M1^ydC1z%pV83m>?1l$!qHArB|pJGPXt%~uzIGE$7dX@nMvej%hGY1pOHc< zm`vxqrg^+Xg&(;vBPpK@cK5vw=&(lO9!v7K-bpukyM2;8Gq4<@s5*29K73146NLDN@)KV(0cAt4GS+9HbST zNVCa*3|N)&OZZSV%9L5WxZCR|{ywoXui@Z421$fR+Y`+>(thE=Y1Q*DdU(jia|mAx zBvYGH-_dzZ;P_fL?irSOV-K>CMt0EwM@F6jCflhcN~M5vGl-7ObuBh&t~+U#jA8zQ z)T@g0*==U`h6ov*HyB56lpjQ9@ODgRzwTtrfGS~Nnu|Z#54p(ab05is_;^H4htYWZ z&eEen0%hWKWjEa?)G62{Vj6KQjw>&V+0Nm^Sr9ZBvH7~sCzhTs=xVJk9eb93UV4G0 zr+rqBlu+*_HS0?PJspl^9X`ERd+0RldTN`m z4B}?hF2K67+fA94^ZND7CG@R9i{?98+EMg22a1+CQWgX_R`Quv8n1|m--6_3tv)9) z#btHEydPLx1ve3x9w<}O=|gpb?d7v{GP5AW`i0y&j$>Eb@m@OFQrjNs={uEW*&XOv z_$|AYvBJ!w413=~tXUlfubP7NAqsF49X1cpisMm+i!hvWMANnDs^i)#2VpYjRJL=G z1|U9tx1^O$6Gd~2arD=#M1uwW&sjxTE}Kz7pGE7E=w>TW(jCI*wAvTF-H@DJ8ZFfV-aD7(X83p7qdLi z!XiQJ5t#DZvO>PbwSUaa+Fyy=F@UYbc(l!@apc5~;JYFW zQ&raD>2woP-v)HDg$A*Pm9Zt0XD9K6hY#Yob;?6}2cx&rjt*!zav|A?Gugpz)Ok^A zp=*@G^J#Dd2hYnKn@&)mV2%S5M|h{6OQ*hj#SKCCI_bd3*q}>E)2Z zWXnn-?s8mn2xHA9nA1bCm)mkw4lb91)(Z|;Vp8=3wDgUn4IDWD-vz_k&qSWRoKSMk z{5FEp3GY&3j<~9|+@##lHguV(A#!ad50;y90J7X!?PB4oUe2fvGI}?iTSK>=*_K%*aXtBLUZP)K3prO;WPDu{$U{D&ek8|)iL-l+sAq7soglY$E5mhg zy?NPykdD23O}~g^s9%uFVT%hzzMdwy-Zz2UFnARdMr2*sd>f1`IXcrJ$@^hnH#2=9D-$29TJIc zXN~A|DI=SV%7RRkrgNGk5bZo6Z}c`MiZ&lrZ7vZQ63nmL)~!!1Z!B$X4&C8wT7!?z zz_XKbI<-vf`8KgK5O*@UVZvK694pJc21CP$jh(GvdC)So{z9E`uKZ@>!RDrP{%qLQ zLg~Eu9Qa$v>z#{6!&O`5)Mnte&5fCBTN)c57EC@s-UaD!Wi4cn2jy>TVs+8+9_-yLR13Yfa+uX1Oh5?C6f!cBWZW|DfN4yv!uT*hOTZ#=CEP9P2q| zcXaaVS&=ig93P31pL$Kx-sGH3&RU%@*^%a4*}5*iXC^gZM(}pTs%o9!5i;!>6C7fM zZL~Rm%@orLp_*@m6V3W%XQEBw`b5+Ec+$1Qt^CNF+{EiS({0nnQAqq31tj{{@n4va zA0e7DO)+NkFyh%tnl>l(-lO=gdsl9g?3xQQZBMcmp1I6x7iBtK2JEL6&K%`C$rol7 zwc{7B!u9f}tGMVy)}4s6M|JeQiMdy$O)jh((_`;Y1?w(YUZ?%SMJrRZt5W1cP{b@` zO#8xeOdgTHVzIen!9?+%uoKDTy`Bq=<7lMY!M##s-e@tegSg`ThCTQF!9_!wMT8%D zLHiEhwcwrWx$kL(ijoPoI>~QvbMEp9@tnVB`6Pz}=YuKVt5x1FZ*SbN667rAezmL0 zXHYJ`yJ%a?o2yrvYWQj}PcZieFUbm50gE>u;wa8S(!(;T_XdB~uJC&CO;ym%YUcJZ zZbSgm|LN|X%X{LFR&TEBiczr5p>IgsvzENS$A4!}^4Xr$tCD;i91O-!IG9&4zF}|~ zVTWNYVt8U^ox{VuNPvIo90Ae!bHo?UlU_VecIg7er3;jV7pMp?0-z@P373g3{Q%-i zm;Vujmx&24lK>#1Aq7B8Lqage{1E4q{<*l4F>W3Y(IPm{5oq zQ{M*BiRv@m(Y-46l3iSzOX9`#ds=*w&jqD5Mel3Msyx?tuKn`$D?=k)Gc$cFD?=L_ zBU@WzJG)=P#LmtHI1%&W+uGThL#;rr7P>y>FGEc=V@)5Y8L8$NK0q4WFVUAP*ORGyEm{3aqCrop z1tg0yk?S$PKWP161gt#iq(0;FXx{C~qUY1M-kPhvS{nf`HUnO41Zb}Z>Z}I7dK>t9 zDM)uQNPj-qa3-}7hN?we2CO+%uW~{JSU3+ds zVK!6iQhcxB;HFtBIMd% zA1gMR?X9i;@NTa8$e;dUUCpQ6m7&}heRZ{8K5Q>`B|ogM`}*bM?)q$Bef_s@7-!k$ zTyV$@fK72$_?+8$!Ie38LTR>n4^j<-c~43`_`Da5?aI72gBRO^4|9~kf-hSpe8G>a zY-Pcpr;TkffPchbG4SRxd@<fSCVF5icr%q zT#9_Gm%S9FX}h`KLa5>f>GkZDCxNLPf-n@t z$u4I(R#H63K`SsH)|{2p0Kv7Dv=C{I)$|Ar&}v4EUe0P}g6-OBR*DzL8azD;w3ZFe z%vsCHD_dL3Jwmo|tml=CfY$RXmUGq-H3w_!1r298H;^slMjM44thpOS-Gb{I#r@Kp znRDckkU@;NWgt%^5MMq8CDnYmk48)fTT)!S{H?`rl&jNa9LT+V%0 zcX)7F?=A)|7f*vWsquE>nYTB$o4zt^@K6%m;M#7+li}iRB)x3>zLm--V6hd`E@8W! zL5ORojoAM@FNz^IfUo&larb)^eQ;A7Clfe`qGErfug0b79qWSvu^Hl+<$#k#Q^o+EM)_98Ozyk&4cV3B|L>IE-=wgTc5t|Z&9wQ3_0|OHi z6AKFq8yg!32j|S0GiT49#l^+N!^6YJ$0r~lICt*c`Sa&5T)1%Y;>AmsE)fzE5)ly* z6BCn=kdTs+l97>-lao_WP*74*Qc+P+Q&V5Qe3^!ZhL)C=j*gC=o}Ph$fsv7siHYgT zl`G85%q%P{tgNh8uU=(iV`FD$=iuPrvIMwfr-$w?>z zqS3Fx*51^{-ptzG!ph##(%#AfY;6v$(9X!4K{Cy)r{1PGp(xL<4v4Q#Vfyl(blBA%r5Y|+fR*B3)AoJizWLjZKa$!YW zQFU}tU3hUraB(w$pyCz)fyJ%g5meF&Ah@J8q@*>htUbIO6w&d2eC@tJm+<6*cF8rz0B-xX#Yu>c&4l3ZlrRdOi%CfHqopWlQK(>(DbU|bY+Pt`q|5! z$-$!#50!l}Nb`7YMI+@#xW`r%#_~Yd_c5*Ez`+LBE|X{uZDAjPaW=0 z9_~+^VEk}@>~MedaDU`S0H1*;z;A&+n>pN{JKUfDxWBN!zp%Hzu)V*yx4(FBu=wfM z*!vT8k1)O*Q+KZZn7TF1NZ38EGgl5&W#7*>``a;-=fMdV?*-!AV%=LId?OZ$Cnv~n zNSGlNNrf9%-O}+?*2*1km7m{?S-}ly-BgwBOPnEo+cAgvX0e{E$BHnE;-_%kCb%kv zh5%R{^f2ds+8Xogj%7KxR%FKYFUgQY9#rLw>i#FPmtCDA_IZY(`tm9K_9XO2OYg|BK za%HLv{w+R`Dhw&^$)udKWXIiG_)3P;I$9yTe<5GI%0p{1=YAX4htw8R$7;R6p-OzK z+N0+>_A!{4CvpAc`K+a`?5-e)4iKvjyG^U`rdYl{MJf8f;?) zv9*HOSwZYAAP{p1)Xc%j#KG0r!QIHg1AsBq!_?8k%*n&T+0)Y5)6UHc>gnz7cir~@-jq4Rc>W1ys9z1x)oM~g4Lo@ zen4kR?Fs5SQ|h|@hUB`g8*8)s+w-6IjwAX>IRD%C->wUP zJGB3PT(ABf*BO$2itF~jjO(Iq=d&%+WxN?4#*xOV%yGzhUF5Bbe0N30HARQdlGI8= zF?^PRC6(3uS^B+hrJ3$e{@M?o$n%bLS$9x1ngtU}WjyW+Q;^Yaq?S+bdChXqU?`Qv zXmI_8FKad{=U7iBIspkHkX&NZxRVlckv$g`I0(z+v~p5^4Ik)>+SlR;W555dGc1H# zYb1fn^sQIC=B*6mrHS3m*^fK(U-tgS)j#s#&*AgS?|hz1 z{)x}dzr*J+7MV!y`)wr^D$DnyDPPW%#FAWa!c#s5jHJ1LDdjf`IXX{9j`W>2E%uP4_(bZ>$D`lLVxs$(1TO{#J_J(%#?Z zIyzG_I$JzCS9F5H(fOjWV-!!!mrO2{O)XSRFVxH}G%YN2E-j!}7iKpXHg*>Fb{9YH z{X?5|_HcjtM*#Wtuh8=MqiE-M)@lD;b!$>#kU|B zqNnJ}F6x^LDrHcJ)dXLBt$Iv_R*@s&^27OKz8)py zk|Nuj_nI8K)@TlGO`f&s=(hrrg~S|5f5v1|eAMM7gw$OV(J7lW%^nC#nMcm&)#ecd z+22>t_5Vrq{vU3BofOX2K-&v!Z2`752ipNb6Ckz;#K9N>H9Br}0rYk}QVpbyaeiVOEojSk2;?tBH6rUX}}2G^#CG-QT0 zXN9$9A7{(0Igu?nQO&v0jk&Q6xpB352~~N?WqGMZ`I&k7IoXK33`7A8QIvovjVY*% zK1NkEvO21;<`_k_QAKr8#Q^G$QPKb)y0kI63_w#%d2>ufOKfFJTvcma4Jy92E55EL zp}seG&hAF%bffdS(fK{-f}UYy?{IP7 zNZG(h)zE0&@EB@pVti?Od1H2adwzd+;q%VSm-my0+vA7ZW5?ft&$~de{3}fU)rY@N z?}|Uv{1V~jVEwh`SGP_UGcQOo_qh4>HE>;(H@=J}@fC z-SekYq^8hMm%8mpj#zoGs~Z_@qPJC5Y5cY}nf~v|+;vLk|G5nLxcUW~+d?dD9IS1i zw$@NPYe%rP6U55N!OGdu%Gt@v#o5Z$#md#y(#^xt&C}A|+t$O|!OO?h*T>V(&p*H~ zB*;H9*grPJKOw{~Dbz0|)GsyEH$BuhGt?(5)CV5w4Imppm``@NZ%(*hZiIhsRA63o zP+m-MUTkPyTv%R0M1Ep)eo9<^Y9b;7hR8}Q$j(IOW+U_S3Xui>^>$brsXss-8eAPFgV&UG*&+}UXPxrM^DxdPc{rsHH}WSj!&T`Cwr#H2WCcxXNSk< zhGypb7Z!ToE_AIgcD!F~Ie61}xKw-irsnWX^^X8P15fG>m+B9f8xNP84_7)4H~J6X zjU4Wr5PokSD44%~FPje*4u6iX2MYj>=cK9M+hHj`R=mkg-jH8r$hc7sE$|7c5FBN8 z;PeW!jN6s_RV^z6jPk(@SE_bPR6@H0*=8d_=#DJ8liJK~47&(!bCNTSmm0)ZC7yd!Fa@!G6s3S7)}M!Y zx3iX2e}u`0{Lo=$J03qR{wERlv^GAijsIbO{L}d9|I6C=9YF8X>GIE~%UW8Ry1Fk- zO!O=*|A`jyw}wf-GeG)h-Da?vJ;dA|0;m-2?4b~QsG~j9#SZFf2X(WBde}O8+BtgL zJNbg0{K3uv_RfL!E*5LNc| zsK~O;$g-};^6nqe6ItF9S#gZ06GT_`#8mdgR`$eI^(0jFBv$t%S9il|y3=aAGwZtH z_1(D*-H68SvgXdZHdJdzdv{msU{A|vU-MLd^Za1b;!x9@p@z3Zb?fNr4RqDJ;mWPi z+O6@1t;x3S+0MN;Js(yEKCKUb-WvPze(G>{_V6Sz{?*d=cOU+KZG7}Y!}(;o{N{)0 z^2qn;GW4HJm(M)C@4-GR9nJGu@RYi9yBc;dV-iJns2y@%xL;F7BY$rZRO`ZE#=;w}{8xxN(h9lF zGJ$h$S=Z`B4&E*QC_XvSjp5>)>c)PH=>OjH-+nzDx6aJ1?X4`qHWnv+GgGjG2^eY& z`Q8(E2HN64)65X!YH$L5h}#cvaMM4AI{*U*cS8qv5Y)rS(Zj^a)6Ci1!o|nR&DYl5 z&)ze@!8_2|H`pT})HftNI6NvUCiYk7QE8c3ugD zD{curmW8zim$nC&b_4+^Lj{#}9;3W7xV$T*0zh|YWp`LrPegT3WKC~$ZEtK{Uwr*B z66*WX>btWWP=IKxtf9H4p|Pojjf7*h*r_JuR1@;wtqGwx zuE6O5KA)!OKTpyBWC5tji2(Fi#BFmNlK)=EZEFIy2ZY;zWZMAZtPgSd4g&{QLkCxo zgR2qL)fnn(>gZEdba>Sg2RZR_rB@8Jva^n-f)JNpKD1ORtxLj6O+ zg2E%hBO@bX;(%m5F**6q)`T=Rw=}f1H?()wqq^(5dh5FTYkLN3deJp~!`1zxRRd#H zgX5Kh6O}`gmFOt|73k^8VE{7~07ho3MrUirX6wf18YbqtW@m@q%ucUNFRf3lZ%w}2 zp4fRmvA;9^VR!7)-q`28(J%V|{-y!_{^4&*P(UsElNc1xg92^sAA8+D6LJ4kf%p8q z0JP=j0#N&ZlA=GUf@X&;NdhT)Tte&+>%*8k7Fe{DTq>!r89hfxD}q#0B@?O=)#NR; zhq9EjQa9w#Y%2Lom0Rg+yelKHSAEwMFOze3BpZFf+>KK+QO|q;lQ%Ie=Td$6P-wGu zoZ?EOh0EO~>@MZJhNr&T!zP#QrZXi+ScPoAbP>T@133Mj;{qbn0n>pC*tBt}uL8~A z6;0;>7h8{a|45D*E_52P|FVdEl4YOBx~;72ZGb&MORznl?6v?y%)t)kV5k|`(G=`t z0&y{hxEdV`y**B}-d-RFFCzypV+T(YsFx|!%goWs!pYmp*~h`%*Tcu(&p$9EC@3;C zC@wrWDKa=UIv5@ooEIOAObjjt)-+OpHI1NZSYT~xU|nipeOh2+T3}OpU~@)LOGZ#@ zW^j8}2nrtBl@s2Z8!?a{HB=BijEosAj2$nIn<`0|DN9_eNP1h9vR0G2QJ216pRrb- zxzYfism~j!E9k2$>ZmPksx7anttzjnDXOVM)HLMOG-cJaq}Q~i*0d+rq7v(lN7k|R z{V@%Lv5iANA=6rF!dv456R|FS0k{Vcoa4`tbxC-|(p8D)L1+;=;V;>nN; zVw0v6U z6d(BJ5FLV5RL2Un*hjEAZ5f{AJ*~|2eEg7O*j2-%NujD_RkfCX9iJtxV{pnF%j%B$ zn++4~KrvBiFK9TQ0xFXG!N~a^XnZ2ZzIRIFzm&$u3mSmb1SpxUz}8k^8_Q!d18W)p zpY6@TU~@3U4D4VEaWsVhe0Dyew40HGyD=cicJMHPdYD1o%^lq>o!qURJ?vb)pdLO> zUVg4V0q%Z*ok1NTDtIUe61vC%YF-NmsAz5}ZS5#->jpH{NYr->B2g#k971*u6&wS7j4lAf-+|~JIl(BR2f!Gj zcdVdyyr6F!**{U(|Bo~tT$o*0o7;Fdzq_;W0pRe?%(1-WXHpYDK=z%<|79AN{UI9v zY{sRcov+|a`jQ~(Sd5*mqY_6N{zx(W4IOV0YsknIsZl_TUFkoUEm;$xlXq2KncuC5 z?q!&KXu{QW9Cw`^!7!SuNNo3~YZ?begC$QA~2VhM%&XGPx)7U~+u9KMiQQMS~mEMn2uM;XiJf-qqM&%Q+=s#A+U zwEc$dnQiuKQly!eC>rS_sPPdu<#BC;hfX}C$tDkqS{+i)3Kx`m6 zwmSA60JbXt5jNmDaIC{NKG9)=j^)>Gz@W&`!NbtO6DVy#P;Vosx3Qy-iKCC1laGb7 zkBzG@#KYg&C%`)}I4~qE1W1G<0a0H}Vtj0BVr*7&Y%VMoks4c+9#@(XSDqPH1&^zN z$JOV=Hs!{)>uq~?N@24s4DVPnNgS7}<(0ZbO%MpsP^m+D>#+H@dAC-Pw=s8w4zE&|{+`voqr>OH1FGMSnJ2M*n=c4EblBt0NJc6$+UcUd7%#FbQjyFTaUK%O|TWB|k~s zvzytL3-I;{1*F#|T#I%tel#NFHC5g3>A(`Cu%U+R=9nhK+yDDgJ$uF-r>>0{H>JRA^6s@-#8mqp&KloIptZ!t!d6s^L)EHgr+kGuK zpE^wyuF{hv%8>w3NxW81;corptIojoi^eokGipbxeWq~-+lPPO0&_kM{eM~LKiSbZ zt({M6=l}NF`9w3~e@f-QjLN6A^N&t;|G_)VCpzuuQ`Y^TVVy111qyX{gL-*8`UN@$ zhdYJEI7cQrMZ=t8(;ee7q498sgltGc4mdFvoS0{yly9Geuule1005kV1OQ1vI>3-n z7}6;f>5__cOGA33BfZm+ei_KXOk`*lGBUd`Hm5K#w=gxo2wqT>UkJDa{mV8%9j(pX z?M?ltMs!!hXm`UzPyKXH?Obp5VsGVgU-?RZ`RYLV#$frok;Tf^(YgzX92G;NA+EG6UIsdtH0IrG^nhh-#f*mjL)X?&Zyiu`+ zGzS<^YJmcoF8E6iW%NM$+J+a$cNY6xC5?2rV$g3@+!O=vNKL46NM)+irh3GYy_U_9 zDy1W%RNqi5dS33P4v92+T<~}{M~c%fPqKpUJqT?S`fj??c~fwY`ny2uq`91SO4a`} zR6RBM_|DcphpK;3bD8~EWKjUH?z9>8^JdhkjOyR^(L0q<{jZZzwVyKl7fzXfO}qKm z_KlA%eM})gIDZ&BI2t)P896u`9oyTwf}rlkj;lhnnz$ryNLCu|FncZXsojW1d}-6_g)Y0@VV_!%mTdrKTH6zQ znakG{4|2-1qj8U(;@m%&uk(FbOlH5yb$wRfxwP)F9bbQ3GZ{fHeu>6rOJccvoYbS2 zwXdU%>6)sxCfMXVRG+5`UAJ^p-B%E=V(v>2mHDtUpL-tfCs%^m(@gxY&BRX!&Zh(C zKXKr^e#+-lKA+m*0_H&ff7s!EIOX$S#^;l%@SpA6R}KSg`+}P?Lt5dX9ob=>xd6gD zb0biBk${A{Eibw`FShzcP2Gu$EOz0LhdX7|2S1ojO9;y&gMT}SOZkf-!H6v zKe7hgS^EjV*|n47Yk(a!;H+a~VQ&o_Wdr^ZSnLNJcYu}@;5`okn>v6^9U*2;4(6^< z3wK9LFDENM7waH5+b|FNNKZ(tw?l%jV~U?sdVottplfEJYgUjO0C=!_c8GgUh(|7f zP|xoG+-y@r{Srb0V?#qCL&L&CBZ5Ms0zzYaL*u-{533j$yTA!*2njKY|#qJ*3h zSbk|HvMjf_qOh#0qN?VPUwP{6=|%PSck~ao4-B;r4z~@Cv<;26qsQ8Z$GgTR2WO@y z-^?zo&aZ4PY`$9n)_ykxIFa11S9Tz$iDv7?4c!BdRyV=yN>ADC=qDwHvlsU`?6&T?O@}STSCqU|%VfaD`pISI z>M3FWIAQPzkjdyKUn2Rc^oEhoU-l@ap||J#$P`FZPuMSWt=)?{P#O$upZO+ zE1d)N;3trQ9jZtCEe@Fn)lV^9Hqlw*JhUD36?IEDGxjE zOWev|FPveMYQrlFTRYHbs`cO<*-dBLYyhd`3Vw}LLgaT)tXt$L5Ejom$BWQ^o(eD0 zbWw9-T)1zbx{f z^s-K+8mCf?KT)coj4gz*hc$&AI8jqhmdG_qt^XHm6TF+i+X}x&y;^j*nJv}`T$k4>Z z)Xc)t%G%n_&K3%BaCUI=c61DNb`J6ON(}Ul2o8*miUfp`2}y~-MbR|im}nOK`?>Jr zTjBW#;4D%>QE`4%V_12YM{$>PVUKN2n{isBesZ;DY?XQ-Lc$d;Y?mrz6f68H=sw6> z$KF#H;-T*pXzt-}<>2CAX#zHUVgE`Qsx9aBLNe^dy+F-7Udlr5_j%o<1zdy#o%pUp zZd|qHrEn7@iMmamEpQnja-m%MOoJj$o7$N+MZCUSzPw zZTK}t8r#|3gN94y&*yo|l&vW^Q@5>H%n+|tShdaH8 zyF-V2z{&ENFZ*+VSQ9u_{_$Y(^FJIY|MKa}moJ|`fByLK!~XvM`Mm|1rIKL9mA z%D0P13~KC$+M@=pFo2O9ZK{g&Z9_^DqYI7sne$?H{2yb$UGt$^o=h| zWaZjsU{y24AoDDA4I|b$(T6+-eHh}1C4!iQh$J4goe>FAWa5e_8Z;w|6Wv(jIRc7y zU2G8P*rGu%#+ajuI3`pLWqm|smXF2Rh~$nzPB|n&LZ*1)l>`;pkBnAoNh6mIWl2zv zqP17$mgkVgSJG?5drWcl72rhzO(%@qDgJQ0O;1Qs-nb+TFq zh;0PD8tbeBUU|(UgsBMZo4l{{NqXHqI7D-FS(Wke}i@dOm~$LLXSYh5Qd*pkrKv) zKQc91+(|k=>Qc;vWXC9sp8hx9fPWcu;2-CF15AZs#oS~(2`c$b`2Gs zo=HX5SZjR_H^bm+gu@YWef8I2%Qi&-S7Vd)xeirb_x{}qIjzLh4!P|$*od8-cC2e> z3z6XGz+HGj40ad5K5b7?n?f4WZJXU@=RNk`W;5=%*kp5lF4}6dz4+&Y$DKLocsHc? z=6omQH{cD4PPjm*BmUr@tpDS37gdu0Zy7NEw zg~}8*X`G=MXEDWm-$~}r+>(8@ePfLpjC}mxdh(x>O(aoVE9@PZLp;W=7ZkR>@`3Mpg=aUgh*33(8N{z(v_Lu4pH8E%k>CUl_%$%DZHYVbZB z{9y@&*bpS*&PG(oq3xW=!1MjXZZ9OyOCC6q1`cO?G6CZfFLNm>+z>V>VHHdSw3(4S z>1G1?S`s+)Bse;SenFE-_xwbXLBixof9OUqShmLk(T5wMnVdl61|`C@$}47>oI<)` zhk6(!W+J?hJ_>@3NGy<(o-7C`3u29XoP#)2e26GXX-cMz?2`+02r6+I%Yt~LgI8S0 zEYDO+R=N_F5*a3sidhicxM4$NT1aX>n2=klGM5e60;PH=iVe2Ul%~VVJNHUUe6ebqk12u|ZmnsYhKmsvjPF{Hgrui*B>Zybl z6Y@)_X^3svfP~BxQquv>Pzmm;98Pr#MGbN2iPWS>Pn9%;%IIO8`Xl{?Rj&+z1daV-%G9sIxS6RCq`N z?x&`Zpur4+etRO6G^()LJeY4%c}#9_9qR}s2x7Z2QR%zvdLbZv#i-F_Dyoif$vGKm zusAd?K_HnMXt9?d?){R6#(ECi`1GkcoF`xz!Ycd{^}X}$MSTxa+O!t9zX$%()~FCP zsUf7nvCAm{+^~p3w80(**{?zTYY`2tx4jX@Tzn5g-^V@V!TFUNe@R>s6U&z%0=6%T zZAQp{wAdsV9*G?Pk>83!V#6K&FpzCV*^>PDv=qjN)c6DmNxCGXBuR}IOHx`VD2K-a z>4tsMM7}Rlh7jK(O#XCXhS-rX=*xw1nQ(nX+~Jb!&7vU$`G^CX(ELF|r1FL^7#V;@ zBms|jZW(yzWLiQ^0}l3(6JAOpUi+~pHsiS*Sat{zY(RpZ=U63Zl2C}(-1tnN4yHOE zBI?kTx;^Nv;fg8ZX;7=RsfC3|t4VF@t6n-G7#8QKUkxO)K+UcUX0k!hM40c$dJsdh zaYbr9wOtdNYN#BuFJdk;(M9E4eO7CUoecl|;*SIfHe!cc9T=&!i`16w8{R2uB>+Eh16ra!*!> z?5SBG);L4_{v33MGo(RiAs;y*N`7+U!7Aa}t5a$SK|ek;s*WS&xWbFYnMlF><07%B zB}c-IF(VpiLK6tV4>QSgq{=qa3{2GXrqgMCw&;8On(9bdbuz8>lW4IDAP91G`wT+s z9deD?u3=J#4I}JT89PEeEiZ%2^Q#Xjd)6roz`pifu4UD#LG*rhzJqmFX2H-^1HV<0 z2BIF^7_?v2elE6Si`HEyJ5aG+_^qS5?#~9`+u<&E!lT`OwX?k2;T{FKAB67q@?{6{ z?hw=S{j|_qEaOLF``^t*36GEb5jdpo-CrvA)ywKQ5?|($pw}h8EO_zdH}En4Aupw6 zqoJDqK-owU|J^+Q;u{t%+T%jgj!gKY_uugms3m!6L^?MN?1{q5J>(f zK^$z<5>n+y{zMty=TV|XK9%BTe<2_bHD=hgSe0;5j|hMn(}}-BDBWXlZdQuwCW?z< zQ4b&<9nRE&y;SE<;W{1dYiQMn-+K1%X1ga6VES zlL1sfLk~J-9J9fcz4eugC?HTNGLjH1(HDMqNGlOC8<#_mUoja?sBJpM9JjU{uEd6P zwO0;8ISYYoPlcCcx0gNiS>9Neeo1aRxDYi%2zhBA?Fg6;(U^}}RN5mN2sRPEkX906 znCOC-cj+LN`BhS7mw!2sfhn4U*^c7{REOD@j0shFr9F0@u&X&nr;JkuZsq&HQWX#*VO}vCs*(^- z@;?ZnGkRuVMpB@QX<(WJEz99eeWDPq@u2^xQwFLKGx=Wx7NH6XpbnatFXo{t_$AbU z7PwLfrv?!nNTHHop$);H2TGz73Smi*p$d^nBI*zbDxpLOqOI|wJGu}us-gPGp{_!s zKYE)2p`$O+qfPpwAftzeRAu+cTPPYUDyn;x zwxUw;kUcaQu_qo5Qh}4v9tu>c+V*b}(I^QjHtm58YT#ny;a62esp-`#MS!aFa;c=G zgjeOM5E`mHBC7{+ff2C{SCXl*L8_)|1g@$=s#=1uDyp%usjDhiwEC*H>Z?3bss?eY z4JskU>ME^Tt;YJSvPxV3_N15khnGhH z3`XDtd4L(#!G8T1YDp9pG*lv4RDlN}R-eRPgQNa<3=y&r%3s`}DlwB(`6xwYaHIlrfCwAHn!R;1G2IMN>(YvAZvrNBAZkUvOqOk5I5^qf@TB&;9^PWvMGDC zKdUMzO?!u5I-n$oI!}+AfY_xUp2%CYG7e&< z1c3{>NHe;6re*1;GJp_i=NAa9Xj0H-rXEBn(XfCJ!np$BxueKiEYqbgk&mO{Zc&$y zaRV0g1*F$>jq`>tODNepG>&PzMF6}RoQM}(uD3_R@2L{HxRxjL zaLYjt6zg(G^CSreaY)0k^;SK_!U)|FG)Kb(hrq*(Yr-vjC`O3ElyN;q>@q&raS#Up z`(QGBkd~tXTK@;cLL6~F9K_vGyXt8eIlL0Li;O{cWTW(TVNqTQaen)A73bnKN3br} z5|U>V8f|P9J~eeQv@&w68U-O{{-Xf}*TS{WXvblPH*Px-aNNgqd=PrPY?M*Gi!8`~ zT!Q4`kMuiYI@QNaU{!$J$AsJ?{KdwH{4RV<$#hK0XpzS_smP~1$6xiyluXDAp~`Md zwMSYJlMKrRk*7KNiH)|)s_}qTj0@K;V(l%WXK|RuWDN7~|(Ge^ND!mX&J=IM5)b6Iv zck3onP0c**)6{IYrF$BiIo4yU%s!@IVVn{RrBU7RT8QEY!F4o?2&c$lQX&GUE1VK0 zViyKi)fGKy126?8N0C^J4Zyd zE4~b28toM(C?BvL+Z~}yvR&Iuic)`+ZZM%o?~L2No!MTz62hyLQ1MSkEE3)@4dJ8> zc7PX&!A`av-O~PTh3qtu)BPU5?Gz0i6Hzrb3J^ziOFpS*?}C^0iH~8gLr8Y zyI~)9TnIyY-9fRRa95G^ZH37(m-$T;_8oTkoemBB`7 zIUPbwlVgFVgMis3p&O1$G5tLh8(tW!+2QVZWb-ZJKJnpG^$-kh6GtN&Wf~KJxY;YN z7lmTPLx;gmtqnb0(@zc+ z*MQ+Cq2yY=2NOTGI0== zp5>1I9GdZTs%qYmm{e(EdL>B6z$d*tp&k>ke(Ik- z>&~(3DskISaSdjmTb!Qj?hWkMa0ZBwn27G{rIPB64(y4ZN5$@);o<9IG3}o&63gD~ z$nFx={_Nt8>8&p9D>3fp9`5Td?B}lQ)DG_66*f$Fj4Ick?+t>?#J%#^RDgs zj_yZs@AlsBO-Jx4A@J-T9NnJoZ$a$Fp6mdh@boSXhj0jZ7wx+)@4?>b`)=(MpWz@M z{_+98>lm-`4gc}?{_rfH=q7*i-Hz$z?(qv>@~$rPvtI8n|L``C5|SSCI{)t#-|GC% z@G!6NH(~H6|L^dQ>TA#LKd<%`ujy(3>|W3IkS_LTulI9L_j#Y|cCYk!pY?Rl?R_u!U~l$; zf17uI^B({6kB|4a9rBYu6N?Y@3V->O@A9}#_^d$|Wl!;DA0CFkQm60toNw`_5ACBq z`q^&!rQh_?-t{Z5`Qa|@e=qxoU;DIw^{$`zm9O}o5BbC2_`GlY$shZ_kNWNY4)@1@ z^_Xw-l7IWSpZk2j`!!Mg&CmShF7%&o{ZSF|*FO7d-}<92_Pn3?(9iLykL<9Y`~=VW zNM9<>kNED-@u0u_`7iwekNyC0?%Y3u0tFU4NbsLQg$Efbgcz~m!-WhD4xETlqC|=n zHA1|&abrk?2`hRODUzf|j2%;^bZ8RfMVS#@zAX8XWlM`IasE{46X?#7LVwakI#lUW zm^Yb5{AO*XPF4?k(rFQ=1ml>mD$dU~Y zJ-01RqON@C9o&3~?#F3|@?5OFCuh!&Np1Qxx;x|3-6UxSMeDR_!sEcvqIMd*D08FH zom21m{H%7A9FH$w`aPr0@xFI*mRaw9NYO_TC z^W(5>*ch;@0r}W&qrlpFD=q{Rk*qF*3M zc(YGD{N{_VOYU$A={+qQBojKG!t`=IpsG`DIxK&CPD?S-y#8-X?~<#t%r%9Qu0AYR z@^d^m5a~xCSNY-e3`F+f^io_Ga&<2i&EVs(OgF96SB*fGXwqL@<@HlD z5E0g~Vu7m74=K;lDnf`-{b)zH&QZ&c6l401&N~}@)FkP^oRhuj$a~jK`Px+z-ZV_w?3T-S-a!k7?@x*X)z4w<4sDpxGY4K2;`6pcx6%D1QY%M-YRmDO zIDQ@ZEr^)ycO$p@KP8Q9sqr zZf?3+3QuFc32wW&iuaDVP=u8lbIdpKzPR!3cx#)e!Uc^yQOhls`eE@b@2y^@qM;Qc zZR~+3CAV}_h~Xj&WTB{c|JMP;F{bdfYi6C_$`AtAkmg-3iU$IvZ{)JOXON z9PUw*>tQfPH+@(G&77ly|q#Nhb7sdXy(TO+NqEd>u5pVQ|GZeJo>+*ROpjJZ!iapZf}H%M3;SjnvgqL}3fW^s3>ms92F!i;i`yA> zGQKNj@rmn8qxT3WNQ7a>i|~t=8LR#nxZvdRg2yZqo!Iy;gRRk-`@$c_<|rt99R+~w zTcAQ3=qZV;5)bhp$muqTL}WHb5q$s*D-)?I7|}(9xm(LcP$-XWqU<-!B8fM_c@A+x zkDULgXF}%L!&|cL8`G#zCmkpeZ^WoTTT-Up&KOHz(o22_RG2JzX-qpB6Qa?q;>0LA z(L1ikqf6YV<~l~PHZ_xuDTS0Y8&=I~W|M6;B?$8%!VPjh?=5CR9oi zQbXmz9D>lDjf5xBPWZfkL}M+85eGu>X_22cq@O)xU{BA%yk$`}lrRjbscJ}&R4U|H zthykZBK4aFk#VjVjceZEcK%YDrm3Q~ENEWQcvr#lWOe$=7c+HP&PP!$V;7C3ND-*E z?_Dfz0+ZX{jJH_-;WRBqQ%G%K_Kk)9LtGHK9X`VOyj+rtR=nF@?V8%on?aS6J~N2b zWF?|gULz5vjAW=nLRv~GO)V5m?P~o1G?DFgdx2EtwE6)OZ%jiUUR^6~o0T(uxazv^ zlj|&->DXu9w47I>ruX>jSCtmDUMEGb8}T^a^u831hvg+o5sOW`$+V1@U1ob}dAW#U zHgihcEN9J&Q)l&xQsp|#L0yDH+l+%7tm>0Mp410v>}otTV=E(ZcU##c?N+%$gg>x? z4Y&r^I1pAELf5Lo{;OQLLk<3j{wGq}isAL<3a`PXUMA42$#5XNQQ@ktf zo?QofI5om=jCzeSVWkIOCd;+6b(No-6q~RyU)jk8l;eN>Cr4t+EzOrRV4UAHKQ7~B zM=~1HCuNhMHe}Z^G72&@&(Tms^e!_6vDAiExR2C`*pVgtkRn2~WYd~RNDp3jd!D*+$(z7JmQf;W8Def?~_CqC-EX1UbAJ$S@7{qK&KrQR{$^ulkx?v?jEPL-Y3 z&>#MOZJ-x@=S#2j%dg(`dnfGcWk371&z<&A$A0#;zkTj^-}~POfB403{RNcY{O2!!_RT+j_P5{t z?}tD8SulV4v!MC+$A8!3zkmMs-~ayyK=wnw0bBs}OTPd_zywr4`K!PA%fAPNz^7Zl z38cUZw7>u)K=d=f0=&Qu^gsY?KnIM#5hTF{`oI%J!4&ks3_QOLRKXX7!R-q{`zyg3 zw85c>!5q}V9sE8PTtDplK^_!B6`a8vG{Pg4h#^$MCEP(DJizM0I<&(LWWhGP z!#%{lIGn>jTs}S@s~AOyofL_`GeLqKFi<4eRxM8iV-LNA0wL0rT}#6;(-#7&e! zNhH5R#7rbb-V4Q36hcp|z9>XRHyp)MgvHlu#aVMxQoVX#6Tz1Lu_QiX{^R?R6A}I z$Nh80=!3>_%t3Di$91ebbaY1n)J8+3#COy|b!5kT#65b{NAD{~=sU-K{yaf@#K(bj zI)F4tdCWt3JjfUnNP=`o&sxZce8za3M2RHA5PZmtj5~|8$bNjjf8@voY)FkH$uSDa zi1bJV0Lha?z>zG;mplrVJjj$>NtygVmxRfj^bVT@NSXvio=iZT)XAY#2%ywQpPWad zY)OnH%BFk@rF_RYkjkl~N~u(YtHjEzyvmw{%J&mWr_9N&M8~Qm%Q(==vs47G6iWtd zK(KU6pjb4ePatjyy~&dy}c(R@zSBu~l|&&RaR+00Jd+)nSb z&-*k&@MO&Qlz{eR0P{T0&rHwIT+h?=PyUQg*__YYtWW%O&U!oJx>|kP#Psq8wJrE)lnaH(kFdAAf^7$A#KqYg;68TP$Z2`B~4H! zB~d5^(=gpTDHT%kB+}%>(kyjC4;9ZF#ZeLcQZbd&IW0Rf6;BpLI~RS?H097WtVgUFFr6NY&O{RjzB*SS8k3 zebm*ARO_77US-y1Rfu0DPAbh)Vl7rr^+7hBPB&dvXXVyih1SRnR;(LVYJF8>tyM^U z&n{5cb!As|-PUe}*Gm1?@s!p@C0AHA*K7S#@&0Vre(i#Hjn{ys(|MiDdfn7}Emv!0 zL2MmPe{ENQ71)RcQ-bYJgJo5Ol~sk!K!$Zqhh^2Ocr-CNK7 zUEs~$_TAq1jo$%A#tksw12$lLP+)sdhX!_FH-O*>4uc7%;0m7L5WwIJ)?f_Q%?|e9 z4!(d87U2;N;SMn26GmYZ&VUtW;TB%u6o%mr&{?njf*Q8r8?IqF(BU0+UV>+(mJJ#eY%;N-JU_SQaKL+Fq7UV%DWDquF z5oY8LP~;X~Wk>c{NWNi7mIF$zXJ>}zc%J5Yj@f$d z*L!B;e179w=I4LL=o<`Z1qNk;F6e_s=!9nGg=Xk#c4&u%=ysK8Zmwu=CSq{T=$IbC zjgDe-_Gokl>0=h@k(S(&Zs?QtS1u6hp(bjfrr~>L=^nmiTz=_(mg%R?Kbr1nDlX_S z$Z2KX>38mFpEhZrZr7p)Yc4oyZBA+*w&a=b?sUB#m{^+aDYOM}juI_5DUe~ZL z>amvPvTop|zG$@uY~*8Wn|5oQhU=^*>5{hVug2@4)@w-SYjyBzv<~dbCceRb;F~7q zt7d1!-fFI1Z2op_Y{yPxq^4-4KI9|g8h7Rq!9&NEMZL&UX zvvz6KcIws^?%R9qJ}&IdKJ1;YZF#=!F34@&eq_^bV||We${z0Pe!b%6@{_gKq>axRZ?FHh+D{^{EWaVU3iGcR#82l6%N^QvoeH=ptOj&m?)ZaRPRSjJ%~Kl3UN z@;-NTr2BI~hjVw9b7{`;#@=!Lo^n06@<;ddY>IR@pY(RF^txW`I!E*<$MXp1^hW>m zSI>`7=kifkXhOGdF~@W=SM)q*bXfQG{g8Der}btobsWcayw3Ff=5_z>^j~*&oCx+K zA9kMZaPU6%uugUeUvy@7^=J3?jfnOx7j#Ou^*Il1RL|x_Uv>U&^>26glnD1XA9qsz zFLz77cCgNN65sX{-}86(cZj&rFJOm(C-{ON_)1=bgje`6VEBf2c!ocNh?jzir+A8g z_=_KdD$w|i=Xi~;_>ZUf8=r!aC;5^ec`rbDlm~e!Q23U2c_@bY1#W|xr}^s4zJLGq zfH(M^X9t9Ld5nMfh(CjspLn2m_>M>VDj@ob7kQI+`jl6Bkazj1UxS#Bd77{J*}Qq2 zhjpFj`GWWPmN)u_7y6|idxlT?j$itar)#HwdZ=G{s(*Q_hhnUsd7H;RuJ3vf75J|w z_^@C2voCw1Kl_YN`;A}wiEnzhCwZv%g1DD^g{S+vw|l(5KD~c+ulM_&hvWXKFZ{t@ z`NBVZ#83RiXZ$H}{FQ(1$(Q-cpH0mFcg^>Ez)$$kmw3WI`_cFK(r^3IKY6$Z`PFBA zd$9X9s7~1TciI1X+Ft|PA9~y$d)-%h-sfuH|NWF#{oEdY;&*-7ME-YIex7H3=QsP@ z*Zsto0@G*w)DM2`AO7M${_p?x@ZWjne}ntS|NOsy&^R{g$bTY7k}PTRB+8U3SF&vB@+HieGH24PY4aw| zoH}>%?CJ9-(4ad(5+(YD9nz#qk;ZH4bPd#~Z>CbMI`s@zh+4;R?f&YOYn8BK$A;Bv zRtmwi1rxGm*wAdnxLh>Swb#*OQK5SG^6l&QFW|s}2NN!AxMtDBN0%~o`ZOw3tCHVf zJ#*IK*UV$ca;|b2qFS|V+qyj~w_;t5cR40L?D{qA*s^ESu5J5v$;3q$Ggj)jDdfnL zt5*K3`Dk%Q+&7~F(cy?54y{upLhA6gt{;h{pMh1lPJ z0N!O{i%BZEB$G`R_~Ha#h%qIVjIAeOjTPdU<1bx$$r+Dnh&iTcK!T{1h$C7DVnGmJf=%bao`YNok8h9zDd2Y&HrYe}XC~XOd{UEw|bRduo2EK9nYp$vS&3y6LJ* z-ivldtLd${PFU@yyoQ=>xA}fMY`DdaD`L4&t~)UP!37fxZI$reO0B050op6R`Et82 zeu*-~A9Vr0XfVeed+aL0nJN{pyzSBJ@U?@EC2_YDci8X6LuOo`xgXnnGtMlAEQYjt zGOX)aM+iMM(LzH^7RwWts#Y&eJNw6qHP%@VxO2}}{`^_dVIOhy%1L{> zbXriW-HX%_0bKRQTFX5*-Li45@U*#tEjH0)i)HrNhBCeO(`{3|T+MYWzBuDS-92)= zUth*|-}fR7xXS_&Ubw$gzm2%njf*}y>FhG-Zo-f+toP)U8*O>nW@nzo=1v>_`Dclj zzB})|Kb{oHk_YYj*s%YNIobr(9(Ct#_ox0bgS|^Xed)g=6+G+1yY6>bfJ-v_@@zMM zcrs zAQrEX!7WbWhBpkM2uV0X6rxatE<9rlWmv-*-cW}-{2?5JIK(0%5s6H^BOaIaL;^<9 zfK#NR6&;vG3UV=nUi2UsK`6#ClKwG;VmTuk)3`=9deDtIgku~}BSat&5d?L#V;(~( zN=fZ;fPEamAEOXRK@L)ag~Z??JDA92EK&%KbYxf{>B2NJVv;tjq$M%=LpgGij-PbE zD3hs7H8$vx!lDKGK`tj3Gch z`o@8Z^q|K)DNutto0L9u{)!Q8DMev=Q88w;rZ(m18Uwmha`qIR$P_A8vpN`}Mlqhz zM5;ZNDpRJ?G?zBD0#s`#)k}i3stDC8T;r-2u1e9UETv~s@wwCzmbD6JMJqU?s#CV| zw4lZGDM{t3*v0CEu6|tUSMeHFy^fWyjnpV4(@Mj&HUgv}HS9Ux%GlA87AB5GC1h6# z)|XNijQhN-Q~eoOwGOtkZ3XQ}>sZ>|@-`)>^{Q$m%UX+8mXWYE>r-dD+1h&6tv~H8 zbfNp()CO|3uN13mXL?+}o>jAy?4TuWTUfblGPKW)E_z9O+EXf_z3#0d7I7fo`EC(A zY`8CeZ&=G&HZ?5%#rQ9PBZ<>VhWCce#VulWo8AR4cD;Rc?|UB@-}%b7zN^7+em%I~ zME17|01ogjl{>=%d+@;IHK0#@T1 zN!&pb$ECcv1?7s99Ml#c@Wo1q@dRg#0}J2f#yHlnjycTZ9{;$P1h%AsZ+qgyrdY{l zHYt-0=wv8MP|8&9h?R3J#vO0B$HnNfFNMrOB3H!72}bgn1HH~P4`9s_mhp_=%#k=_ zdCpp{GnYd=;2?v!#9}ToibX5vO(&DkhGu1y6J6sA-&oEhq%#@EVrM*m*^OZyFQ&8iO{* zu&GCg>M{;H(k=9^43K>TWlx0Jvwk+Z(HHFqgSyS4wl=A;{cCLpo7?{NHVeTmZgNY+ z+~-X0YOs(%a2+ki)yz^42-9c`odG`yAqv zKK}N^_pJ4Db6vq-zkAlgE=@#}-RWkB`Ua&ALaMht-x1Gx%eVgWuH(J&Nq1)mLNLuA zP`>h(|G_1Kq4~|z#R#7NJm@_?g3*(Hmd`jn>Qk?J)T^QOt`7q2V=sHy6QlOFzdbQ% zut_ZNzW2T70r2lbg5eY2iH<+M;u;$H$zT5RncuwTJ0JS#lfLwcTs`(x@A}uzzWccU zzV3zS`|$&x2f`=*@QsiB^=nP}l5b`6oe%x!Yh?P=ul@*3pZ)!BzxCbs{`cKp_yNKA z`Cj>*ANr{u`z;{OxF7SyALTtC^huxneIEYh-}UWZ_Vu3{{NL;apaAY(0rK7f{x%2t zr5^z?pb7#I7NF!9tV1$?17-|4d4ipVDOpX2`bg^y8(w-0Io(PU$35LcAl7JB+p%|iz622f4${_t^L=DK(E;TZ0r9<|^DLLeGGAq}pf6lUNXvR?mPAr|@|5Zd7o zdSMZ!ARkU*A2!qSEg=jBA{16&A%f8%R$(G4;v6<27d|2$M&bZbqAJEp8D*`Awxd8Y$va9=JWk*|&SE{*;yvag05T#klAkI5A}R{dKwhMh z6l4S)_qp%Z?j5zLYsj^rEe z<2fQ=@mb?b2IYZh%NBV?JgM`ej>EC-zxq zKOScmBhSmgwLMLC=r)b`%>i!uhb|R;CW~hm3XneXNTGFQm zk|&6UsD$#Pev&AEo~VuP1Oi}yj@sns>41;^X!j+9kPc}x6seIOX^}F6k}fHeDycC% zDU?R3lujv>4yl!1X|LpfmTu{fcBz-9QYs-RO*{aZMu3@~DVmxoODq7JwyB%4X+z!U zB6U6Kp5iH({*jo@1ercSnoep2 ztm&IxYMjdH9?~fW*y){msh(PCpCT!sHtC?As+1ZkmWE2AD(a$kX`@cjqsm02Qfiu7 z>ZQ7ArfRAfa;m4|X{ZwEs2XXhGAXJat1+mm{*@wXqP{Au#%co1YE0Cst)3~a<|>@J z6R(b;ui7cF&R(GoE3p=D(jFkE0;Q}k3ws-mgtz4X|<~9N?@z5YU{QlVYl+= zx5{3)imRWJYoMAdp`z=dvTCccYrDFuw88|n&g->e>#pXj3ht{-_G|3@tGEj6z!EH# z8tlOeN~`98!s>v#MnS{A#KTr=#OCV6QtSd+>_=iO>}l+ ztgW^zrs6BiGN8<^AqzR;-S8s<(nF zxb7*yJ}uNnsnm*W!d5NAUM;O=Ez55HE!V#6*B)Qe*5J}MZJ(lT+CJ&pddbL^tku>i z)=KKURw~`vtKHshq+?%hGI{YkE< zo^9n?F5qJB)UK<~zOCWLE#hjeN^ou0mJ;c%pXp8?>Iy66k}K=BF1lte;mWRsA|~x7 zuHxP-tP)2zy_@F4sYOg$>4e^78P#tD(CVhZs^{t*G8}7P461!;`RFN z--7JOc5jz{?;n+4`E@Q!eD0*SED`jt|27l@1h4?3uk?nkr%oUHs&4kOF8szX)y^*k zrIP&uAO5a{{@&{1vZ??6uRHz;@BkCA%&Bh;CUEc;>+mM4!8-5*JF5gwa0RQx1*0kd zZZHu5um>{$2#2r%A28^V@Xf9+1E;VG_bdz7uM5NNw94(!X7B>ga1D3x4d-yoiEstx z;t*Uh7H9DlyKmaoQY{TJ5x;5++wTjfL=0Oi6FadDd$1I192MK26>G5^b1~F<@gjk- z=Em+6O)w9XF-n{|FIu^*oVAUAJHTq-A*k|%?5DDN;2dmbs5 z@(^4CFbA_R1M{&`RQ@WD&?@V3D_3&(w&(cT?kvA)E$`7S<1)I5at|-EFJJL6ck?9_ zvppTN5F~REQ!*JNvBN4c=%z6Zuki<4v$J9I=k;*R)O3bfo6APSY|C3xH4mG*J6=HG4FtDYOxY zv>cN(FsC$AQ^HE8a!WI6Kg0At%k%@>G*)ARPH*)C@bm@;HCPM4P!qMF88uRCu~J_` zQ>XM(LvmDq{^?Xxa7+j7OlP%CbM;P3b5DmgP>(fPpP5-Rv@fUiTBCGZ+wogJt2tBk zMaSz^+jULjbxwP=|MGQTNAX{~3GObyUTn4jd^Tu@_Geqw5s9{G8$bi3wra0-YD0i) zzcy^U_6E#0ZP)f}I{|Lzwr=A#7UAhOU-3<+f^ZLaD$Ig$A2)IvH!dtUb2s;L|Mn2r zfOJncbxXHRzTyw~fDfGSObE~?v4tgsw|I{?d6&0%ZvuL!_oTXZX3NQDcQ)>xwrG>K z5y^LGvo?M=Ky2?f1lYEJZ@_K`xD)iYmqK@N6Sr_Dw}Q`tb2m6HKzDUVxD8zQD{41) z%Y=9S*AaM|H-~e0daHMuvUhvK$$RUCXWRE^(>IELc7C%qf5-NJ+qQu3Hi37kf!j2K zC-{ORw}U%3giAPeQ#cb^xbD(Kh9l92ces+D_lIx7dPBg7lQ{0eH`lJX0noPtSb2-D z_KU-IjMw&z>voO*=#AHOju-ciA9s&8_m2a)b$=vw6ZsyYC<1(ULM%C+TSAjNd5A-K zlxy~sn|OS$IF@VqmbZ47%l4Pwc9`=v1^M=GA2@=ixtg!}bN{xRPq&c6pqxJuo!dD= z;JGM_I;ofXsPFlc|2d#@EtT7=l^6PoA3CBZ`l2&>qmQ|dmN`wIIi)MNr9U{PXZrqx z!+C{ocae8@0D<~Jh`OmaJF54&syj)E3&n|}IIN?%tm}88_jj!~x}#4Jq;IpN6L+sO z_^-FQn{PS?NJoE!U`8+o#8_?<8Lyqo&7qp67ByOQKPQ0%*W_q%-m`?l9QfO|Wx z>wvCf0GfOT4=g#XE;*e5r5znRdL#w+P7pgvg&Z$)C2#(|Wh7 ze8JoJ!JB!)!~CzyJaN-Ju@AY#dpgC}xy6S%#{2xK*E_TieUcQtPaM5zC;q)@FMXGz z{J^h#%fCFO$Gp`GH`YUZv0r#h=)42)ym^cL*nhaan>~x5eNU+Ue5-h@%R0crz0-rc z!HYY>Pde3G`rYHbu-AO^-TZ}`R>dRv#VfhsivrM_sn8pKiXc8uD1KYoVf?}Y1vHtgTG^Ti%{Y?IB6UDp+A20hq>J2zRT-= zn%n)|`+fxiKR_T5IB?)Ug9i~NR5;KlV(kuH*x0FnR7u;pFex(yG53WEBp$3o7 z$2E8`V(*?Bhp!`<{13{PPs`N2+o5NRp*ND2zsYn#+4u41*T0{C{(t`_Z}Z8v0FCNx zDfS#P@F?J_8ZIm2yh?7Y<;rT#x#xz6PP*y1yKXP-0OL-u?+_EOvGOE44?Tf069~cf z+@lCSjpi#2g7p5&QO6y5?9oTr2wY&m02MUg#fFMxkSYhUg0L$I#iH;E3w6LSLk*|H zq(cw$0`V^q?IQ6o6B$D>G8I>B5rHEeh*8EFIjYg4`dIwY&O7nUQ%@g*9P+jz*(?%{ zK?yB%P&*J!R8d6NXw=b18*M|oY-ro?z!ofn`fWH4O-~R zR%|*ZquE1RR;6)eTI$0QPn_P8RXf?hts#FSY&-tGCUo+#$u4{53!k$YTfyKC-G;hJ zcj4}Df7Y8-zSC6C#dHN{*H(@VSKRj7aqp4w)Ew_E@~tPY{Lrv5hqml#&#pG@gg>`S zbht~e`*c!MSAA%Yi+&yB*a?@j_T0e_U;Nj0C)sKRf7d#A;V;Mhc;uHuyK}Xv1O0io zqo;d%F{{`6`a1uny`yn&c1zP00LPa=1uk$VRdC<~A?U!?P=W8e*On8SobkcU;6pap@5!3;_+ zY{G*>2VeHVhKqFND?^q6S;{gJ zwX|gB~h7lbFRErW}x&Ol2bTeRFW;Gok6s$0{A`_FFoEs2|&;Tryp#iW-{uUuR5C%+?qMaGVMKPMui!Onq9rY+j6A)67iu3~| z_2mIjno^a*lBF%Z&n#(q%Ubf1rbh_oO`Bj$oi1XTJ(WWUX!Rng(f$T7fz*$ zp`7JJXFA&%Re4S|2=}yVKKH3lfBtiz11+dQyOvOeHgus6jVMGZT2YH=l&z!q=v$XC zQn{A&11DAKU0s@2y{ZPL8Ib8rYr0FE26Lyz^yxBzYScLlm8jNKtTT~Xwxx!%spNcW zRHaJQcv|(ISk3BI``J~mf;FsSC2Lu0a#pmal>ruQYewPvQMrzku6Dg^O81&u-P)wD zf5l~BbvamI7Pgp&Rc2!Tjmp@@V)L<)joD}EMzPtWobw4xR0S4qn( zvAW^34o$6U`^MVVuJyGTjjcy#OHz|I;kGN??S1jflHUFmxWN^!Fo}Ci<1+Jjk6moo zmh0H&3a^{c6{mDBTitbD7oOSGZdSG0UGD-Eyy0Ecc*|>6^rA<-u5GVd-wV?CCZM+T ztuIRR8)F$OWWO@)Z!iCw(*W~yz&|bUW0kvH13Q;s4t{WDBP?N6P#OytBid7un7QYzAGd6RKYkbQa+cd{J=J9}$8`K~-cE}7)s*$B@ zg(ORu$yIgob~FCGRVowI%F6(3<7Q~N z6@BiBr2EnA{`I8co$*D=yWYyaH>Z32>}>M8n$!MTsiAvnY%5vSe@^(fy~}V9I~=t% zvGtLZF`cCfBnQroxp?tC`CwR77 zZsBe#9Ne*16xSiXWrI! zy5L_f=!F|TQHW3U*B9UTb(h_?k)QnS!&mu^V_xo>H?GK|N%E!}_21DF!yCMb{NpEI z;7DHiIy(`4=?6Z$gU5PTwcawKy58$wM?ma#&GW~b9oV=xKkjs2Z{Ekf8SQt!PLUon z{!n{f$fG`aQk9>7=950E(wDxJr;6L8jPPO(4Gi!A=ZyQ*1oqU6wJzZSAyD=@%Hqfm z8>MrT_jsED&{`L<4m~Z)(kN?`q|Dq27a1%fNh7OU< z4)IVAe~4(Gd|X9?uXN>G8{g5EF+`6ZJ79^@Ja((F3i~r?Byv z3UVd8@gQF@A!~6Vo$C3j>mg-OB7u=2w~iPe&KMO>Bh_#j@6iH9vMBz2ge3j38jUFp zn6fFIk}1O=Dy4ENqmm`9@+w{OC1LUwqploFuO`tk2GtQK7tsdYk-RQ)0W(q(H*)Ok z(IfHEDCKfTkdg!cv6!ARFVlc3`7#Wy@-GcCE5UIq$FVCJk|rH8EV;1yeDN2{@&XjBatnGvK}XJDA8^%IkP|Na{ca-nDp`~`;saF^E6vBD+#kOt<5WSQ85oOBE4`T z&9Wlju^2J3GUxF!Ir1&t5b{8>Glf$>K9l!CbC^ccDNA!IQL{NyQ7{K{D`nEM5HqT5 zax7;vCu=h@Z?h+J^B67D2Za(YiE=p26E=zy^Nw>7lCvq7Q~oNQGd{}zI#+W#r^_4* z5jJ^|G1pN$A(OOnFo3)d8IzGW-7+)Db2HC#L0Ka`FK<2D6Dr@+FXgj2>60++Q_rfi zovu?hXOK4k6RZMsi@fjqfKog$vkm78IGvF}U6ik2%D38X8k5o_moh>pltL@?G%r*- z4Ra>(6D+qX9X)gaLDT@x@)5uDC&TjxdlNx_vjP?LMX3}g98~Tg6h|j?M^Up!VKPG- z(mM4MBKean!EiePlqYMBGQo2KD|_q1BERZzF}P{&nK!8KCF^c4fSFhHDe!jW5=~) zGxcLVHDuY9WI17Fy9#Afb_ld~pjx&TUY6-%Hdjk(S0M^u1NLTfc4v7uVSiR=ZQT}O;dWt9w|WhtZXxz=kydZ_ z_F`oh3~E&iH5hbfWD^QDdOdi5mzarDS9P@)ilrEZskn++_=;^ei)T2#YFJdk_-n=Z zIe7S9eYmlJScqkVh}{@I;Qm;2J6L~Vs*deAi&R$v@)%q9n2(v(k6rkRvsjB?go_Kg zybf7w6Io@+n32smbJ19h`-Y8+_>JQ@f0OuwHMwD%cy+C{bwl}tN%@%l7?4kSkY{U^ zPpg$z_LX-ymhts{lh=afmuBhLW+yo`D*1@#IFo-lXoK04pBR*jnE;S^okK#I1$m2i z*O^E4h95YGb$F4hnS!r5W+6E?B>8!bSdKAymd2T!@7Qk7`C8Lio!NPv-8qJtS+3-{ zp`h7hrP*t#*=1+>hiiF$*SLPW88p6GpnI8)3mRI>xmwwIp&QzvP5GTuIi9_ktTdsf zZMt|*)k>lYpTibb{wtWDv$=D(`EvnUmo52V!r8!D@7 zdaJn_Lv}i&!Fr#?I*mR0mO;9xDS4MKxunIJt?SgS9RaF~S+3{$r6C%g%@?m3O0PA6 zuQ#l#+3BmpHmqfKtTDK(+ZeIES+S8?t%26DAG@jlH?rY6swvxwExW2Qdx153p*Y*K zy$iJ0Nwiy*w9S^VwfUpDS+zx)wGB3@*BZ8|6tX2dly4iiUwD~!n}&Nk0Dc>|yGpp# ziMa38xHs4Sw1*hAb2+h(`ng?Ox~r7BYkRV<`;T+GuD6?zyZgJrTcE^S705eQ%{z$E zJCfBqq~pW6ll8sf`$gp&nd7>?L4vMv*RDeftM$6S2kO5A+@}S*w2@n=m7A!~n!VGS zv6Z^P8T7%AIl?8J!f)5YyV(0qi@!D86*wHQNBhH%+m=@Zml2#s6#Q*bJi1ln9M98R&)2)pPh89!ThN8m%&Qp9Z+p=Zx6$vK#%Ws0BVEozo6hf5 zb=csM3*4U%oVgR+&xzdAQykPgQ`B3S)G6E4Q5iv0`O)_p&L#b8DLqzYoz^kkz%@O{ zGh(E}+-H5+*XI)0Sy+&D;(7?9N9aY+@IsGt-RT5;n_Pnxea@{`MkN|9f^6}$m!j|8Mops{^GZ6 zou`0UIi3nm6(&x#F-!HSNM0pQH9L}J3ZtN;6t_Q$BNt#k=6m)QXrbn9KIUV-2mW+^ z=WV{{X`usvz5^ycwlTiwjsEC0zT=7Y<6k1=eR1ST9-T~n&`{n`RG#H~&E>rU=V5;4 zeV!J$J{NYL=fD2vgMR4a`{>nv?MpQ2m7eKc!s!zc>Z6_&rk={GzEH0I16rOxUY_f{ z-si)9>~+5E%^v8{e!AIy@flyW+`i-Cz9r<|3+X=U?|#Gbo>2C_@Au>HaX#>Se((w3 z@Pl6H6W>J}KlRsMB_5ySBcCNEe+DbR-~P~0l#OzUi8PF^w0kE zS6uaxALCgcnK%CJ2My#0P2@?n?$7D+y({wvW%GHz^L_vGfnV^sp748s{`e8!_!l(! z(ZAxC|CpN}@}IxyqyOorpZcv|w6Grzw1364zAM5W^lv`=0iuUMfwT%5EZ8Aohkpzk zI(!H*qQr?5D_XpWF{8$f96Nga2r{I|kt9oUM1V4-%9Sizx_k*Urp%c%Q(BCGGpEi7 zQ>gg-=_;tup+PwkJ?iR{(xpt5a(c=ts#K{KkrKs)H7lI0T=T=6VbFmfX1q3&Mpva9~}73Ky#V3plXg!GsGNK8*Nd&BcrxJAQ1l;?BuEfBLjK z)F|elO*?;j%4w?Ts+(P9)yj2i*wtgpqJ5oMVq3R&bIqk&w|1`nyae~s>Ki+_@ZrRZ z8$X^HvhwB38{eF)v$EyVt~77<+!VCvsiZfb#+q97YOt+e!!|yft?t`$_v+@|!}o86 z$m`p`k3YZuz|H&n|Buph(BUKmYJ_%)%5wS>Rl`jc6V1Y7jhM-k8It5jOtmudokKy^~6_7y=xnXVW-GU@u zyoE@gly=^UXP(4a$!DKfLZ>Aa)OCr}m!E~1V@1@NnHv6@VqF+y0&LD^ByI=2H|LUd z>d9%Ro_^X6dR2tqIhw0^yQ){4e3yQhsj!PIzx zDeGwZddF{8-2SU;z`VjmaKTBITi37+ugr4GBtZ-_V-gc6uf?SqnlX19L)bA^AG-!{ zaYX7?GA)=MtZBk7FU@q*7sU+qOf&OTvqu-(nEo?WJMY*tE3GK}o=o9Y;q4>8RrcH7{=4@jFn$g!p$Q8E!3gFLQ2V3N_+0lt*k$l? z8+={|ZO6XOkqm(+L)rpQ2*e=1EQK+Xpj9IGLeIPoTSMuZ*9hph4<1l=J>(ts3@5}a zYB3{3EaD0&(?V4xu`^4IUAAgC9_XFLfbNqI{6x3KILc8XU4)qtk%GhuChvmznxX8_ z$eJ5QFNe6>Arfj*M(1{WJi{NSb1jlx&41FNsM@7G@Qk>?CMF)5%UA#Uhz3 zWh+97%1&-#m2YUJD_toEIS^o$w5(-eUX+tv=yI35)Me3rWt%t2#RJ52q%n`Fy+}%u zl9M!LCO3)7Pd+7;qpXNCF`3H#RIYLpuk2zD|Wh5o)oQU z%jl^AdzvDkt$=1I`RUKhSTmplB`7Nm+De2bRGfq%XE__X%ZD1IQtX+iMQ@5zbYWDZ z9QCLtr5RG802H4kRpm)hs?vlm^hGd@sZ5QwPGQ20QJ)ws&FNmym3RtK}su7>if6A7zW$%<52u9T&Nap_vo z+19AO39fT(tYh(0*Gm2d)Tf*TsaO9wQlkF#s0KYNIMWK9!#)+N5tV8&AB)=58Yi;% z#3yA}VcET67OW)QEH}&QSzET0oTIH?X%~B1)e3jGhGFeSC%e^;>Q$7p?Q3m|3fRsH zcBP=5OmBG@7l{U!xZLe-NsN0}!Q}OmK`lyVuPN45MAw_sRqAeWdEG<4g`Mr(u6OT? z-;ID5xp?I&c`qwc+G-ZMoMrD|2`dv-JOuwH*TE^V^<7h@3z>P zFJ3Mu`8wn0cK*1)AI7nW2ee~g()Y(fuCj24Y|6sG_{heK2uDi+<}iyH%pQg%h(G(} z2uxzlY~HbMdOXYrTY1ip#d0aNY~)phu_0d`v!BbH(lhI}usdOMn@Rj;6Tel?bZ&H9 z?fgu_Y+27;hDe|NEM`EPRnQ7ev!U1Q=0s=Lv?zA8spSf3OyU{CF`l4+uZig~YdW`` zCbUjIJ&90@I+&zBwXdz3>PxN~lmK@1hG8A+FwdIPvji=!buH>CGy2!mMrN?{IhaZB znIV@>_OhL9>zq6r(Yxj~a7$h7bi?!79hG#RxBZW9$NJlYb@r#BooH#JTiyI_B)f+_ z&0-(%{=Cjiwz8RQW^gCC(Dx?yuJzsTi2IwK8m+iJ0p3r6hmk-s|-fOoD{_PYmdd20=c+9IFahgB8yIGz1uSW#*-gZ2*5j=8+OTJ|O zlz+J8R}cKP^=0@935D^Gk9^}B-V~^4zVn~o{7y)J`qYDhz0mvQ$n1DODgALe#5Ey|ID1hygSRhWjUmW0-?wc!rIbh7JgU zZ77NA0ybt5hsQUEBv^;jcZYb$eR{ZuiPqPNd8mY;D2fJ0isy%g?k9*aNQkR=h_1MZuo#PG_=r_N zi?)c3oq~(Hn1Q?)g}?ZL!T5>8NQ`~xhso%I>$inq(2QTmivA~tuh=ouNR6`?iP?yc zd9sbVn28$*j-6No!bpO|h=QYdjHG~$%NT<)=!{?pjklqL^q7Fvc>ay~XpvBYiyWYl z8_AIx*^l1$kK#CjpcslwR|F@Ck|}wT35kl#sEY3Rjt@B(5h;;qXpawgkvaJ!8QGCN z`H|fhl6NSO8%U5Qsgg&@lIoa>3<;C0D3fwQlQpS;HyMOFX_Y0ylRe3iKgof=2#`bR zeMRYUM~RfCsEjSSkoeb>&lr!xJk2fff`~sJ8>4S4wmyvlKcZru=`Fug?gkafyf0=B7nUaIKj_r7ui20Pa z5DBM=nyGo3kHDI(>6)zR2(c-fvl*Kdd5@Bbo5n$zT4|Zi{)d?%IF18Zj$`SWD`}SL zNSH3kl%pAwZFw8237wJfn$!6Rv}v7=V4FCZo7*`YyXlj9sfm0kl)*`q!wHzhSp=Y2 zm|n=7PU)O;5uK_@ov(SFw3(e%$({Lm7~a{Dy}5+c=K=vLpkGOzVM&ZIfS?Jgpa_bd z>3N(A$%QZ3p8AJtiI|A-nVR$In)NxG_o<&BY8d>vmEh@*)hD0>+Lt7`hYQN0Fwmgt zsho!S5j9w$7J7piikceQnj9*d9txsA8WgHEN^(hoh^hqt(fy*h!T@3Z`lyqlcVo%8n9B zrTk~5SDK~Lxusp|rE+|QYxb!L8G5`r2wd@d)lR* z3aYz`5u!?}hiauDFK*jq0_3N)%vB_Dz6fut=k%`(l@MXN`kD)uP$1y zaH_1yiLMRFt{0l6n+mUfs-5%7unkeKzk2?!osh5K+Kc^4uC8jX0t>6n+7YvAXwfRI z2aBtn8m|r8un$YB5j(M&S)ko#v5<a2E(vv?}9)S9a$`?Ek>iFnD8+p4vQdZt7Ru3H-eN86-HdzLdh zr&B5sK&ZA5=&@`DvN}thJo|$_TeZ9zv|!7%-Ws4u3bta~qGXGlON+JiaS3Yn|9ZvM)-GW)rrIT52vy3hKt(F(WIDYt4!x2+qfG64b2 z>%8zG0?{kI(;K}nV7=Fiz1e%cIl#T$y93_~z9t~PedjjW+zUh0u@|`^&%myT5$Or;Q-M15CgIyafl0zzKZ7UBJK%?7$4{zf0gj z%Dbz~>%7eiz0|A0<;%g_+r8WizTw-x9elm&Yr-eczA0=1^2@^Xo2B-PzxS)Z5$wMJ z+@%GK!;PT8JG=!C?899U!4piupK8GuoWUAAy(G-R9}L1FyaOq$#4m8d>Z`);%fj*N z!Z-@UF+9UG%)d6wqd8o_{yeO}Km5Q!j6*{Vs73s|yn)2j8^zko#5v%^Pdvg(JjLl- z#q4{nd0 zP>jcUyuN!ZzI_b8S&X4uoWFxi$p34|*NMmjtjGw=$PMhsYXr&58xt2i$$5dvz03oe zjJ=%f#GXvTpd8AgOv>+T%JGTHf{aV6%*w4yo3CuZvE0M648;B`#J3Ejk_-Xx;meo| z%pUx~oqWf|Y|NrO%E`RU(b>#T(8Yu-&DKfHI&96@oX!2a&D;#4-VDy+Y{}zny}}&A z#N5HgjKb=i%=7#H$GjBC@T|(KJkQfi&DMO)vs}wU!p~sp&y)<%mAue8AjeE>&g>h- z2>sC@&CU(IOAqZ*7Cq6kS4&lw#y8~vjl&C4kr(j#5Y!+g#MZOkdn0}I{G(D}|U zZOt()n=?(*7_H4|jMMq4(*r@&J-x{!4b&$6$)J4IEB(TN9LP!?%S;`cPW{woY|~Sn z)48n6|NPNd9n4x?&_T_?D9zJgt;J%^#pDFjW{uWq?Za!$)*o8c0`b+!?9<-6)#R(h zM4i}ueAKG>&RAgCmyOw${ntEd(H1S(Y8};&T-dpJ*gX*0eZ1IBT-RJp!jPTUq&(TF zS=pIQ+nfH)p`CrtpFP;2ZOfz0ouz%+SDe~(+}Pq9#jYLKdVR`#jlZ;A+e_W0xE;&7 zz1#XM)xI5>G65fO4bUMy#{^x+;Vs_C-QDaAkl6Ro5AEEUE#2+y-ntD1@h#uDh~2*( z6Wi_4$(_vKP1oY>-yuxi;cV3BeSPU2$m@;S?ycaR4d3z|-}GJIqQ00 zjs+&}<7NEW4*uYkxZ=3k;w~QCEG*-yP2=Nj`R+;GAz3A}U=#K8h zkY3d04dPQC=$5|VgboFAzUdd)>D(>g3mxjB4!)%B=XXfyBd+Qt&g!oI>iHP!`CZ=o zz2vq&>X4r6PPpp`-s`K5=~`~+!4B(QZs%aGCgV&(O&3LMC}$i z>^rUB7q0Ew&f(pT=BKXXsV?rg{p*^3?)aGQ6~68<-tOCu>)tNq;LhvyF5UM&{_Xjm zjr;!M{T}B3j_d&+@83S};coB@PVTLa?+R~=3~$=lj^_|>>k=>N@*d*!e(}?t@xadU zk_fyIhyytA(LX@*HE;7b{{xq7^SzAoq>l4FpVAvX$J&dgKw$Joe+5ae^h=-g)cwF( z0QFHX^-zz`O)N*dC&BF-@tx9^?)DvgHQNQVEBh06N#_*WZ(GVZ24{eZ^@J&`EbwY zu}{=O&%{K3q;`Mzp0D(v&%mND^`wvWx_tVmpZbW;`Y!MKGVl1YZ~Htz`?D|mw{Q8m zFZa7o_r34?z#sg=PyA7D{DP1Cr=R)GEO`JJ(zO2yG=g*!vaPS~n)aVbSNtG`BaWtt>qD-Mqr8mJ^Em+s!T!j7&9YTCKk)p+l8wDfS zS=jJl#EBIzX585EW5_XqPOcy{E03$0n-*1Sb?If$oHZj2?bY;-uwu!MJ&RUt+PAT< z;H9n5Zo%4J^fKhz*RK=6fd^}hT-^9^a1GDb(trr&B+9+G}dC zt68^p@fx;lx4CoQCYXD7lim=10}no&xO4pZ_3!83-@kF_ev+;#>OK>VH0%u2ZoARC z^NuUrG4d;)_neoFpt%V1pHQSpG%@lqypXT@}?+S#6c6SG|jMwKQLg)K*G4%$2t} znXHpUV#5`8TyhbcOaye(B^9b>WHUix9U@`t{7g8S*o||@xBh5Ukm~l zeDJ`@Hri|m&=wA1w;Ol-ame5nVP>Lg&KYNBQ_Wn)t-a%$!mnNU8(YFl$G~ua5l>uk zUmb=Y%~oN^v4-#qJPZy!^oz4;DZ^q__A!gRt>FWYRzM^rm@=9_okVW1$6`!d_@ zz8G(v_2$_3&_}nG_`!`|K=tHXfBt;_^q-$y?uqGERx|7|*1bWNOtAlc{O$kz_x$@e zK?48=P=Es@U;x1b<0a%10C45^-<4#?t&lIawo4Jw8Ve;+h6E5h`$1cP=p68 zobeQhHuF7Dg)3xQ1hZ1T3f|3v*;~m6@7KYv+0cF>$F^#ENBlmKs!#DO2i$R*mMH#jiji86+X2XvirdGLilxj3XnDHbgE;QkARp4<*}Y$@gU@ewy4}M>-jnLUxUR zq8w!b7m2zPCM|`mBxW(01Az}DQ<*woW-~WwlJ?EZBhX?=Gp%_|p=48=*&IPPz4^^< zcC0l%Gs|jDa87ilQ=RKXrv)tFD|p6Jp7S(jJ?*(4WGXY6*VMr?OA^ftPIDfbrs}LHMs0f2I&xH}J6()NmwC;Qj%1_)RSH2*+RT)ybfw;GDMVlD)R@jx zsx`%FRjbNVtY&p5KK|V&P-`iYp?0LCDmf}rlPZ+YHT9tpm8wjsYE`&iRI78Pt4z51 z0g!$*Bw_u>SW{9~W}X$TX~h>*K?lEB*dSv%UsYtOKnk zUs8B&6tmLYY*9N~*3X94V}>0kX-iAd)23Fq zgK2GXSNmFP7AQ=cB`If3>RG|+cC>vn>~DcPT=)drgCw_T%sn$sOCK@dei$Q|HiRtG4SqIz5G;uoh@#zTHy0y<*ke;^sjC82R_g(~9l>i4!sMl`5HEm}sKw$yh%bzD{bYxJ@DsIHbRtUIm5HPiYZ zQoS|)u1DSIUDLVOz6N%+nJ4U%68p)gP7^$O8;A!8~+UtHDwhOB5 z5ObT;-3IrvXF6_j-^<+5PPbLr{cp#)yRuSV38B3m>w1eD-z)yyzIWa4s{&l&YZEwZ z2|j2|(_4%mAwkDI{_&109N#J~H?+?UaY;{H)Yh~ zM!8K_{_~c#{JSNFdB*2mbCBP>**Tw(!%N+Bp95X$3KM#LUyhQPZ+zxR_qft;&2;fN z{n1d*=+wV{tTS|eCRu0 z2Ggg0^`|e@5@cWd+b_WoerJ8~%OD2hCx7|JFID5GzXS2yefuNX`{2i4{l!N<^X(sf z{Ldi#*2g~gx$phZ*}v*DKLU&a^qW88V?Xy>z%PQo_yax!9KQOqzvaun=o3Kd>p%a~ zJ^=h044l3KG`|CkKm}w#6D%SJd_dugzzL+l=Ci=(`#>4czzyua@B6?IEdIX{M8Fa} zK_7IW6jZ?oJU$n!Kp2$152V2j?7*Lq!5kz%sY(DToI)y;!XErVEPS3Ie83@WK^Hti zB*Z`^^gky27$!7=>5J`}(|j6y-2LP9h|Ok5iTXaG*^L{H>IMO?%?bVNPe zLmLc097IFasYFYBtW12xw%No_oW)SA!%@sbnKH#w^uSbn!c}C&HgrW;9LA=R#aZ;k zS}ej_6vI;7!!pd5GxSBo0mfidEn>VzhB3xt1VuU&MKC1ATr|aJ{;ZH_%)wt|#Y@CS zbrctE+{R@5!f(XIiPFV!B#&|o!E>y{bX-S%43>60#&@K^WfZ_i+`f8jje9J>d=$ie z>_>+*kza|(j`)?5_(xjoMq7+WW(-GXjKux>!-ZtShI~kp+z*NThm)+xZA3eij+0DDlCa2649NR?$^9!xK14+f%t@!5g`FHk zVf;y|)Dxm)Nd)vlfkeviQ_Ad{NwcWQr^Lyqq{5!8O0-OotL#LhWWIq+%9vb2j|{)D zB+F?8#}*fu*v!uK&fOeO`rL)`WX#<}&&dSNYAikX z{LjaL&+eqn@2pSpyiaFjPW`M){>)1NebB-X(7%*V+ceMvbrSOg%>^CH24znO{ZPb^ zP~=q30<}>4#8CW<&fc8P4!ukeebETr&iEwI`858~6D5%hb<7QY$`NcBubWm86tQx}=jPlZfL%~MLf zR6zC7O?}muDAWKs)KeAAP+ikeb<|R=)xk_vJY7{*?bA$!RbpicS%nT-<<(fYRW;4k z;doSK1x#PPQ(z6&VJ%i{J&9wbjAZ3iX8ui6XB`Y^jn-+k(`seaYt2@56^U(~jBc&f zZ*9{zCDi~iRdOxYbG_7bT~~gc$WArXXa&r84OhV!S7j|%J>}D2#Z*`A*M4nRpg4wS zm{^LfSc|<_iXGT_)zx|p*jPZ=e6`elby#(U*q@MCj7`~;)!0UT)?E!)kX2Y~ZCH{m z*?*l?mCad;Wm$TK4tqUVe3e;rrP-RrR+IG!l+{_CE!eu%UEb~8X${#{{aok;+?z$# z>8;r6J>2U}-Rx~%k$v9p1yboH-txuW^Ud7!_1(Vp-u4~T_odzV&4}DZU*1*U?uFg_ zh1LBXU6zF&)CFMXwcpnrjsgzd@a5L=EneGwQw7Fc>9%FvR5?}D)tn~$7m;gM^V?9P3NC<{tpyQk+24aXdIEG$124tPJV?AEv3E*Qt zM&y(gWI`_F*ga%OPFY1}Kc&16k(WV7kxPB!I<1?5r` zWze-`SEg80)?`ku&o{^ptuXHy>MO)lqFcI9raGj(2P zWnSiIaA!Q;W_d>EW3Fe1WoJ*;=Vv~dXg=pj2Ix4x=Vc~nem3QKrZa`^SAo7{hlXcq z_GfCI=yk1VNWN%jHfL_uXm93db@gaO25Ey9>3&XVlP*@224s~cn1dc^mwstjjcGcb z>G-JWmhNSoCRUyHVV>>{pN43Xrstp*YK9KxW=`dY_T-3mr=@1<04e2$erjCCXoLpp zs@Bw@uHd5Pi=&q6q?YKf-qf%j-?4^>vcBZ0wt%!&>!!wLtsZ8swrQ`P>o8sG>22$W zcxy?noo(UokLM(UfkY#7Dt$<^$5 z=Ip)p>=y;?!4>U{?rhWkP}GiF)$ZzaZfzI^#t?u6NXXfhsMwG2W8bC#;0|sIaFP#z z0T@tPlAzd^r3H26<@E&jc z&QASCZ|Xj9_6BhH?rxDd@Q_IG`(E(!X2sh+@03k%`nK->cJB$7Z|@HAk-+eO)^GrA z{_qcfa1{TC2q$p?=WY|P@EE^v`(AMtcTX3`SP*}P-X8JnF7W~f2@3}a72oI{_i+xF zZU^UY2q$vkHu5Mp@Elk29cS_;XYeQYa3F_qAs6xArg8fia0YDWoLk9KiK^-Onmk1%(1r)qWI%Wl8+ zXAkyT5Abov^>X)iWcPG@&-b+4cT)Fnc(?U{FLrx3c)3RSglG3KmvVn^cz~C8YQOkZ z2XBd|_==BnC~x;!hjvrHbdD$YdMEgE4|$RAb&Dr-F*o#-m-dwx_?GAQPS18OkNJ{R z_?j>E_CEE&NOg#J`Fo#up!Z3k$9Qo6cPlsff#-RTSo)^_$)|UBlrMUfKl*v6`kmKx zSI>HW-1?Kx_?wS+uu_?%CAt1oz;2lW2Ar+bnI^S9@E zwfB0QZ+n*Cbft&+!0$)2@As(J_^J2!TnG8TSN6wOM_*Y2&-eUd2z}8n2BlTryafT& zPyI0)ebyKK@P2*RS6bY5<_XyRe(e0uUxL;reVsLZvrT=~XR_UAeb_I4WsrSHpncot zN8JDX-7ozOE?eM7{na0S*EjyxM}FmBe$IE2+}Hiqhkgbo+vx{^>bL%4!2ayl+1Yny z?(cpQ`Tpnc{pctE=|6w#SO4(Ve)oU>YixdiShA!T!Ggt}Axx+cp|ge#A2w_zaUzI{ z7XM+)sPP{JgB}Yi3n_AB$b}}KL4q`4CCio@U&4$jb0*E2HvVto%&BuH&z?Si0u3s3 zDAA%uk0MQ~bScxE2%bWX`cxp*j|WdGgs9coM2Z$G((Gu}Ajz`IuqsU1a_xksZr{R< zD|as4x_0m4&8t_g)V>I)3bcwg;Z}%UC4L1vQ|wrRW=Rf4sFp3uy_PRy&a8Pe=gyu# zBlRm4@W79epA~+1xLINlVH<;dEb{bZ%56d8&aHbl@7}(D?-d=DwBX389jejDg&z@H}RN|(MALn{l`C{hHou7rS()Mlb?%%_YFMob-?o$C59~@qM zSMo9$H-=t%gGI*{eFq|#pn?lB*pq#K;rE?>;U$;Y{&KJhNZWe0HQ1qtAA%U-Zx4Fs z(P{ft_|=60qNgEy?THwpj5E?$<546=Xd-yWrFc)D!iDOj~q5x<> zm%p`NYyQOqK@C$=>L61bssNOIYwmtVf8WME8U<>ZqpE@q{gHDHNWfop*or<`-r zxtW-y={VtWXQKJvnpU=n)tfHWS*W3hB6_2JB^q>MczpWk=buytdeWekC7P+Gn{v9* zo%x}4gQ%mDDk`LkNjhl_Be2@4tE`d`tE{uedg)4?;+m_jV17#GNu>gN!>O*Nsp_h) zB1@~XB-je$uFpant%tql8EUYk4jY!S$0F{iI45!F5(_FJoB%9nX$^x(aXUi^gJg?0| z6J0dUIsaQR&rxps^UFdP9ktXSAC2_RDl_eF%TLEl=+s|>O>fmXUkz!y1aBR5*O-Rg zw%faoZF1Rsp3SnxTzmYs-g`&;fZu=n9fIH?6fA<_ha;Z&;EOX(QwKk{ECS<`hwvcZ zmt)>3;D9e)c;cTQPI==qJq~%{qAzZF=Bu;*Ugze2cm6Kuv!gz^n6^{=4(f%NYCvu`6G^@wFqL{Hx2?-aPc*gTJ8k)FW&C^{8jB zeXHD~?tS?0!~fp+!^>`d=*N?;{`R`>&RzWf1MoWY6CCmE$G`OHkA0$ZUjQ5EK+p`3 zaP_mF0x5?;^;K|k416F5J7}2*7SMbL%%A?&$G;7FFoi0V3kWA@K>W$1bR`@?1{sIK z72+_5NNHj9C^*6x&X83#OdaoZXv8BLg@@&%;1F#`!WlMEa5qFE6{}biC2o(2Ka7bC zOBlue3CD_J9OD&(N4_lj5Qba~A`SjeSVS_yF^>PhqN|wr#S3b$f)&^!AEzkCKjM&% z>(indVba9}PL7X#d?O$mX+%K^k&xJXq8AgX$O`z;k(z8EBxxu~^idL#jJqTz8M(<* za{nIy@%tm5PkzEPLs@TBdQ5Kn$WT7wJD=BJ+K~e4#Mc zNK8xa(v-=Z<}b}izaH8z0ovRqH?@gN+!b?=yrd>M+qO*ebu*m__@?Q?S;}LUGoG0{ zr}fm?O?E=go#T`zKZi!o;@Oj%`23kZrP}7()0kmIC`G@fQ2Q{{ zo1}ZF#tI70ih|Ui)+FEr7yg=2hn@AfBV zfu903s6Ty>ABj5CeeyJ^J++Ten+gG<>J%eJ%_vfpYE^Ri)Tu#*>PKNRRfbmes$zv! zR<$}*u8M{xUkzwj$LdyGp*5~tRjXX(`qsNHwXS;g3tjgLRlEYWTz(xaRQgKTt_C)- zx;pG&4a-=*DmJo~+5z-t(Gkyi(!qW6|qg_^5Zi-mUF>>zkeUVs^f= zwJ(3GgJ0X0m%jZSuy6kR6!tQfzzW8fff0Pz1w$A#1_rHuR~z9AbB3@r5w3tS>|x7j z7{Lw>@rO%{7ZL~9x-r47iCat;6t5V$EOs%CgM(bRv^7yssxcsQOcWmH^Vv3a-K7t>ul#c<2lcI-ZP)|4CWH|InaV0G@%P^=tCnq(TZNQod5h`MngK% zlAbiBD{bliOYhmy9>z4MJMHODgF4irCbOn7JnB=UI@PLPHLJ^9>I=6z*0P>8t!tfW z3su?Hy52RfdoAl%N7&cG9yYOy4QUo28`)VlHnW@U>}SV0*~+#uw5x6HYcpHgELb+S zyY207w_4lW1~<9OZEj18o7(4IH@n+S=yd1W-SVC{y`wGdao0QF`qnqRrM&Nd1Ki#H zj&i^YZt!mpT*(JtIK!Qt@F6!m;u7!m!+AXMi(@?26|Zr|JMM8&Z=A*-A34d!rAZ7?Dae%FZFcMgmsAU^R-;78#b@A$_;uNm#-j_VNv3jK1`Qk9jsE0f2m*qZ&mJ#5mI4_Qgv+_qyLb?|UC~ zB0(bwf8fbCqEQ6I6Jj4nIz8f@pom2nAqfD$hhDldj3Xo=0R31!%&B37K-3->O4x(i zvq6d1`#$~ZUqAaBPb6O?LG?PB#_^T#2YDc=@<|8;{{I1uBQU}C>BTo(UlI_)JpN=v z%zc9|EWy~dUgxP@HB7-E%!AEc10zJA6ZC;R$lL{H;0AUe1}1?9a-hsvpAiJ$&w1bo zf?&+8APM^13%1}n=%46GAMEX%43=QbonQ*apa{a?%e9>i3ZKvQU_Zp%5Zd4$^qdZc z;0NyD%Q>M54g(4z;SWOL6S80w>f994pyk;h`rVvH=-^8n;ZBqxMkt}^4IfUVVMe^+ zOWd9S=0r7E-V*S^;QhllOhY4JpA+~20%8O;AYL0Dg#=z6AMgYsf*(vUq8{D^H5@?z z@IyvOU;zFdB#fRvBp}S0ANqM8_^F*F27=8|!xSXJ6GTDu@gK}hL-eU){`3Jt?Y-P7 zrs68@Uld-$BOsm_^4u%lqAb#4@f}|*<|5D8qA|8&>{-FvNr3@Ypw0oKG0vh3^5PBp z+%)21HJ(E@RKgNK!Q1IU6JDb)cH=jOW7v)3&Ltx*F5@|9qcC zFdAPl9wR%_qdS&hH8f+`J>vo5Tt>uW63ikQ-sAk~qcCEGH-e)$;zT>LV*e4NKk{Ep zd}2Q6MC&Di{pn#h00Z`29wE>JMhpYu$)8amBH}RtC+-9x3SUgvq#@!&OA-S04I&Cw zqGfpB{taHt{T~y4128mT;k9HR)Li8?f#A`gB+TT?*`g%cd}UbfoLAN!SXL#?C8ZKLrOv5kR&FKZjb&Lr!C6M* z&h_Ovuq9whAngSmS;8V=#@u4k;?L3LRNm!bCT3Ss0ajY3SURRzqNQPO=34%xRla3h z-et~Jrd^8V%;n`?j^RJ_TrNWf8*M;gMf~2I$KTXje)? z6X-!G_MC#o9D<(10xAI?#2o7RfzDB=fF=QKb|4j)qs@Kj%US4DLa2oD+=-q;iU!|; zQs#q3==aH7j0T;HHmHkQsE&rHgRZEJwkUvBX#8EMFJ$P3CP9bhoR5mA3z8^4GM$2I z1cG7&SO#h4;RKatgq8ZAb?yY0V#I*%A(AR$MsO%j9)XtPg#LA&MhxLhVuV&E0R;}> z>n+85_9RbWCmn7?pX$UA{y{ec14`Cu|Lp}ggkAtBUwp3@TsPQ3J;Yo~ zcIX4@1I%GVBp9frVk*pOD$H5KJ)A@EG3m~6s{W^fDieNWrW$C@iK?uwYRq{9l0K=; zwQ5(ss;Q!?s`gy3(%`S21L|q0(4A_kE~(5RtI*XdsWvOIerl**s;vSmv)*dXQR}b9 zsX+6XPOR&dzUr7J!I|=es6ywGs_XfIWJa{4 zPVQ^G?qnfu1R?_GKWxJt*aJMMYb8MAQXniO-o%~$>qb~?NJ8u$P(u;yT@~zKW&mn@ zzT8n>sQ8gz`Bg%R+FY(Kr39j7HfW-e(wxisCyFY;IvVB_#O%zHp9E51ktXZU*(}Y$ zEI#aP&${HyiJ#809wZzAAVeX|Mx)Fw{%x+NX3fcL)N)~k<}9xILe>&p(NgWpSuM?) zYkxBB*QO=UR;|yvWzZhzy#`&;&fL+aE7eY<&%Q*{!o=1}tw!jry7Dd7(xglPE~3VS z&H5$CT>A|9+AWVZJ9Dx()K}kx(7W^S1+=E7l zf)WVA^X|mRzT5&X=_;+hKK%=+NnPCiCLn z+p_Gr4sFhn;`qws6~bKl0_KhW%A|khZ~Kxj63Q$9xWOV6LL1lv&0+5RzMTI)Ednbr z0}~zi!rlP8FaOFM2FsiTuWzJouv^A20Yflfp6~XagZ=It?5?RA7Vt*+FHAh};kvMv zZZP3e@B-Td4F@nyV6bnp=|9|_4QIrpHtJ1G>_(uTc>3@N9^d|AL^r^n=)LKcS{@-> zBjOb=z`Eo{5MUH1o=Vzo82+nGTJgVzvFH)PcLv|! zN>c9{3M?POK@Y28-@SzOcB8+ZgZD9}+Tp0qVFM(f>p7Gv=p{iRxSk5rpd|0=x9(ge zhaM)QU-!bC2U8{|8!i6NBJC$Pt0jx__Ik2W1~9g|awdPF=xN`~)v(qovZsP!;^lJC zMe-zr@+I5y%nfrV_cAMYXf2QO1n!_I`&=@oa!Njb9HvHHJkx^8sHh6K^piZL`yUwP_#v_^GFr~bsFqHpdKN-Cm#^vn|7>6 z>vJ!99z%b$L!&OlBHj>lLlyHePx_?s)-y)b;`i0wvlbpu<6I>FqvY0fooZ!hda5SA zV<|6ZroJ860sg|v88!S3LQ+>?>)quwfGk1|LsWm=R3kG}ckQ{R?9Np+Qd5Ca$L)T4 zBGgK4%%$~JuXP2=o)QE?J#fPv%k5ip?e{))DSK>Q@AVP%b9^3QY!Y4f!qTgYzmiA#2&?F){?mvX*n_|No{IMpw z^FJu+NdAG}rF6oI^cTZK6PIUjlb+u>w>$)QAY7t9;B;`4By=MmK4kZMcefq_az=Q= z;VD7%{v9A9Za17-_rKyS`5kbls-5BD93N5vUPt5Y@dNy+B#XkFf-^YH4KU1A@e-Qw zgBu_{Ncit<0)#&&~KE z8}{4o_|BntgG0jNy|{#5?=&oUid#7QVmJ{NVU0(4jDxs{&vfmT_~nJ`kXN&c+nkic z_z(-Un9~H9hoV3~w~i0DO$<47>YbGnr4N(&Ojzx852xilH^y4`cQT?ze8b@BU&2-~ zzP^MvMl8E#u}>O$YA>L0!$hMm-a8-qqR)fX`hg_A-g%D0qWh#xf}j5F>BAm+aYpa{ z^kziI+Mfg}K_YZD_1<}%3gTr$ASst0BtW3e6*d#}!DM^+%bYfl zJ5`(e&P}@~X8X3!>R8^fu2XxrAG@z>yRvgTA38fAKzq-<`^-@>>E(N}f2qL2cNgCT zxbJ(yA2A_gM1SVQw1aW8AHlO{u0|khPUv5r7w7TKxu~bMB!cNRsDTt1s&x(_qsl~| z3$Dl`dYlt(aiea4Z^Td%A?;OO&hjKZXyWk6UO?yWO%6Sq>R%($xg_LbaI^mOOAIBO z#@_7J9=fYti+#;usMF#c+3$nRl`YyE zpxUEtx!)|##pKsh_1(){*yerCo&C)LKF`5@*Qb5okNwuiz1g=r3MYQp`~8GVuHiGj z+`Dbh?fvN{ba`GU9pl92PrMVu1mMdnS<2D1m+4X?4Nq{8REy&HWtJBMqn-x3Vjh6`Tpr&=>b3Oi)Zx1uJEV+G>E}>VuLSe zdlGZ}NU9z%(B}w#oj!7~*~y+L(%ca0=giq;8_Vw%vcH$Z91`<5^8Ok49BQp3P%4dU zV*3NcIe`NOZtJzgA3=o+1yW0rgpfXg+8{CMr;uWReGECCa|lu5If@oJj^x*|BqWU} zMOHk?aw4Q8g61v!7%?WvmNRR1%(xNez?&gQUSya}(#oI|d3H32Fet&H|Na%FdiCd3 zty{HDty-}kSE?q(ie*Z(>{g^2#b$#9Kwnz1)uto~#1&W)gk_;U^mEl$5+?rsQ7iJ$ ziJ3E11QY&8cjmaX!XEC~N_j8UVGsFSt#HMbGLAO{?3&no*vsC{sd@v4qpdo4}UXL$YilNuo8XKKes0Bmbe%Ho=bU zrWY}<+LEek?0GQ>F8@)Js@rtiDz8DlOJWb!TJ-WCx3JvP%zwxXR8V1za3YT&#iGWD z$b=MRoO3qoW4THz&1(;iuE~x(g&Ycmpka;(B+^a(;ev@SNHer6)KMedj1L8SQ6ko$ zOzm``rxL1<)qzAMRiRWPRp^^xjId6qUIqH~)!qgwwoQVHJr-AjgbmeMfuMD6Aa4u> zz{7KH<>=E^fgP8nYsFJmQdcF-R=`kUI%sY>*@|?(Car8m)P@Bx0T! zWi3y}Qeld}EVH(MD2vsg0K&DDZH|`KX`%kjxMc`CwJW5CiU5p~JE-QCtNWyH@YY)( zx=!ULm?H?GCn~<>1F=%T@6OvOg8W_xyNBlf&u+mfUyqP`DvYLxQzz8CqsxUlR`jY% z?=*9E-`!jx$vr20_P(Q4&i28LGF&3W6=yss$4P|z@4QvJ{Yb5v>rwNq0RM-1Em^0Y z^xu+#Q*4VKq{zjfe@hwWa`HlEbRj+y@^tBme8c#JcJ1Y{90%N7(xQZ zEM*{U9>uJdg!Wv;EvKRjecDz-j{YFUKm%D?5}ptRAO3Jx&^f{qpdbakWa=C{?BNf6 zxGRF3Z8<_Dq7kPw5S{6zh+vC~5}DXUSwW>zQp{o%7Xn4hJ#cr=0>%)>h{T;tQ80R_ z9U5u(M0mvni$-LE92ta0Q0cHtOJrgY*9b>4aH}dirThvMdQFIb5YY0_e513 zC3Jy%Bx_MxV)qce2`VtgQ34>6WUyWq=a^J6nQ@Nkt*=2dEOZ&nKd|A8BRGK%l6edo zwFb=c+0vKH?8?_(sVHnv{z5Nv`i!b3WkY+Ov1UgJ*)5Zxlyh_=8jRVPdhWzee`?DY zgQ*li1zL!3aU-C5L4@cIw9i}mlTm_zka8HR7l$(B8wtgvwv2@=D@Jsn3fTrRsECNQ zCG0sO%@s=}x;Bq6hEfA5=tY6@Pn3RCAUmaIPZ6rn<#aTq1c9hPCz>3gLbInC-Dp$< z_0x}SC8XQ*S4qQm6{I?JD=Tg3Rh>yKtvuD3`?$(dC3=svylsU+;>{n#=~ZcL;bczm zLj!$g7bU3-dyH{HABbidkaaCB*IyWWNT?CM2U@?GD!j;Bn!o#+!MDA8C7n1+gsoM7P!InEe@+C zT;m=Wx3E?2a+%xQK1l+86x&okN$XteUKhJ_nF0!bV~~ETHM?@b#+4+f6>m(#4)qX; z9U_Zd3iI54XeKS)$c&U+h6|%2|HL58??aoUjrXFNEu8ZY7BT@GXSY- zjd~%1sW%NYhE6Q|jY?ny8HGX+Rl^~+Auzi5!<>p(#IE}hidk$=5|=m%C#LX>t&5FD zba7P6WeQ?x++zcC%{ZaiU=p052m*GH#)f&wAU4aD7BghW$4StWsmzin-_ng$rf&>E ztYt4lS+@TCbfb^SOtApo@-NGEi~h>oX6$~Wv)3dNHY9ONCHO(I2Q~;3{Lst{e;Lq$ z7WAOYLs3E>nk8;lw2!&L+C@M5zuKTFWb=&RYc#nmh}QI`Io)Yb#~0F}7WJq}U1~*r z8r7**^{QFTUsJyt*0GlLtZ7|qTi+Vjxz_crdEIMY{~FlA7WS}-U2J0?8`;UeZby{e zY-c|k+OTFeb6p*6=W>M91o8E>t=(;Je;eG_#`ba*5^k|^8`9;bm_S6WZF9dH-tm^V zli3YhhRji%lAbNOLp}VOTO}0}Y56CcYW&>wpiu;0^b0wb!j~iEl;S z|Nc(5#es8<83%k$f3CO4|NU@*5Ij>eQiHL1($g(*$&(FZ|~J7RWWufC!?VTOihm_|DPY@s?jj=U5+z)D5n6io59NGI#gS zgMNsi6Wv87KL^Uu&U35d{2y?CyV9%vo2*k^?s!N0sVzS4xPLvncjr6c|4#UPSNr9U z&U=PGeu$9Md+$kCx7yk6@olVp$`rqP(Pf@#grA-0C>eaq-G2CcV6x zK7DsTAM%m6{_aU{chJSfPc3Th|J;x2n9k|Qk05k!{FJNQ_>cZvt=xi7?*!1v?oR># zt^hUgD&UX(^3VK8u>UL&{L*3qQE&uD4**%P0$VTwgJkob4+P0g`ob^MN>KK4aM93@ z1Sw4YOpoMDFzz0XDk@L@V$bU`umw5r<_fUzIuP%4unCKB?u^g__mAe7aQC#32UQUG zrfv!)Q1fC?_|WhwFwp(NQ0t)Z1kXVV!;tm_E(x1&2W2q(z|aTtFb$plPyDQ~3N_B~ z+>rZBu->rmzktvW8?oXPao=t*?i%m$5HSypF!v6@H$aZvF3$_g@b5tJDxlB=KQIpe zkOtY0@FbD$Motd7kSnCn5+l$M|LpG|P!ypK6!ZWA3( z23fKET=4}1(Gfea7H6A(FObP2dD8jzQG#SAm|by4k5A(i|dhqcb?NR>94k6R5@Jx~ZwjmBy z?;ZJoc!I zLLTW+BqggGq+#_=5&}!o9pNzq9d91%(a#35CppsNX0jfKg_Usf9r=L`HL@V%5h!WW zAYT$8gU%0Pa1PmR2&n=WA@CouFbmrd@?@_iiLnHM5G_?v4{H(U0+8FPPZ4h~>ueC+ z>e4QMPx`zu8m;RaYESioj!L8nFd=d<{~_Q&GBC;TFVoR5_i_CC@d%X>AiYrA8uJ|= z^Gn!ZF;(v(y^bM0E*sRq>{L$?4gnDG0UFPWG!elxQByUkr!WPxuEOpOT=O&s6Ehc+ zO7>1AV-XgsunjGbGZP^sPeLmaQxSOcD!idE5y1_nZvHnl6EP1#F(I-K#A!Nd^C+!z zISrHDoYOI(^B1?X;KWHenR7EcQ}t?PA@`5J0xnU`gbcxwGWReQ0rBhTk`NPd1#?g> z<8T&}?h!{2F2@b~=5jx$EiZMhLGLZm6f_%~5kIdB8=4NhP%kFAsp&pOLqDeW))CG^ zQeiH1Lw~LTvG5f6%M*vm-AoiHK6GJBMmkb z<`4l88tCWvAW4LD>CC|Cd^0%DYD!l$20ig5e)14RbQ(xBO^!3_fG$We^g4EK3bi^7 zXjPLDy1NYgO_E>?cB>kbi8Su`LgFI5ZgMtuWNL&OQojT3jy8{z>CTW$yiB3a+B zPzNGdM-fVou=xISQ15SCjWk>6i_U8r;5mrbW>;WF^ z^(t=EuwM2eMo|$I(g};z-CES*UUo>IG|h%}Eys--P?LB#w&j{ONsD%73$JExw&*@_ z=XjPNuHk17P;0*x>GVxO$ko*XPE~a_39B|>ch;psFJ^J}OJ&wW;BuQGYDcQ}PpP^5t#%T5m{iY-Hc zJMZfl5_v}ki$@q^GyawZ9e9FEmxNt#EH8M1?|256)n)kTu7%xLY2&zn*NR-dHhC)+ z8#$L!r|*#~wf8JFoAFqXL)c_R7m@*)7ZDX@MYdF%aT~u`+{jTb2yRZU^(uHamFxjM zGZ_Ny*=PU4gV{OmTC^ed=pP57x5P(T6_le5!s)4Hxc4@k=RXRQ$c z&+AVmv*QRGuK(3NSJkb**qB*$GIQ0Ix9}4MdkW9^C!I)>75iD-wGPjE>G*nHm2#~= zyEgecrm-%7nyyH}i>|p@QL{PmKA5Y=SFjbi zEvXv*ou&GM9~5dU7gIr%swtO|)!C}m8LX#!k} zt-OzrcTS*lr0Kr9JVKfg9+%z2ojir&c8BJLmeFuM}6jo%HyObcxHOL!UH7 zvsb)Hka+9ct|<_+tC+ta&};SA8t_!X5kbDgdp-lMrU5r5JN&!33BXf(f8994KW4+H z&buQ8#NYb7t?0hLE(R}^IHnn3gJnkm@1$=3WV#c?T+ zw@$aJ`?F>3_`0U^H2aJ&9g{X`+$$rlLT2+koxG4=l74-(wKH?ehZ5#8(`n<9d5!+l zX{~O~Pcuoo9L~?PqA|`q4^y>IQ}yb5>jYgLcNObU?=?LWyzY0iW%W6u(~Y%U;F>8t zv2$1`oy%kT0h>=eGm|_GOVce~pT%5&;oQFqJu@YoP=A%mRd>4?c*rq$WwpCxqg=`j zd4Xx2%8MLzse5wA`M7!UxtDf_QMT7-*n<759R+Bn2XV; z*$dLmy%HS}VXv?q>xg(Gzg^_a-P=*xBn{HBoeU~ZGS8^}hYjvof^zEY&*%`6PjULu zmog{)VJEv?9sLX`MKVe5eGQ!5;BmSit%xZTLEstl92q{d6I<`_QQY}TTK@1|vJ=j? zdG5-USCECAxQE-yHC5Mlo!221k$;_>C%4xB&p>~-kQX>EA$H`&QQBDk;(lJa96j8u zK@qwa=qYUHN8a3+5uVLZ={GLck6!A5L+HT`ZKoc=lK$zxE$2;k#!`^h>JIB=-RG^1 zjKNKD=QO-ZINZekVWU3Yq#Nwleyp?2?Z>{>n?Bi&Ioz-zhL?@)!R_wbc^ zBF2+sb82;&_g`9@VQ=cF2cwmg!1JG;y*mTsNse-oAZy1WGr5br8Vng3C+9iH{ zCX%6w4;_MGrA2u|X(EWYahIL+IE1nT?nyVs}669*FvCjHxuu)RP zr=JJ`DyoQe<>3)Ecaa&WWng}(t*G3JsbGS$i3+B?g5XMg{P+*U5YO9Ls0(qdZ+HJt zhAKhQ{BwwX-%OLCJ_B8&NOor2weUV18UB{Ren;1lTEL1Qb z_eM<=x_JMiWoO>R6R2_nvA9s*Bp*UIL33Yf1|mAwDGo!22mX&q8<*yg$K9bVvO|7= z=*@}#NWPGrlLvl?9z!KgQ0I`Fj(SI`L)1A(pC1xBk%mJEkx6iSr25nNPQ4jS$8CQ1 zxpaQqZQcWuO=sC4f6eyv)K{;baL-5Mw9#htClq&oBaf}b$e&%*_zyOued7aZV-Gxv zOUDr73%Lvu#{^-HHbcf2jymFZ{&7gbOrkx03}q$WgIh%k=n(|E&UbfNpWGsNvyM10 zB^&|Yw1zhnZBzwS$1xxC)|5FC*2O#{+@JH3$0qB!@P#mxQ&j}wlWv?STG2|B)S%Xq zMmZ!u1!}__?r|0KeFTV!5aK;#^uh8Rry&*0pc(#Pu`40Ra^0#;|4gT)j%X)47_s4> za@a$`IYf*&oXJ*Lw52dMksxtFV;Xh%G#>J$h#aBTdv<3!tZ7RmBAg2#|9HFH#AXO-UU z%NAqFC|V9AjvqwZIn3A)cNT_?UUcL301C~VR5F=(wBkv)@j;jMa9sHWoG0INn`*9* zTy!B%H%Cg+wROZj3W|m%Uv|W+g0bUE zU@B8VS!sZ~Ga>$7kcX~no{g@BWZ?-tGq#fY^{;IEW@Rn|kzNtx8i^3)G7+(;uogA1 zF!9DTiuO;yAy2ZDCCObN61jgAtPenS2}Q70xIKg>Hc7=NPG9*>e!}q~3?Uuwcy+6m zC3Z-xTgc%Gd#eoIHkQEbqwY3KTMPd7X=%a7EFaquJql%E^`aTrxMo)XHIKS81*s9C z*FwO0_q*s3ES4^_Fn`PT9#oP5fIzBI1VN}hGFhiP-Z#(wd7eNc z34bukH=V2sMlli2DFT36D<-!C6TO z$#?$v$ft-ek`VlqOr!Kl5IDc}o`gXB2pUIVLhg0*joK%H5TX^;H+->#&}Ad?gTH1+ zJ-(1?Okoh=Z^$(m@p>opLD5E|e-iAE|M}Pd{slD*MxcG2=4lzEfBeS~{y1bi?g zDbonH=L9nM57ZEMNeC70$9J8D6JOYS4l#z8M-kL;1OYHI?#F??F@)u(9NAEO0ddZpKhpV*6{IEWTQig(K(?4B3S@F_45Hd%LH3z_EMP$7>vceWCXazz~ONm51y{ z5CaKX4xx8VKq1&52?;q6P?(bUaSc?kh6OtIg&o~g?{-*?na0Y+akjv+WP+<^f5P0b~ z5(CM66!Dq`nGwrpdGVnJj3AA`F^9V87m*MJs2GTXs02?S2wcfsB$9F!L4Ji z4v}?JN)g>)2lcQJ1KA(vhoc1%2@UzBVM>x23P(%yc`{lUWvUMyfemOHdUI%w1L>b$ z3Z`P(rVZf@=82dYF{eyKAk<5_@_RYWk;SihhTh zrhdw%Mr93e3aIVqsg8=Lboi%ydPboNnx;B9gLas>%X)?s@uRXxUm*yjTu}+kM-4@Ac2!V)=y9Zs z!jaAid<9rz81+${c8fr28G;&z?g##Uc@%=MDK7DPJ09_S{{xhMNv~*OuM@GE@dtNw z6DB=IJIvW*^D29sHm_2X4FU@;{OTnVdjx=>ZT}jv6Dz0*>2CFku^QVY`HGhCH=e%= zS&CG$5bGTi>kuW&5c~?6Q}B}#OOPg8uqkU4G0PAQyO%X9S~q*I45|dY*fEeGvh5eN zE{n4s+nh+Nw8r8KPuUOz%b+{k5axNbBk`jg_jxS3v`HWc)8Gh4-~^(CFw(FESBMBp zls}RHd-xCxMz91yrG;Fm5(qe7c$j-UjBAh|q2uEDslW&Uat)Z|L$6lEs+q{QKV#>a;mXRjP+8Kz4^9TBB;7d?G} zy613&1n7P>nt7pvuwK);Vj`#nny@}WySA${9s#?kBr0J0u>?W9s;e^+3jl7g2!+rF z_FzKG+hASdySVESx~sB>lct9z0_;H4&lG~Gr-eZz4oxQ@GHLr!KJ82m48T?1krdz%Mf7e z1f{3HNwR!_OIg%M2+bv(IKpsj)_%2r#mvgewnOvZ!UF{Hc@2pq=rMa#z5$Z>~z{Ts;(;mfzjKB?@N zA?l8-+z^i&Tc=rf9U6CMcLuN5kl2TKqZzK^I-_yd1d8AY?HhKQ>zDdi2&8Gk|8xeq z`F&?_25BJvDb}FQrq|BzOwQ9>nnl=ngut78u!T74t>sM3lE^Y&c+cpZKinF3HOdVj z+>+h*eX%@#?K?8(V2Af1tSPjVAvsqUoVByz#m~644BewL`IBfIf}bc71WTz~7j=Lz z5F)*NgHX~gaeg}*uHZNfEe&-qy&52$(mMgXrbSc76VoJ31>mUC?oJkZH`_y}dVkrG1Hr++nfYW!BW1$?!PLY)(LJ=H$D)R*JbidNX*Sk+gZ)kh%LE-SSz`K^zw z)k6NO*JfRY@Asq>A*d70O4)j?5)FFy0k(ZO4UNzQxATQt{hBz64R0X1){4G{w~ty_ zdKQeq1j!Bld9^tXe=aEu z*?V-}=Wb28mYY7_8h!4k1c`vtm`iUA;=jBB@z2a#xU4yxW;Wzh}fH`Hs~C9r-3rw)3S(dx)xJyq|Oi}$*7e8{s6JQ#Yvbl zw+;xoo)gzzP{FS5>~8Gi&c*4D6XNdf5!}Qu4U$GE@Iy}U@UHFh&c)FT=M;hIsz`a; z3@UOiT4_j~*PsSc(4-AHgk7qce|V)5kD}Cfhc}zdW4?#gOo5iCcSb9b^bmrfH}cJ! zw=`dqLSCqGYki#ipdWJFW z+oj5;M?~i^^)G6){`wMC{}u@c;SsgHP%rh&XBk+JM}TvXQ4iCw*(FrFHy$Oz`1`=cZtT!Cgz<_LqU0W*bqZ#oIt^l zgith1NWR9Y{SxfzduYR{i<%uH2_KKe`Fs9%b5gw!hY5#wWySw4C&~Qw?b;-5 zg&G7NJoU(s5>sM?Xk0h(e|rD){AM?hyyGAXcKwHq%JArO<*^hQFueC1_+2%;M(%b)Q~cqu}|;S=yKAI=9%%XQc7U0}sG~1k8v)g|_*w!R-q4uRf6Q z`|dx1+_NYmYUHDDB=azoiYkR1BoV0tDSV5;6aFX6?!B!*94p11_zST`6SIRcq!pKQ zk;mcwfiNTo$0}07_GHZH!~SB@ju3p7iwiW7WV0&Ce;`vrkDJ=^#;+yza4efhdZTcv z=X}DFNa|wyi>PjTiL*(A*1X1^t?pDPPlaTwO(eSp883-FP%E&_e|Q^C(K+i>s2gF7 za3YW8MEbBJ#}taIv2!l#BRum|I*+-i6lBRR$#S}8JGUwN*|A zKL5~*)jwKowGFq7no=S+3(>>%RpicT3NKQBJug;?hTSwGUP(RYn_-Ng2_tJW!nRmG z2J$wEKL!A_Kuf>s_S>0pt(1@~2%ELNCUdNWFQO@%nd&N5?9zHH5rA9NVsjElhd zttvtOGl_?VTA~nr!u(6DLJ66NBkpKDh`!ra?Fq{;mGIfFou?U$=q8PrYn*O;QKG9% zZQZ(SeIQfUv2K6?L{Dz$3}k4;2BFTchrfviYpbQsjq0SEJi;K~E+vvq*tWzC+Fk;H z?^lqf6>+7prX_XluVQLhB2u+OyjyCh2%sO3D%W)+=NK2!NY4BHX7kQDox(S6f;oZ^ zdSW8IatkkV5+=yG#RzlMRrg$Ubs^V|{?Fb|*PQdRnQ53q_I5+||4uWq}it5R2 z0Kka8NhwoII0OrIhOgo&!4QpTq4#Qd!yHzLgox?QK1zZcpc!NdUMkjKV%Rq;y>N*$ z49RUEb*Z`~;Yo{Pi$2Z~m-+Axd%F4}dVCVbfs|xOB3WA!o)85#w$UFK0>%-R00k-B zWe);L;~Lw@#@a*#GUxJ@;@~L$M>^VZAX~djArUA@mE>`cd}K+q-sm_+VkA0*tmBw0 zCy+l9&wtgkWE|(1$vc9CBcuF_9xO+_=S0MjkDMeTQJE|7P)}AFdF37zb4gT=Ng=s( zV`x^U8(tRDmyr^aB0c64VDhnHgCnLWjmfl-{4po2+?X^;c@>wSk_kxs-uSqg$U1&A zBeGQHV+?gEjs!3yhzt%@iU&7^s7YYJQ9>8~XEYXF^OFWy9X#;~h&Qo}i2${Vw+@)TTa&7@0(bPg8itrqlBj7{9h6dMz|iUhMF*~VM% z5?9W;Ynh>iYvP{DQ>iku7n9S?ZT_&Sb4p_ieRF~zy!W+?kZo0TLyQyp;9G@UFe=wz zgb|=-menp5540tjG^!xS)`sL8(xonB?=y`?V9g1MfUHEVB9-9gflJ_QZqJ_U*-2Fj ze=bP^AfRhato{JbzCfzgef7Iv{`S|uFAd#)1w7!Mm{E%aMsR`^ykG`5cr0e@C&c`> zItN#{!g1M|R+_@lv@{qSXF7=Y6yl9(*r6T^vBP>TOh0k1*u^il?@?hqW0sYT#y7@s zj&)2vD$sN}>FUigcRXaZNJ4|9Q5K2KFeSQS?TQQj#xy=zKqBkLFM4ESAv#=TE{_Em zk8ES8^wVVvH&9AqBy*a3@?|hbLCk7iF*X|U$o$%uBYT50k@Xgw&J@uJijd(ED=Zj; z3_`nk7RjB36JbQBS<&&Nri>fi-?ac>9|4|pmmeJ*YGyjYnTjW0?zZEknl+usIvxWzqga+llO=SFwB)xB%8hKC#9jI{ihpV_erOS32DX?4Co2n#fR>I@Nc~cfT(qh1M7;5F&w(WGlJ`8~ zE2$xYtR4}q&xp>`KKrpde({h;D%?L`cX$V&-}6Bkl)xUm9Y%_Z2Ry<}iozIt!U}w&DdewgNQ1blITPG5 z9;`Aj6hkv0!vRCVE>l3Y1HjqK!v4BJE$qG-ltVmhusRG6&EvebGea+|kgh7ee_%L_ z$h!&|zw@&{BFqExFu>mv#8R0+;~+#u6uwmZ#014R(W z2+_fFKtbkv#zTlk+KPzgyFHHc6%8c4MBoQ2q(^Avhb0WaoES)ZBu49UMra&IL)^S< z6i0)+kA}3zg0!zvv@d-eueaESI3PWH;Yg(Mk^WXbz_!?&YET=YJnW4ohdK}OWOr5rmNtUs8`#amQ4 zS?q~k{KZ3P$I**Arr8EI7(I7XMv^eejqyCMl)GM0#G|XZ{y*R(BL{Nmagh<5@hzGnbXbed*(TH=rIbR_iZ%E5T zKm<1!zR0x4$z)4`15LH0%=_5PuVl-;R0PvRm(*m;OVP+nvCQ2ouwzV2#XJN+m=Yg3 zOY4Ho(=1KVY)QU6gt`Qr*$j!=Tn^2Y%+CDG;M^3}G|lLeOw}aHqO?25TS};e%7g4Z zEPTrEBTsp2xmZ-n?W{Z}T))i=iLFeyafmW^^cZ8z%i~~1Y;eEq2t%R`Xe96tSYy3q4RdpXA4 z{0OU4j%y&x$8^3`0a2ei&`aaJ6A8Nw=}#K&`lbsq>UW7UWZmv&y&7%HcyeSR1ipq!{}wOJ+nkBoc_M z%MCp}C)PubL0!UgK)6RG(YTt_zFWf8vq1mo21)%v-J8%MZM|<0hXHlZd=%6}0H=R& z)REvwI#rHKjflux6!)(Al602R;_DEV}(eW$)1<7t@BGuT2-IA?R(NH_Ek#iAs8)rD22G8KQiRl! zzZbR$Y~eg%6AUPE(OsD`i;8IERUC zJ%LbBQH#KujoF#hS(VTRdw_?Q{MAO4JCM-Xr|VeR6xTu9O_D5%i2VnceLA7NPmO%n zK6%>Z&{FTmS zvfD+Z7+H@?gnW3{gas`HrK(d5)zBnN(z{H1^})FNEA(hto;3rwTu#MJiRAM|R`k%y zP0=R&x|FTeBJ@znXxzv3%E)z`K(dcey-)3v-L?WujkulFWnB}kU5w*D+T~m!)m*S; z+Xg$wL}-IKaJJ%#SlxYG-aSUvgrQ$+_~x{-6Abs{i0zCM&aQ7 z%O*tJA&xp5u0-@*7X8Iy3LH;Kd)uRw-?yc^fi2jBEI+$_UjZ9KYe0lF@CU4I%o9%B z0XEA5?p+d&TY<1f4!&UPby)b2U{Lg6YAQ$jSYe1L?~ekW2^*Fd4<8y+xAR^*`7T*S5H@N?79fm2K5 z*Af1;E@ofwyyAcUt=}*nEo+_RRvm+J8pXjPU0`nP{}lJ#UsthSrUG zhSlNo=(Bxe@qJl|4rqC`Vy2X5N)+RJy-NCHUxLM5mZrv91ZKSrK!Q!_^%XE<1OzqM z18MjJHRw`j{$>j~MF~dEK1qZg-dF$VT6G;lfiTx+j^KmdRaYgr0R+^+k6yEBI|mKFljo3YdC9&Z0yITRBHuStq9w+Mub1~iK@ocwpLe#4V0~n>>fsGx25H& zgvDR3>6h-?@Vr~L)8d;(&scO{7(@zUev64s1fN8NuQh52_Tz|XT!lLa5cLPg;5$pv zVvUI9mMqW%O`Ih*=v7VK;|^Dgc&J&_yjYnR1QGWB0(<><|wV%yA#th>;OFz-@MIM8dl;xQuf}Fosn6b!nTX-=;)u6;E+I zy~4mXN&(9{kke0A6mjWWOu|G7QX%Zn?C#-Q%vzh#^*Do*)mW}Ks~{qf)Z zybVcm0(3d3Yh4WW?i01d&4kY1+RP%S4&mm~vFA1ar?6^XrVw0FHAb zm)G+}QQ2PYJKZ&bozun>^-`a0*GBcaL+PDf4#Lhqk2?gb2w=cNN75n{=G$Qb{-wtr zhe_hA4r(|~iUUV&^xhEmMk?1tU>9Audqzait%@~WON=t-1IT%FMqV$d^*F}a!s2(j zNqh9k;p-NmGzL~MmzTDXr}1#ZK-})cn!h-#e2b9_!3OjBJdLp<1fOtcNnvJgx^D|Cx{NzdZM=Wv(I@@VH~nB+gw$94)ldD? zcm3CQxBP|uXk-1_UxeAm{oEHf+1Gv4xBb<(dCr$*lJEWE$2HzJeq8%~;0HI%A28=n z{^&;LBmh;sr5{wrwkAi{(S7cy-4Z{YqphY}|eoM@3D#Eca$ za_s2wBgl{8r#I5a3yrcI|(t!nk^LX}zN8h}9|%Y_YLb$Z4fIzA5>t+^UyB^4(ndGw9HRQx;yT zH?LW^m`~pgos;!n&lhRRj$Au##M_Tyqvq@SH}K#EN28>ux1#TYnG>#!`VnmMyNs9b z+}OE#=9bo}E8iU5`E2Uor9KKRb+h4b%kmH0{$ zY3J2<^@VlXbsd$LpMmzlmKc7%4VYAd-Oa~baut4+A&2k5ciwZ988@DV=p}gKha*~c z;epw8Sl@N}q30isH7W%lR{|bK;D>#or4x%7nuy$VLy~CWiZe>r+Jq%KS(Au5@;D`h zjR8p{l_eH+<$m&Y>1B{mW{I7VRgTG}nM!V`WP@v_`6QZKVwszMHrjb-PdKV5CY(ir zX(V6f{x<|wnpg80^j zKc?C&vYdA66Sc=`%V(>wdi!lw0FLNlwYLh3=#gs*`6#fps&=lqzY^5#Yoab_t(J9y z$?Amot_!Vsm*y*DO#KS#Z+hk4`z~Ar>kBT#;L7TzoaM3`FTGOEXmGHnGVG(GAuIfF zNDB&l@}C*|$}Pvb+SOyf4i`)*!oM2UoI6?#~AC@UbRWDtSrb6 zip+1aA==wAeScny^_@1pLp(4(6zIqi^#z3IVlD~=O{v&%l2)tbIeD7CT^oH_FR zZO-|9cAs4&ol)nldc0*D?>3rAR_r^O(o_Gv#?h}n{IYxJzNz=wU%X_T-?z>%x{teW ze(~a4u3Pf?L$$p2+tJQm=TcO)Pi^mQr<%{u)bt_)wJCN5j1uOeWFX>0w;JZxu8vdCVUzH2W*4KbIA%_CX@gLuLzMka-6Q{q^NxHa!l5i9tc%NK=6qY`$p zjCrx5&#)LdErKzOW?Unl+&I9Wk?f6j3kIx;RgFDf}LDKso8FDxr9EiErEFEBAO zEipDHFgznIJsl}M7A8LtB|s7 zabRk7Wo&eAZ*g*Ra&vQYcyn@pba8rhba{AqdU|_zdw*_xg=&C~c!iCIiHeSmjGU2) zr;~=GmX4X2n3|fJoSdAWprE0lqN1auq@|{&r>Lo_s;aB2tgNi9t*x%DuCA`GuCA}B zud|`Fy{Np$wa3uF(ALe>*Vx+G+~VKi=Huk&<>=_>?d|RJ^Yi!j_xbtx`uh6&`}_R+ z`}_O(`}+0y`0V-iOJGW+B^U9@u0b&|xFYVky30H?Ungwp%T` zSs}q&A;nx6$5{=?R|dpU1ieZExJUxBL<6ls2Cq60tu-99H6yt-BFHov(J>g-G8Wi5 z8`nY{+D{bSS_t7*1mjZz<4ywNM*-wM0qQsa@-_hYH~{rO0Pslw^G^ZxQ~~)|0rp=3 z^kf10X950c0sd+M{%QgKY5_9MG6?fFh*r_Y~2gBr96Gb2i& zNL|`YdX!?(pfi(7ol3Q;)vH*k-jw+=D^sFRfp&HJHLTaOXw#})%hu;sr%l`HJQ`K# zSc$!G0#n3D6~ekh?+V<@$kf}V1>;UcJdp7}!hZkW1#4EJOgDrNt&s*qbF}$<0Lr z7uYMiH|KWKdycD z_?@TUdfhDtU~J&Awq8fWkp^9K`UNMIdp(Kw-h+8X)evEt6@`+94URVxh!E9fp>!qY zrXYkOrs!cW94^=*Or`xdBZe!Q=i+7`s?_6)HqMx#k0Yx19*rs*c;t{kQkYngO&T?t zjYEO(&vwqi#8(2^f)1qIe~eVck?_n%uD{CY=h_d8dSR zKDlR}XZ9JPnp^E?=89e(Y37?szpq&L;>SvrJPRdc6ly1rye`RTE znqGWGCTfd|-bCV|{;WMJUvP}ZHm9t`CCaCEvPN3#pGg*Ks<2EV$R@0C;$|$IZ?bqH znxV3{E0fAfs4Hl_>S^S)Zf?rsj?Q`ns+$mwtL>IO{V9{9eaMw+2~93PILo_m95(7WR<7j7+i!BdAES2qw4WB`_+FJUq%O1hMPxBJj#f z9bu_R%*ZGen?|p_AjjJf!u|T&al7x9Qt@Uan~d^ez-ZElzoMuD6U+}AM(`q}JXElr z+L9Zcf5CDZuC$$ES{b)YBZ?>1t9I?6)_w{J@Q+hxTCRIsD`sGVh!X4Aa`eGh-+Xe% zot(K|bL0#DDDVD^oyagZ;w84fWuCPN0Gt&2UNuxJ0$bRp9 zFyEYC=Q)ggMZ!quh3^~sB82x6x!-~-KG5Em|BZ9$r;9G~Lcq9ty5D`}^?K30LAIgk zrc|okY`@mZ_^8RY{b1foor^2i&u1;0_1QNKZC7A|9c|mrs;hR?h_TH!p5(KcK6&tm zR^IxnEkC|S914VSVFFp#*IjeLvbAQUu1fxumS$BAo;`K1u=6v4}wr4B0QdYI<`O>s;4@v6B)Ro^ckqx z%~Afo`Bt%Vb+xoH%TU^@*8QMEKI(}tPfN*<_o4-*FDa2XR(s!e=y#a-Y4MBu0nhyM zBN*^C4l87B8tf^gtOoH#Ct@Z#IDWII1F?=GDLKxe9;~Q-B%tHqnJS{i?5S~7{)uKetJ5-N z^{QRHt8`YDFwgl^fOBL7Ho3P$nF7{{IFf5Ly#&%@1!_Q63?h*DIv^o(=_0X&Xmghs zS%f|@Z{3|N7V+B4X2O(CVlw6uF@jlcGJ+JXP@`4nw6G>kT8XBR- zRIiAo8MJcSN7_O1RZ>@QUT6sTRUaGX#3H`?v2 z&v|WSo;T{laF-8Uf~sD%HVmpnsVkv(wzswyTJxKS%cLk4?_*av%}c+Sj9y&2Gha+~ zhGHbhGX)*u{$|0439ezt-V4Y|o>DzBf-fmk*(0_dJHzldo&UAO>O4og)$!Znt`ht2 zz;0E{jQwFktNYeRH*%H(zA+SE-3dj>cEM>-k^<)+Mmai6x>f$A?>=RFsu`cjTZz(1 zM=Xp-AJWKP{<`Ic)rZN8^E9QKxjio979p!{>D998+|w&bJa(^4(hOv#cryllX9>TQ z9fylhx~Fv}LBV}ouf<7k)NX`mnXX)L?{agplhi1l14hJWO>BrY~rj3#s|WoMeFX_O^; zJLXvVw{DcBe=5~x)npeL*l9>57anL80Qi9-ID*~AX(WgfdxCWs7r^Uf6^h5rSd(dG7Xudsc>6*nw);hN|I)aHxh=7>D;UhoeG= zc$kNJxQBe$hkp2nfEb8^IEaK;h&bT{{)m`}inxf3*ocn!h>#eGk~oQ!Sc#T+iI|v) znz)INcm$sKiJ<6-Nid3}Sc;?giJX{lFGRLj3qgf9|)5+d6Sa3k{$_>IN6huIFd9Olxg9UMA?%% z>5m^-ltl@YLfMp9p_EXWl1I6YNg0(m$&^l+l~ZArT$zzmiH%j+l`n~vT3MDsA(m)~ zkY72BVVRa8NtR|AmptK?ba{_!DU5Admlz3`a@m(Op_hPJj(3@jJQi$&Q8Dm>G$fidmT;A(@zYjF0(`k(rqaNtu=znj7Jnq?wDGd5WD`ngI!#qS=}< zp_;I{il^C6*9+8nwBbnK+wy$(!AHo4Glh2LYVMIf=fRn#Vbi-$3N*!`JNNm zoa|Yj+##RF8K3wGjq7Qjp}C*DshY_A?i7_gpJ}Qnw5Trsnq(Qm^MtY=3YNSQ5q)ghROBxhO00>e#rBo`VrEsNKnx$7- z16F4J%8|Zms=$h-!rG?9daT^qtyz(*MQWZ$1}t?Rm}?Ru^78n5+Qum;-` z_qwe5O0MR5uKfzF|B9#q3#tw|ZN({5Z0TTC#vExR6`0 zgo~ths}p#OxMjPyYkRb&x(A;7xuEO0j~lt9+pUwUsfH`Gm}|D0ySO%+si7OYdoa4C zTf47%x=Nb5QoFjDtGMaNxOytPp-a2ATfCEsyR@piV#~W|>$}znyk#o9pi8{QTfIL1 zioBJZ6PLTXt^2#AdI#VezTykM()+p8YrW{}pV+IscgwtB(7n(5z2iH-cZUHz#TlpAY8-bd&4-a!#upiW$D9x+P@nt#4$|7A8f>TP{K(Jw@kdnW*G)v{Ka7G z#fdP+WL(B$`~hg3#%helKhVZ*{KjqE65ETpFbs-RT*XF=#U`x8T-?Vc8OHvA90q1Q z$ceDVhWr6=oX9^Q#|#Xz9C^ngoX1GK$6D;imOPVz9L9uf#)rJdiVVk$9L0{zkdREn zl3czxTnc=A$*dfXnGD98T*jTO#-IGgq5Q&9Y{!sn#d@r(tK7=KY=|^4%)~s*sc_7x zFbm4O%$Cs1&MXMf9L>@U%?MD<)_l#?Yy;Z7&D`A0-n`8)5YFN}&f(0fUHSs(oX+Zu z&aeE%dhpKh9MA9E2lQOe_Ds*4kk9(O%*(tA{`}AWtO5e90xTKK22F^?T+GOv%=|nH z&iu^N9MRZ3(FpL(7Jbp=oY62~&Rn|A9{mFC?8Wjt(t2>uCfx`6y#CJ(4bT8R&;;#} z2OZOZn9#($&<*X-4{Zq%EzuNx%@_UC-K^2%%+WRQ(d!)2VL;OIeA4%v()oPTEd9?e zUC=UJ)q6EeC{M*oIBmR$K>)z1WPc*lPXQ@|@O?&DQno)^Huw zE{%wGz1e<<*Luy*eBIa3EZC$y2Zw#ya*)`Kz1oo7+Ik?_k4@S5?9`Xd(wXf9oSoZx z=-FDm*EucPqg~p8joOE;+N;gjt_|6+t=6)Q(zLzOaedpm{yp7s$lJ%f)xQng!adx? zUD(Eb+>V{xYQ5Y_-Q1Q9-IzVlnoZs8U53`p(4d{&qP^XK-QC`8#NdtG;;qzp(BJ<3 z-~HX%=Kb9K9M^KK-niY~3J!(ujol9o+=4*ggKgibjoDY2Uc(oT;Tay!91h?fPT3&d&mu0+>s{hJeu5_+-zh%dD^B6x z4c;-X;WO^vHO|&IuFM85-8~-VBKYIXEZ==C;igUG7JlJJF3(A>XzU zQrIr z4UOrA-ra}Z*qyEiiw^32FzTdU>LFg{e17Jt{_8@)>iq2LZ?5Go{^GM<>vvwyxGw6t zzU#J)>cBqjJ|XPOOzhjO>Br9Hov!SSZqLo`3eQgF(Qf9{e(pVC?aJH=?B4F~&hD9R z>?8c*b&%|zzU-mi?BlNIyx!;N{_icJ?z8aj1m6nrZs?nCj^LC3;*S|9`5@-3lVSb6kq=GBVq9u-|iVt+_A3TiSF&pea|2d@q6y? zCV%rAf$}MD@UPDD8;|HO&+su1?hiliBj4*dpY$A|^C`dbsNM35ZSNkB@3&s`&wlha zuk>0k5lnyaPJh}^593`9^W`n`R5MjxP{yPw;SW*kNDqbU)*EkLw|y_mAKC zkl**cJ??xk5vs7B+)jfXsb1nF_jNRlN-ra_rfCCWN2UA}B-Qs$aH zHEXU!8ByoXQ$2nD>^Vv3&>TgLIzgILDbjyUoj!#cRq9l#RjppdnpNvou3f!;1shiE zSh8i!o<*Bh?OL{43%)(LP_Dy=J1yQNgwYX4z9Ib{nrRXzPMC%31TJawCeEFW9|47Y zYA8{oMVDT7(pK|k&YeAf{stXd^k~whO;deaFs@vMbQ?CtYf&#>j(eZj8Cb*h4L)WllQ=Cm(qivAB*XUNs`=xo{ zgYmqFAOC%E;}?qJJ(q8?z_A)5>E~CJ~9uzl+<&HJ;mIU zFGKo#I&PBt0t7Kc5l1AkL=(pvP@n=?J21iT!V~X7k$jVoB?=Gotv#GF)Nn(|>`U%M zA%`TgNF$F7Ek%R2YppxG6kKqx24w_{#u{(L5jP!I;!!>yf1Kq-2xj8cx-3C3aB8W?qI_re*cgt1yiD+<3$L z0u{MupMU-ylVp=iMmc4OSJqe32Vss`uo`K`$Yy6TRms*{ecah#ptt6_>i~rwx@e>E z%~wifmu9*dnV*JQYJjOu$?7k&_SkE?@5cMO6ag8U=!J|vx>%N}Oj~WIC4|}$w-MX2 zYFp=~yQsV;r@Zpcz&`nJz{wum<+NqeAav134?Xe418Y2PTj5~6b=O&sTyo22r@eNt zF!x&_z#ri}X;;x^8g$Z!H@&y1GZwhZ*O!MQcKmFIK6>e)!d(!tQ|{gDeSvSfq~VEg z+xWMUcU)8EUw3|b_1B-h`s;_wzQLBce_8nNMK6B6<8fC0{MOTFUjPNzHTP+5Y!UO_ zM*cpqKn6B&frYc*{WOq2mr%ok7sQ|iQ->0(`R{+R8(;`U7_tKDZgU9K9$y@|!Vf^u zBof45_+FAh8d76}Y3QH_n+L)X_Rxp$Dq%u)7rzFv(19-W9t&#kvl%{b1zgPAM4;p4W3bT<`X0j4Y^593JH-X zq$3v_na4Hkk%@hzBp@*xP zxz2RC7H^6 z9W$Xh(P~!o0@}oA1G?!=aDJ1V683Mw>*O4Ooa^Qgv1Dg>6wRC79&oh9upJnO*Qrvqs(*E9U}s9$f+E(m zr`3vLd&*eeIM$hvwWee>O4+1Z7PFacCsd=_*}j7Ir96u1Xi1A&;ube5s(mPH4ddEq z!dAAk-DqX!dRyFXcDH=}>{S5^)2-5UxW)x9aghsA*Gbg1u)U~k-zwduQa7{KJt=Rq zs~D{6L9~PIYIyZ)+VT1{qCjOXdY`-A+D^BrxOD@3=PBQn`ZlZF6|8p&yI%^2wZCTl zFIofaT=mknqqaS8b#)tG>^4}tp@pz;CtP6`-}J)DEevzxAmIKEN4LQ34e@(Nyxb-h0ed){2CgfD6)aB%` zVaXEs!%!Bfh~LTC9$WRwD9&<(x9nv)a}vz0Gp}Q5TxKUL6~|Flvq?#u(%$~~!Esh` ze(SvGH{O|bc~0w|+iK<~|2fS%Uh{PcJztyD_r4NVG^0gL#S53U45vnQjG>tTR=2vM zlz?@tJA~1=z7@pgOh&GC{nSjKw6C45ucuQyX(rmU}(o)TXz!?Tu}xZ@bt1M*F|jj%Z?g_3ek>THKdC_qtOv-txx# z#PwcrzL(wa{O)$(J3jcG7rwNJ2ffb}&+M%i{{7iUhy2U)9`n7=yziRjc06y+fSlWR z?Ntwb?mssAbrZeaU3dJ~Bd_$yGrjWKhW+0&zf!4toazMEee~tU`-S_y;lQ8fj%JU zX+P^*x%az(_)|T}V?D}qJ2%MQlVze8ee~#7U$?RItQL#KZ#_Lrw%nPgFxt3`J3-LsA3*Q#{2#RK-DLMOTEy zXbcruoJA+BMO(bZT-3!~?8093MNI@oP87ySAVxSe#$&|8WK>2yM8#%w#zKTfX_Uu8 zp~h;IgKLbbNR&iv97#b5pmM>HJAa(u&coI_+>M|NaJcVtCFT#9*wNJ6Q{YQ)EY z(#I>z#eU>MZv@DIG{b=;$T&1eJ50xfoP&0BM>=T8c#O!F9FvKh#fn6Mi^N4r)W|RV zM{xAWj}*p`6iI_b$b>{mhJ40{bjhPc5}2e#e5A=`;K!TfNS)kCG6czx97&Qa#dRFY zW?V_5M9Qxm5~YN~ifqcK)X1pZsHx;hPxQ$UxXPf^%7x_0qGS%Rv`Z5aOKT*{TXf2d zgvy*uOSPoRp7hDLEJ>l1%T=Vyq`1q*9Fe?iLYXW}zdTF8>?Xk+Otvh{k%UWS+)BlS zN3V3u(ew|Sh(;B-yGv`WrAOyo>Sm0V1waL(|Q4(Mdc z-ki=|tWIMPPU0j+<21?7tj+Jt4DqB-=OE8(Y)Zbo$uoGXjug(RbWg-gPNEFW+pNz6 z9gX{}#r(X*{p?Sv{Lh^XQ0`Pt`9#nQ6%7T2M84F|n|#o~j8Fj8PT4d?_XQj46@Aq~hPRZleyM>bu?90g4jjng?L)U2q}nY_~~MAHxD(>}G)_jFT0 zWYYO8)JnyQLw!*^4M#m~RABVeK8#fF>{3d#)KZ-aOik2fSkwpYR8IUNv+jjb&6ZP(_Hn>T@{92HBm{mP+<*LVm;G5wNhj?LuLKd zW_4Ctg;pUoRtQB_YmL=6bw~rvR!iMh4((PDrPgG9Q~_O5Y%SM#{RbzwfqFHAd&O6L zwL}yC;MaZ?fqwj8!9G z{R$xPSRVk{kQG^wy^13+*^@q8uV`AR9a*WJT9ma~m&Mx9(^{_8SFgQUuoYXf zC0ny)ShUqOwWV0Lbz6;v+oj!#xux5XwcEQ@*}P@hy#>9#^;&h^{R^;f~wS<)R_(>-0pRb6Ia zTM}qp*L_^rm0Q`J-O9CG+|6CxbvxeWTHoc@&>dajJy_xeTGTz>?Q&;?#{(%+rsU-A8404Cq^E#PtG(XL2f_FZ5Ge%}YaI_#xc`^8@izTodA z-u@k5)?MBYPEiD2U%G8ys-<2OwmKE=+AjRs3Ld8yhGEl{;SF9}8g5-19{yAucG}sE z+7h?TLUTL0YYF;#J?ni9KS#9=Zh%M4@{@&vzew}eXfpX4@ z5!PWUHraG;W@u*TB5>z-p5M+@1g^RlDY>IiBG^ zg!o(EBtQ@*@Bk{v>@c{7-Q!>=46@V~N#9p}=p$;0UUt;NXcA3g9@B*wyZ9>(&NAN4 zJmG>Zabqx5{kX{3GD3VUHP&)J`*?BGVuaJ2R@^-B;Mn59k{Q-Y2J0jruC(C5Y(VTJ zjbv-z(&}(iwhvjhRGc|Ry2YquSR)5`W7D5>oQOuUivg-v+ zn3HYGN^D&pY+8oS*Zr&!+>XL>PVH~bhu|)nG3<=Gj+R=^x;BowaaPJ|&U-J84;PvL zZHR2BAD^1p+(p_X$y@D&!tOqp?7{td)ITfPzl7vy|2YVR!o7kod)1M1 z1+KYz>AHGdyhMJyO#1AAM(Ti0>Ubr6^;v-q+u%BX)y~0hZH&w8staNnH|aoVzlx$@ zPQ2-OcyUcewnwoXO_RiTYy?Q<1nY6}Y97NT8o~5+QMBW_BhEzh}yI^Kj{w5Les1ZVpw z7mY`)C6Bmw4?R>*9@1yNuo6J6opJ5&Bm>VBdrvX{XNfpZxHQl7riYB_hs@1~tjmWm z=CDSImnNZ?oOjQ>)|)5^cg;(WSY|Mr0+`bPtZ(mS=>D}c|RhDaAUh36L z{h_3Ss}I4JrJi-UZ$WdOVcov#aZfFWZy49U%}@|lT)(MS@0sbBU20!UmbY?LpF`?b z*FW#irT)*UkfrXS<>7}@?y|G@hjaLFCzwHWhNInYeWXGVR-2SfxSlun!r#px1Pp9ZFyXJP@olSAIbEFn=MpK9NMt(ar5c|p z(*QT&yO^J5)VktSzlqY?5h%Ea#q%}Osa5xpx!e;xRIcpJF0ysQJw5}0bNENqb_dLE zSOH(16`Xjk<%eP@5^HU`)=dM`Ihi@mAp);YH;41JaZau>Gfyf*CA%qoql8Yf$rcaBZ zF0N@yVSXVr1@0td>c$?_C3q{53?+}o(LBIssw~H`=aN|d9o+AKpb@2tl*E}rzN>y^ zJN~YYF3wAttk&Ras;jlyysxhZLxq=SZfwQm=eAgrnfOIcTUAy+I29#>c&)pUTt^o8pq0Orn{Kquy|=MC$#`ef}f z^b%Mu`V~kcV@uggn!F*1r5_pas#Sqjdty~t-#J!V)d*9u*RE9#s;L>i24>av)Tl6z ztsjBdXkPtj3mRZhUm3jM3_`EcP)|G9rv((St}QWjbRDg6G1FPwi8doIhF|LF8$gt> znNFPyr>ATUEKvv_d^CVg-Q?%(=(K6mOy8E~AMPc)t+ma>s%?_<6&wzIoaZhhMlr87 zqpI`Pu3efhgw9LsLBuUQCiKx8;kESTKzKIH%DdZQ@!Rv0}&@mjw-H9Ti@?P#jB0nmUzLQrw7*q4&42yH}|K?xy3xA+L<_jl(tx;AJtBkDL|p2+*l)S=_thn{gvk3C->PdS;DGlq)H}#=s(JdS2GN{#KItLLxQl)SfY_nQYCL!C z{N`+^kFiFABHE>q;DL#^5+NeLjHKzNK%t4~(})iAFRiq0}b@r5h+JmygL4GdosKXfZUF zPg+eXe{ZfDWvow=k>qnq_;*`O8Gwn>8*7KzXH%AQ^<C-@w?>NVcSBP#2OW*W83N6k#cBEVs|kPenu?3ztW;!TQ0rQnYfKsOjOo`_h8EFUIvMS3K@tCM zT3SKpwA6w0>)UWk@i{yn&5b537#g~Mo`i0GihT9W%t>ZZqDmBMia#nVc0>BYZ+kVJhxPfT3u>* zf^G6;#dD%J5q)YI%7n6W4zt$Xzu_6~PiFeVF06Nkkq%maWAYfS+`D7L|8(KY=Ce<@ z30~Fc2JhSZw|?1z!qn{fFp{RBuN%UPKJ{V?-tux(9k4nq_kSZ{&5~m<_b+IJqtkbc z()((%I>pn<^}rbGI}t&A%hMi+V)v&Q@Qd7FX=F{TAt81B*PY->r&0=A^0D^7%$+a%)?OV%#`p;mvxlsiPVILI=PP?8 z!u&WB5qnX9pRFg+2t5~1a#=*HXZfJ-)s?>C;#a?Zd}h0Xk;hb5CM95{f(yNXrT7sI z8Dpf;&$mck!r6gfc?vkxUINwF*1Eo&Zh~)Sf*|De$hK!D3QMVDb{vh_Z)Z2+AI-bI zeRHXgt<9#!+8RW+wfoJ~F(`fgK>RWI1JlFe`m|v0=8m;f?LAbVV+L>t@oY#Yb_ro#Ka&5*VJv2Fq~rGORv6YF zDkib3(D?V4bQrkU%2bfhO1N+2{|Xt(S#22BJ$SBZpBz5AY(IPAah zm<#{sg9lq;=rKo_%+r$rYM1!`Q^RAn}eMz5Y^@HPcNA^j;)w!QiEHE#$yf5PtId z_vv73N;U5@A}QPh!J8$?6tr#+whpA1_?VWRC!U>q>!-9}+Zj5BdoZC&v-!?6CvD{Fw z>GIB44J&Moo*DI*w!h(#6f}n$p%#!)-~|(|Lxt_(#yw$+G$_-R_VHZK~_MY5lOCXNKvp&0a=B^(10h%k2@xH)e>=i-uVVq z$UL|0;TgnALP0IEf?2UuQojYkafRU!Hz7^g!7eB`cg%n0)Ti$v=bn;c=-Xt-*=C8R z;2qOM+n70!E12>m`9hGz0wL$eDD)uSWi<;D*q}(%+nf{LMjT6{5G&+}EqGKiK}yKv ztSH!Vh2K5auW~IE9UA5CGT_M|<4q~dt~d)5)8-Ti$F6K67>CvyiwYJgY)JmZ*!-DdBo~a;`tn$mPiLI-hEXJ}t{)%ZJ?2DuNFMQDjdER|&n668JYNhl4$b7VTf+-<-P4EorFnQHss#;Vh^UzNx7f+q#k4u@MInlmwEOY|Vc6Vk_~gAaIl~!_}sV zbAk(su@NzF7bghFS&~LM@SvixXR^TN zvJe(5bJ(Hr&MD@4_!U<|Yni`X9kcBOQyz*~9zS)QuvkvYLz{C$on%~^WJjHhXc1Yk z7b&6@Wk(zBRvw)|9>Z4_BSModU6w9Q6;V!G961mt|I2r0F>9_oo6a)F&njHRG8b(5 z4qf41LE}MCmeO@(OH7qYOP3aES{O^4v2RfXG%r4|lF+r{F*~uft%!H4C=H~m4?W1a zDNo8MgTz}FBo|l(Y#amtzo({@rh>_~q0QTQt*TQ#@&k8bPw3i=Kh;hZ)UM*x;gr`= zS=QHBlM|hm(VfQUAC)6oRfwEcNT22_TNj}06@(sFSs4Xqn6?(|w}w{s$`7=08MhPk zwPRQU*=Ru+m7oXO4#A8LF8WSE`Y3U0qZX^^F1qfa6Jv<=H#ml08+0KgRbzrb``C8+ zxX$7QZ3d*za=K1)b7-Vc${LL=JvOX|S5qpz)}kZNnj>j@1S@)+hDCNx#<&$0{^8j#@-cdUDDg`Oe1@GEgQU zjQ{4&-B@8a4yreHsx#&L$zB<^;4U_m8OgC~wn>50h0>21{${Z>zB(i?AmMc%WE#?PeS&0%FLg2>>ugyGhXy64w-6eS) zOc*{aW-Y7`%P02QPbvTQQ~$a1{spt0_7T2Oy>QO9>zhl8Ju$+JUtuaqqC-vX<##8 zV~2&N7IH=lZs1_qtni`2d%sj}6Ej><>eYy;HZ3R1M_p{Q~TEf~U9NZ=ES$ZmD27XujV4FmDt#ClqOH z5J{}zL1p2Et>^8B=Obhlt91szHi(O|N}N_mXs{9nb8L_}{qu4}<>yqDxL3)%6D;JQ zs&t`lY@&&~`QZ&MTgb-keapSnB(%-}jl0b-&-Qbz;pgs+!YRZ_k^NfH+Fpt99*fjT zz@J5BzFI}5*+7N!`$x!)Nwd1WtDM`t2FOv9nnNp-fHM2W&lnf_jX+ScI3RTcI@N{3V3yjdM|$4Sjaz|1Ab-J-Q=Cr^6y>(<5erHRkv z;gdC&7C)<=J6Ew^3(B7BQ)~-LQj4Vmr`6XM_F6Y16?Tp8J6ie&;WZYML|5BsR_*B< z`ECh?;U7#dT;k?;X8r7rxQ}`&tWKBJPTeC>9FLYlt%kL39JnpkscbffbvBKTCIB}m z?mKrO7Z?c+bOjgtepj=vu3q+cUX|sJ-K`r#tv=>(z7SDPD-CFu-A9*8cl^gkr1wW; zcn|kYH?+eRk4rAkZdcM_S4{ZFZxS9E@;s9C4Iu_k!oS*_Vco)HTKzO0tqt65%pVEt z-Q{vUe(gR4G`a?Y?gP6$g2wNIFgas%%3>O!{SMn=Z#__Lp5idw{*byI>iltF^nRj`gcgYh+2(+T$lL>0WWdWv_ zdTt7PX-a~NDn*McT@zIv5_PyRHlIDGIm;f~A!NIpd9_@r1|Ioq?iEp<1&O?eK=9`t zulZ3v%^7gfrkBS&Z`4|Q(k^eZH(xOPi+3cj{;O9xH7JghudxZaKp@cX@0elhw>ZBl_LV#LWyR^Rts1;b*4`>+$0A>J0Yu+`d4>h+B zrZ0Truz((l(w<6=-s#73dVsX|Q(ETEYZs_+7;t?MaKDZzc#lhf$NM`bD0n96J%-$0YBio69$&Q~{2cHC zp>aMyX79e-SL~9Gxy1WI?zbu-h;Ow-XQF~YlEzz?w|BQhf48-OsnZ*~w?KZ-TW{sd zGB;o>^?7B7qInykutIA{1B|&Rbyz_S+K-$h@L-t7)49O6)-; zDv-0w*BqH{QDuKBo$gIc--ma|Ly*BEH}IHU;H0+mWQp&GEC$b?ydQG#=;SW-R|cYC zsAS?vJn;ph)VQo>9e9u+lVL|v;Q~zFgzrEHLat@S_5@RoR3`g@B+o))xlC@ygTL*G z<_ft&0dUxSNft_l!kkpD1woecB{q3*@qEb@s-+s4;2B_Ycd`uYe*o z5SOi5t8mIdGJv~A8RXu%x8NOMZ{Y6_4UfZ*=OEM{hE5n;m&OVhjzf@0sfu+n9Z&jd zmXq}7Rs>hVdt-2UmSQB1QYlw3F6e z6>um1(^rzA{%7V)zxW_FyXEYlf?>4MkiwQ`8DBeEk?=5a_3^C4lCGEd2w5%doFvX4 zS*H=oT&aYRPx;ZxW3=T}PAy;RCzQt-#WEc#5t*AejQ3lwX(Ps%USAJfDu(e$3 z2l0=qWAlP$J2J zwOy^cfx!0JMrHJB(tXnRh4Rcm1vb=ii?CgwZQ33iC3VKpxp?^?(=p{~Cwpabc{~OH zIo%x*kykOWkRdty#j8@Hq?7WM>q*VpP~T}g6uO%Cu)6)iODU%}=kFmxK#7KmH!t$D zR*|)Iyy|Zi{dQoAWg5_m+|(`MAguFZ?XnvINymX{Sg^)sAZZ~&%V!CW)3P_kkM*Jy zau~a+7OV%Wp;(pvm*8qz7&W`BS8BMyVHZV+;W`V)zU7*0&F|JWiMl({5Ei+H@HUl$ zRMkE#9!u|OJ7T!}ZkL$9v+^&p4sq!sz*pe!vP5?F@v27g+C^~nl#bL^E`$E-b(F-0 z&skC_%Y-L-t;V%CzR;@UNolkG&F}pZ`Imn|(Vn;Iy%K`ZC}<9c>{}o!jM{t02^$ho z!jZpJLd$9cwhn=W5Smh**Tm#^pGN_7xanXq4sxJ!+E41L8D&PBycrV7rmrp*k*j5p9V~Oa zYJ!Zj(51eObHpUjxhYC`Gt3rRzxz+lntCN^Su)HR%AA2OA)*>ZJH(A6wTyHz+C^5{ zkfVlf!I(<#Z&=2M;v?c>Oc>I3Kgo!AzexXffIO602|LS^P2QHC4yE<-Y;k589f z>zMmppJXazfgr4NArseLwaHXJJAM|S?B2()zc3XpsYaKWwU33!K7A;wC7x)3-m(8$ zWhrW7g&F+`W4AI?N>-ErGv?s#P{=b-{!-*g*o605bkBNn%3g6%42bx@_{Zg@1 z0(EDug>rnWNkzo>p#Ilc+R6LdHFIc@?0j55vD2Ev|w|Ewd^ccYppxc^;opFn!ZZN6srhEBPcPivv3 zzQG7|#=uTLIjMYKr!L3P0>z6foU*7`I(cdpU_G!Hc-|ZuL1zdlk#4A9x~s@vVB{`c zR2!k_G-{g?8_QL|X1w9&%b;FlHOo*vZdcLST1Oi^S zzW6Wq;X>*{DKLJ)2jLBnql87|M;qfPJR>qOsYhS)?ouw`Npk!3#`Y4KeY#)n5rS(- zAhRJv!)@>TCeHSAX2Oule|c1qt3Ii`!TXe~JJS$eX)fk^fYnGApwK75lQI~VwRxHT=(je8E!;HVLvbH_cQQ=*}Ty5s` z5-2i|pjaMwcxa_HJ|m?7aarqgg>Jt7G1uT*Rg%9h;ngElxa3`Ip{Kl4#&{c-cm$>;3f?-=gN{i^c}5DEoN{E=PLPIy zsZH{dHU8Nb02I)W<;F=vA>pCaA}?s^!p>tjlZ!d_rR_l9eemnkh4hBU@H52G{M~m- zb=qZ3=k)=BctbJ5;Po(Q?dhA)#sP+WtLUQMb5Ekr74;?JA@siI%(Q+(!R3|hH-G2L z{Eesz z{2>4M-2{?U1^Imm(Y}0oxV%cce7%x`VpL53QrC+#GeXV`ZC&t)r}(5^dqTqU+C~nu zYX_5A3&Z>oaz+a~U&Xa`3EsPeZD#%ivj4+|d{Ay2%M9HY}DA2Nw8ThV8EDCs_x2Ma5IqnV~AQ zumAo88{3iWIiMUXqO_vT0spXc)%EvXA;_V?6xSuaUQ#aBjjvuIqdWTS)S=*Cqh!mY zraM4qE5b*_!JGH<%sJ@7%~B#lSZ7dJ(S?;faN^OAXV7o2?g(H$iO!(hZrrXzk#14Z+9`6A;t@5jFtb^SovCnLXR!cR1oVM~`?Dk+j(96I zc*47Q!;WcV_3srdZ+}_8wT2Q)%@S9mW9&MTwAPbg)?nl-61@ZxaXaF_qkj8*Lrxp| zjWC{|{fZbpfgH<;ETo>SH~xxg7XDEQje3q~Wrm#fhH~LE+%G38OJ%C@Z7N4LYI_V4 zj|OVr1nOflnh+T2f5TQ(;bxM0y=|2BSuv zIC-wr-(2o#5_-ZRaYU zc7a}7Kyo5)COd>RSB0tYmcuuZj*^`x#F=NoSttUT_k35#q(`8eox9(e|MEugdL9-d<k~*c2S^MP@ryBmRiVVy8nsJDTbY_BCw!@$*wAvEGOfto_wro z@*B#5Q^OTo1OASNmlH}mS%MT>9a>G@@?KM8RNdWG3n5P<=0+n(O(rZ^QvzG7IyojO zS<7`n3k0oAsHSO?lQ%&A+RtUKwd5C27PK3S&|TjsV& z@N=HQ+r7byn(pv|)N!-nsT!AD6U7{-#&xsay_ys>m+|KxhLsD3jBXxhYC42&N`=^* zlsJa8>iW!Xzo4m2(p^pP?~OR`Ox`(vA*B2=YWaoEWn}Magz$|&-ARS`L6#WSJT>8C z6xI~t&tVqPVlV5aIM{3)SlVUe0Ax z>1KwxXlB1?-q@m&xoDp2W?ZQLYmm!s-_7p0#qRvU?wZT~-p&5G#s2NV9-7Mdb5D7JEdN zw?$SzMb`5~HUCfSZRb-|FHiKKNAzf0^yE|YEKkgWN6boF%)h6YZJyYDkJ#h3*z>2@ zYo54!kGSWyxVNV`Xx=}cJ^vuI|3QBKgU%a|?HP~X9#8xnPsW=->6t(aX-{B$PWXtZ z<@8MCZBP6Np%vy$67x)wYEP1TPEz7cR`X2OYERaCPB!9A`S=Vh+f!_xQyh6yT|HAh z+f#j?Qv-O@LOjzV+S6j5)8cv4lReYZ+tah3)AM;Viaj&R+cT=4GwOLWn>{nz+cP_# zGkbZn20gPz+p{L0vu1g-7d*39+Ot36W4C#8_C0fs+jGvJbFO)F?>%#$+jHNZbD{b2 zK6~XM0P~Q+dFXuk*k1YgzrQ$XDv>Rq6>Wh4_L?1Nh29yvibgWijBg zc)s#vukv(Yc{aE_pRc0WtD+oOQ4OxB=c{b?s%!^Vc7iK=`KmtH1f#&JNpRIHU-g1l z^$M{1AGms(uV&w?<``IW4z9W8tG)NCeFoOPfoq`wb)UWK5I}XvFLmgEdTj6d4?UXr zrJfAXK7ns9Eo&*$B{L z>fK@qYO#H3aRjuwdbfIlT76$y0|0Fy-fa<}wwRZ;ctCrycY8XhJ^Q6S9{?=&2A2Ov zrU2FhK+WEub`YrZ1=I`Z81(KK1$9imq;$*zIv2bLv8fk-y~iKi3%}k=n$?HD-iJxlkFMMQ zHLIVHzmHP4S6H`Cz^6~5qfg3=Tqu=1Q-FKfhTeZ#-JNujIlGhmUi<5F;8f9FO2E`UxgibW@Z zLobQPC_})iNWh^%z^Q}JsfWd`kIHI@!eWT>v9lVXvKgbX8Dp@UU~!t@aQ(vKGDYV! zN9DBmU-iGis$3snRonmSKd`Dj8t+H_U!>~)VXI>BIpP7FXayZve>k%JuwwsV$}XhK zDxk&;P+}I4XA_WN7ZB$X5aALK=H&mu#{Ywr{|6%%fQo^QhL(Yzj-G*m;R6ZF#KiPL zh5cA;tgHY|E;&Acn&1x&k)LwnlH!tbKc$qU6jc>f)s@t=|^#*JpU8XTZ+J6T0XNHV-#!N52m?35?Z#LYofeJ5SYL5|` zM-e)k5&GLv2FHI)Zj;Sk(kJKoum7m?c1HT>+Qvh?dgl{vFokg>+SZVt)|`W zs+FzcxsAMujjVySl-_@Ty4RzDfBhQf{cA`5|6tXTy8QkywEr(yH6}`g$w_oBW<)Gn zxx%HlfpUn5#bhivqP#>-=|8Y)I%d*;U{%C7sq(Vf0?vfRr;(=e`BKHg{}-&cQTbpVK%R5_Dn3*$rjxm6Yx?!o~!k^J^44@TD#f(8}=)SY?|?M0`+(a zf7C<4YO@V%XEuX$&3>Ls%qrtVd*k7Bo@f+_9FSwP|2rnV*%|ryZdyF0iko*kSJ{MQ za>m9asP%HQC+I7wKKlLgpGf?Aw>LhCvy~=Wogq0(_UqH-M(fR~PS9i6kQyXa@1l)& za%9F+IyZI={P=jaJD#i1E%^89mj=5T1nlY6b~-4Q?frmlu@&%zs%*>tiL7)}>s8=j z)1T)vjiEP?v1~h($n9u5OrA4*E{G}Fd?Of3o9FLu{J^7~D3&1_ia>HIi5#(m>|vY` zf%0(tP^n3py+1#3EcYxp6PEE}c?+I$67P-=bA1y$Q!|2btd8=D8`?EfWpnUK z<=w<9Mst$PV2+9tzeFCDe4xya-6H9REyQ^F9xdb(R<(|E(qJl%OCfbbbf;AzAzl>a z>}mz4HT8ojR@s#&D<`?Nb5>{dBUFIo>O$qB#hQ+XvBg>!xXi;kKb*?5mUXvNThR&N ziiPaV3Eg?qUwNzQ;$<_$y}ZpK`pb^tP@SDNmSmmLcCO;en&xvLy=l}Pj?GnX@G9tg z4cqa!y&R-woT+7%+~#@^?`ye(wf(`?RX=(yp~E14s?E(PN96Yu58I7#miB$YXsHpX zRvET2p2Mm}H$sUg)@}}Xzzqn1YkN1_b-#W+eF)ciG6S0$arakMgE4LH$%}}6Loh~IgOJ(9MMP*6ZyIV7lk-uZF$Az45PF zU;K4<)ZWJ}=5LUvy(s^;d#s{b2>3X08}f3M7%)V2w`4E$CeoSz4*79+`TqU}3WS1} z`~eNeV3;782ZNi|Bgu0Wfaa1%K_%IXC_jUUH?f7zHPXA~c@^Zrn)4<55C1-^z2~e< zKHSu>$eAUx_rF_`r!I{y0;ar>zb3gTv}oNVQn4Sn^%Ef~K!;8nfMG({k^g0gMIkBnRU17>bAlWfcXXu0qu#^tE h#}HfJtd|8= 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%0D-=g1Ebih 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�uSM^qg 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 z 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

J+v%OVif5Hr}2iQbSdGI1{Eunvna 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

Y*DFtE#cA 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®lWL?z>~v~DscH;*EpYbIY(BuNq` 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%0AEDw*Qwef_Gt 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

kbkwzA-F4W7$K6QZp%k7<gJ82i!!RH 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℘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 z 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�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%0A5;UPwH2v}~*WxN|KrqLE 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 z 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