【问题标题】:C placing cursor in a console - explanation?C 将光标放在控制台中 - 解释?
【发布时间】:2021-08-01 09:44:32
【问题描述】:

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

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

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

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

一些答案​​后更新:

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

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

以及其他ESC的说明...

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

【问题讨论】:

  • 这是我google时得到的printf "%c":cplusplus.com/reference/cstdio/printf 有用吗?
  • 别忘了冲洗! (标准输出是行缓冲的)
  • 我不明白你的更新。您似乎在说维基百科页面不提供该信息。确实如此;也许问题在于理解文档以及如何应用它? This 在不同的演示文稿中提供或多或少相同的信息,您可能会发现它们更容易理解。但毫无疑问,您已经通过谷歌搜索“ANSI Escape Sequences”发现了这一点
  • 无论如何,这个问题对于 SO 来说都是题外话;要求场外资源和文档而不是特定问题的答案是题外话。它鼓励仅提供链接的答案。

标签: c escaping


【解决方案1】:

我会在哪里找到这个和其他转义序列的解释

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

但未找到具有可用功能列表的功能。

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

【讨论】:

  • 注意:可能的混淆来源是ansi 也是一种终端类型,或多或少是公分母/最小的可用子集。 ansi(和:xtermlinux)是存活时间最长的终端类型。在 termcap/terminfo 中,ansi 还用作其他派生类型的基本类型。
  • 谢谢。 ECMA-48 是我想要的。但是,正如你所说,它真的很难阅读......
【解决方案2】:

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

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

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

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

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

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

ECMA 还具有标准化的转义序列,如该问题的另一个答案中所回答的那样。

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

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 2018-12-04
    • 2010-09-25
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2023-02-12
    • 1970-01-01
    相关资源
    最近更新 更多