ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

前回終了時のフレームサイズで起動する

毎回左上の隅っこにちんまり起動するのは気が利かないと思う。

終了時点でのフレームサイズを保存しておいて、起動時に参照すればよろしいのではなかろうか。 というわけで下の設定を書いてみた。

;;; last-frame
;; Emacs 終了時にフレームパラメータ top, left, width, height を保存し、
;; 起動時に保存したパラメータを適用する
(add-hook 'window-setup-hook 'load-last-frame)
(add-hook 'kill-emacs-hook 'save-last-frame)

(defvar last-frame-file "last-frame-alist.el")
(defvar last-frame-properties '(top left width height))

(defun save-last-frame ()
  (let ((file (locate-user-emacs-file last-frame-file))
        (buffer (get-buffer-create "*last frame*")))
    (unwind-protect
        (with-current-buffer buffer
          (erase-buffer)
          (setq-local buffer-file-coding-system 'utf-8)
          (let ((parameters (frame-parameters)))
            (pp (mapcar (lambda (p) (assoc p parameters))
                        last-frame-properties)
                buffer)
            (insert "\n")
            (write-file file nil)))
      (kill-buffer buffer))))

(defun load-last-frame ()
  (let ((file (locate-user-emacs-file last-frame-file))
        buffer)
    (when (file-readable-p file)
      (setq buffer (get-buffer-create "*last frame*"))
      (unwind-protect
          (with-current-buffer buffer
            (erase-buffer)
            (insert-file-contents file)
            (let ((parameters (read (current-buffer))))
              (modify-frame-parameters (selected-frame) parameters)
              (setq initial-frame-alist parameters)
              (setq default-frame-alist initial-frame-alist)))
        (kill-buffer buffer)))))