一直以来习惯在终端上使用Emacs,最近尝试了一下emacs-libvterm
,于是在GUI下使用了一下,设置字体的时候发现无法识别系统已经安装的字体。
系统环境为debian buster
,emacs 27.1
,从源码编译的版本,惯用的字体为 Fira Code。
使用系统命令 fc-list | rg fira
查看字体确实是安装了的。
在emacs中使用 font-family-list
函数列出字体,发现确实没有。
(mapc (lambda (font)
(message "font--> %s" font))
(font-family-list))
那么问题处在哪呢?
源码是无从看起的,我们下载 emacs 26.3
的源码编译安装,做一下对比,发现 26.3 的版本是没有问题的,那问题就比较明显了,应该是 27.1 改变了某些编译选项的默认值。(笔者编译的时候一般都是不带任何参数,直接编译)
经过查看一些文档,我们发现 emacs 中有一个值 system-configuration-features
,可以列出emacs编译支持的选项。
我们比较一下两个版本的差异:
# emacs 26.3
"XPM JPEG TIFF GIF PNG SOUND DBUS GSETTINGS GLIB NOTIFY LIBSELINUX GNUTLS FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS"
# emacs 27.1
"XPM JPEG TIFF GIF PNG SOUND GSETTINGS GLIB NOTIFY INOTIFY LIBSELINUX GNUTLS ZLIB OLDXMENU X11 XDBE XIM MODULES THREADS PDUMPER GMP"
观察一下,发现 FREETYPE,GTK3都是可疑的差异项,我们再比较一下执行 ./configure
命令时候的输出
...
checking for fontconfig >= 2.2.0... yes
checking for xft >= 0.13.0... yes
checking for X11/Xft/Xft.h... yes
checking for XftFontOpen in -lXft... yes
checking for freetype2... yes
checking for FT_Face_GetCharVariantIndex... yes
checking for libotf... no
checking for harfbuzz >= 0.9.42... yes
...
其实也看得不是很明白,连蒙带猜先测一下,既然少了gtk3,那我们加上gtk3的选项试试再说,编译的时候加上选项
./configure --with-x-toolkit=gtk3
make
sudo make install
发现问题解决了,再次查看此版本的system-configuration-features
变量
"XPM JPEG TIFF GIF PNG SOUND DBUS GSETTINGS GLIB NOTIFY INOTIFY LIBSELINUX GNUTLS FREETYPE HARFBUZZ XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS PDUMPER GMP"
看起来正常许多。 为什么会有这个差异呢,查看了一下两个版本的configure
文件,发现没有什么改动,使用27.1的版本重新编译,不带--with-x-toolkit=gtk3
选项,发现不复现问题了.....
印象中之前没有安装libgtk3-dev
的库,但是系统里面安装了一个emacs-gtk
,后来我把emacs-gtk卸载了,换成了libgtk3-dev
,那么问题应该是gtk库不匹配导致的。不继续调查了,只要大家正确安装了libgtk再编译应该是不会出现此问题的。