tput(1)
使用terminfo(5)
(或更旧的termcap(5)
)数据库,该数据库提供从抽象命令(例如将光标移动到 x,y )的映射,以转义不同终端的序列。当您运行诸如
$ tput cup 10 3 # move cursor to row/column 10/3
,查询 terminfo 数据库以找到适合您终端的正确字符串,然后将其简单地写入标准输出。要查找可用命令(例如cup
),请查看 中的cap-name列terminfo(5)
。通过查看环境变量tput
来确定您正在使用的终端。TERM
(这意味着您可以通过简单地在一些可以显示控制字符的编辑器中执行$ tput [command] > [file]
并打开来检查正在生成哪些转义字符[file]
,这对于探索非常方便。该infocmp(1)
命令也可以用于此。)
如果您使用tput
(或底层tputs(3)
),您的程序将自动移植到不同的终端。顺便说一句,这就是 Vim 使用的。
然而——在现代世界中,几乎所有终端(或者终端仿真器)都使用ANSI 转义码,以及一些扩展(参见XTerm Control Sequences)。我相信 xterm 支持的转义及其行为在这一点上已经成为事实上的标准,其他终端仿真器只是简单地复制 xterm 的行为。一些基于文本的 UI 库(如termbox)似乎完全取消了对非 ANSI 终端的支持,并直接输出 ANSI 转义。
除了已经提到的术语框,还有S-Lang,它包括一个终端处理组件。我相信这是两个最受欢迎的“ncurses 替代品”。不过,我会先给 ncurses 一些时间。