When using gdb's TUI with TERM=ansi and LANG=en_US.UTF-8, I get a weird border: ... ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ... This is with the default tui border-kind acs. I tracked this down to not using NCURSES_NO_UTF8_ACS=1, with which I get instead: ... ┌────────────────────────────────────────────────────────────────────────────┐ │ │ ... I wonder if we should consider this an ncurses problem or a gdb problem. In the latter case, I wonder if GDB can detect this problem, and set NCURSES_NO_UTF8_ACS=1 before initializing ncurses.
(In reply to Tom de Vries from comment #0) > and set > NCURSES_NO_UTF8_ACS=1 before initializing ncurses. That seems to be possible, this has the desired effect: ... diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c index 3604194a760..9bb9b1e73ef 100644 --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -402,6 +402,7 @@ tui_enable (void) if (!gdb_stderr->isatty ()) error (_("Cannot enable the TUI when output is not a terminal")); + putenv (strdup ("NCURSES_NO_UTF8_ACS=1")); s = newterm (NULL, stdout, stdin); #ifdef __MINGW32__ /* The MinGW port of ncurses requires $TERM to be unset in order ...
IIUC this env var is a workaround for buggy terminals and/or incorrect termcap entries. I tend to doubt gdb should unilaterally set it.
Created attachment 14840 [details] Tentative patch My best guess at how this could work.
(In reply to Tom Tromey from comment #2) > IIUC this env var is a workaround for buggy terminals and/or > incorrect termcap entries. I tend to doubt gdb should unilaterally set it. I understand the reasoning. It's just that TERM=ansi is used in the TUI testsuite, so I'm using that all the time when debugging TUI test-cases on an actual terminal (rather than the ansi terminal emulator in the testsuite), and each time I run into this PR (both on openSUSE Leap 15.4 and Ubuntu 22.04) I end up using "set tui border-kind ascii" to work around it (but as I've just learned, I could also use NCURSES_NO_UTF8_ACS=1). So, my attempt at a rationale for fixing this PR would be that if we use TERM=ansi in the testsuite, we should try to make that work as expected on the average terminal emulator.
Tried another approach, submitted RFC "[gdb/tui] Add set tui border-kind acs-or-space/acs-or-ascii" here ( https://sourceware.org/pipermail/gdb-patches/2023-April/198982.html ).
See also PR30419.