Zsh 图标在 urxvt 中损坏

Zsh 图标在 urxvt 中损坏

所以我目前正在使用 manjaro linux 并且我使用 urxvt 作为我的终端,我喜欢它,所以在这一切开始之前,切换终端不是一个选项,如果我很粗鲁,抱歉。

我安装了 zsh 作为我的默认 shell,并通过 oh-my-zsh 添加了主题 robbyrussell。起初一切都很好,一切正常,但更新后我的图标坏了。特别是(如果您熟悉主题)箭头图标损坏了,并且与所有其他主题中的所有图标相同。

此问题仅在 urxvt 中出现,因为当我尝试使用其他终端(例如 sterminal)时,主题可以正常工作。

您可以在此处看到一些屏幕截图这就是它应该的样子(从 sterminal 获取的屏幕截图)

这就是它的样子(截图来自rxvt)

我一直在 reddit、github 存储库(例如 oh-my-zsh 和 robbyrussell 官方存储库)中寻求帮助,但似乎没有人帮助我,所以我真的希望你们能给我帮助。

以下是有关我的操作系统和终端的一些信息:

URXVT Version 9.22
Operating System : Manjaro i3 4.12.24-1
No Desktop Envoirment
i3wm as window manager

我对 zshrc 文件使用默认的 oh-my-zsh 配置,并使用 manjaro i3 中的默认 Xreources,您可以在其中找到这里。如果您需要更多信息,请告诉我。任何帮助将不胜感激!

答案1

首先,终端类型 rxvt 和 unicode-rxvt(通常缩写为 urxvt)之间存在显着差异。您已表明您使用的终端是“URXVT Version 9.22”,因此为了避免混淆,请使用正确的名称,不是rxvt而是urxvt。

正如 Mikel 所指出的,Xresources 文件告诉 urxvt 使用 9x15 字体,它是 (a) 旧式 X11 服务器提供的字体方法和 (b) 功能有限的位图字体。

oh-my-zsh Github README 文件解释

许多主题需要安装 Powerline 字体才能正确渲染

因此,为了显示正确的箭头形状,您需要让终端使用适当的字体。也许您破坏该功能的更新是通过 urxvt 重置字体使用的更新?

当您声明 sterminal 正确显示提示时,请检查正在使用哪种字体,然后在验证它与手动测试 urxvt -font "font_name" 配合使用后,更改 ${HOME} 目录中的 .Xresources 以使用该字体。 (对于 Xft 提供的字体的较新方法,font_name 前面是“xft:”,后面是“:size=12”表示字体大小)。

检查我的 urxvt 后,似乎有相当多众所周知的 truetype 和 opentype 等宽字体不提供“右箭头”字形,而只是显示一个空框。然而,Deja Vu Sans Mono 是一种现成可用的标准字体(并且应该安装在您的系统上)。

所以尝试启动 urxvt

urxvt -font "xft:Deja Vu Sans Mono:size=12" &

并查看您的提示是否正确显示。

看一眼https://bbs.archlinux.org/viewtopic.php?id=173477有关修改 Xresources/Xdefaults 文件中 urxvt 字体资源规范的讨论。

PS 不要忘记,如果您首先启动 urxvtd 守护程序,然后使用 urxvtc 启动终端,则可以更有效地使用多个 urxvt 终端。

附录

感谢您确认您正在使用 urxvt 并且安装了 DejaVu Sans Mono。

确认在终端提示符下输入的命令没有发生字体替换

   fc-match  "DejaVu Sans Mono"

产生输出

   DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

可以使用以下命令验证实际字体文件位置和字体可用的样式

    fc-list | grep --color 'DejaVu Sans Mono'

现在假设一切正常,您需要通过从终端的命令行启动 urxvt 进行检查(抱歉,上面没有完全清楚地说明这一点,我在 Deja 和 Vu 之间有空格,这可能会导致问题)

    urxvt -font "xft:DejaVu Sans Mono:size=12" &   

您可以将右箭头字符(从这里)“➜”剪切并粘贴到该 urxvt 中,并且它显示正确,我已经检查过它确实有效。

我还可以确认将以下内容放入 Xresources 文件中

 URxvt.font:                     xft:DejaVu Sans Mono:autohint=true:size=12
 URxvt.boldFont:                 xft:DejaVu Sans Mono:autohint=true:bold:size=12
 URxvt.italicFont:               xft:DejaVu Sans Mono:autohint=true:italic:size=12
 URxvt.boldItalicFont:           xft:DejaVu Sans Mono:autohint=true:bold:italic:size=12

并使用 xrdb -merge Xresource_file_name 加载到 Xorg 服务器资源数据库中,以 100% 确定将使用这些值,然后在命令行中仅使用 urxvt 启动终端会导致终端中的字体正确显示右箭头字符。 (您还应该注意到这种字体的特征,l 字符是卷曲的,并且 0 字符的中心有一个点)。

我通常在 urxvt“Luxi Mono”中使用的字体(更易于阅读,恕我直言)无法正确显示右箭头,即使“字体管理器”程序显示“Luxi Mono”确实有字形。同样,xterm 也被破坏,但在 lxterminal、mate-terminal 和 xfce4-terminal 中进行的测试(在首选项中检查字体设置为 Luxi Mono)都正确显示右箭头。因此,urxvt 和 xterm 中的某些字体似乎确实出现了问题(如果我理解正确的话,它们会共享一些代码起源),就像其他类似工作的字体共享一些通用代码(即 libvte)一样。

答案2

我也在使用 Manjaro Linux (18.0.4 Illyria) 的 i3wm 社区版和 URXVT 版本 9.22。我在安装 Oh My Zsh 时遇到了完全相同的问题。

遵循 JG Miller 全面且有用的建议,我按照建议编辑了 ~/.Xresources 文件,并且它起作用了。极好的!

直到我打开 Manjaro 预装的文件管理器 - ranger(基于 vi 键绑定的终端)。对 ~/.Xresources 的更改现在导致此应用程序中的图标格式错误。

寻找一个类似的堆栈溢出问题我(恢复上述更改后)修改了我的 ~/.Xresources 文件:

URxvt.font:      9x15,xft:TerminessTTFNerdFontMono

到:

URxvt.font:      9x15,xft:TerminessTTFNerdFontMono,xft:DejaVu Sans Mono:autohint=true:size=12

我的理解是,上面的意思是 Manjaro i3 默认字体用于 Ranger,但是当遇到无法识别的字形(例如 Oh My Zsh 中的字形)时,会使用 DejaVu Sans Mono。两个应用程序现在都可以正确显示。

感谢 JG Miller 给了我们正确的方向。

相关内容