emacs master 行高问题

之前一直用 igc 分支,由于很久没更新了,就切到 master 来用用,发现英文行高有点问题,可以看到图中都拥挤在一起,有中文的时候是撑开了行高。在同样是master的Linux下不是这样的,PragmataPro和霞骛文楷的字高是一样的。不知道是否有人遇到这个问题,该如何解决。

用 line-space 来增加行距?

不是,我意思是个问题。

看这个 “i” ,问题出在英文字体上。emacs -q 单独测这个英文字体吧。

并不会,这个字体我用了一年多了。Linux上也是正常的。

试试我那版 rich-text,可以直接设置字体 rich-text-set-font-overlay ,多尝试几种字体。你这个字体我也没法下载测试啊,收费 :joy:

emacs -Q 也可以复现,我用igc没有问题的,我试试三周前的commits。

感觉应该是 emacs-plus 这个patch导致的,我看看如何排除掉。

大佬你找出方法后,可以请你分享一下吗? :joy:
我刚也发现同样的问题,但不知道要如何处理(暂时不想回退)
谢谢~

我上面贴了啊,就是截图patch的问题,参考 [Feature request]: please pick this font patch from railwaycat's emacs-mac · Issue #864 · d12frosted/homebrew-emacs-plus · GitHub ,你编译的时候手动从 formula 里面的 rb 文件去掉这个 patch 就行了。

1 个赞

请问你也是用的 emacs-plus 最新的带有这个patch的版本么?

我用 Emacs 31 的 emacs -Q 加上那个字体补丁没能复现:

scalar clone https://github.com/emacs-mirror/emacs.git
cd emacs/src
git sparse-check disable

patch -p1 -i ~/Downloads/mac-font-use-typo-metrics.patch
./autogen.sh
./configure --prefix=$HOME/tmp/aaa  # 这个 prefix 好像不起作用
gmake -j8
gmake install
nextstep/Emacs.app/Contents/MacOS/Emacs -Q

# C-h h 出来 HELLO 文件;
# M-x describe-char 查看用到的字体
# M-x emacs-version 查看版本

homebrew-emacs-plus/patches/emacs-31 at master · d12frosted/homebrew-emacs-plus · GitHub 这里三个补丁都打了也没能复现问题。

$ git log -1
commit 04112d04f2d5d89e144850bb51b7c221fe2bf51c (HEAD -> master, origin/master, origin/HEAD)
Author: Michael Albinus <[email protected]>
Date:   Sat Jan 3 15:46:22 2026 +0100

    Mitigate uutils coreutils problems in Tramp
    
    * lisp/net/tramp-sh.el (tramp-get-ls-command): Prefer gnuls over ls.
    (tramp-get-remote-readlink): Prefer gnureadlink over readlink.
    (Bug#79956, Bug#80075)

没能复现。。。难道你用 emacs -Q 后又手动指定了啥字体配置?如果是的话,那可能是你用的字体提供了 OS/2 table 但里面的数据不太合理(老代码不用 OS/2 table),你可以用 fontforge 之类的软件查看下我在 github issue 里提到的几个值是多少: [Feature request]: please pick this font patch from railwaycat's emacs-mac · Issue #864 · d12frosted/homebrew-emacs-plus · GitHub , 更多解释见 prefer sTypoAscender, sTypoDescender and sTypoLineGap from OS/2 table · railwaycat/homebrew-emacsmacport@b825bfd · GitHub

你可以用 face-font-rescale-alist 变量来缩放某个字体的行高。

对,我用 emacs-plus@31 --with-widget

我因为喜欢尝鲜,所以一定都是同步到最新版的

其实我没有出现你图中的状况

主要是 mode-line 似乎有点问题

因为之前没这问题,我只是看到大佬的文盲猜是这个 patch 的锅…

没看出你这 mode line 有啥问题。。。是说高度小了点?这可能是因为从字体的 HHead Ascent/Descent/LineGap 换到 Typo Ascent/Descent/LineGap 了,这也谈不上是问题吧。

我之前测试可能有其他干扰,我再次测试了下似乎只有 PragmataPro 有问题,同类型的 iosevka 也没问题,MonoLisa JetBrains 都没问题🤦‍♂️,我还没有根据你 issue 中的步骤查看字体参数,但这个字体之前是没有问题的,Emacs 不能因为解决其他问题忽略了兼容性。

这个也不太好说是兼容性问题,按最佳实践来说是偏向 typo metrics 的,和 hhead metrics 两者应是自洽的,但字体设计师未必会考虑这么多,算是字体设计、字体文件参数设置、文字渲染技术不协调的历史遗留问题,更主流的字体会少点这类问题。Emacs 提供了一些办法来微调字体参数:

  • face-font-rescale-alist (推荐用这个)
  • line-spacing

有 “ㄓ” 的那行变高了,我一切换成 rime ,modeline 就要变高一点,切换回来就缩回去…

(我刚刚艾特错人了)

这大概是因为按 typo metrics 算的 font height 比按 hhead metrics 算的 font height 变高了一点,Emacs 是按一行文本的最高 font height 来计算 line height,所以会有变化,解决办法是调整下字号让中英文字体匹配,或者更简单点用 face-font-rescale-alist 来缩小一点点中文字体的 metrics,比如我的配置:

(setq doom-font (font-spec :family "Menlo" :size 14))
(setq doom-symbol-font (font-spec :family "Alibaba PuHuiTi 3.0"))

(use-package! vterm
  :config
  (setq-hook! 'vterm-mode-hook
    ; decrease line height of CJK chars for ncurses application to avoid vertical overflow
    face-font-rescale-alist '(("-p-0-iso10646-1$" . 0.99)))
  (setq vterm-ignore-blink-cursor nil
        vterm-eval-cmds '(("find-file" find-file)
                          ("message" message)
                          ("vterm-clear-scrollback" vterm-clear-scrollback)
                          ("toggle-send-escape" evil-collection-vterm-toggle-send-escape))))

个人认为为了解决其他问题,使得很多Emacs用户需要在配置中添加这个配置来解决是不可取的,更不适合提交到上游,应该仅仅作为有需求的人自己patch。毕竟字体是更加基础的功能。