;;; quick and dirty hack to save the last major mode ;;; eval this buffer and these lines to turn this on: ;;; (add-hook 'kill-buffer-hook 'save-mode-save-mode) ;;; (add-hook 'find-file-hooks 'save-mode-set-mode) (defvar save-mode-file "~/.emacs.last-major-modes") (defun save-mode--buffer () (save-match-data (if (buffer-live-p save-mode-file) save-mode-file (save-excursion (find-file-noselect save-mode-file))))) (defun save-mode--search (&optional buffer) (let ((file-name (buffer-file-name (or buffer (current-buffer))))) (if file-name (with-current-buffer (save-mode--buffer) (goto-char (point-min)) (re-search-forward (format "^%s \\(.*\\)$" file-name) nil t)) nil))) (defun save-mode-save-mode () (interactive) (let ((mode (symbol-name major-mode))) (if (save-mode--search (current-buffer)) (with-current-buffer (save-mode--buffer) (replace-match mode nil nil nil 1)) (let ((file-name buffer-file-name)) (if file-name (with-current-buffer (save-mode--buffer) (goto-char (point-max)) (insert (format "%s %s\n" file-name mode)))))))) (defun save-mode-set-mode () (interactive) (if (save-mode--search (current-buffer)) (let (mode-fn) (with-current-buffer (save-mode--buffer) (setq mode-fn (intern (match-string-no-properties 1)))) (funcall mode-fn) (message "save-mode: restored %S" mode-fn))))