summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Hansen <larsh@soem.dk>2006-06-23 21:42:33 +0000
committerLars Hansen <larsh@soem.dk>2006-06-23 21:42:33 +0000
commit114258349c26f75821ce8b6de45dabdbcc6755d5 (patch)
tree4fe9feb7948f1f6a35d3be9839a3bda702255358
parentb74e371c91b1787946c3003f8034f34fb39939a7 (diff)
downloademacs-114258349c26f75821ce8b6de45dabdbcc6755d5.tar.gz
(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.
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/desktop.el102
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 <larsh@soem.dk>
+ * 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 <dominik@science.uva.nl>
* 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))