summaryrefslogtreecommitdiffstats
path: root/screen-redraw.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-08-31 20:46:19 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-08-31 20:46:19 +0000
commit04319964b95304138dbe5cbce0b97222769d0c17 (patch)
tree3d067da0a55da208bbf9dd18d1711d5b165ffcfc /screen-redraw.c
parent8102ec3be55e9800837eeb2f1f9135a433452794 (diff)
Add a new display-panes command, with two options (display-panes-colour and
display-panes-time), which displays a visual indication of the number of each pane.
Diffstat (limited to 'screen-redraw.c')
-rw-r--r--screen-redraw.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/screen-redraw.c b/screen-redraw.c
index 5ee273a5..ce26c47d 100644
--- a/screen-redraw.c
+++ b/screen-redraw.c
@@ -24,6 +24,7 @@
int screen_redraw_cell_border(struct client *, u_int, u_int);
int screen_redraw_check_cell(struct client *, u_int, u_int);
+void screen_redraw_draw_number(struct client *, struct window_pane *);
#define CELL_INSIDE 0
#define CELL_LEFTRIGHT 1
@@ -210,6 +211,8 @@ screen_redraw_screen(struct client *c, int status_only)
continue;
tty_draw_line(tty, wp->screen, i, wp->xoff, wp->yoff);
}
+ if (c->flags & CLIENT_IDENTIFY)
+ screen_redraw_draw_number(c, wp);
}
/* Draw the status line. */
@@ -228,3 +231,56 @@ screen_redraw_pane(struct client *c, struct window_pane *wp)
tty_draw_line(&c->tty, wp->screen, i, wp->xoff, wp->yoff);
tty_reset(&c->tty);
}
+
+/* Draw number on a pane. */
+void
+screen_redraw_draw_number(struct client *c, struct window_pane *wp)
+{
+ struct tty *tty = &c->tty;
+ struct session *s = c->session;
+ struct grid_cell gc;
+ u_int idx, px, py, i, j;
+ u_char colour;
+ char buf[16], *ptr;
+ size_t len;
+
+ idx = window_pane_index(wp->window, wp);
+ len = xsnprintf(buf, sizeof buf, "%u", idx);
+
+ if (wp->sx < len)
+ return;
+ colour = options_get_number(&s->options, "display-panes-colour");
+
+ px = wp->sx / 2;
+ py = wp->sy / 2;
+ if (wp->sx < len * 6 || wp->sy < 5) {
+ tty_cursor(tty, px - len / 2, py, wp->xoff, wp->yoff);
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ gc.fg = colour;
+ tty_attributes(tty, &gc);
+ tty_puts(tty, buf);
+ return;
+ }
+
+ px -= len * 3;
+ py -= 2;
+
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ gc.bg = colour;
+ tty_attributes(tty, &gc);
+ for (ptr = buf; *ptr != '\0'; ptr++) {
+ if (*ptr < '0' || *ptr > '9')
+ continue;
+ idx = *ptr - '0';
+
+ for (j = 0; j < 5; j++) {
+ for (i = px; i < px + 5; i++) {
+ tty_cursor(tty, i, py + j, wp->xoff, wp->yoff);
+ if (!clock_table[idx][j][i - px])
+ continue;
+ tty_putc(tty, ' ');
+ }
+ }
+ px += 6;
+ }
+}