summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cfg.c24
-rw-r--r--cmd-new-session.c2
-rw-r--r--tmux.12
3 files changed, 24 insertions, 4 deletions
diff --git a/cfg.c b/cfg.c
index d32e5ff1..e92ce36f 100644
--- a/cfg.c
+++ b/cfg.c
@@ -52,8 +52,7 @@ cfg_done(__unused struct cmdq_item *item, __unused void *data)
return (CMD_RETURN_NORMAL);
cfg_finished = 1;
- if (!RB_EMPTY(&sessions))
- cfg_show_causes(RB_MIN(sessions, &sessions));
+ cfg_show_causes(NULL);
if (cfg_item != NULL)
cmdq_continue(cfg_item);
@@ -239,11 +238,29 @@ cfg_print_causes(struct cmdq_item *item)
void
cfg_show_causes(struct session *s)
{
+ struct client *c = TAILQ_FIRST(&clients);
struct window_pane *wp;
struct window_mode_entry *wme;
u_int i;
- if (s == NULL || cfg_ncauses == 0)
+ if (cfg_ncauses == 0)
+ return;
+
+ if (c != NULL && (c->flags & CLIENT_CONTROL)) {
+ for (i = 0; i < cfg_ncauses; i++) {
+ control_write(c, "%%config-error %s", cfg_causes[i]);
+ free(cfg_causes[i]);
+ }
+ goto out;
+ }
+
+ if (s == NULL) {
+ if (c != NULL && c->session != NULL)
+ s = c->session;
+ else
+ s = RB_MIN(sessions, &sessions);
+ }
+ if (s == NULL || s->attached == 0) /* wait for an attached session */
return;
wp = s->curw->window->active;
@@ -255,6 +272,7 @@ cfg_show_causes(struct session *s)
free(cfg_causes[i]);
}
+out:
free(cfg_causes);
cfg_causes = NULL;
cfg_ncauses = 0;
diff --git a/cmd-new-session.c b/cmd-new-session.c
index cb9abfb3..b946f049 100644
--- a/cmd-new-session.c
+++ b/cmd-new-session.c
@@ -335,7 +335,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item)
/*
* If there are still configuration file errors to display, put the new
- * session's current window into more mode and display them now.
+ * session's current window into view mode and display them now.
*/
if (cfg_finished)
cfg_show_causes(s);
diff --git a/tmux.1 b/tmux.1
index f06a42a4..44b96eb7 100644
--- a/tmux.1
+++ b/tmux.1
@@ -6529,6 +6529,8 @@ The client is now attached to the session with ID
.Ar session-id ,
which is named
.Ar name .
+.It Ic %config-error Ar error
+An error has happened in a configuration file.
.It Ic %continue Ar pane-id
The pane has been continued after being paused (if the
.Ar pause-after