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);
OpenPGP_signature.asc
Description: OpenPGP digital signature
