X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/412f24b9ddf1e07022f8c5fe05f0717f130c4c02..267b82ff2374a43cb38617a648c5bfa58ef2b039:/lisp/desktop.el diff --git a/lisp/desktop.el b/lisp/desktop.el index c60745a6b1..75deb58b4d 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -1,10 +1,10 @@ ;;; desktop.el --- save partial status of Emacs when killed -;; Copyright (C) 1993-1995, 1997, 2000-2011 Free Software Foundation, Inc. +;; Copyright (C) 1993-1995, 1997, 2000-2012 Free Software Foundation, Inc. ;; Author: Morten Welinder ;; Keywords: convenience -;; Favourite-brand-of-beer: None, I hate beer. +;; Favorite-brand-of-beer: None, I hate beer. ;; This file is part of GNU Emacs. @@ -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,20 +145,21 @@ 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 mode. -With numeric ARG, turn desktop saving on if ARG is positive, off -otherwise. If desktop saving is turned on, the state of Emacs is -saved from one session to another. See variable `desktop-save' -and function `desktop-read' for details." + "Toggle desktop saving (Desktop Save mode). +With a prefix argument ARG, enable Desktop Save mode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil. + +If Desktop Save mode is enabled, the state of Emacs is saved from +one session to another. See variable `desktop-save' and function +`desktop-read' for details." :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)) @@ -219,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) @@ -409,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 @@ -470,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 @@ -699,9 +698,9 @@ is nil, ask the user where to save the desktop." ;; ---------------------------------------------------------------------------- (defun desktop-internal-v2s (value) "Convert VALUE to a pair (QUOTE . TXT); (eval (read TXT)) gives VALUE. -TXT is a string that when read and evaluated yields value. +TXT is a string that when read and evaluated yields VALUE. QUOTE may be `may' (value may be quoted), -`must' (values must be quoted), or nil (value may not be quoted)." +`must' (value must be quoted), or nil (value must not be quoted)." (cond ((or (numberp value) (null value) (eq t value) (keywordp value)) (cons 'may (prin1-to-string value))) @@ -967,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) @@ -980,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)) @@ -1019,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) @@ -1107,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, ...; @@ -1155,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) @@ -1173,7 +1182,7 @@ directory DIRNAME." (setq desktop-buffer-fail-count (1+ desktop-buffer-fail-count)) (setq result nil)) ;; Restore buffer list order with new buffer at end. Don't change - ;; the order for old desktop files (old desktop module behaviour). + ;; the order for old desktop files (old desktop module behavior). (unless (< desktop-file-version 206) (mapc 'bury-buffer buffer-list) (when result (bury-buffer result)))