=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-display-panes.c,v retrieving revision 1.35 retrieving revision 1.36 diff -c -r1.35 -r1.36 *** src/usr.bin/tmux/cmd-display-panes.c 2020/05/16 15:34:08 1.35 --- src/usr.bin/tmux/cmd-display-panes.c 2020/09/01 08:48:26 1.36 *************** *** 1,4 **** ! /* $OpenBSD: cmd-display-panes.c,v 1.35 2020/05/16 15:34:08 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-display-panes.c,v 1.36 2020/09/01 08:48:26 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 55,65 **** struct session *s = c->session; struct options *oo = s->options; struct window *w = wp->window; ! struct grid_cell gc; ! u_int idx, px, py, i, j, xoff, yoff, sx, sy; int colour, active_colour; ! char buf[16], *ptr; ! size_t len; if (wp->xoff + wp->sx <= ctx->ox || wp->xoff >= ctx->ox + ctx->sx || --- 55,65 ---- struct session *s = c->session; struct options *oo = s->options; struct window *w = wp->window; ! struct grid_cell fgc, bgc; ! u_int pane, idx, px, py, i, j, xoff, yoff, sx, sy; int colour, active_colour; ! char buf[16], lbuf[16], rbuf[16], *ptr; ! size_t len, llen, rlen; if (wp->xoff + wp->sx <= ctx->ox || wp->xoff >= ctx->ox + ctx->sx || *************** *** 109,137 **** px = sx / 2; py = sy / 2; ! if (window_pane_index(wp, &idx) != 0) fatalx("index not found"); ! len = xsnprintf(buf, sizeof buf, "%u", idx); if (sx < len) return; colour = options_get_number(oo, "display-panes-colour"); active_colour = options_get_number(oo, "display-panes-active-colour"); if (sx < len * 6 || sy < 5) { ! tty_cursor(tty, xoff + px - len / 2, yoff + py); ! goto draw_text; } px -= len * 3; py -= 2; ! memcpy(&gc, &grid_default_cell, sizeof gc); ! if (w->active == wp) ! gc.bg = active_colour; ! else ! gc.bg = colour; ! tty_attributes(tty, &gc, &grid_default_cell, NULL); for (ptr = buf; *ptr != '\0'; ptr++) { if (*ptr < '0' || *ptr > '9') continue; --- 109,158 ---- px = sx / 2; py = sy / 2; ! if (window_pane_index(wp, &pane) != 0) fatalx("index not found"); ! len = xsnprintf(buf, sizeof buf, "%u", pane); if (sx < len) return; colour = options_get_number(oo, "display-panes-colour"); active_colour = options_get_number(oo, "display-panes-active-colour"); + memcpy(&fgc, &grid_default_cell, sizeof fgc); + memcpy(&bgc, &grid_default_cell, sizeof bgc); + if (w->active == wp) { + fgc.fg = active_colour; + bgc.bg = active_colour; + } else { + fgc.fg = colour; + bgc.bg = colour; + } + + rlen = xsnprintf(rbuf, sizeof rbuf, "%ux%u", wp->sx, wp->sy); + if (pane > 9 && pane < 35) + llen = xsnprintf(lbuf, sizeof lbuf, "%c", 'a' + (pane - 10)); + else + llen = 0; + if (sx < len * 6 || sy < 5) { ! tty_attributes(tty, &fgc, &grid_default_cell, NULL); ! if (sx >= len + llen + 1) { ! len += llen + 1; ! tty_cursor(tty, xoff + px - len / 2, yoff + py); ! tty_putn(tty, buf, len, len); ! tty_putn(tty, " ", 1, 1); ! tty_putn(tty, lbuf, llen, llen); ! } else { ! tty_cursor(tty, xoff + px - len / 2, yoff + py); ! tty_putn(tty, buf, len, len); ! } ! goto out; } px -= len * 3; py -= 2; ! tty_attributes(tty, &bgc, &grid_default_cell, NULL); for (ptr = buf; *ptr != '\0'; ptr++) { if (*ptr < '0' || *ptr > '9') continue; *************** *** 147,166 **** px += 6; } ! len = xsnprintf(buf, sizeof buf, "%ux%u", wp->sx, wp->sy); ! if (sx < len || sy < 6) ! return; ! tty_cursor(tty, xoff + sx - len, yoff); ! draw_text: ! memcpy(&gc, &grid_default_cell, sizeof gc); ! if (w->active == wp) ! gc.fg = active_colour; ! else ! gc.fg = colour; ! tty_attributes(tty, &gc, &grid_default_cell, NULL); ! tty_puts(tty, buf); ! tty_cursor(tty, 0, 0); } --- 168,187 ---- px += 6; } ! if (sy < 6) ! goto out; ! tty_attributes(tty, &fgc, &grid_default_cell, NULL); ! if (rlen != 0 && sx >= rlen) { ! tty_cursor(tty, xoff + sx - rlen, yoff); ! tty_putn(tty, rbuf, rlen, rlen); ! } ! if (llen != 0) { ! tty_cursor(tty, xoff + sx / 2 + len * 3 - llen - 1, ! yoff + py + 5); ! tty_putn(tty, lbuf, llen, llen); ! } ! out: tty_cursor(tty, 0, 0); } *************** *** 197,207 **** struct window *w = c->session->curw->window; struct window_pane *wp; enum cmd_parse_status status; ! if (event->key < '0' || event->key > '9') return (-1); ! wp = window_pane_at_index(w, event->key - '0'); if (wp == NULL) return (1); window_unzoom(w); --- 218,238 ---- struct window *w = c->session->curw->window; struct window_pane *wp; enum cmd_parse_status status; + u_int index; + key_code key; ! if (event->key >= '0' && event->key <= '9') ! index = event->key - '0'; ! else if ((event->key & KEYC_MASK_MODIFIERS) == 0) { ! key = (event->key & KEYC_MASK_KEY); ! if (key >= 'a' && key <= 'z') ! index = 10 + (key - 'a'); ! else ! return (-1); ! } else return (-1); ! wp = window_pane_at_index(w, index); if (wp == NULL) return (1); window_unzoom(w);