(rmail-summary-mode-map): Remove unneeded declaration.
[bpt/emacs.git] / lisp / desktop.el
index dd0e6ad..b74f62b 100644 (file)
@@ -1,7 +1,7 @@
 ;;; desktop.el --- save partial status of Emacs when killed
 
 ;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
 ;; Keywords: convenience
@@ -9,10 +9,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,9 +20,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -84,7 +82,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.
 
@@ -167,7 +165,7 @@ and function `desktop-read' for details."
   (desktop-save-mode 0))
 
 (defcustom desktop-save 'ask-if-new
-  "*Specifies whether the desktop should be saved when it is killed.
+  "Specifies whether the desktop should be saved when it is killed.
 A desktop is killed when the user changes desktop or quits Emacs.
 Possible values are:
    t             -- always save.
@@ -204,22 +202,23 @@ the normal hook `desktop-not-loaded-hook' is run."
     (const :tag "Don't load" nil)
     (const :tag "Ask the user" ask))
   :group 'desktop
-  :version "23.1")
+  :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")
   "Name of lock file for Emacs desktop, excluding the directory part."
   :type 'file
   :group 'desktop
-  :version "23.1")
+  :version "22.2")
 
 (defcustom desktop-path '("." "~")
   "List of directories to search for the desktop file.
@@ -253,7 +252,7 @@ May be used to deal with accidental multiple Emacs jobs."
   :type 'hook
   :group 'desktop
   :options '(desktop-save-mode-off save-buffers-kill-emacs)
-  :version "23.1")
+  :version "22.2")
 
 (defcustom desktop-after-read-hook nil
   "Normal hook run after a successful `desktop-read'.
@@ -303,7 +302,7 @@ to the value obtained by evaluating FORM."
 
 (defcustom desktop-clear-preserve-buffers
   '("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*")
-  "*List of buffers that `desktop-clear' should not delete.
+  "List of buffers that `desktop-clear' should not delete.
 Each element is a regular expression.  Buffers with a name matched by any of
 these won't be deleted."
   :type '(repeat string)
@@ -356,7 +355,7 @@ modes are restored automatically; they should not be listed here."
   :group 'desktop)
 
 (defcustom desktop-file-name-format 'absolute
-  "*Format in which desktop file names should be saved.
+  "Format in which desktop file names should be saved.
 Possible values are:
    absolute -- Absolute file name.
    tilde    -- Relative to ~.
@@ -454,7 +453,9 @@ Furthermore the major mode function must be autoloaded.")
 (defcustom desktop-minor-mode-table
   '((auto-fill-function auto-fill-mode)
     (vc-mode nil)
-    (vc-dired-mode nil))
+    (vc-dired-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,6 +652,8 @@ is nil, ask the user where to save the desktop."
 (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)
    (buffer-name)
@@ -883,19 +886,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))
@@ -962,11 +969,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)
@@ -1040,7 +1047,7 @@ directory DIRNAME."
   (if desktop-dirname
       (desktop-save desktop-dirname)
     (call-interactively 'desktop-save))
-  (message "Desktop saved in %s" desktop-dirname))
+  (message "Desktop saved in %s" (abbreviate-file-name desktop-dirname)))
 
 ;; ----------------------------------------------------------------------------
 ;;;###autoload
@@ -1123,7 +1130,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)
@@ -1150,7 +1157,7 @@ directory DIRNAME."
           (setq desktop-first-buffer result))
         (set-buffer result)
         (unless (equal (buffer-name) desktop-buffer-name)
-          (rename-buffer desktop-buffer-name))
+          (rename-buffer desktop-buffer-name t))
         ;; minor modes
         (cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible
                (auto-fill-mode 1))
@@ -1285,7 +1292,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)