我想开发的东西 :可以同时使用至less两种字体的terminal。 一种字体,我将用于shellinput行,另一种字体的命令输出。 例如:
用户@主机$ ls / home 用户user1 user2 user3
为什么 :更易读的terminal/shell
如何 :在这里我有问题。 可能shell需要生成一些新的转义序列。 terminal需要加载不同的字体并处理这些序列。 从哪儿开始? 如何定义新的转义序列,标准在哪里?
未来 :也许有人想join我的这个项目?
控制序列的标准与XTerm源代码中的Xterm控制序列文档ctlseqs.ms非常相似。 (你可以用命令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更容易使用。
有一个交换字体的标准序列。
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