diff options
| author | user <user@clank> | 2026-09-10 15:42:17 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-09-10 15:42:17 +0200 |
| commit | ecf609e3f903e05690ef21bb4f7dbd08e6d8e91d (patch) | |
| tree | ddf7b66b4e5938f9205e4a901899e23fb3ea4537 /src/config.c | |
| parent | sidebar: a row of air on top (tab_bar_pad), indicators under the labels' inset (diff) | |
| download | slosh-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.c | 9 |
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 = |
