X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/678fb7066698ebfe3aecba722294025ed26da01b..267b82ff2374a43cb38617a648c5bfa58ef2b039:/lisp/desktop.el diff --git a/lisp/desktop.el b/lisp/desktop.el index 2f79cc05e7..75deb58b4d 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -34,7 +34,7 @@ ;; - some local variables ;; To use this, use customize to turn on desktop-save-mode or add the -;; following line somewhere in your .emacs file: +;; following line somewhere in your init file: ;; ;; (desktop-save-mode 1) ;; @@ -145,6 +145,8 @@ backward compatibility.") "Save status of Emacs when you exit." :group 'frames) +;; Maintained for backward compatibility +(define-obsolete-variable-alias 'desktop-enable 'desktop-save-mode "22.1") ;;;###autoload (define-minor-mode desktop-save-mode "Toggle desktop saving (Desktop Save mode). @@ -158,10 +160,6 @@ one session to another. See variable `desktop-save' and function :global t :group 'desktop) -;; Maintained for backward compatibility -(define-obsolete-variable-alias 'desktop-enable - 'desktop-save-mode "22.1") - (defun desktop-save-mode-off () "Disable `desktop-save-mode'. Provided for use in hooks." (desktop-save-mode 0)) @@ -222,7 +220,7 @@ the normal hook `desktop-not-loaded-hook' is run." :group 'desktop :version "22.2") -(defcustom desktop-path (list "." user-emacs-directory "~") +(defcustom desktop-path (list user-emacs-directory "~") "List of directories to search for the desktop file. The base name of the file is specified in `desktop-base-file-name'." :type '(repeat directory) @@ -412,8 +410,7 @@ is passed as the argument DESKTOP-BUFFER-MISC to functions in 'desktop-save-buffer "22.1") ;;;###autoload -(defvar desktop-buffer-mode-handlers - nil +(defvar desktop-buffer-mode-handlers nil "Alist of major mode specific functions to restore a desktop buffer. Functions listed are called by `desktop-create-buffer' when `desktop-read' evaluates the desktop file. List elements must have the form @@ -473,8 +470,7 @@ this table. See also `desktop-minor-mode-handlers'." :group 'desktop) ;;;###autoload -(defvar desktop-minor-mode-handlers - nil +(defvar desktop-minor-mode-handlers nil "Alist of functions to restore non-standard minor modes. Functions are called by `desktop-create-buffer' to restore minor modes. List elements must have the form @@ -970,8 +966,8 @@ It returns t if a desktop file was loaded, nil otherwise." (and dirs (car dirs))) ;; If not found and `desktop-path' is non-nil, use its first element. (and desktop-path (car desktop-path)) - ;; Default: Home directory. - "~")))) + ;; Default: .emacs.d. + user-emacs-directory)))) (if (file-exists-p (desktop-full-file-name)) ;; Desktop file found, but is it already in use? (let ((desktop-first-buffer nil) @@ -983,6 +979,7 @@ It returns t if a desktop file was loaded, nil otherwise." (if (and owner (memq desktop-load-locked-desktop '(nil ask)) (or (null desktop-load-locked-desktop) + (daemonp) (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))))) (let ((default-directory desktop-dirname)) @@ -1022,6 +1019,18 @@ Using it may cause conflicts. Use it anyway? " owner))))) (format ", %d to restore lazily" (length desktop-buffer-args-list)) "")) + ;; Bury the *Messages* buffer to not reshow it when burying + ;; the buffer we switched to above. + (when (buffer-live-p (get-buffer "*Messages*")) + (bury-buffer "*Messages*")) + ;; Clear all windows' previous and next buffers, these have + ;; been corrupted by the `switch-to-buffer' calls in + ;; `desktop-restore-file-buffer' (bug#11556). This is a + ;; brute force fix and should be replaced by a more subtle + ;; strategy eventually. + (walk-window-tree (lambda (window) + (set-window-prev-buffers window nil) + (set-window-next-buffers window nil))) t)) ;; No desktop file found. (desktop-clear) @@ -1110,11 +1119,8 @@ directory DIRNAME." (defun desktop-load-file (function) "Load the file where auto loaded FUNCTION is defined." - (when function - (let ((fcell (and (fboundp function) (symbol-function function)))) - (when (and (listp fcell) - (eq 'autoload (car fcell))) - (load (cadr fcell)))))) + (when (fboundp function) + (autoload-do-load (symbol-function function) function))) ;; ---------------------------------------------------------------------------- ;; Create a buffer, load its file, set its mode, ...; @@ -1158,7 +1164,7 @@ directory DIRNAME." (desktop-load-file desktop-buffer-major-mode) (let ((buffer-list (buffer-list)) (result - (condition-case-no-debug err + (condition-case-unless-debug err (funcall (or (cdr (assq desktop-buffer-major-mode desktop-buffer-mode-handlers)) 'desktop-restore-file-buffer)