From fb543c7707a31d80dbdb039515d719e6f013a77a Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 4 May 2009 13:20:02 +0000 Subject: [PATCH] Use ACS for line drawing characters. --- CHANGES | 6 +++++- TODO | 5 +++++ screen-redraw.c | 36 +++++++++++++++++++++++++++++------- tmux.h | 3 ++- tty.c | 3 +-- 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index cfa7ee96..67387c37 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +04 May 2009 + +* Use ACS line drawing characters for pane separator lines. + 30 April 2009 * Support command sequences without a space before the semicolon, for example @@ -1239,7 +1243,7 @@ (including mutt, emacs). No status bar yet and no key remapping or other customisation. -$Id: CHANGES,v 1.282 2009-04-30 21:53:32 nicm Exp $ +$Id: CHANGES,v 1.283 2009-05-04 13:20:01 nicm Exp $ LocalWords: showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr LocalWords: rivo nurges lscm Erdely eol smysession mysession ek dstname RB ms diff --git a/TODO b/TODO index db96eb7a..e13c2ee5 100644 --- a/TODO +++ b/TODO @@ -63,6 +63,8 @@ - refer to windows by name etc (duplicates? fnmatch?) - the output code (tty.c) could do with optimisation depending on term capibilities +- would be nice to be able to use "--" to mark start of command w/ neww etc + to avoid quoting (hopefully) for 0.9, in no particular order: - a command to display the status line briefly when it is turned off @@ -88,3 +90,6 @@ hardcoded 81 for left-vertical is nasty - test bug sshing from freebsd console (tom iirc?) - rotate-window has redraw bugs... :-/ +- binding a neww ... while read i or for i in to a key doesn't work... + something to do with pty/tty handling? + diff --git a/screen-redraw.c b/screen-redraw.c index 99db773b..6840d9eb 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -1,4 +1,4 @@ -/* $Id: screen-redraw.c,v 1.34 2009-04-02 21:08:13 nicm Exp $ */ +/* $Id: screen-redraw.c,v 1.35 2009-05-04 13:20:02 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -69,21 +69,39 @@ screen_redraw_screen(struct client *c) struct window_pane *wp; struct screen *s; u_int i, j, sx, sy; - int status; + int status, has_acs; + u_char choriz, cvert, cbackg; /* Get status line, er, status. */ status = options_get_number(&c->session->options, "status"); + /* Work out ACS characters. */ + if (tty_term_has(tty->term, TTYC_ACSC)) { + has_acs = 1; + choriz = tty_get_acs(tty, 'q'); + cvert = tty_get_acs(tty, 'x'); + cbackg = tty_get_acs(tty, '~'); + } else { + has_acs = 0; + choriz = '-'; + cvert = '|'; + cbackg = '.'; + } + /* Clear the screen. */ tty_reset(tty); + if (has_acs) + tty_putcode(tty, TTYC_SMACS); for (j = 0; j < tty->sy - status; j++) { for (i = 0; i < tty->sx; i++) { if (!screen_redraw_check_cell(c, i, j)) { tty_cursor(tty, i, j, 0, 0); - tty_putc(tty, '.'); + tty_putc(tty, cbackg); } } } + if (has_acs) + tty_putcode(tty, TTYC_RMACS); /* Draw the panes. */ TAILQ_FOREACH(wp, &w->panes, entry) { @@ -97,16 +115,18 @@ screen_redraw_screen(struct client *c) sy = wp->sy; /* Draw left and right borders. */ + if (has_acs) + tty_putcode(tty, TTYC_SMACS); if (wp->xoff > 0) { for (i = wp->yoff; i < wp->yoff + sy; i++) { tty_cursor(tty, wp->xoff - 1, i, 0, 0); - tty_putc(tty, '|'); + tty_putc(tty, cvert); } } if (wp->xoff + sx < tty->sx) { for (i = wp->yoff; i < wp->yoff + sy; i++) { tty_cursor(tty, wp->xoff + sx, i, 0, 0); - tty_putc(&c->tty, '|'); + tty_putc(&c->tty, cvert); } } @@ -114,13 +134,15 @@ screen_redraw_screen(struct client *c) if (wp->yoff > 0) { tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); for (i = 0; i < sx; i++) - tty_putc(tty, '-'); + tty_putc(tty, choriz); } if (wp->yoff + sy < tty->sy - status) { tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); for (i = 0; i < sx; i++) - tty_putc(tty, '-'); + tty_putc(tty, choriz); } + if (has_acs) + tty_putcode(tty, TTYC_RMACS); /* Draw the pane. */ screen_redraw_pane(c, wp); diff --git a/tmux.h b/tmux.h index 8fa98d3d..0764b4fc 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.310 2009-05-02 08:34:39 nicm Exp $ */ +/* $Id: tmux.h,v 1.311 2009-05-04 13:20:02 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1082,6 +1082,7 @@ void options_set_number(struct options *, const char *, long long); long long options_get_number(struct options *, const char *); /* tty.c */ +u_char tty_get_acs(struct tty *, u_char); void tty_emulate_repeat(struct tty *, enum tty_code_code, enum tty_code_code, u_int); void tty_reset(struct tty *); diff --git a/tty.c b/tty.c index 3e72f585..10827e70 100644 --- a/tty.c +++ b/tty.c @@ -1,4 +1,4 @@ -/* $Id: tty.c,v 1.94 2009-04-29 17:50:52 nicm Exp $ */ +/* $Id: tty.c,v 1.95 2009-05-04 13:20:02 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -28,7 +28,6 @@ #include "tmux.h" void tty_fill_acs(struct tty *); -u_char tty_get_acs(struct tty *, u_char); void tty_raw(struct tty *, const char *);