Terminal 有没有办法让终端控制序列便携?

Terminal 有没有办法让终端控制序列便携?,terminal,controls,ncurses,sequences,tput,Terminal,Controls,Ncurses,Sequences,Tput,我目前正在计划一个定制的类似Vim的编辑器。它将用C语言编写,我希望它能够在尽可能多的系统之间进行移植 我知道curses(我想是ncurses)、tput命令以及终端如何使用控制序列(Esc-[和CSI字符)来更改背景、移动光标等 在上面的选项中,似乎ncurses是编辑最推荐的打印方式。但是ncurses也有很多我不想使用的东西,如果合理可行的话,我宁愿自己制作系统。我不反对使用它,但……无论如何 所以,我的问题是:有没有办法在绝大多数终端中使用控制序列而不使用库?无论是通过tput还是其他

我目前正在计划一个定制的类似Vim的编辑器。它将用C语言编写,我希望它能够在尽可能多的系统之间进行移植

我知道curses(我想是ncurses)、tput命令以及终端如何使用控制序列(Esc-[和CSI字符)来更改背景、移动光标等

在上面的选项中,似乎ncurses是编辑最推荐的打印方式。但是ncurses也有很多我不想使用的东西,如果合理可行的话,我宁愿自己制作系统。我不反对使用它,但……无论如何

所以,我的问题是:有没有办法在绝大多数终端中使用控制序列而不使用库?无论是通过tput还是其他方法

谢谢!

tput(1)
使用
terminfo(5)
(或更早的
termcap(5)
)数据库,该数据库提供从抽象命令(如将光标移动到x,y)到不同终端转义序列的映射

$ tput cup 10 3 # move cursor to row/column 10/3
,查询terminfo数据库以查找终端的正确字符串,然后将其简单地写入标准输出。要查找可用命令(例如,
cup
),请查看
terminfo(5)中的cap name列
tput
通过查看
术语
环境变量来确定您使用的终端

(这意味着您可以通过简单地执行
$tput[command]>[file]
并在一些编辑器中打开
[file]
来检查生成了哪些转义字符,这些编辑器可以显示控制字符,便于查看。
infocmp(1)
命令也可以用于此。)

如果您使用
tput
(或底层
tputs(3)
),那么您的程序将自动移植到不同的终端。顺便说一下,Vim就是这样使用的

然而,在现代世界中,几乎所有的终端(或者说终端模拟器)都使用一些扩展(请参阅)。我相信xterm支持的转义及其行为在这一点上已经成为事实上的标准,其他终端模拟器只是复制xterm的行为。一些基于文本的UI库似乎完全取消了对非ANSI终端的支持,直接输出ANSI转义

除了已经提到的termbox,还有一个,它包括一个终端处理组件。我相信这是两个最流行的“ncurses替换”。不过,我会先给ncurses一些时间。

这就是诅咒的目的。如果你不想使用它,你可能会想更详细地解释为什么。也就是说,是的,直接使用terminfo或termcap应该可以获得相同程度的可移植性(尽管这不是“不使用库”).而且,在实践中,您可能会使用一组硬接线ESC序列覆盖大多数终端…但我不建议这样做。