如何在不使用 libtinfo/libncurses 的情况下 get/set 光标可见性?

How to get/set cursor visibility without using libtinfo/libncurses?

Google 搜索了很多,发现 curs_set()putp(tigetstr() ) 可用于 hide/show tty 游标。我想尽量减少对其他库的依赖,所以我想知道我是否可以在不使用 libtinfo/libncurses 或调用外部命令(如 settermtput).有什么 ioctl() 命令吗?

基本上有三种方法:

  1. 如果你的程序只在控制台终端上执行(例如,因为机器没有联网),或者只在大多数普通终端上执行,你可以假设UTF-8字符集和ANSI escape codes.

    这意味着要隐藏光标,您向终端打印 "3[?25l",并显示 "3[?25h" 以显示光标。

  2. 要获得正确的终端支持,请使用 terminfo 库。

    您可以直接读取 terminfo 数据库,但这毫无意义,因为如果安装了它,您还有用于访问它的 curses 函数 (tgetent()/tgetnum()/tgetflag())。

    然后您还应该让您的程序能够识别区域设置,并使用例如iconv() 在字符集之间进行转换,而不是假定为 UTF-8。

  3. 使用 curses 或 ncursesw(支持宽字符)。