X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a609d13baff387f92e367ec5797e1f56d28fd4f6..83316bf4044b5fca98f19daae8f16a646b7e83e9:/lisp/desktop.el diff --git a/lisp/desktop.el b/lisp/desktop.el index 443d4ffee6..fd5baaf020 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -1,7 +1,6 @@ ;;; desktop.el --- save partial status of Emacs when killed -;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1993-1995, 1997, 2000-2011 Free Software Foundation, Inc. ;; Author: Morten Welinder ;; Keywords: convenience @@ -40,7 +39,7 @@ ;; (desktop-save-mode 1) ;; ;; For further usage information, look at the section -;; "Saving Emacs Sessions" in the GNU Emacs Manual. +;; (info "(emacs)Saving Emacs Sessions") in the GNU Emacs Manual. ;; When the desktop module is loaded, the function `desktop-kill' is ;; added to the `kill-emacs-hook'. This function is responsible for @@ -220,12 +219,12 @@ the normal hook `desktop-not-loaded-hook' is run." :group 'desktop :version "22.2") -(defcustom desktop-path '("." "~") +(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) :group 'desktop - :version "22.1") + :version "23.2") ; user-emacs-directory added (defcustom desktop-missing-file-warning nil "If non-nil, offer to recreate the buffer of a deleted file. @@ -276,7 +275,8 @@ for example." tags-table-list search-ring regexp-search-ring - register-alist) + register-alist + file-name-history) "List of global variables saved by `desktop-save'. An element may be variable name (a symbol) or a cons cell of the form \(VAR . MAX-SIZE), which means to truncate VAR's value to at most @@ -301,10 +301,12 @@ to the value obtained by evaluating FORM." :version "22.1") (defcustom desktop-clear-preserve-buffers - '("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*") + '("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*" + "\\*Warnings\\*") "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." + :version "23.3" ; added Warnings - bug#6336 :type '(repeat string) :group 'desktop) @@ -332,19 +334,19 @@ modes are restored automatically; they should not be listed here." :type '(repeat symbol) :group 'desktop) -;; We skip .log files because they are normally temporary. -;; (ftp) files because they require passwords and whatnot. -(defcustom desktop-buffers-not-to-save - "\\(^nn\\.a[0-9]+\\|\\.log\\|(ftp)\\)$" +(defcustom desktop-buffers-not-to-save nil "Regexp identifying buffers that are to be excluded from saving." - :type 'regexp + :type '(choice (const :tag "None" nil) + regexp) + :version "23.2" ; set to nil :group 'desktop) ;; Skip tramp and ange-ftp files (defcustom desktop-files-not-to-save - "^/[^/:]*:" + "\\(^/[^/:]*:\\|(ftp)$\\)" "Regexp identifying files whose buffers are to be excluded from saving." - :type 'regexp + :type '(choice (const :tag "None" nil) + regexp) :group 'desktop) ;; We skip TAGS files to save time (tags-file-name is saved instead). @@ -609,7 +611,8 @@ Furthermore, it clears the variables listed in `desktop-globals-to-clear'." (delete-other-windows)) ;; ---------------------------------------------------------------------------- -(add-hook 'kill-emacs-hook 'desktop-kill) +(unless noninteractive + (add-hook 'kill-emacs-hook 'desktop-kill)) (defun desktop-kill () "If `desktop-save-mode' is non-nil, do what `desktop-save' says to do. @@ -618,7 +621,10 @@ is nil, ask the user where to save the desktop." (when (and desktop-save-mode (let ((exists (file-exists-p (desktop-full-file-name)))) (or (eq desktop-save t) - (and exists (memq desktop-save '(ask-if-new if-exists))) + (and exists (eq desktop-save 'if-exists)) + ;; If it exists, but we aren't using it, we are going + ;; to ask for a new directory below. + (and exists desktop-dirname (eq desktop-save 'ask-if-new)) (and (or (memq desktop-save '(ask ask-if-new)) (and exists (eq desktop-save 'ask-if-exists))) @@ -810,16 +816,23 @@ which means to truncate VAR's value to at most MAX-SIZE elements FILENAME is the visited file name, BUFNAME is the buffer name, and MODE is the major mode. \n\(fn FILENAME BUFNAME MODE)" - (let ((case-fold-search nil)) - (and (not (string-match desktop-buffers-not-to-save bufname)) + (let ((case-fold-search nil) + dired-skip) + (and (not (and (stringp desktop-buffers-not-to-save) + (not filename) + (string-match desktop-buffers-not-to-save bufname))) (not (memq mode desktop-modes-not-to-save)) + ;; FIXME this is broken if desktop-files-not-to-save is nil. (or (and filename + (stringp desktop-files-not-to-save) (not (string-match desktop-files-not-to-save filename))) (and (eq mode 'dired-mode) (with-current-buffer bufname - (not (string-match desktop-files-not-to-save - default-directory)))) + (not (setq dired-skip + (string-match desktop-files-not-to-save + default-directory))))) (and (null filename) + (null dired-skip) ; bug#5755 (with-current-buffer bufname desktop-save-buffer)))))) ;; ---------------------------------------------------------------------------- @@ -1276,7 +1289,7 @@ If there are no buffers left to create, kill the timer." (setq desktop-lazy-timer nil)) (when desktop-buffer-args-list (setq desktop-buffer-args-list nil) - (when (interactive-p) + (when (called-interactively-p 'interactive) (message "Lazy desktop load aborted")))) ;; ---------------------------------------------------------------------------- @@ -1298,5 +1311,4 @@ If there are no buffers left to create, kill the timer." (provide 'desktop) -;; arch-tag: 221907c3-1771-4fd3-9c2e-c6f700c6ede9 ;;; desktop.el ends here