In terminfo, sometimes cvvis implies cnorm and sometimes it doesn't, so
authornicm <nicm@openbsd.org>
Tue, 19 May 2015 08:48:37 +0000 (08:48 +0000)
committernicm <nicm@openbsd.org>
Tue, 19 May 2015 08:48:37 +0000 (08:48 +0000)
don't assume it does. Fixes missing cursor with emacs-in-tmux-in-tmux.

usr.bin/tmux/tty.c

index 4418d0c..d13a244 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.182 2015/05/12 22:40:38 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.183 2015/05/19 08:48:37 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -507,14 +507,17 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
                mode &= ~MODE_CURSOR;
 
        changed = mode ^ tty->mode;
-       if (changed & (MODE_CURSOR|MODE_BLINKING)) {
-               if (mode & MODE_CURSOR) {
-                       if (mode & MODE_BLINKING &&
-                           tty_term_has(tty->term, TTYC_CVVIS))
-                               tty_putcode(tty, TTYC_CVVIS);
-                       else
-                               tty_putcode(tty, TTYC_CNORM);
-               } else
+       if (changed & MODE_BLINKING) {
+               if (tty_term_has(tty->term, TTYC_CVVIS))
+                       tty_putcode(tty, TTYC_CVVIS);
+               else
+                       tty_putcode(tty, TTYC_CNORM);
+               changed |= MODE_CURSOR;
+       }
+       if (changed & MODE_CURSOR) {
+               if (mode & MODE_CURSOR)
+                       tty_putcode(tty, TTYC_CNORM);
+               else
                        tty_putcode(tty, TTYC_CIVIS);
        }
        if (s != NULL && tty->cstyle != s->cstyle) {