我想要开发的内容: 终端可以同时使用至少2种字体。我将使用一种字体用于shell输入行,另一种字体用于命令输出。例如:
user@host$ ls /home user user1 user2 user3
为什么: 更可读的终端/ shell
如何:我有问题。可能shell需要生成一些新的转义序列。终端需要加载不同的字体并处理这些序列。从哪儿开始?如何定义新的转义序列,标准在哪里?
未来:也许有人想和我一起参与这个项目?
答案 0 :(得分:5)
控制序列的标准几乎是ctlseqs.ms中的Xterm控制序列文档XTerm source code。 (您可以使用命令groff -ms -Tps ctlseqs.ms | ps2pdf - ctlseqs.pdf
将其转换为PDF,但在Ubuntu 12.04上似乎打破了-ms
选项。)
XTerm已经支持控制序列来改变字体,但是对于整个终端都是如此。打开xterm
并输入您的shell -
echo -e "\033[?35h\033]50;#+1^G\033\\" # aka CSI ? 35 h OSC 50 ; #+1 BEL ST
整个终端的字体应该改变。此控制序列实际上也支持True-Type字体的名称;见第21页。
如果您想更改现有终端以支持更改内联字体,那么您就是
欢迎选择几乎没有在ctrlseqs.ms
中分配的控制序列并使用它们。但是,最好选择与已存在的功能类似的控制序列的新控制序列。
下一步是获取现有终端的源代码并开始挖掘。你现在用什么终端? Konsole或gnome-terminal的源代码可能比XTerm更容易使用。
答案 1 :(得分:1)
交换字体有一个标准序列。
SGR 11
也称为
CSI 11m
ESC [ 11m
类似地
SGR 10
将切换回默认字体。
然而,正如已经评论的那样,几乎没有终端实际支持这一点。使用其他渲染属性可能会更好,例如粗体/下划线/斜体。虽然注意也没有多少终端支持斜体。
供参考
SGR 1 = bold
SGR 4 = underline
SGR 3 = italics
答案 2 :(得分: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