5

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

用户@主机$ ls /home
用户 用户 1 用户 2 用户 3

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

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

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

4

3 回答 3

5

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

XTerm 已经支持控制序列来更改字体,但同时适用于整个终端。打开xterm并在你的 shell 中输入——</p>

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

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

如果您想更改现有终端以支持更改内联字体,欢迎您选择几乎所有尚未分配的控制序列ctrlseqs.ms并使用它们。但是,为现有功能选择类似于控制序列的新控制序列是个好主意。

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

于 2012-11-16T18:40:41.833 回答
1

交换字体有一个标准顺序。

SGR 11

也被称为

CSI 11m
ESC [ 11m

相似地

SGR 10

将切换回默认字体。

然而,正如已经评论的那样,几乎没有终端实际上​​支持这一点。使用其他渲染属性可能会更好,例如粗体/下划线/斜体。虽然注意也没有多少终端支持斜体。

以供参考

SGR 1   = bold
SGR 4   = underline
SGR 3   = italics
于 2012-11-16T17:19:22.837 回答
1

如果您对不同的字体属性(而不是不同的字体)感到满意,如果您使用 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
于 2016-03-15T03:18:51.807 回答