ncurses 6.0 - patch 20170827
[ncurses.git] / ncurses / tty / tty_update.c
index 7623ee3a355aef60444d3f62f4e0273043d2333d..f86ee7292f78c78c7568b9a62c25a884faf6fc96 100644 (file)
@@ -84,7 +84,7 @@
 
 #include <ctype.h>
 
 
 #include <ctype.h>
 
-MODULE_ID("$Id: tty_update.c,v 1.293 2017/07/29 13:09:05 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.296 2017/08/27 19:40:17 tom Exp $")
 
 /*
  * This define controls the line-breakout optimization.  Every once in a
 
 /*
  * This define controls the line-breakout optimization.  Every once in a
@@ -668,7 +668,9 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
                }
            } else if (repeat_char != 0 &&
 #if USE_WIDEC_SUPPORT
                }
            } else if (repeat_char != 0 &&
 #if USE_WIDEC_SUPPORT
-                      (CharOf(ntext0) < ACS_LEN) &&
+                      (!SP_PARM->_screen_unicode &&
+                       ((AttrOf(ntext0) & A_ALTCHARSET) == 0 ||
+                        (CharOf(ntext0) < ACS_LEN))) &&
 #endif
                       runcount > SP_PARM->_rep_cost) {
                NCURSES_CH_T temp;
 #endif
                       runcount > SP_PARM->_rep_cost) {
                NCURSES_CH_T temp;
@@ -682,10 +684,11 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
                UpdateAttrs(SP_PARM, ntext0);
                temp = ntext0;
                if ((AttrOf(temp) & A_ALTCHARSET) &&
                UpdateAttrs(SP_PARM, ntext0);
                temp = ntext0;
                if ((AttrOf(temp) & A_ALTCHARSET) &&
-                   SP_PARM->_acs_map != 0) {
+                   SP_PARM->_acs_map != 0 &&
+                   (SP_PARM->_acs_map[CharOf(temp)] & A_CHARTEXT) != 0) {
                    SetChar(temp,
                    SetChar(temp,
-                           SP_PARM->_acs_map[CharOf(temp)],
-                           AttrOf(temp) | A_ALTCHARSET);
+                           (SP_PARM->_acs_map[CharOf(ntext0)] & A_CHARTEXT),
+                           AttrOf(ntext0) | A_ALTCHARSET);
                }
                NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
                                        TPARM_2(repeat_char,
                }
                NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
                                        TPARM_2(repeat_char,
@@ -2193,7 +2196,7 @@ NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_DCL0)
        NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
 
     /* restore user-defined colors, if any */
        NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
 
     /* restore user-defined colors, if any */
-    if (SP_PARM->_color_defs < 0) {
+    if (SP_PARM->_color_defs < 0 && !SP_PARM->_direct_color.value) {
        int n;
        SP_PARM->_color_defs = -(SP_PARM->_color_defs);
        for (n = 0; n < SP_PARM->_color_defs; ++n) {
        int n;
        SP_PARM->_color_defs = -(SP_PARM->_color_defs);
        for (n = 0; n < SP_PARM->_color_defs; ++n) {