我正在寻找一种在 OSX 上使用 iTerm2 和 Chrome 渲染电力线字符的有效解决方案。有很多文档,我尝试使用几种方法,到目前为止似乎都没有正常工作(尽管使用字体簿预先修补了字体部分作品)。 详细信息如下。
- 有没有一种可行的方法可以让电力线字形在 OSX 10.9.3 上的 iTerm2 中正确呈现?
- 电力线字形是否应在网页中正确呈现?知道为什么它们不正常吗?我该如何修复它?
这些字符的渲染是如何进行的(在系统/应用程序级别)?不同应用程序之间是否有所不同?在 Chrome 中,如果当前字体不包含字形的绑定,Chrome 是否会尝试在系统中现有的另一种字体中查找绑定并使用它们?有没有办法在系统级别为这些 unicode 字符提供绑定,以便无论使用哪种字体,它们都将使用该字体进行渲染?
Unicode 私有区域字符
如果我理解电力线兼容修补字体的工作方式,它们将可扩展图形绑定到 unicode 私有使用区域中的特定值:
U+E0A0 Version control branch
U+E0A1 LN (line) symbol
U+E0A2 Closed padlock
U+E0B0 Rightwards black arrowhead
U+E0B1 Rightwards arrowhead
U+E0B2 Leftwards black arrowhead
U+E0B3 Leftwards arrowhead
为了在终端中测试字形,我读到这应该可行:
echo -e "\ue0a0\ue0a1\ue0a2\ue0b0\ue0b1\ue0b2\ue0b3"
但是,即使安装了 powerline-patched 字体并且 iTerm2 配置为使用其中一种字体,它对我来说也不起作用(OSX 10.9.3、iTerm2、zsh)。
我尝试了几种安装修补字体的方法:
FontBook 和预修补字体
我从Localtog/powerline 字体并使用 FontBook 安装它们。在相同的页面上,一些字形会呈现,但其他则不会。在其他页面上,没有任何字形会呈现:
(来源:staticflickr.com)
(来源:staticflickr.com)
在 iTerm2 中(我测试过的所有电力线字体都会发生这种情况),有些字符可以呈现,但其他字符则不会:
(来源:staticflickr.com)
在安装了 vim-airline 的 macvim(终端)中,一些字符可以呈现,但有些字符呈现不正确:
(来源:staticflickr.com)
字体配置
我卸载了所有 powerline 修补的字体,用 homebrew 安装了 fontconfig,安装了 powerline 字体,并重建了字体缓存:
wget -P ~/.fonts/ https://github.com/Lokaltog/powerline/raw/develop/font/PowerlineSymbols.otf
wget -P ~/.config/fontconfig/conf.d/ https://github.com/Lokaltog/powerline/raw/develop/font/10-powerline-symbols.conf
fc-cache -vf ~/.fonts
字体已被检测到并且 fontconfig 显示它已安装,但是它没有出现在 FontBook 中并且我无法在 iTerm2 中选择它。
运行此程序后,我删除了字体,重新运行了 fc-cache,并卸载了 fontconfig。
我目前正在使用安装在 fontbook 中的预修补字体,它部分可以工作,但我希望有人可以帮助我更好地理解这个问题,这样我就可以找到一个可行的解决方案。
更新
这种方法似乎一切在 iTerm2 中工作,尽管我仍然不确定 chrome/系统渲染问题。
FontForge
使用 python 绑定安装 fontforge:
brew install fontforge --with-python
安装 powerline-fontpatcher:
mkdir -p ~/.local/src
git clone https://github.com/Lokaltog/powerline-fontpatcher.git ~/.local/src/powerline-fontpatcher
cd ~/.local/src/powerline-fontpatcher && python setup.py install && cd
export powerline_symbols=~/.local/src/powerline-fontpatcher/fonts/powerline-symbols.sfd
下载、修补并安装字体:
wget http://sourceforge.net/projects/sourcecodepro.adobe/files/SourceCodePro_FontsOnly-1.017.zip
unzip SourceCodePro_FontsOnly-1.017.zip
find SourceCodePro_FontsOnly-1.017/TTF -name \*.ttf -exec powerline-fontpatcher --source-font=$powerline_symbols --no-rename {} \;
mv *.ttf /Library/Fonts
答案1
只需安装输入单声道字体,完全支持电力线。
为了使以下操作有效,输入 Mono 字体必须是 1.1 版。您可以前往Font Book → View → Show Font Info
并查看版本号来检查字体版本。
Terminal.app 开箱即用。只需选择字体即可。
使用 iTerm2,您必须修改几件事:
- 转到首选项 → 配置文件 → 文本并取消选中“对非 ASCII 文本使用不同的字体”。
- 在上面,单击
Change Font
并选择输入单声道。此外,您还必须更改Character Spacing → Vertical
为 110%。似乎 Terminal 和 iTerm2 以不同的方式呈现字符间距。
答案2
您可能尚未更新bash
。OS X 附带有bash < 4
,因此您无法printf
或echo -e
unicode代码。
bash
更新步骤homebrew
:
brew install bash
bash
找到homebrew 安装的的前缀,我的是/usr/local/Cellar/bash/4.3.30/
,所以我的 bash 二进制文件是/usr/local/Cellar/bash/4.3.30/bin/bash
。sudo (vim|nano|emacs|etc) /etc/shells
- 获取所述 bash 路径,并将其添加到列表末尾(或者替换
/usr/bin
,如果您真的很勇敢。) chsh
- 更改该
Shell:
行以匹配您的bash
路径。 - 重新开始你的任期。
你就应该被修复了。