升级到 emacs pgtk 两周以后的使用心得小结

settings sharing in new emacs pgtk

zping

emacsorgcjkfonts

502 字

2025-04-29 21:55 +0000


这个之前一篇里提到过光标的配置。

(blink-cursor-mode -1)

除此以外,一些万年不变的配置,像下面的这几行:

(setq bookmark-watch-bookmark-file 'silent)
;; https://github.com/emacs-mirror/emacs/blob/8ac894e2246f25d2a2a97d866b10e6e0b0fede5a/lisp/bookmark.el#L1250
(setq initial-major-mode 'text-mode)
;; ;; just answer `y' or `n'
(defalias 'yes-or-no-p 'y-or-n-p)

当然,这次的重点是作为日常使用 emacs 敲中文,一个技术性问题就是中文字体设置。这里更进一步地,还有中英文混排时对齐的问题。特别是在 Markdown , org 或者代码文件中这些纯文本文件中的那些符号表格。对此我的解决方式是直接把主字体设为一款等宽简中字体。提一下,这里要注意字体的字号不要设置得过小。

(set-frame-font "Noto Sans Mono CJK SC-12")

不过,这个简中等宽字体是缺少,比如说西里尔字母(cyrillic)这种非拉丁字母的,自然这样配置就无法无法显示,因此需要反过来重新配置对其它字符集的支持('unicode) 。

(set-fontset-font "fontset-default" 'unicode "FreeMono" nil 'prepend)
(set-fontset-font "fontset-default" 'unicode "Font Awesome 6 Free" nil 'prepend)
(set-fontset-font "fontset-default" 'unicode "Font Awesome 6 Brands" nil 'prepend)
(set-fontset-font "fontset-default" 'unicode "Noto Sans Mono" nil 'prepend)

(set-fontset-font "fontset-default" 'emoji "Noto Color Emoji" nil 'prepend)
(set-fontset-font "fontset-default" 'symbol "Symbols Nerd Font Mono" nil 'prepend)

当然,从绘制符号表格的角度,这样做,如果表格中有希腊、西里尔等字母,那表格仍不会对齐。如果要满足这个需求,简单地设置字体就不够了。需要 cnfonts 这种工具来调整不同字体间的字体实现对齐,同时要考虑为不同的场景(emacs mode)选用不同的字体集(fontset)。如此会让配置会变得有那么一点点复杂,这里就不再进一步耗费过多精力去讨论了。