NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/58282: Sysinst terminal output size increased because curses



On Wed, May 29, 2024 at 06:45:02PM +0000, Andreas Gustafsson wrote:
>  
>  Why can't this be optimized to a single instance of ^[[37m^[[44m
>  followed multiple spaces?
>  

Please try the attached patch, see if this helps.

-- 
Brett Lymn
--
Sent from my NetBSD device.

"We are were wolves",
"You mean werewolves?",
"No we were wolves, now we are something else entirely",
"Oh"
Index: color.c
===================================================================
RCS file: /cvsroot/src/lib/libcurses/color.c,v
retrieving revision 1.47
diff -u -r1.47 color.c
--- color.c	19 Oct 2022 06:09:27 -0000	1.47
+++ color.c	9 Jul 2024 07:14:43 -0000
@@ -123,6 +123,7 @@
 
 	_cursesi_screen->COLORS = COLORS;
 	_cursesi_screen->COLOR_PAIRS = COLOR_PAIRS;
+	_cursesi_screen->curpair = -1;
 
 	/* Reset terminal colour and colour pairs. */
 	if (orig_colors != NULL)
@@ -540,6 +541,10 @@
 		return;
 
 	pair = PAIR_NUMBER((uint32_t)attr);
+
+	if (pair == _cursesi_screen->curpair)
+		return;
+
 	__CTRACE(__CTRACE_COLOR, "__set_color: %d, %d, %d\n", pair,
 	    _cursesi_screen->colour_pairs[pair].fore,
 	    _cursesi_screen->colour_pairs[pair].back);
@@ -578,6 +583,8 @@
 			    0, __cputchar);
 		break;
 	}
+
+	_cursesi_screen->curpair = pair;
 	curscr->wattr &= ~__COLOR;
 	curscr->wattr |= attr & __COLOR;
 }
@@ -611,6 +618,8 @@
 		}
 		break;
 	}
+
+	_cursesi_screen->curpair = -1;
 }
 
 /*
@@ -620,6 +629,12 @@
 void
 __restore_colors(void)
 {
+	/*
+	 * forget foreground/background colour just in case it was
+	 * changed.  We will reset them if required.
+	 */
+	_cursesi_screen->curpair = -1;
+
 	if (can_change != 0)
 		switch (_cursesi_screen->color_type) {
 		case COLOR_HP:
Index: curses_private.h
===================================================================
RCS file: /cvsroot/src/lib/libcurses/curses_private.h,v
retrieving revision 1.81
diff -u -r1.81 curses_private.h
--- curses_private.h	17 May 2024 23:32:50 -0000	1.81
+++ curses_private.h	9 Jul 2024 07:14:43 -0000
@@ -226,6 +226,7 @@
 #define	TABSIZE_DEFAULT		8   /* spaces. */
 	int	 COLORS;	/* Maximum colors on the screen */
 	int	 COLOR_PAIRS;	/* Maximum color pairs on the screen */
+	short	 curpair;	/* current colour pair set on the terminal */
 	int	 My_term;	/* Use Def_term regardless. */
 	char	 GT;		/* Gtty indicates tabs. */
 	char	 NONL;		/* Term can't hack LF doing a CR. */
Index: screen.c
===================================================================
RCS file: /cvsroot/src/lib/libcurses/screen.c,v
retrieving revision 1.39
diff -u -r1.39 screen.c
--- screen.c	27 May 2024 14:30:43 -0000	1.39
+++ screen.c	9 Jul 2024 07:14:43 -0000
@@ -156,6 +156,7 @@
 	new_screen->nca = A_NORMAL;
 	new_screen->color_type = COLOR_NONE;
 	new_screen->COLOR_PAIRS = 0;
+	new_screen->curpair = -1;
 	new_screen->old_mode = 1;
 	new_screen->stdbuf = NULL;
 	new_screen->stdscr = NULL;


Home | Main Index | Thread Index | Old Index