Use ACS for line drawing characters.

This commit is contained in:
Nicholas Marriott 2009-05-04 13:20:02 +00:00
parent 9164dd63e7
commit fb543c7707
5 changed files with 42 additions and 11 deletions

View File

@ -1,3 +1,7 @@
04 May 2009
* Use ACS line drawing characters for pane separator lines.
30 April 2009 30 April 2009
* Support command sequences without a space before the semicolon, for example * 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 (including mutt, emacs). No status bar yet and no key remapping or other
customisation. 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: 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 LocalWords: rivo nurges lscm Erdely eol smysession mysession ek dstname RB ms

5
TODO
View File

@ -63,6 +63,8 @@
- refer to windows by name etc (duplicates? fnmatch?) - refer to windows by name etc (duplicates? fnmatch?)
- the output code (tty.c) could do with optimisation depending on term - the output code (tty.c) could do with optimisation depending on term
capibilities 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: (hopefully) for 0.9, in no particular order:
- a command to display the status line briefly when it is turned off - a command to display the status line briefly when it is turned off
@ -88,3 +90,6 @@
hardcoded 81 for left-vertical is nasty hardcoded 81 for left-vertical is nasty
- test bug sshing from freebsd console (tom iirc?) - test bug sshing from freebsd console (tom iirc?)
- rotate-window has redraw bugs... :-/ - 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?

View File

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -69,21 +69,39 @@ screen_redraw_screen(struct client *c)
struct window_pane *wp; struct window_pane *wp;
struct screen *s; struct screen *s;
u_int i, j, sx, sy; u_int i, j, sx, sy;
int status; int status, has_acs;
u_char choriz, cvert, cbackg;
/* Get status line, er, status. */ /* Get status line, er, status. */
status = options_get_number(&c->session->options, "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. */ /* Clear the screen. */
tty_reset(tty); tty_reset(tty);
if (has_acs)
tty_putcode(tty, TTYC_SMACS);
for (j = 0; j < tty->sy - status; j++) { for (j = 0; j < tty->sy - status; j++) {
for (i = 0; i < tty->sx; i++) { for (i = 0; i < tty->sx; i++) {
if (!screen_redraw_check_cell(c, i, j)) { if (!screen_redraw_check_cell(c, i, j)) {
tty_cursor(tty, i, j, 0, 0); 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. */ /* Draw the panes. */
TAILQ_FOREACH(wp, &w->panes, entry) { TAILQ_FOREACH(wp, &w->panes, entry) {
@ -97,16 +115,18 @@ screen_redraw_screen(struct client *c)
sy = wp->sy; sy = wp->sy;
/* Draw left and right borders. */ /* Draw left and right borders. */
if (has_acs)
tty_putcode(tty, TTYC_SMACS);
if (wp->xoff > 0) { if (wp->xoff > 0) {
for (i = wp->yoff; i < wp->yoff + sy; i++) { for (i = wp->yoff; i < wp->yoff + sy; i++) {
tty_cursor(tty, wp->xoff - 1, i, 0, 0); tty_cursor(tty, wp->xoff - 1, i, 0, 0);
tty_putc(tty, '|'); tty_putc(tty, cvert);
} }
} }
if (wp->xoff + sx < tty->sx) { if (wp->xoff + sx < tty->sx) {
for (i = wp->yoff; i < wp->yoff + sy; i++) { for (i = wp->yoff; i < wp->yoff + sy; i++) {
tty_cursor(tty, wp->xoff + sx, i, 0, 0); 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) { if (wp->yoff > 0) {
tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0);
for (i = 0; i < sx; i++) for (i = 0; i < sx; i++)
tty_putc(tty, '-'); tty_putc(tty, choriz);
} }
if (wp->yoff + sy < tty->sy - status) { if (wp->yoff + sy < tty->sy - status) {
tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0);
for (i = 0; i < sx; i++) for (i = 0; i < sx; i++)
tty_putc(tty, '-'); tty_putc(tty, choriz);
} }
if (has_acs)
tty_putcode(tty, TTYC_RMACS);
/* Draw the pane. */ /* Draw the pane. */
screen_redraw_pane(c, wp); screen_redraw_pane(c, wp);

3
tmux.h
View File

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -1082,6 +1082,7 @@ void options_set_number(struct options *, const char *, long long);
long long options_get_number(struct options *, const char *); long long options_get_number(struct options *, const char *);
/* tty.c */ /* tty.c */
u_char tty_get_acs(struct tty *, u_char);
void tty_emulate_repeat(struct tty *, void tty_emulate_repeat(struct tty *,
enum tty_code_code, enum tty_code_code, u_int); enum tty_code_code, enum tty_code_code, u_int);
void tty_reset(struct tty *); void tty_reset(struct tty *);

3
tty.c
View File

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -28,7 +28,6 @@
#include "tmux.h" #include "tmux.h"
void tty_fill_acs(struct tty *); void tty_fill_acs(struct tty *);
u_char tty_get_acs(struct tty *, u_char);
void tty_raw(struct tty *, const char *); void tty_raw(struct tty *, const char *);