From 58b47bf01b4136a7f90cb6852b0ecb1b414e4494 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Feb 2020 13:57:58 +0000 Subject: Fix top/bottom pane calculation with pane border status enabled, reported by Stanislav Spassov. --- format.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'format.c') diff --git a/format.c b/format.c index ff8e3c62..4b859501 100644 --- a/format.c +++ b/format.c @@ -880,6 +880,44 @@ format_cb_pane_in_mode(struct format_tree *ft, struct format_entry *fe) xasprintf(&fe->value, "%u", n); } +/* Callback for pane_at_top. */ +static void +format_cb_pane_at_top(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp = ft->wp; + struct window *w = wp->window; + int status, flag; + + if (wp == NULL) + return; + + status = options_get_number(w->options, "pane-border-status"); + if (status == PANE_STATUS_TOP) + flag = (wp->yoff == 1); + else + flag = (wp->yoff == 0); + xasprintf(&fe->value, "%d", flag); +} + +/* Callback for pane_at_bottom. */ +static void +format_cb_pane_at_bottom(struct format_tree *ft, struct format_entry *fe) +{ + struct window_pane *wp = ft->wp; + struct window *w = wp->window; + int status, flag; + + if (wp == NULL) + return; + + status = options_get_number(w->options, "pane-border-status"); + if (status == PANE_STATUS_BOTTOM) + flag = (wp->yoff + wp->sy == w->sy - 1); + else + flag = (wp->yoff + wp->sy == w->sy); + xasprintf(&fe->value, "%d", flag); +} + /* Callback for cursor_character. */ static void format_cb_cursor_character(struct format_tree *ft, struct format_entry *fe) @@ -2531,9 +2569,9 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) format_add(ft, "pane_right", "%u", wp->xoff + wp->sx - 1); format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1); format_add(ft, "pane_at_left", "%d", wp->xoff == 0); - format_add(ft, "pane_at_top", "%d", wp->yoff == 0); + format_add_cb(ft, "pane_at_top", format_cb_pane_at_top); format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == w->sx); - format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == w->sy); + format_add_cb(ft, "pane_at_bottom", format_cb_pane_at_bottom); wme = TAILQ_FIRST(&wp->modes); if (wme != NULL) { -- cgit