防止 urxvt letterSpace 破坏某些 Unicode 字符

防止 urxvt letterSpace 破坏某些 Unicode 字符

过去几年,我在各种不同的机器上使用过 urxvt。上周,我买了一台新电脑,并开始疯狂地进行系统配置。

然而,在进行这些配置更改期间,我注意到一个以前从未出现过的问题,不知何故,我的URxvt*letterSpace设置似乎切断了某些 Unicode 字符的渲染。

问题的视觉示例

如上图所示,如果我将 letterSpace 设置得太低,命令提示符末尾的“x”就会被截断。显示的提示符分别将 letterSpace 设置为 -2 和 0。据我所知,这是因为某些字形太宽而无法显示(我对这里的细节不太清楚)。但是,我觉得事实并非如此 - 例如,我测量了字形占用的实际图片量,它似乎不大于“m”。此外,当我使用 iterm2(我也有一台 Mac)使用相同字体 ssh 进入我的机器时,字形渲染得很好。

我想知道是否有办法在不更改字体或 letterSpace 设置的情况下修复此问题*。我知道我可以通过不同的字体来修复此问题,但我对 urxvt 当前的外观非常满意。是否可能是我遗漏了某些设置导致这种情况发生?我将在下面发布我的 .Xresources 的相关部分以及有关我的系统的信息。谢谢!

*(相反,只要最终结果看起来像我现在所拥有的,我就可以改变字体/字母空间)


.X资源

URxvt.scrollBar: false
URxvt.secondaryScreen: true
URxvt*iso14755: False

URxvt*font: xft:Source Code Pro for Powerline-11
URxvt*boldFont: xft:Source Code Pro for Powerline-11:style=Bold
URxvt*italicFont: xft:Source Code Pro for Powerline-11:syle=Italic
URxvt*bolditalicFont: xft:Source Code Pro for Powerline-11:style=Bold Italic
URxvt.cursorBlink: true
URxvt*letterSpace: -2

Xft.hinting: true
Xft.hintstyle: hintslight
Xft.antialias: rgba
Xft.rgba: rgb

URxvt.depth: 32
! Need to hardcode to enable transparency
URxvt.background: [90]#002b36
! Enables correct coloring of bolded characters
URxvt.intensityStyles: false
URxvt*skipBuiltinGlyphs: true

系统信息

使用 XFCE 和 XMonad 运行 Ubuntu 16.04.2

rxvt-unicode (urxvt) v9.21 - released: 2014-12-31
options: perl,xft,styles,combining,blink,iso14755,unicode3,encodings=eu+vn+jp+jp-ext+kr+zh+zh-ext,fade,transparent,tint,pixbuf,XIM,frills,selectionscrolling,wheel,slipwheel,smart-resize,cursorBlink,pointerBlank,scrollbars=plain+rxvt+NeXT+xterm

答案1

经过进一步研究,我相信解决这个问题的唯一方法是修补 urxvt。对于使用 Arch 的用户,似乎有一些修补版本可以通过系统包管理器轻松安装(例如这个)。对于我们其他人来说,手动构建 urxvt 的修补版本绝对是可能的,但我实际上并没有这样做,因此无法提供任何指导。

为了解决我的问题,我最终只是将提示符和 vim 状态行中有问题的字形替换为能够以我想要的 letterSpacing 正确呈现的字形。这不是最好的解决方案,但我更喜欢它,而不是编译我自己的 urxvt 修补版本。

相关内容