Op 01-09-2025 om 12:08 schreef Thomas Dickey:
I think that if you modify render_char, that would be the simplest.
Something like a check on wcwidth, and mapping the character to a space.

Ehm...  I wanted the opposite: _not_ blank characters with a negative
wcwidth() result.

The code for that substitution was found in ncurses/tty/tty_update.c,
in PutAttrChar(), in the first else clause, on line 270:

            ch = CHREF(blank);

Commenting out that line makes ncurses behave the way I want.

Would something like the attached patch be acceptable?  Then I could
just add the following line to nano, and all users could see unknown
code points depicted visibly instead of hidden as blanks -- not on an
xterm, though, but on things like Xfce terminal.

    putenv("ALLOW_UNASSIGNED_CODEPOINTS=yeah");


Benno

diff -ur ncurses-6.5-20250823/ncurses/base/lib_initscr.c ncurses-6.5-20250823-mod/ncurses/base/lib_initscr.c
--- ncurses-6.5-20250823/ncurses/base/lib_initscr.c	2025-03-09 01:49:14.000000000 +0100
+++ ncurses-6.5-20250823-mod/ncurses/base/lib_initscr.c	2025-09-01 13:42:43.734485950 +0200
@@ -66,6 +66,8 @@
 
 	_nc_globals.init_screen = TRUE;
 
+	_nc_globals.pass_all = (getenv("ALLOW_UNASSIGNED_CODEPOINTS") != NULL);
+
 	env = getenv("TERM");
 	(void) VALID_TERM_ENV(env, "unknown");
 
diff -ur ncurses-6.5-20250823/ncurses/term.priv.h ncurses-6.5-20250823-mod/ncurses/term.priv.h
--- ncurses-6.5-20250823/ncurses/term.priv.h	2024-03-02 21:43:06.000000000 +0100
+++ ncurses-6.5-20250823-mod/ncurses/term.priv.h	2025-09-01 13:40:56.052823691 +0200
@@ -190,6 +190,7 @@
 
 	bool		init_signals;
 	bool		init_screen;
+	bool		pass_all;
 
 	char *		comp_sourcename;
 	char *		comp_termtype;
diff -ur ncurses-6.5-20250823/ncurses/tty/tty_update.c ncurses-6.5-20250823-mod/ncurses/tty/tty_update.c
--- ncurses-6.5-20250823/ncurses/tty/tty_update.c	2024-12-07 19:00:11.000000000 +0100
+++ ncurses-6.5-20250823-mod/ncurses/tty/tty_update.c	2025-09-01 13:43:30.386372933 +0200
@@ -255,7 +255,7 @@
 	 *    characters.  Codes 128-255 are allowed though this is
 	 *    not checked.
 	 */
-	if (is8bits(CharOf(CHDEREF(ch)))
+	if (_nc_globals.pass_all || (is8bits(CharOf(CHDEREF(ch)))
 	    && (!is7bits(CharOf(CHDEREF(ch))) && _nc_unicode_locale())
 	    && (isprint(CharOf(CHDEREF(ch)))
 		|| (SP_PARM->_legacy_coding > 0 && CharOf(CHDEREF(ch)) >= 160)
@@ -264,7 +264,7 @@
 		    && ((CharOfD(ch) < ACS_LEN
 			 && SP_PARM->_acs_map != NULL
 			 && SP_PARM->_acs_map[CharOfD(ch)] != 0)
-			|| (CharOfD(ch) >= 128))))) {
+			|| (CharOfD(ch) >= 128)))))) {
 	    ;
 	} else {
 	    ch = CHREF(blank);

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to