An easy way to save and restore a bunch of frames for your emacs sessions. I have a dual monitor setup and do four frames across the two of them.
Feel free to add more properties to be preserved.
(require 'cl)
(defun save-frame-configuration ()
(let
((fs)(f))
(setq fs (loop for c in (cdr (current-frame-configuration))
collect (progn
(setq f (cadr c))
(reduce (lambda (acc a) (if (find (symbol-name (car a)) '("top" "left" "width" "height") :test 'equal) (cons a acc) acc)) f :initial-value 'nil)
)))
;; fs contains a list of attribs for each frame
(save-window-excursion
(find-file "~/.e_last_frame_config.el")
(erase-buffer)
(print (cons 'version 1) (current-buffer))
(print fs (current-buffer))
(save-buffer)
)
))
(defun load-frame-configuration ()
"load the last saved frame configuration, if it exists"
(let
((v) (fs))
(if (file-exists-p "~/.e_last_frame_config.el")
(save-window-excursion
(find-file "~/.e_last_frame_config.el")
(beginning-of-buffer)
(setq v (read (current-buffer)))
(if (not (and (equal 'version (car v)) (= 1 (cdr v))))
(error "version %i not understood" (cdr v)))
(setq fs (read (current-buffer)))
(loop for f in fs do
(make-frame f)))
(message "~/.e_last_frame_config.el not found. not loaded"))))