Emacs特定主模式下恢复缓冲区时字体大小异常的解决请求
解决方案
方法1:修改主模式钩子避免重复放大
将原M1模式的字体放大钩子替换为带判断的版本,仅在缓冲区未设置过字体缩放时执行初始放大:
(add-hook 'M1-mode-hook (lambda () ;; 仅当text-scale-mode-amount为默认值0时,才应用初始放大 (when (= 0 (or text-scale-mode-amount 0)) (text-scale-increase 2))))
revert缓冲区后,text-scale-mode-amount作为buffer-local变量会被保留,因此钩子不会再次触发放大,配合原有保存/恢复逻辑即可维持字体大小。
方法2:优化保存恢复逻辑抵消额外放大
若不愿修改主模式钩子,可调整恢复函数,先抵消revert时主模式钩子新增的放大,再恢复原缩放值:
首先定义buffer-local变量存储缩放值(避免多buffer冲突):
(defvar-local prev-scale-size 0) (defun save-text-scale () (setq prev-scale-size (or text-scale-mode-amount 0))) (defun restore-text-scale () ;; 抵消主模式钩子新增的2倍放大 (text-scale-increase (- 2)) ;; 恢复到之前的缩放值 (text-scale-set prev-scale-size)) (add-hook 'before-revert-hook 'save-text-scale) (add-hook 'after-revert-hook 'restore-text-scale)
推荐方案
优先选用方法1,逻辑更简洁,从根源上避免重复放大问题,无需额外抵消操作。
内容的提问来源于stack exchange,提问作者user23517194
相关产品推荐
相关产品推荐

