首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法使终端控制序列可移植吗?

有办法使终端控制序列可移植吗?
EN

Stack Overflow用户
提问于 2015-02-18 20:46:43
回答 1查看 324关注 0票数 1

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

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

在上面的选项中,ncurses似乎是编辑器最推荐的打印方式。但是ncurses也有很多我不愿使用的东西,如果它是合理可行的,我宁愿自己创建系统。我不反对用它,但是..。不管怎样。

所以,我的问题是:在绝大多数终端中,有什么方法不用库就可以使用控制序列吗?不管是通过tput还是其他方法?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-08 01:04:10

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

代码语言:javascript
复制
$ tput cup 10 3 # move cursor to row/column 10/3

,将查询terminfo数据库以查找终端的正确字符串,然后将其简单地写入stdout。要找到可用的命令(例如,cup),请查看terminfo(5)中的cap列。tput通过查看TERM环境变量来确定所使用的终端。

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

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

然而--在现代世界中,几乎所有的终端(或者终端模拟器)都使用ANSI转义码以及一些扩展(参见XTerm控制序列)。我相信xterm支持的转义以及它们的行为在这一点上已经成为了一个事实上的标准,其他终端模拟器只是简单地复制xterm的行为。一些基于文本的UI库(如蚁箱 )似乎完全取消了对非ANSI终端的支持,而输出ANSI则直接转义。

除了前面提到的术语,还有斯朗,它包括一个终端处理组件.我相信这是两个最受欢迎的“诅咒替代品”。不过,我会先给你点时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28593588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档