Emacs24无法正确呈现字体

joo*_*oro 3 emacs fonts archlinux

我想知道如何在GNU Emacs中获得与GVim中类似的字体渲染,如下面的屏幕截图所示.看来Emacs默认情况下渲染字体的方式较差.我已经尝试安装Infinality字体补丁但我得到了相同的结果.我在Arch Linux虚拟机上运行GNU Emacs 24.3.我没有桌面环境,我使用OpenBox作为我的窗口管理器.

我挖出的很多论坛帖子似乎暗示了Emacs过去使用需要修补的libxft库,但现在已经不行了.根据Emacs的说法,它已被编译,--with-xft因此不应成为问题.下面是来自两个应用程序和放大视图的屏幕截图,以突出显示渲染的差异.

emacs vs gvim渲染

lun*_*orn 8

根据我的经验,Emacs无法从字体配置或Gnome中可靠地读取字体设置,因此您可能需要更改Emacs的字体渲染设置.

值得注意的是,GVim中字体周围的彩色像素表示GVim使用子像素渲染,而Emacs中缺少这些像素表明它仅使用提示.没有子像素渲染通常会使字体看起来模糊.

找出GVims偏好

找出GVim使用的字体渲染设置.我认为它需要Gnome的标准版,所以安装Gnome Tweaktool来检查Gnome的字体设置.

告诉Emacs您的字体首选项

现在创建一个.Xresources文件,告诉Emacs这些设置.以下代表我的字体设置,根据您在Gnome Tweaktool中发现的内容进行调整:

Xft.antialias:  1
Xft.hinting:    1
Xft.hintstyle:  hintfull
Xft.lcdfilter:  lcddefault
Xft.rgba:       rgb
Run Code Online (Sandbox Code Playgroud)

据我所知,这个lcdfilter设置在Gnome Tweaktool中不可用,所以请保持开启状态lcddefault.创建文件后

  1. 退出Emacs C-x C-c
  2. 加载这些设置:

    $ xrdb -merge ~/.Xresources
    
    Run Code Online (Sandbox Code Playgroud)
  3. 验证是否已加载设置:

    $ xrdb -query | grep Xft
    Xft.antialias:  1
    Xft.hinting:    1
    Xft.hintstyle:  hintfull
    Xft.lcdfilter:  lcddefault
    Xft.rgba:       rgb
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重启Emacs

现在检查字体是否看起来一样.请注意,GVim可能会使用不同的字体渲染器(例如Cairo,Harfbuzz或其他任何东西),因此无论如何都会有一些细微差别.

检查设置是否是永久性的

  1. 退出桌面
  2. 再次登录
  3. 使用上面的xrdb -query命令验证是否存在字体设置