字体的终端转义序列



我想要开发的东西:可以同时使用至少两种字体的终端。一种字体我将用于shell输入行,另一种字体用于命令输出。例如:

user@host$ls/home用户user1用户2用户3

为什么:更可读的终端/外壳

如何:我有问题。shell可能需要生成一些新的转义序列。终端需要加载不同的字体并处理这些序列。从哪里开始?如何定义新的转义序列,标准在哪里?

未来:也许有人想和我一起参与这个项目?

控制序列的标准几乎是Xterm源代码中的Xterm控制序列文档ctlseqs.ms。(您可以使用命令groff -ms -Tps ctlseqs.ms | ps2pdf - ctlseqs.pdf将其转换为PDF,尽管-ms选项在Ubuntu 12.04上似乎被破坏了)

XTerm已经支持控制序列来更改字体,但同时支持整个终端。打开xterm并在外壳中键入

echo -e "33[?35h33]50;#+1^G33\" # aka CSI ? 35 h OSC 50 ; #+1 BEL ST

整个终端的字体应该改变。这个控制序列实际上也支持True Type字体的名称;参见第21页。

如果您想更改现有的终端以支持内联更改字体,您需要欢迎选择ctrlseqs.ms中几乎没有分配的任何控制序列并使用它们。然而,对于已经存在的功能,选择类似于控制序列的新控制序列是一个好主意。

您的下一步是获取现有终端的源代码并开始挖掘。你现在用什么终端?Konsole或gnome终端的源代码可能会比XTerm更容易使用。

有一个交换字体的标准序列。

SGR 11

也称为

CSI 11m
ESC [ 11m

类似的

SGR 10

将切换回默认字体。

然而,正如所评论的,几乎没有一个终端真正支持这一点。最好使用其他渲染属性,例如粗体/下划线/斜体。不过也要注意,没有多少终端支持斜体字。

供参考

SGR 1   = bold
SGR 4   = underline
SGR 3   = italics

如果你对不同的字体属性(而不是不同的字体)感到满意,如果你使用zsh,你甚至可以在不编写自己的终端模拟器的情况下实现类似的东西。您可以将shell设置为发出正确的转义序列,以便在提示前后和命令执行前设置正确的终端属性(斜体、粗体、颜色…)。

假设您使用Xterm,并希望提示为粗体,键入的命令行为斜体,命令输出为正常。

然后设置看起来像这样:

# bold is e[1m and italics is e[3m , e[0m resets the attributes
PS1=$'e[1m'$PS1$'e[0;3m' # I assume you have set PS1 already
function reset-terminal-attributes { printf 'e[0m'; }
autoload add-zsh-hook
add-zsh-hook preexec reset-terminal-attributes

相关内容

  • 没有找到相关文章

最新更新