在urxvt中运行ncurses程序会挤压字符串中的重复字符。例如,我期望但我得到. "--------"
"-"
我写了一个简短的程序来重现这个问题。代码如下。
我已经验证了使用xterm而不是urxvt时输出是正确的。
这是我第一次使用 ncurses,但是,示例程序非常简单。因此,我认为问题不大可能在于我如何使用 ncurses。xterm 给出预期结果的事实也支持这一点。
我在 Arch Linux 上使用 urxvt。我也在下面提供相关配置。我安装了 vanilla xterm,没有任何额外的配置。两者都运行了 zsh。
示例程序 (C)
#include <curses.h>
int main(){
initscr();
printw("------\n"); // (1) 6 '-' chars urxvt: "------" xterm: "------"
printw("-------\n"); // (2) 7 '-' chars urxvt: "-" xterm: "-------"
printw("--------\n"); // (3) 8 '-' chars urxvt: "-" xterm: "--------"
printw("0--------0\n"); // (4) 8 '-' between '0' urxvt: "0-0" xterm: "0--------0"
printw("xxxxxxxx\n"); // (5) Replacing '-' with 'x' does not make a difference.
printw("---- ----\n"); // (6) Two '-' sequences separated by ' ' display correctly.
printw("12345678\n"); // (7) Strings with different characters display correctly.
for(int i=0; i<8; i++) addch('-'); // (8) 8 '-' chars urxvt: "-" xterm: "--------"
addch('\n');
for(char c='0'; c<'8'; c++) addch(c); // (9) Both display correctly
addch('\n');
refresh();
getch();
endwin();
return 0;
}
xterm 输出(正确)
------
-------
--------
0--------0
xxxxxxxx
---- ----
12345678
--------
01234567
urxvt 输出(不正确)
------
-
-
0-0
x
---- ----
12345678
-
01234567
观察
- 最多可正确显示 6 个重复字符。
- 7 个或更多重复字符显示为单个字符。
- 如果字符不重复,则不会出现此问题,因此字符串本身的长度不是问题。
- 重复子串的位置并不重要。
'0'
在 (7) 中,被压缩的子串被每端的字符夹在中间。 - 问题不是由于特定的字符。它发生
'-'
在 以及'x'
。
- 问题不是由于特定的字符。它发生
- 使用
printw
和addch
函数观察到该问题。相关的联机帮助页声明这些函数会移动光标,因此不需要显式移动光标。显然是这样,否则问题将不仅限于重复字符,xterm 也会发生。
urxvt 配置
- rxvt-unicode v9.22
$TERM
是xterm-256color