我的Emacs配置中有一段脚本,在关闭前保存当前的窗口位置和大小。下一次启动后恢复到原来的位置,省得用鼠标拖动调整。
(setq *geometry* (expand-file-name "last-geometry" user-emacs-directory))
(defun --normalized-frame-parameter (parameter)
(let ((value (frame-parameter (selected-frame) parameter)))
(if (number-or-marker-p value) (max value 0) 0)))
(defun save-framegeometry ()
(let* ((props '(left top width height))
(values (mapcar '--normalized-frame-parameter props)))
(with-temp-buffer
(cl-loop for prop in props
for val in values
do (insert (format "(add-to-list 'initial-frame-alist '(%s . %d))\n"
prop val)))
(write-file *geometry*))))
(defun load-framegeometry ()
(when (file-exists-p *geometry*)
(load-file *geometry*)))
(when window-system
(add-hook 'emacs-startup-hook 'load-framegeometry)
(add-hook 'kill-emacs-hook 'save-framegeometry))
然而上面的配置偶尔会工作不正常,启动后窗口的尺寸比上次关闭的时候要大一些。百思不得其解,似乎在我的脚本运行以后,Emacs又自己调整了大小。经过询问AI,AI建议我创建一个 ~/.emacs.d/conf/early-init.el ,把该禁用的UI控件禁用掉,以免启动后再隐藏UI造成干扰,同时再禁止Emacs 根据字体自动调整窗口尺寸:
;; 禁止根据字体/UI变化自动调整大小
(setq frame-inhibit-implied-resize t)
;; 允许像素级对齐(非必须,但推荐)
;; (setq frame-resize-pixelwise t)
;; 尽早关闭 UI 元素,防止启动时闪烁和尺寸跳变
(menu-bar-mode -1)
(tool-bar-mode -1)
问题就这么解决了。不问AI,我可能一辈子都弄不明白。
评论