为啥 tput 中同时存在 setf/setb 和 setaf/setab?

Posted

技术标签:

【中文标题】为啥 tput 中同时存在 setf/setb 和 setaf/setab?【英文标题】:Why is there both setf/setb and setaf/setab in tput?为什么 tput 中同时存在 setf/setb 和 setaf/setab? 【发布时间】:2013-09-24 11:13:37 【问题描述】:

我正在尝试使用 tput 以独立于设备的方式在我的终端中设置前景色和背景色。

如果 termcap/terminfo/tput 的全部目的是独立于设备,为什么会有明确使用 ANSI 控件的版本(setaf/setab)和不使用(不应该)的版本?

This discussion 引用 terminfo(5),后者又引用了明确表示将分别使用 ANSI 而不是 ANSI 实现的标准。

为什么不只是 setf/setb 并且它们总是设置前景色和背景色。我不在乎它是如何完成的,这就是我使用 tput 的原因!

【问题讨论】:

这个问题的 unix.SE 版本有更好的答案,What is the difference between tput's 'setf' and 'setaf'?。简而言之,setf 是旧的,setaf(A 代表 ANSI)是新的。只有setaf支持256色模式。 【参考方案1】:

为什么不只是 setf/setb 而他们总是设置前景色和背景色 实际上是两个问题!

第一部分,为什么有 ANSI 和非 ANSI 终端命令需要很长时间来解释,而且它是不必要的,因为历史在 Wikipedia 上有很好的解释。

第二部分也许可以随意改写为“有什么区别?”或“我该怎么办?”。

区别: 与非 ANSI 终端相比,ANSI 类型终端使用另一种颜色编号和颜色之间的映射。例如,一个上的黄色代码将是另一个上的青色。只有两个不同的映射表。这些东西在 Wikipedia 上都有很好的描述。

你能做些什么: 发现您拥有哪种类型的终端,并使用相应的命令。 或修改您的 termcap。 不幸的是,这些解决方案都不是完全通用的。

【讨论】:

以上是关于为啥 tput 中同时存在 setf/setb 和 setaf/setab?的主要内容,如果未能解决你的问题,请参考以下文章

super this 为啥不能同时存在

SHELL脚本中 tput 的使用技巧 (tput 控制光标位置)

tput:Sublime Text3中没有指定$ TERM和no -T的值

为啥 clickhouse 同时具有 WHERE 和 PREWHERE 构造?

linux命令:tput(termnal put)

不确定为啥代码重复某些输出