summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2019-06-20 06:51:37 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2019-06-20 06:51:37 +0000
commit799dd7d5ba631a0c88b83bd812ef2aa3f7f5a1ab (patch)
tree390ee818546cfc8814c7bd69d94eec79de9b8b5c
parentdc716904cbd674ddbd899facdac43bd9775258b0 (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.c9
-rw-r--r--usr.bin/tmux/format.c6
-rw-r--r--usr.bin/tmux/server-client.c41
-rw-r--r--usr.bin/tmux/server.c5
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);