如何在不使用 libtinfo/libncurses 的情况下 get/set 光标可见性?
How to get/set cursor visibility without using libtinfo/libncurses?
Google 搜索了很多,发现 curs_set()
或 putp(tigetstr() )
可用于 hide/show tty 游标。我想尽量减少对其他库的依赖,所以我想知道我是否可以在不使用 libtinfo
/libncurses
或调用外部命令(如 setterm
、tput
).有什么 ioctl()
命令吗?
基本上有三种方法:
如果你的程序只在控制台终端上执行(例如,因为机器没有联网),或者只在大多数普通终端上执行,你可以假设UTF-8字符集和ANSI escape codes.
这意味着要隐藏光标,您向终端打印 "3[?25l"
,并显示 "3[?25h"
以显示光标。
要获得正确的终端支持,请使用 terminfo 库。
您可以直接读取 terminfo 数据库,但这毫无意义,因为如果安装了它,您还有用于访问它的 curses 函数 (tgetent()
/tgetnum()
/tgetflag()
)。
然后您还应该让您的程序能够识别区域设置,并使用例如iconv()
在字符集之间进行转换,而不是假定为 UTF-8。
使用 curses 或 ncursesw(支持宽字符)。
Google 搜索了很多,发现 curs_set()
或 putp(tigetstr() )
可用于 hide/show tty 游标。我想尽量减少对其他库的依赖,所以我想知道我是否可以在不使用 libtinfo
/libncurses
或调用外部命令(如 setterm
、tput
).有什么 ioctl()
命令吗?
基本上有三种方法:
如果你的程序只在控制台终端上执行(例如,因为机器没有联网),或者只在大多数普通终端上执行,你可以假设UTF-8字符集和ANSI escape codes.
这意味着要隐藏光标,您向终端打印
"3[?25l"
,并显示"3[?25h"
以显示光标。
要获得正确的终端支持,请使用 terminfo 库。
您可以直接读取 terminfo 数据库,但这毫无意义,因为如果安装了它,您还有用于访问它的 curses 函数 (
tgetent()
/tgetnum()
/tgetflag()
)。然后您还应该让您的程序能够识别区域设置,并使用例如
iconv()
在字符集之间进行转换,而不是假定为 UTF-8。
使用 curses 或 ncursesw(支持宽字符)。