summaryrefslogtreecommitdiffstats
path: root/tty.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2011-05-20 19:17:39 +0000
committerNicholas Marriott <nicm@openbsd.org>2011-05-20 19:17:39 +0000
commit3ea5e06bfb04278fa53885e551bc363a84bad8d1 (patch)
tree155061457c80262457ba005863c44df9aaeeb8c5 /tty.c
parent944b5e6fa04e014501f465e3898315c84d10bd9e (diff)
Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.
Diffstat (limited to 'tty.c')
-rw-r--r--tty.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/tty.c b/tty.c
index 5f3ada8e..4fcf6f55 100644
--- a/tty.c
+++ b/tty.c
@@ -69,6 +69,7 @@ tty_init(struct tty *tty, int fd, char *term)
if ((path = ttyname(fd)) == NULL)
fatalx("ttyname failed");
tty->path = xstrdup(path);
+ tty->cstyle = 0;
tty->ccolour = xstrdup("");
tty->flags = 0;
@@ -244,6 +245,12 @@ tty_stop_tty(struct tty *tty)
tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0));
tty_raw(tty, tty_term_string(tty->term, TTYC_RMKX));
tty_raw(tty, tty_term_string(tty->term, TTYC_CLEAR));
+ if (tty_term_has(tty->term, TTYC_CS1) && tty->cstyle != 0) {
+ if (tty_term_has(tty->term, TTYC_CSR1))
+ tty_raw(tty, tty_term_string(tty->term, TTYC_CSR1));
+ else if (tty_term_has(tty->term, TTYC_CS1))
+ tty_raw(tty, tty_term_string1(tty->term, TTYC_CS1, 0));
+ }
tty_raw(tty, tty_term_string(tty->term, TTYC_CR));
tty_raw(tty, tty_term_string(tty->term, TTYC_CNORM));
@@ -429,6 +436,16 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
else
tty_putcode(tty, TTYC_CIVIS);
}
+ if (tty->cstyle != s->cstyle) {
+ if (tty_term_has(tty->term, TTYC_CS1)) {
+ if (s->cstyle == 0 &&
+ tty_term_has(tty->term, TTYC_CSR1))
+ tty_putcode(tty, TTYC_CSR1);
+ else
+ tty_putcode1(tty, TTYC_CS1, s->cstyle);
+ }
+ tty->cstyle = s->cstyle;
+ }
if (changed & ALL_MOUSE_MODES) {
if (mode & ALL_MOUSE_MODES) {
if (mode & MODE_MOUSE_UTF8)