应该画一条水平线的最简单的程序:
int main()
{ initscr(); for (int i=0;i<10;i++) addch(ACS_HLINE); getch(); endwin(); }本地工作正常,但在MOSH连接上的结果是qqqqqqqqqq。
我用这种方式测试了其他著名的ncurses程序(通过MOSH连接),其中一些程序工作得很好,比如: alsamixer、vim、tmux.但是其他测试也显示了“丑陋的字符”,比如:俄罗斯方块游戏(bastet),对话框(显示shell脚本中的对话框)。
所以上面提到的我的程序,俄罗斯方块,对话框和其他程序的问题是:
Mosh是一个非常有用的程序,它可以解决笔记本无线网络上ssh中断的问题。它创建自己的终端,并将TERM变量设置为xterm。在通过mosh启动程序之前,术语var是'xterm',locale命令显示LANG=en_US.UTF8,LC_ALL=“,字体看起来还可以(测试不同字体的结果也是一样)。
有人知道如何解决或进一步调试这个问题吗?
最简单的模拟:
sudo apt-get install mosh bastet #<--install mosh and tetris
bastet #<--tetris works ok
mosh -- 127.0.0.1 bastet #<--q and x chars instead of lines发布于 2018-01-17 02:49:08
它在ncurses手册页面中:环境NCURSES_NO_UTF8_ACS可以设置为通知它终端不识别所使用的it 100风格的线条绘制代码。此外,终端描述中的U8功能(例如与TERM=tmux一起使用)告诉它同样的情况。
在ncurses终端数据库中有最新的mosh终端描述.在审查它时,有一些问题超出了画线的范围.
发布于 2018-01-17 05:40:38
在分析了alsamixer的源代码(运行良好)之后,发现这一行非常重要:
setlocale(LC_ALL, "");如C图书馆文件中所示。没有它,'C‘区域设置是默认的。
所以我的程序现在也在MOSH上运行得很好:
{ setlocale(LC_ALL, ""); initscr(); ... draw lines ... getch(); endwin(); }但我会接受在程序之外解决这个问题的任何其他答案。比如如何在不改变源代码的情况下强迫俄罗斯方块这样做。
https://unix.stackexchange.com/questions/417634
复制相似问题