summaryrefslogtreecommitdiffstats
path: root/tty.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-12-06 09:46:23 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-12-06 09:46:23 +0000
commit103748d6adfe1b2d706cb0a1e1a128be5366d655 (patch)
treeb9d4feef5012083d9c0ba96693322286645a27a3 /tty.c
parent6f142e9ac61783e79c27e56ed6aa2fc7ff13683d (diff)
Major reorganisation of screen handling.
Diffstat (limited to 'tty.c')
-rw-r--r--tty.c47
1 files changed, 35 insertions, 12 deletions
diff --git a/tty.c b/tty.c
index 3944ff0a..ec7097c8 100644
--- a/tty.c
+++ b/tty.c
@@ -1,4 +1,4 @@
-/* $Id: tty.c,v 1.8 2007-12-03 10:47:27 nicm Exp $ */
+/* $Id: tty.c,v 1.9 2007-12-06 09:46:23 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -25,7 +25,7 @@
#include <string.h>
#define TTYDEFCHARS
/* glibc requires unistd.h before termios.h for TTYDEFCHARS. */
-#include <unistd.h>
+#include <unistd.h>
#include <termios.h>
#include "tmux.h"
@@ -87,7 +87,7 @@ tty_open(struct tty *tty, char **cause)
tty->colr = SCREEN_DEFCOLR;
tty_keys_init(tty);
-
+
tty_fill_acs(tty);
if (tcgetattr(tty->fd, &tty->tio) != 0)
@@ -95,7 +95,7 @@ tty_open(struct tty *tty, char **cause)
memset(&tio, 0, sizeof tio);
tio.c_iflag = TTYDEF_IFLAG & ~(IXON|IXOFF|ICRNL|INLCR);
tio.c_oflag = TTYDEF_OFLAG & ~(OPOST|ONLCR|OCRNL|ONLRET);
- tio.c_lflag =
+ tio.c_lflag =
TTYDEF_LFLAG & ~(IEXTEN|ICANON|ECHO|ECHOE|ECHOKE|ECHOCTL|ISIG);
tio.c_cflag = TTYDEF_CFLAG;
memcpy(&tio.c_cc, ttydefchars, sizeof tio.c_cc);
@@ -207,10 +207,10 @@ tty_putc(struct tty *tty, char ch)
}
void
-tty_vwrite(struct tty *tty, int cmd, va_list ap)
+tty_vwrite(struct tty *tty, unused struct screen *s, int cmd, va_list ap)
{
char ch;
- u_int ua, ub;
+ u_int i, ua, ub;
set_curterm(tty->termp);
@@ -258,13 +258,36 @@ tty_vwrite(struct tty *tty, int cmd, va_list ap)
tty_puts(tty, tparm(cursor_address, ua, ub));
break;
case TTY_CLEARENDOFLINE:
- tty_puts(tty, clr_eol);
+ if (clr_eol != NULL)
+ tty_puts(tty, clr_eol);
+ else {
+ tty_puts(tty, tparm(cursor_address, s->cy, s->cx));
+ for (i = s->cx; i < screen_size_x(s); i++)
+ tty_putc(tty, ' ');
+ tty_puts(tty, tparm(cursor_address, s->cy, s->cx));
+ }
break;
case TTY_CLEARSTARTOFLINE:
- tty_puts(tty, clr_bol);
+ if (clr_bol != NULL)
+ tty_puts(tty, clr_bol);
+ else {
+ tty_puts(tty, tparm(cursor_address, s->cy, 0));
+ for (i = 0; i < s->cx + 1; i++)
+ tty_putc(tty, ' ');
+ tty_puts(tty, tparm(cursor_address, s->cy, s->cx));
+ }
break;
case TTY_CLEARLINE:
- tty_puts(tty, clr_eol); /* XXX */
+ if (clr_eol != NULL) {
+ tty_puts(tty, tparm(cursor_address, s->cy, 0));
+ tty_puts(tty, clr_eol);
+ tty_puts(tty, tparm(cursor_address, s->cy, s->cx));
+ } else {
+ tty_puts(tty, tparm(cursor_address, s->cy, 0));
+ for (i = 0; i < screen_size_x(s); i++)
+ tty_putc(tty, ' ');
+ tty_puts(tty, tparm(cursor_address, s->cy, s->cx));
+ }
break;
case TTY_INSERTLINE:
ua = va_arg(ap, u_int);
@@ -323,6 +346,7 @@ tty_vwrite(struct tty *tty, int cmd, va_list ap)
ub = va_arg(ap, u_int);
tty_puts(tty, tparm(change_scroll_region, ua, ub));
break;
+#if 0
case TTY_INSERTON:
if (enter_insert_mode != NULL)
tty_puts(tty, enter_insert_mode);
@@ -331,7 +355,6 @@ tty_vwrite(struct tty *tty, int cmd, va_list ap)
if (exit_insert_mode != NULL)
tty_puts(tty, exit_insert_mode);
break;
-#if 0
case TTY_KCURSOROFF:
t = tigetstr("CE");
if (t != (char *) 0 && t != (char *) -1)
@@ -417,13 +440,13 @@ tty_attributes(struct tty *tty, u_char attr, u_char colr)
if (fg == 8)
fg = 7;
}
-
+
if (fg == 8)
tty_puts(tty, "\e[39m");
else if (set_a_foreground != NULL)
tty_puts(tty, tparm(set_a_foreground, fg));
}
-
+
bg = colr & 0xf;
if (bg != (tty->colr & 0xf)) {
if (tigetflag("AX") == TRUE) {