ncurses定义值ACS_HLINE、ACS_VLINE、ACS_ULCORNER、ACS_URCORNER、ACS_LLCORNER和ACS_LRCORNER。你可以在addch和friends中使用这些常量,这应该会导致你看到预期的框字符。(有更多的ACS字符;你可以在man addch中找到完整的列表。 ncurses需要知道它正在绘制什么,因为它需要始终准确地知道光标在哪里。输出控制台控制序列不是一个好主意;如果ncurses知道如何处理序列,那么它有自己的特性抽象,您应该使用该抽象。ACS(“alternate character set”)定义就是其中一种抽象。
3条答案
按热度按时间6psbrbz91#
ncurses
定义值ACS_HLINE
、ACS_VLINE
、ACS_ULCORNER
、ACS_URCORNER
、ACS_LLCORNER
和ACS_LRCORNER
。你可以在addch
和friends中使用这些常量,这应该会导致你看到预期的框字符。(有更多的ACS字符;你可以在man addch
中找到完整的列表。ncurses
需要知道它正在绘制什么,因为它需要始终准确地知道光标在哪里。输出控制台控制序列不是一个好主意;如果ncurses知道如何处理序列,那么它有自己的特性抽象,您应该使用该抽象。ACS(“alternate character set”)定义就是其中一种抽象。hfyxw5xn2#
几个问题:
"\e(0\x6a\e(B"
的内容,那么ncurses(any curses implementation)将把单个字符转换为可打印的形式,如addch手册页中所述。ACS_HLINE
)对常用伪图形进行线条绘制,这些符号是结合了A_ALTCHARSET
属性的预定义字符。您可以在addch
手册页的 Line Graphics 部分阅读这些内容。0x6a
是ASCIIj
,它(给定VT 100风格的Map)将位于左下角。其诅咒符号为ACS_LRCORNER
。addstr
书写画线字符;相反,addch
、addchstr
是有用。也有一些面向线绘制的函数(参见box
和朋友)。setlocale(LC_ALL,“”);
此外,您的程序应该链接到ncursesw库(
-lncursesw
)以使用UTF-8,而不仅仅是ncurses(-lncurses
)。_GNU_SOURCE
。6yjfywim3#
顺便说一句,我可能会迟到,但我会给予你一些额外的见解,可能(或不)棚一些光和技能,为您的“框画”的需要。
截至2020年,我参与了一个有趣的项目,在我自己的混合Swift + Ncurses(现在在OSX下,但考虑将其与Linux混合)。目前,它的工作毫无疑问...
问题是,当我使用Swift时,在内部它都简化为从MacOS Xcode/runtime提供的一些达尔文.ncurses库中“导入.h和.c”文件。
这意味着(我希望)我新获得的技能可能对您有用,因为显然我们正在使用相同的.h和.c文件来满足我们的ncurses需求(或者至少它们应该非常相似)
他说:
到目前为止,我“忽略”了ACS_corner字符(我在swift/Xcode/达尔文.ncurses运行时下找不到它们!!!)支持纯UTF“角字符”,这也存在于unicode点空间中,看:
https://en.wikipedia.org/wiki/Box-drawing_character
这是什么意思每当我想使用一些绘图框字符时,我只需将纯UTF-8字符复制并粘贴到字符串中,然后将这些字符串发送到addstr。
它为什么会起作用?因为正如在前面的回答中提到的,在用initscr()初始化ncurses之前,我只是以setlocale(LC_ALL,“”)的形式声明“我想要一个适当的locale支持”;线
我取得了什么成就?“舒适的魔术”,因为我只需要复制+粘贴“框字符”在我的“正常字符串”。使用达尔文.ncurses/OSX莫哈韦,我得到的不仅是“边界框字符”,而且是完全的UTF8支持。
尝试“setlocale(LC_ALL,“”); initscr();”方法并告诉我们“drawing boxes”是否也适用于纯C环境,只使用UTF8边界框字符。
问候和快乐ncursing!