summaryrefslogtreecommitdiffstats
path: root/cfg.c
diff options
context:
space:
mode:
authornicm <nicm>2022-06-20 07:59:37 +0000
committernicm <nicm>2022-06-20 07:59:37 +0000
commita888ce9963053c790c6ee9bf64cc53d95f0f9c09 (patch)
tree023976acf9433f2f28435ed97fcd9edf4759c6c0 /cfg.c
parentd9f84854ac01c8d4f6d5507e88d1dc7bcdd99558 (diff)
Do not display configuration file errors in a pane when in control mode,
instead report them with a %config-error notification. GitHub issue 3193.
Diffstat (limited to 'cfg.c')
-rw-r--r--cfg.c24
1 files changed, 21 insertions, 3 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;