diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-06-20 06:51:37 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-06-20 06:51:37 +0000 |
commit | 799dd7d5ba631a0c88b83bd812ef2aa3f7f5a1ab (patch) | |
tree | 390ee818546cfc8814c7bd69d94eec79de9b8b5c | |
parent | dc716904cbd674ddbd899facdac43bd9775258b0 (diff) |
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.
-rw-r--r-- | usr.bin/tmux/cfg.c | 9 | ||||
-rw-r--r-- | usr.bin/tmux/format.c | 6 | ||||
-rw-r--r-- | usr.bin/tmux/server-client.c | 41 | ||||
-rw-r--r-- | usr.bin/tmux/server.c | 5 |
4 files changed, 32 insertions, 29 deletions
diff --git a/usr.bin/tmux/cfg.c b/usr.bin/tmux/cfg.c index 41bcb6d539d..0f1d7eb8db1 100644 --- a/usr.bin/tmux/cfg.c +++ b/usr.bin/tmux/cfg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cfg.c,v 1.74 2019/06/18 11:08:42 nicm Exp $ */ +/* $OpenBSD: cfg.c,v 1.75 2019/06/20 06:51:36 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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/usr.bin/tmux/format.c b/usr.bin/tmux/format.c index ab774a5f8e2..e1480641d50 100644 --- a/usr.bin/tmux/format.c +++ b/usr.bin/tmux/format.c @@ -1,4 +1,4 @@ -/* $OpenBSD: format.c,v 1.204 2019/06/15 06:33:48 nicm Exp $ */ +/* $OpenBSD: format.c,v 1.205 2019/06/20 06:51:36 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index 9e7b675ac6d..3c1e1469c38 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.287 2019/06/11 13:09:00 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.288 2019/06/20 06:51:36 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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/usr.bin/tmux/server.c b/usr.bin/tmux/server.c index 7787954e0d3..9790bf0bb0b 100644 --- a/usr.bin/tmux/server.c +++ b/usr.bin/tmux/server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server.c,v 1.186 2019/06/07 20:09:17 nicm Exp $ */ +/* $OpenBSD: server.c,v 1.187 2019/06/20 06:51:36 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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); |