Zsh 图标在 urxvt 中损坏

Kno*_*Don 6 zsh rxvt oh-my-zsh manjaro

所以我目前正在使用 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
Run Code Online (Sandbox Code Playgroud)

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

J G*_*ler 12

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

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

oh-my-zsh Github README 文件解释了

许多主题需要安装电力线字体才能正确呈现

因此,为了显示正确的箭头形状,您需要让终端使用适当的字体。也许您破坏该功能的更新是通过 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" &
Run Code Online (Sandbox Code Playgroud)

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

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

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

附录

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

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

   fc-match  "DejaVu Sans Mono"
Run Code Online (Sandbox Code Playgroud)

产生输出

   DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"
Run Code Online (Sandbox Code Playgroud)

可以验证字体的实际字体文件位置和样式

    fc-list | grep --color 'DejaVu Sans Mono'
Run Code Online (Sandbox Code Playgroud)

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

    urxvt -font "xft:DejaVu Sans Mono:size=12" &   
Run Code Online (Sandbox Code Playgroud)

你可以剪切'n'粘贴右箭头字符(从这里)“?” 进入那个 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
Run Code Online (Sandbox Code Playgroud)

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

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