;; Save-visited-files.el - save opened files across sessions ;; Copyright (C) 2009 Nathaniel Flath ;; Version: 1.1 ;; ;; Commentary Save-visited-files is a lightweight version of ;; Desktop.el that only save the files you have open(currently). This ;; was created because I couldn't ever get Desktop to work and wanted ;; to persist open files across sessions. This file is the result. ;; ;; To install, put this file somewhere in your load-path and add the ;; following to your .emacs file: ;; ;; (require 'save-visited-files) ;; (turn-on-save-visited-files-mode) ;; ;; This will load the set of saved files on startup, as well as ;; updating this list whenever the auto-save-timer is run. This does ;; not wait to save on closing emacs because I wanted it to be useful ;; even if emacs crashed. To save the visited files at any time, you ;; can call M-x save-visited-files-save. M-x ;; save-visited-files-restore will open all files saved this way. To ;; turn off the saving of files, you need to run (turn-off-save-visited-files-mode) ;; ;; ;; Changelog: ;; 1.1 ;; * Improvements/rewriting by Ryan Thomson ;; ** Use auto-save-hook instead of a periodic timer ;; ** More consistent naming conventions ;; ** Customization ability via M-x customize-group save-visited-files ;; ** Better handling of the temp buffer ;; 1.0 ;; * Initial Release ;; ;; Code: (defcustom save-visited-files-location "~/.emacs.d/persistence/emacs-visited-files" "Location of the file that contains the list of previously visited files" :type 'file :group 'save-visited-files) (defcustom save-visited-files-auto-restore nil "If t, restore visited files the first time save-visited-files-mode is activated" :type 'boolean :group 'save-visited-files) (defvar save-visited-files-already-restored nil "If t, then files have already been restored") (defun save-visited-files-save (&optional location) "Save the list of currently visited files" (interactive) (save-window-excursion (setq location (or location save-visited-files-location)) (switch-to-buffer "*Save Visited*") (ignore-errors (erase-buffer) (mapcar '(lambda (x) (insert x "\n")) (remove-if '(lambda (x) (or (string-equal location x) (eq nil x))) (mapcar 'buffer-file-name (buffer-list)))) (write-file location nil)) (kill-buffer (get-buffer "*Save Visited*")))) (defun save-visited-files-restore (&optional location) "Restore all files that were saved by save-visited-files-save." (interactive) (save-window-excursion (setq location (or location save-visited-files-location)) (find-file location) (ignore-errors (save-window-excursion (beginning-of-buffer) (while (not (eq (point) (point-max))) (let ((point (point))) (end-of-line) (ignore-errors (save-window-excursion (find-file (buffer-substring point (point))))) (next-line) (beginning-of-line))))) (kill-buffer (current-buffer)))) (defun turn-on-save-visited-files-mode () "Turns save-visited-files-mode on" (interactive) (add-hook 'auto-save-hook 'save-visited-files-save) (add-hook 'kill-emacs-hook 'save-visited-files-save) (setq save-visited-files-mode t) (unless save-visited-files-already-restored (when save-visited-files-auto-restore (save-visited-files-restore))) (setq save-visited-files-already-restored t)) (defun turn-off-save-visited-files-mode () "Turns save-visited-files-mode off" (interactive) (remove-hook 'auto-save-hook 'save-visited-files-save) (remove-hook 'kill-emacs-hook 'save-visited-files-save) (setq save-visited-files-mode nil)) (defun save-visited-files-mode (&optional arg) "If arg is nonnn-nil, enable save-visited-files-mode if positive, disable otherwise. With no arg, toggle save-visited-files-mode." (interactive) (setq arg (or arg (if save-visited-files-mode 0 1))) (if (> arg 0) (progn (turn-on-save-visited-files-mode) (message "Save visited files mode enabled")) (turn-off-save-visited-files-mode) (message "Save visited files mode disabled"))) (defcustom save-visited-files-mode nil "If t, enable save-visited-files-mode" :type 'boolean :group 'save-visited-files :set #'(lambda (sym val) (save-visited-files-mode (if val 1 0)))) (when save-visited-files-mode (turn-on-save-visited-files-mode)) (provide 'save-visited-files)