;;; desktop.el --- save partial status of Emacs when killed
-;; Copyright (C) 1993, 1994, 1995, 1997, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001
+;; Free Software Foundation, Inc.
;; Author: Morten Welinder <terra@diku.dk>
;; Keywords: convenience
(interactive "DDirectory to save desktop file in: ")
(run-hooks 'desktop-save-hook)
(save-excursion
- (let ((filename (expand-file-name
- (concat dirname desktop-basefilename)))
+ (let ((filename (expand-file-name desktop-basefilename dirname))
(info (nreverse
(mapcar
(function
(set-buffer buf)
(erase-buffer)
- (insert desktop-header
+ (insert ";; -*- coding: emacs-mule; -*-\n"
+ desktop-header
";; Created " (current-time-string) "\n"
";; Emacs version " emacs-version "\n\n"
";; Global section:\n")
info)
(setq default-directory dirname)
(if (file-exists-p filename) (delete-file filename))
- (write-region (point-min) (point-max) filename nil 'nomessage)))
+ (let ((coding-system-for-write 'emacs-mule))
+ (write-region (point-min) (point-max) filename nil 'nomessage))))
(setq desktop-dirname dirname))
;; ----------------------------------------------------------------------------
(defun desktop-remove ()
(setq dirs (cdr dirs)))
(setq desktop-dirname (and dirs (expand-file-name (car dirs))))
(if desktop-dirname
- (progn
+ (let ((desktop-last-buffer nil))
+ ;; `load-with-code-conversion' calls `eval-buffer' which
+ ;; contains a `save-excursion', so we end up with the same
+ ;; buffer before and after the load. This is a problem
+ ;; when the desktop is read initially when Emacs starts up
+ ;; because, if we still are in *scratch* after running
+ ;; `after-init-hook', the splash screen will be displayed.
(load (expand-file-name desktop-basefilename desktop-dirname)
t t t)
+ (when desktop-last-buffer
+ (switch-to-buffer desktop-last-buffer))
(run-hooks 'desktop-delay-hook)
(setq desktop-delay-hook nil)
(message "Desktop loaded."))
;; ----------------------------------------------------------------------------
;; Create a buffer, load its file, set is mode, ...; called from Desktop file
;; only.
+
+(defvar desktop-last-buffer nil
+ "Last buffer read. Dynamically bound in `desktop-read'.")
+
(defun desktop-create-buffer (ver desktop-buffer-file-name desktop-buffer-name
desktop-buffer-major-mode
mim pt mk ro desktop-buffer-misc
(setq result (funcall handler))
(setq hlist (cdr hlist)))
(when (bufferp result)
+ (setq desktop-last-buffer result)
(set-buffer result)
(if (not (equal (buffer-name) desktop-buffer-name))
(rename-buffer desktop-buffer-name))
(cond ((equal '(t) mim) (auto-fill-mode 1)) ; backwards compatible
((equal '(nil) mim) (auto-fill-mode 0))
(t (mapcar #'(lambda (minor-mode)
- (unless (or (eq minor-mode t) (eq minor-mode nil))
- (if (and minor-mode (fboundp minor-mode))
- (funcall minor-mode 1))))
- mim)))
+ (when (functionp minor-mode)
+ (funcall minor-mode 1)))
+ mim)))
(goto-char pt)
(if (consp mk)
(progn