当窗口的宽度大于8时,边框绘制功能似乎无法正确绘制上下边框。作为免责声明,我正在使用KiTTY SSH进入Arch Linux服务器。
我是ncurses的新手,所以很有可能我做错了事,但是从我读到的内容来看,这应该是正确的...
#include <ncurses.h>
int main() {
initscr(); cbreak();
WINDOW *win = newwin(1,1, 1,1);
for(int i=1; i < 16; ++i) {
wresize(win, i, i);
wclear(win);
box(win, 0,0); // I've also tested wborder()
wrefresh(win);
mvprintw(0,0, "size: %i", i);
getch(); //pause
}
endwin();
return 0;
}
运行此代码,这是我看到的:
size: 8
+------+
¦ ¦ Displays like this (normally)
¦ ¦ for both top and bottom borders
¦ ¦
¦ ¦
¦ ¦
¦ ¦
+------+
size: 9
+-+
¦ ¦ Each size up it will continue
¦ ¦ to look like this, with the
¦ ¦ top and bottom borders looking
¦ ¦ like `+-+`
¦ ¦
¦ ¦
¦ ¦
+-+
答案 0 :(得分:1)
ncurses 使用终端功能数据库来获取有关终端支持的终端控制序列的信息。它使用TERM
环境变量的值来查找此信息。 PuTTY或KiTTY将TERM
环境变量的期望值传递给SSH服务器。默认情况下,通常将其设置为“ xterm”,但可以在会话设置中的连接-> 数据-> 终端类型字符串下进行更改strong>。
PuTTY和KiTTY曾经在终端能力数据库中很好地支持“ xterm”的控制序列,但是数据库的最新版本(2017年中以后)优化了为“ xterm”定义的序列,以使用当前不支持的序列通过PuTTY或KiTTY。具体来说,现在它利用了PuTTY不支持的ECMA-48 REP (重复字符)控制序列。为了使线条图在具有最新终端功能数据库的系统上正常工作,需要更改PuTTY或KiTTY的TERM
环境变量。 (可以如上所述在会话设置中更改它。)终端功能数据库的最新版本的合适值包括“ putty”或“ putty-256color”。值“ xterm-old”也可以使用。
检查主机系统上的“ / usr / share / terminfo”目录,以查看系统实际定义了哪些终端类型。终端类型的第一个字母被拆分为一个子目录,例如,“ putty”终端类型的终端功能由“ / usr / share / terminfo / p / putty”文件定义。
请注意,此问题不仅影响画线,而且还会影响同一字符的水平重复超过六次。由ncurses FAQ解决:
仅涵盖终端说明中的功能,而没有解决终端仿真器之间的差异。例如,在mid-2017中,对xterm终端描述的更新添加了ECMA-48 REP (重复字符)控件。自1997年1月以来,它是xterm的一部分,但是使用该功能的终端说明仅是 xterm 的一部分(不是 ncurses )。将其添加到ncurses后,观察到:
- rxvt不受影响,因为它不使用
TERM=xterm
。- mlterm和OSX Terminal使用
TERM=xterm
支持 REP 。- VTE,konsole,PuTTY和iTerm2尽管支持将
TERM
设置为xterm
或,但不支持xterm的这一标准的长期功能。xterm-256color
。- 屏幕和tmux使用不同的
TERM
设置,并且似乎可以正常工作(尽管tmux在测试中还有其他问题)。