谷歌搜索了很多,发现 curs_set() 或 putp(tigetstr() ) 可用于隐藏/显示tty光标。我想尽量减少对其他lib的依赖,所以我想知道我是否可以不使用 libtinfo / libncurses 或调用外部命令(如 setterm ,则, tput ).有吗 ioctl() 此命令?
curs_set()
putp(tigetstr() )
libtinfo
libncurses
setterm
tput
ioctl()
基本上有三种方法:
如果您的程序仅在控制台终端上执行(例如,因为机器未连接网络),或仅由最常见的终端执行,则可以假定UTF-8字符集和 ANSI escape codes 。
这意味着要隐藏光标,您需要打印 "\033[?25l" 至终端,以及 "\033[?25h" 显示光标。 ―
"\033[?25l"
"\033[?25h"
要获得正确的终端支持,请使用terminfo库。
您可以直接读取terminfo数据库,但这将毫无意义,因为如果安装了它,您还可以使用curses函数来访问它( tgetent() / tgetnum() / tgetflag() )。
tgetent()
tgetnum()
tgetflag()
然后,您还应该让您的程序具有区域设置意识,并使用例如。 iconv() 在字符集之间转换,而不是采用UTF-8。 ―
iconv()
使用curses或ncursesw(具有广泛的字符支持)。