xterm 中的转义码 50

xterm 中的转义码 50

~/.bash_profile我的同事在我们的许多服务器中都有以下内容:

echo -e "\033]50;SetProfile=Production\a"

文本似乎并不重要,因为这也有效:

echo -e "\033]50;ANY_TEXT\a"

但没有文字是行不通的;也是\a必需的。

这会导致他的 OSX 终端更改配置文件(不同的颜色等);但在我的 xterm 中,它将字体更改为巨大;我似乎无法重置。

我尝试用以下方法重置它:

  1. 使用shift+右键设置VT字体
  2. 使用 Shift+中键单击执行“软重置”和“完全重置”
  3. 发送各种转义码和命令:

    $ echo -e "\033c"    # Reset terminal, no effect
    $ echo -e "\033[0;m" # Reset attributes, no effect
    $ tput sgr0          # No effect
    $ tput reset         # No effect
    

我的问题:

  1. 为什么这在 xterm 上有效以及它到底有什么作用?代码 50 被列为“保留”?
  2. 我该如何重置这个?

截屏:

在此输入图像描述

答案1

看看名单xterm 转义码显示(esc)]50;name(bel)将 xterm 的字体设置为 font ,或者如果 的第一个字符是 a ,name则设置为字体菜单中的条目。name#

重置它的最简单方法是使用 xterm 的字体菜单(Ctrl+单击鼠标右键)并选择Default.或者,您可以找出 xterm 在启动时使用的字体,并使用转义序列进行设置。

在字体菜单中,您还可以找到一个选项Allow Font Ops;如果取消选中该选项,则无法再使用转义序列更改字体。

答案2

回答如何重置它的问题:

xterm 转义码OSC 50 ... BEL可用于设置字体(请参阅@celtschk 的答案)。

除了将其设置为字体名称外,还可以将其设置为通过 Ctrl 和鼠标右键获得的字体菜单中的索引。

我们可以使用菜单索引 0 来重置为默认字体:

echo -n "\e]50;#0\a

XTerm 控制序列 - (2014/05/26):

OSC P s ; P t BEL  Set Text Parameters.

      P s = 5 0 → Set Font to P t. These controls may be disabled using the
      allowFontOps resource. If P t begins with a "#", index in the font menu,
      relative (if the next character is a plus or minus sign) or absolute. A
      number is expected but not required after the sign (the default is the
      current entry for relative, zero for absolute indexing).
      The same rule (plus or minus sign, optional number) is used when querying
      the font. The remainder of P t is ignored.
      A font can be specified after a "#" index expression, by adding a space
      and then the font specifier.
      If the "TrueType Fonts" menu entry is set (the renderFont resource),
      then this control sets/queries the faceName resource.

答案3

关于“保留”的评论令人费解,因为OSC 50自 1991 年以来,已在 xterm 的控制序列中记录了用于更改字体的内容。这是一个链接X11R5版本

网页中的排版可以改进。以下是帮助您发现问题的快速完善:

PS=5 0 -> 将字体设置为

可以使用以下命令禁用这些控件allowFontOps资源。如果以“#”开头,字体菜单中的索引,相对(如果下一个字符是加号或减号)或绝对。符号后面需要一个数字,但不是必需的(默认值是相对索引的当前条目,绝对索引为零)。查询字体时使用相同的规则(加号或减号,可选数字)。其余的被忽略。

可以在“#”索引表达式之后指定字体,方法是添加一个空格,然后添加字体说明符。

如果“TrueType 字体”菜单项已设置(renderFont 资源),然后该控件设置/查询faceName 资源。

问题很可能出在最后一段,即您使用的是 TrueType 字体并且(不仅仅是任何文本) 将字体的外观名称设置为与字体不对应的值。 Fontconfig ......没有有用的错误检查可言......并且只会通过使用默认字体来“恢复”,而不会费心告诉应用程序出现了问题。如果您这样做了,您将无法通过菜单重置 TrueType 字体名称(字体菜单上的明显选项只会改变尺寸)。然而,控制序列仍然有效。

OSX Terminal 通过没有有用的文档来补充这种情况。但它的一些功能是从各个地方复制过来的(或者可能复制到其他地方)。配置文件更改功能于 2008 年出现在 KDE Konsole 中,作为错误报告更改的一部分#155801(好奇地引用了一个相当xterm 控制序列文档的旧副本有人制作成网页)。实际上50存在于 2007 年的代码中(硬编码)。但2008年的改变给了它一个名字,并评论说它与xterm的冲突OSC 50

相关内容