Skip to content

Instantly share code, notes, and snippets.

@ttakezawa
Last active January 28, 2017 17:53
Show Gist options
  • Save ttakezawa/218fd80d9390845bf9dcad727237d4af to your computer and use it in GitHub Desktop.
Save ttakezawa/218fd80d9390845bf9dcad727237d4af to your computer and use it in GitHub Desktop.
;; https://wwwtech.de/articles/2011/jul/emacs-restore-last-frame-size-on-startup
;;
;; Installation:
;;
;; Add the following to your emacs init file:
;;
;; (el-get-bundle gist:218fd80d9390845bf9dcad727237d4af:save-framegeometry
;; :features save-framegeometry)
(defun save-framegeometry ()
"Gets the current frame's geometry and saves to ~/.emacs.d/framegeometry."
(let (
(framegeometry-left (frame-parameter (selected-frame) 'left))
(framegeometry-top (frame-parameter (selected-frame) 'top))
(framegeometry-width (frame-parameter (selected-frame) 'width))
(framegeometry-height (frame-parameter (selected-frame) 'height))
(framegeometry-file (expand-file-name "~/.emacs.d/framegeometry"))
)
(when (not (number-or-marker-p framegeometry-left))
(setq framegeometry-left 0))
(when (not (number-or-marker-p framegeometry-top))
(setq framegeometry-top 0))
(when (not (number-or-marker-p framegeometry-width))
(setq framegeometry-width 0))
(when (not (number-or-marker-p framegeometry-height))
(setq framegeometry-height 0))
(with-temp-buffer
(insert
";;; This is the previous emacs frame's geometry.\n"
";;; Last generated " (current-time-string) ".\n"
"(setq initial-frame-alist\n"
" '(\n"
(format " (top . %d)\n" (max framegeometry-top 0))
(format " (left . %d)\n" (max framegeometry-left 0))
(format " (width . %d)\n" (max framegeometry-width 0))
(format " (height . %d)))\n" (max framegeometry-height 0)))
(when (file-writable-p framegeometry-file)
(write-file framegeometry-file))))
)
(defun load-framegeometry ()
"Loads ~/.emacs.d/framegeometry which should load the previous frame's geometry."
(let ((framegeometry-file (expand-file-name "~/.emacs.d/framegeometry")))
(when (file-readable-p framegeometry-file)
(load-file framegeometry-file)))
)
;; Special work to do ONLY when there is a window system being used
(if window-system
(progn
(add-hook 'after-init-hook 'load-framegeometry)
(add-hook 'kill-emacs-hook 'save-framegeometry))
)
(provide 'save-framegeometry)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment