Bug fix for vc-dispatcher split.
[bpt/emacs.git] / lisp / desktop.el
index 540fe79..7aa360c 100644 (file)
@@ -84,7 +84,7 @@
 ;;    (add-to-list 'desktop-minor-mode-handlers
 ;;                 '(bar-mode . bar-desktop-restore))
 
-;; in the module itself, and make shure that the mode function is
+;; in the module itself, and make sure that the mode function is
 ;; autoloaded.  See the docstrings of `desktop-buffer-mode-handlers' and
 ;; `desktop-minor-mode-handlers' for more info.
 
 
 ;;; Code:
 
-(defvar uniquify-managed)
-
 (defvar desktop-file-version "206"
   "Version number of desktop file format.
 Written into the desktop file and used at desktop read to provide
@@ -208,13 +206,14 @@ the normal hook `desktop-not-loaded-hook' is run."
   :group 'desktop
   :version "22.2")
 
+(define-obsolete-variable-alias 'desktop-basefilename
+                                'desktop-base-file-name "22.1")
+
 (defcustom desktop-base-file-name
   (convert-standard-filename ".emacs.desktop")
   "Name of file for Emacs desktop, excluding the directory part."
   :type 'file
   :group 'desktop)
-(define-obsolete-variable-alias 'desktop-basefilename
-                                'desktop-base-file-name "22.1")
 
 (defcustom desktop-base-lock-name
   (convert-standard-filename ".emacs.desktop.lock")
@@ -457,7 +456,8 @@ Furthermore the major mode function must be autoloaded.")
   '((auto-fill-function auto-fill-mode)
     (vc-mode nil)
     (vc-dired-mode nil)
-    (erc-track-minor-mode nil))
+    (erc-track-minor-mode nil)
+    (savehist-mode nil))
   "Table mapping minor mode variables to minor mode functions.
 Each entry has the form (NAME RESTORE-FUNCTION).
 NAME is the name of the buffer-local variable indicating that the minor
@@ -651,16 +651,14 @@ is nil, ask the user where to save the desktop."
       value)))
 
 ;; ----------------------------------------------------------------------------
-(declare-function uniquify-item-base "uniquify" (cl-x) t) ; defstruct
-
 (defun desktop-buffer-info (buffer)
   (set-buffer buffer)
   (list
+   ;; base name of the buffer; replaces the buffer name if managed by uniquify
+   (and (fboundp 'uniquify-buffer-base-name) (uniquify-buffer-base-name))
    ;; basic information
    (desktop-file-name (buffer-file-name) desktop-dirname)
-   (if (bound-and-true-p uniquify-managed)
-       (uniquify-item-base (car uniquify-managed))
-     (buffer-name))
+   (buffer-name)
    major-mode
    ;; minor modes
    (let (ret)
@@ -890,19 +888,23 @@ See also `desktop-base-file-name'."
 
          (insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n")
          (dolist (l (mapcar 'desktop-buffer-info (buffer-list)))
-           (when (apply 'desktop-save-buffer-p l)
-             (insert "("
-                     (if (or (not (integerp eager))
-                             (if (zerop eager)
-                                 nil
-                               (setq eager (1- eager))))
-                         "desktop-create-buffer"
-                       "desktop-append-buffer-args")
-                     " "
-                     desktop-file-version)
-             (dolist (e l)
-               (insert "\n  " (desktop-value-to-string e)))
-             (insert ")\n\n")))
+           (let ((base (pop l)))
+             (when (apply 'desktop-save-buffer-p l)
+               (insert "("
+                       (if (or (not (integerp eager))
+                               (if (zerop eager)
+                                   nil
+                                 (setq eager (1- eager))))
+                           "desktop-create-buffer"
+                         "desktop-append-buffer-args")
+                       " "
+                       desktop-file-version)
+               ;; If there's a non-empty base name, we save it instead of the buffer name
+               (when (and base (not (string= base "")))
+                 (setcar (nthcdr 1 l) base))
+               (dolist (e l)
+                 (insert "\n  " (desktop-value-to-string e)))
+               (insert ")\n\n"))))
 
          (setq default-directory desktop-dirname)
          (let ((coding-system-for-write 'emacs-mule))
@@ -969,11 +971,11 @@ It returns t if a desktop file was loaded, nil otherwise."
                   (or (null desktop-load-locked-desktop)
                       (not (y-or-n-p (format "Warning: desktop file appears to be in use by PID %s.\n\
 Using it may cause conflicts.  Use it anyway? " owner)))))
-             (progn
-               (let ((default-directory desktop-dirname))
-                 (run-hooks 'desktop-not-loaded-hook))
+             (let ((default-directory desktop-dirname))
                (setq desktop-dirname nil)
-               (message "Desktop file in use; not loaded."))
+               (run-hooks 'desktop-not-loaded-hook)
+               (unless desktop-dirname
+                 (message "Desktop file in use; not loaded.")))
            (desktop-lazy-abort)
            ;; Evaluate desktop buffer and remember when it was modified.
            (load (desktop-full-file-name) t t t)
@@ -1130,7 +1132,7 @@ directory DIRNAME."
     (desktop-load-file desktop-buffer-major-mode)
     (let ((buffer-list (buffer-list))
           (result
-           (condition-case err
+           (condition-case-no-debug err
                (funcall (or (cdr (assq desktop-buffer-major-mode
                                        desktop-buffer-mode-handlers))
                             'desktop-restore-file-buffer)
@@ -1292,7 +1294,9 @@ If there are no buffers left to create, kill the timer."
       (when (member key command-line-args)
         (setq command-line-args (delete key command-line-args))
         (setq desktop-save-mode nil)))
-    (when desktop-save-mode (desktop-read))))
+    (when desktop-save-mode
+      (desktop-read)
+      (setq inhibit-startup-screen t))))
 
 (provide 'desktop)