From 114258349c26f75821ce8b6de45dabdbcc6755d5 Mon Sep 17 00:00:00 2001 From: Lars Hansen Date: Fri, 23 Jun 2006 21:42:33 +0000 Subject: [PATCH] (desktop-full-file-name): New function. (desktop-kill, desktop-save, desktop-remove, desktop-read) (desktop-revert): Use it. (desktop-clear, desktop-save, desktop-remove): Add autoload cookie. (desktop-after-read-hook): Add option list-buffers. (desktop-locals-to-save): Add tab-width. (desktop-save-mode, desktop-no-desktop-file-hook, desktop-save-hook): Fix docstring. --- lisp/ChangeLog | 10 +++++ lisp/desktop.el | 102 ++++++++++++++++++++++++++---------------------- 2 files changed, 66 insertions(+), 46 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c9fb738fce2..5a6af75fd26 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2006-06-23 Lars Hansen + * desktop.el (desktop-full-file-name): New function. + (desktop-kill, desktop-save, desktop-remove, desktop-read) + (desktop-revert): Use it. + (desktop-clear, desktop-save, desktop-remove): Add autoload cookie. + (desktop-after-read-hook): Add option list-buffers. + (desktop-locals-to-save): Add tab-width. + (desktop-save-mode, desktop-no-desktop-file-hook, desktop-save-hook): + Fix docstring. + 2006-06-23 Carsten Dominik * textmodes/org.el (org-cdlatex-mode-map) diff --git a/lisp/desktop.el b/lisp/desktop.el index 8e9d09d4d32..fe5a278bae8 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -153,8 +153,9 @@ backward compatibility.") (define-minor-mode desktop-save-mode "Toggle desktop saving mode. With numeric ARG, turn desktop saving on if ARG is positive, off -otherwise. See variable `desktop-save' for a description of when the -desktop is saved." +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." :global t :group 'desktop) @@ -175,7 +176,8 @@ Possible values are: The desktop is never saved when `desktop-save-mode' is nil. The variables `desktop-dirname' and `desktop-base-file-name' determine where the desktop is saved." - :type '(choice + :type + '(choice (const :tag "Always save" t) (const :tag "Always ask" ask) (const :tag "Ask if desktop file is new, else do save" ask-if-new) @@ -212,6 +214,7 @@ If nil, just print error messages in the message buffer." (defcustom desktop-no-desktop-file-hook nil "Normal hook run when `desktop-read' can't find a desktop file. +Run in the directory in which the desktop file was sought. May be used to show a dired buffer." :type 'hook :group 'desktop @@ -222,11 +225,14 @@ May be used to show a dired buffer." May be used to show a buffer list." :type 'hook :group 'desktop + :options '(list-buffers) :version "22.1") (defcustom desktop-save-hook nil "Normal hook run before the desktop is saved in a desktop file. -This is useful for truncating history lists, for example." +Run with the desktop buffer current with only the header present. +May be used to add to the desktop code or to truncate history lists, +for example." :type 'hook :group 'desktop) @@ -282,6 +288,7 @@ these won't be deleted." size-indication-mode buffer-file-coding-system indent-tabs-mode + tab-width indicate-buffer-boundaries indicate-empty-lines show-trailing-whitespace) @@ -475,6 +482,11 @@ See also `desktop-minor-mode-table'.") (defvar desktop-dirname nil "The directory in which the desktop file should be saved.") +(defun desktop-full-file-name (&optional dirname) + "Return the full name of the desktop file in DIRNAME. +DIRNAME omitted or nil means use `desktop-dirname'." + (expand-file-name desktop-base-file-name (or dirname desktop-dirname))) + (defconst desktop-header ";; -------------------------------------------------------------------------- ;; Desktop File for Emacs @@ -492,6 +504,7 @@ See also `desktop-minor-mode-table'.") (setcdr here nil)))) ;; ---------------------------------------------------------------------------- +;;;###autoload (defun desktop-clear () "Empty the Desktop. This kills all buffers except for internal ones and those with names matched by @@ -528,29 +541,26 @@ Furthermore, it clears the variables listed in `desktop-globals-to-clear'." "If `desktop-save-mode' is non-nil, do what `desktop-save' says to do. If the desktop should be saved and `desktop-dirname' is nil, ask the user where to save the desktop." - (when - (and - desktop-save-mode - (let ((exists (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname)))) - (or - (eq desktop-save t) - (and exists (memq desktop-save '(ask-if-new if-exists))) - (and - (or - (memq desktop-save '(ask ask-if-new)) - (and exists (eq desktop-save 'ask-if-exists))) - (y-or-n-p "Save 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 + (or (memq desktop-save '(ask ask-if-new)) + (and exists (eq desktop-save 'ask-if-exists))) + (y-or-n-p "Save desktop? "))))) (unless desktop-dirname (setq desktop-dirname - (file-name-as-directory - (expand-file-name - (call-interactively - (lambda (dir) (interactive "DDirectory for desktop file: ") dir)))))) + (file-name-as-directory + (expand-file-name + (call-interactively + (lambda (dir) + (interactive "DDirectory for desktop file: ") dir)))))) (condition-case err - (desktop-save desktop-dirname) + (desktop-save desktop-dirname) (file-error - (unless (yes-or-no-p "Error while saving the desktop. Ignore? ") - (signal (car err) (cdr err))))))) + (unless (yes-or-no-p "Error while saving the desktop. Ignore? ") + (signal (car err) (cdr err))))))) ;; ---------------------------------------------------------------------------- (defun desktop-list* (&rest args) @@ -715,6 +725,7 @@ DIRNAME must be the directory in which the desktop file will be saved." (t (expand-file-name filename)))) ;; ---------------------------------------------------------------------------- +;;;###autoload (defun desktop-save (dirname) "Save the desktop in a desktop file. Parameter DIRNAME specifies where to save the desktop file. @@ -723,7 +734,7 @@ See also `desktop-base-file-name'." (run-hooks 'desktop-save-hook) (setq dirname (file-name-as-directory (expand-file-name dirname))) (save-excursion - (let ((filename (expand-file-name desktop-base-file-name dirname)) + (let ((filename (desktop-full-file-name dirname)) (info (mapcar #'(lambda (b) @@ -802,12 +813,13 @@ See also `desktop-base-file-name'." (setq desktop-dirname dirname)) ;; ---------------------------------------------------------------------------- +;;;###autoload (defun desktop-remove () "Delete desktop file in `desktop-dirname'. This function also sets `desktop-dirname' to nil." (interactive) (when desktop-dirname - (let ((filename (expand-file-name desktop-base-file-name desktop-dirname))) + (let ((filename (desktop-full-file-name))) (setq desktop-dirname nil) (when (file-exists-p filename) (delete-file filename))))) @@ -830,32 +842,30 @@ It returns t if a desktop file was loaded, nil otherwise." (interactive) (unless noninteractive (setq desktop-dirname - (file-name-as-directory - (expand-file-name - (or - ;; If DIRNAME is specified, use it. - (and (< 0 (length dirname)) dirname) - ;; Otherwise search desktop file in desktop-path. - (let ((dirs desktop-path)) - (while - (and - dirs - (not - (file-exists-p (expand-file-name desktop-base-file-name (car dirs))))) - (setq dirs (cdr dirs))) - (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. - "~")))) - (if (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname)) + (file-name-as-directory + (expand-file-name + (or + ;; If DIRNAME is specified, use it. + (and (< 0 (length dirname)) dirname) + ;; Otherwise search desktop file in desktop-path. + (let ((dirs desktop-path)) + (while (and dirs + (not (file-exists-p + (desktop-full-file-name (car dirs))))) + (setq dirs (cdr dirs))) + (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. + "~")))) + (if (file-exists-p (desktop-full-file-name)) ;; Desktop file found, process it. (let ((desktop-first-buffer nil) (desktop-buffer-ok-count 0) (desktop-buffer-fail-count 0)) (setq desktop-lazy-timer nil) ;; Evaluate desktop buffer. - (load (expand-file-name desktop-base-file-name desktop-dirname) t t t) + (load (desktop-full-file-name) t t t) ;; `desktop-create-buffer' puts buffers at end of the buffer list. ;; We want buffers existing prior to evaluating the desktop (and not reused) ;; to be placed at the end of the buffer list, so we move them here. @@ -925,7 +935,7 @@ directory DIRNAME." (interactive) (unless desktop-dirname (error "Unknown desktop directory")) - (unless (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname)) + (unless (file-exists-p (desktop-full-file-name)) (error "No desktop file found")) (desktop-clear) (desktop-read desktop-dirname)) -- 2.39.2