aboutsummaryrefslogtreecommitdiffstats
path: root/src/config.c
diff options
context:
space:
mode:
authoruser <user@clank>2026-09-10 15:42:17 +0200
committeruser <user@clank>2026-09-10 15:42:17 +0200
commitecf609e3f903e05690ef21bb4f7dbd08e6d8e91d (patch)
treeddf7b66b4e5938f9205e4a901899e23fb3ea4537 /src/config.c
parentsidebar: a row of air on top (tab_bar_pad), indicators under the labels' inset (diff)
downloadslosh-ecf609e3f903e05690ef21bb4f7dbd08e6d8e91d.tar.gz
slosh-ecf609e3f903e05690ef21bb4f7dbd08e6d8e91d.tar.xz
slosh-ecf609e3f903e05690ef21bb4f7dbd08e6d8e91d.zip
sidebar: what each tab's panes are saying, said under the tab (tab_bar_status)
Panes already announce a one-line status over OSC 5577, and it rendered in exactly two places -- both inside the pane's own frame, which is the one place you are not looking when you most want it. The sidebar has the vertical room the top strip never had: under each tab, up to tab_bar_status rows of what the panes inside said, in tree order, dim like the pane count. A dead pane's row says how it died instead (exit_words), the same substitution its own frame makes. The cap's last row is spent on an ellipsis rather than one more status pretending the list is complete, and a status cut to the sidebar's width ends in one too -- 'building 3' is a different fact than 'building 3/7'. Each row is a find: hit, the verb that already means 'go to this pane', so clicking a status jumps to the pane that said it, across tabs. Freshness costs nothing new: an OSC status marks the pane dirty, the same path the bell indicator rides out of background tabs.
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c
index d800696..48442e0 100644
--- a/src/config.c
+++ b/src/config.c
@@ -927,6 +927,9 @@ void config_defaults(config_t *c) {
* as cramped, and in compact mode the row lines the first tab up with the
* pane content inside the ring rather than with the ring's top line. */
c->tab_bar_pad = 1;
+ /* Three is enough for "the build, the tests, and one more thing" without a
+ * chatty tab pushing the list off the bottom. */
+ c->tab_bar_status = 3;
c->status_line = true;
/* Deliberately wider than the panes' own margin (gap * gap_aspect = 2), so
* the strip and the line read as chrome sitting outside the layout rather
@@ -1631,6 +1634,9 @@ char *config_render(const config_t *c) {
c->tab_bar_width);
cb_add(&b, "tab_bar_pad %u // blank rows above a sidebar's tabs\n",
c->tab_bar_pad);
+ cb_add(&b,
+ "tab_bar_status %u // pane status rows under each tab, 0 = off\n",
+ c->tab_bar_status);
cb_add(&b, "status_line %s // the line along the bottom\n",
yesno(c->status_line));
cb_add(&b, "status_pad %u\n", c->status_pad);
@@ -1941,6 +1947,7 @@ static const char *const KNOWN_TOP[] = {
"status_pad",
"tab_bar_pad",
"tab_bar_side",
+ "tab_bar_status",
"tab_bar_width",
"theme",
"title_align",
@@ -2154,6 +2161,8 @@ static bool load_into(config_t *c, const char *path, int depth, char *err,
c->tab_bar_width);
c->tab_bar_pad =
(uint16_t)kdl_arg_int(kdl_child(root, "tab_bar_pad"), 0, c->tab_bar_pad);
+ c->tab_bar_status = (uint16_t)kdl_arg_int(kdl_child(root, "tab_bar_status"),
+ 0, c->tab_bar_status);
c->status_line =
kdl_arg_bool(kdl_child(root, "status_line"), 0, c->status_line);
c->status_pad =