微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 在控制台中放置光标 - 解释?

如何解决C 在控制台中放置光标 - 解释?

我一直在寻找解释转义序列使用的文档,但没有成功。 例如,我知道我可以使用

printf("%c[%d;%df",0x1B,y,x);

用于将光标放置在控制台中的某个位置。 但是我会在哪里找到这个和其他转义序列的解释。如前所述,我一直在浏览互联网,有很多文章解释说您可以为不同的事物转义序列,但没有找到带有可用函数列表的文章

如果有人知道我在哪里可以找到这个就好了。谢谢大家的回答!

一些答案​​后更新:

  • 我知道维基百科页面。它例如提到了上述可能性,但在 CSI 表中没有真正解释。 我正在寻找的是类似

ESC[;f => 将光标移动到“l”行和“c”列
ESC[;H => 将光标移动到“l”行和“c”列

和其他ESC的解释...

  • 我不是在寻找 printf 的格式化可能性(但无论如何感谢所有答案)

解决方法

在哪里可以找到对这个和其他转义序列的解释

维基百科有一个相当广泛的列表 https://en.wikipedia.org/wiki/ANSI_escape_code 。标准是 ECMA-48(读起来很糟糕),但它很旧,我认为有一些新的转义序列“在野外”。

但没有找到包含可用函数列表的函数。

没有列表,或者你能得到的最接近的是 ECMA-48。每一个 terminal(嗯,现在,终端模拟器)对 ANSI 转义序列都有不同的支持,这个列表并不严格,开发人员添加了对新转义序列的支持,终端有时支持自己的转义序列。有无穷无尽的终端和模拟器以及它们的版本。 terminfo database 的创建是为了处理终端之间的 ANSI 转义码之间的兼容性问题。

,

作为一般规则,每种终端类型的转义序列都不同。过去,每个终端品牌都使用(并发布)了自己的转义序列集,并且它们通常不兼容。

随着时间的推移,DEC(数字设备公司)出于以下几个原因强加了他们的设置:

  • 他们的终端是最扩展和最受欢迎的终端(vt100、vt200、vt220、vt420 等)
  • 他们所有的模型都具有相同的规格。
  • PDP-11 及更高版本的 VAX 主要与这些终端一起销售。

由于这些原因,DEC 终端的转义序列成为一种标准,并且慢慢地所有软件都适应了它们。

同时,一些软件工具开始使用全屏应用,解决使用不同终端的问题。这导致了库 (curses) 中的 unix 环境,它允许用户拥有几乎任何具有可寻址光标和显示功能的终端类型,几乎可以与任何应用程序一起使用。编写 Curses 是为了支持 vi(1),但后来它已成功用于许多其他程序。

转义序列变得标准化,并且标准(ANSI X3.64 (ISO 6429))成为几乎所有不是使用curses库设计的应用程序的事实上的标准。该标准仅涵盖 DEC 终端实现的全套转义的一个子集(主要是因为在同一终端中多路复用多个会话的序列是已获得专利的 --- 未公开--- 命令集,受版权规则保护) .

ECMA 还对转义序列进行了标准化,如该问题的另一个答案所述。

但是,如果你真的想完全不可知终端,你最好使用一些类似curses的(例如ncurses,它也是开源的)库,以应对具有不同和不兼容转义的大型终端数据库序列。例如,惠普终端使用完全不同的语言来表达转义码,因此,HP 终端的转义序列与 DEC 的转义序列完全不同。 查看 ANSI wikipedia page 以获取这些转义的中到完整列表,以及与这些转义的文档相关的其他链接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。