aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Hansen2006-06-23 21:42:33 +0000
committerLars Hansen2006-06-23 21:42:33 +0000
commit114258349c26f75821ce8b6de45dabdbcc6755d5 (patch)
tree4fe9feb7948f1f6a35d3be9839a3bda702255358
parentb74e371c91b1787946c3003f8034f34fb39939a7 (diff)
downloademacs-114258349c26f75821ce8b6de45dabdbcc6755d5.tar.gz
emacs-114258349c26f75821ce8b6de45dabdbcc6755d5.zip
(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 @@
12006-06-23 Lars Hansen <larsh@soem.dk>
2 * desktop.el (desktop-full-file-name): New function.
3 (desktop-kill, desktop-save, desktop-remove, desktop-read)
4 (desktop-revert): Use it.
5 (desktop-clear, desktop-save, desktop-remove): Add autoload cookie.
6 (desktop-after-read-hook): Add option list-buffers.
7 (desktop-locals-to-save): Add tab-width.
8 (desktop-save-mode, desktop-no-desktop-file-hook, desktop-save-hook):
9 Fix docstring.
10
12006-06-23 Carsten Dominik <dominik@science.uva.nl> 112006-06-23 Carsten Dominik <dominik@science.uva.nl>
2 12
3 * textmodes/org.el (org-cdlatex-mode-map) 13 * 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.")
153(define-minor-mode desktop-save-mode 153(define-minor-mode desktop-save-mode
154 "Toggle desktop saving mode. 154 "Toggle desktop saving mode.
155With numeric ARG, turn desktop saving on if ARG is positive, off 155With numeric ARG, turn desktop saving on if ARG is positive, off
156otherwise. See variable `desktop-save' for a description of when the 156otherwise. If desktop saving is turned on, the state of Emacs is
157desktop is saved." 157saved from one session to another. See variable `desktop-save'
158and function `desktop-read' for details."
158 :global t 159 :global t
159 :group 'desktop) 160 :group 'desktop)
160 161
@@ -175,7 +176,8 @@ Possible values are:
175The desktop is never saved when `desktop-save-mode' is nil. 176The desktop is never saved when `desktop-save-mode' is nil.
176The variables `desktop-dirname' and `desktop-base-file-name' 177The variables `desktop-dirname' and `desktop-base-file-name'
177determine where the desktop is saved." 178determine where the desktop is saved."
178 :type '(choice 179 :type
180 '(choice
179 (const :tag "Always save" t) 181 (const :tag "Always save" t)
180 (const :tag "Always ask" ask) 182 (const :tag "Always ask" ask)
181 (const :tag "Ask if desktop file is new, else do save" ask-if-new) 183 (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."
212 214
213(defcustom desktop-no-desktop-file-hook nil 215(defcustom desktop-no-desktop-file-hook nil
214 "Normal hook run when `desktop-read' can't find a desktop file. 216 "Normal hook run when `desktop-read' can't find a desktop file.
217Run in the directory in which the desktop file was sought.
215May be used to show a dired buffer." 218May be used to show a dired buffer."
216 :type 'hook 219 :type 'hook
217 :group 'desktop 220 :group 'desktop
@@ -222,11 +225,14 @@ May be used to show a dired buffer."
222May be used to show a buffer list." 225May be used to show a buffer list."
223 :type 'hook 226 :type 'hook
224 :group 'desktop 227 :group 'desktop
228 :options '(list-buffers)
225 :version "22.1") 229 :version "22.1")
226 230
227(defcustom desktop-save-hook nil 231(defcustom desktop-save-hook nil
228 "Normal hook run before the desktop is saved in a desktop file. 232 "Normal hook run before the desktop is saved in a desktop file.
229This is useful for truncating history lists, for example." 233Run with the desktop buffer current with only the header present.
234May be used to add to the desktop code or to truncate history lists,
235for example."
230 :type 'hook 236 :type 'hook
231 :group 'desktop) 237 :group 'desktop)
232 238
@@ -282,6 +288,7 @@ these won't be deleted."
282 size-indication-mode 288 size-indication-mode
283 buffer-file-coding-system 289 buffer-file-coding-system
284 indent-tabs-mode 290 indent-tabs-mode
291 tab-width
285 indicate-buffer-boundaries 292 indicate-buffer-boundaries
286 indicate-empty-lines 293 indicate-empty-lines
287 show-trailing-whitespace) 294 show-trailing-whitespace)
@@ -475,6 +482,11 @@ See also `desktop-minor-mode-table'.")
475(defvar desktop-dirname nil 482(defvar desktop-dirname nil
476 "The directory in which the desktop file should be saved.") 483 "The directory in which the desktop file should be saved.")
477 484
485(defun desktop-full-file-name (&optional dirname)
486 "Return the full name of the desktop file in DIRNAME.
487DIRNAME omitted or nil means use `desktop-dirname'."
488 (expand-file-name desktop-base-file-name (or dirname desktop-dirname)))
489
478(defconst desktop-header 490(defconst desktop-header
479";; -------------------------------------------------------------------------- 491";; --------------------------------------------------------------------------
480;; Desktop File for Emacs 492;; Desktop File for Emacs
@@ -492,6 +504,7 @@ See also `desktop-minor-mode-table'.")
492 (setcdr here nil)))) 504 (setcdr here nil))))
493 505
494;; ---------------------------------------------------------------------------- 506;; ----------------------------------------------------------------------------
507;;;###autoload
495(defun desktop-clear () 508(defun desktop-clear ()
496 "Empty the Desktop. 509 "Empty the Desktop.
497This kills all buffers except for internal ones and those with names matched by 510This 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'."
528 "If `desktop-save-mode' is non-nil, do what `desktop-save' says to do. 541 "If `desktop-save-mode' is non-nil, do what `desktop-save' says to do.
529If the desktop should be saved and `desktop-dirname' 542If the desktop should be saved and `desktop-dirname'
530is nil, ask the user where to save the desktop." 543is nil, ask the user where to save the desktop."
531 (when 544 (when (and desktop-save-mode
532 (and 545 (let ((exists (file-exists-p (desktop-full-file-name))))
533 desktop-save-mode 546 (or (eq desktop-save t)
534 (let ((exists (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname)))) 547 (and exists (memq desktop-save '(ask-if-new if-exists)))
535 (or 548 (and
536 (eq desktop-save t) 549 (or (memq desktop-save '(ask ask-if-new))
537 (and exists (memq desktop-save '(ask-if-new if-exists))) 550 (and exists (eq desktop-save 'ask-if-exists)))
538 (and 551 (y-or-n-p "Save desktop? ")))))
539 (or
540 (memq desktop-save '(ask ask-if-new))
541 (and exists (eq desktop-save 'ask-if-exists)))
542 (y-or-n-p "Save desktop? ")))))
543 (unless desktop-dirname 552 (unless desktop-dirname
544 (setq desktop-dirname 553 (setq desktop-dirname
545 (file-name-as-directory 554 (file-name-as-directory
546 (expand-file-name 555 (expand-file-name
547 (call-interactively 556 (call-interactively
548 (lambda (dir) (interactive "DDirectory for desktop file: ") dir)))))) 557 (lambda (dir)
558 (interactive "DDirectory for desktop file: ") dir))))))
549 (condition-case err 559 (condition-case err
550 (desktop-save desktop-dirname) 560 (desktop-save desktop-dirname)
551 (file-error 561 (file-error
552 (unless (yes-or-no-p "Error while saving the desktop. Ignore? ") 562 (unless (yes-or-no-p "Error while saving the desktop. Ignore? ")
553 (signal (car err) (cdr err))))))) 563 (signal (car err) (cdr err)))))))
554 564
555;; ---------------------------------------------------------------------------- 565;; ----------------------------------------------------------------------------
556(defun desktop-list* (&rest args) 566(defun desktop-list* (&rest args)
@@ -715,6 +725,7 @@ DIRNAME must be the directory in which the desktop file will be saved."
715 (t (expand-file-name filename)))) 725 (t (expand-file-name filename))))
716 726
717;; ---------------------------------------------------------------------------- 727;; ----------------------------------------------------------------------------
728;;;###autoload
718(defun desktop-save (dirname) 729(defun desktop-save (dirname)
719 "Save the desktop in a desktop file. 730 "Save the desktop in a desktop file.
720Parameter DIRNAME specifies where to save the desktop file. 731Parameter DIRNAME specifies where to save the desktop file.
@@ -723,7 +734,7 @@ See also `desktop-base-file-name'."
723 (run-hooks 'desktop-save-hook) 734 (run-hooks 'desktop-save-hook)
724 (setq dirname (file-name-as-directory (expand-file-name dirname))) 735 (setq dirname (file-name-as-directory (expand-file-name dirname)))
725 (save-excursion 736 (save-excursion
726 (let ((filename (expand-file-name desktop-base-file-name dirname)) 737 (let ((filename (desktop-full-file-name dirname))
727 (info 738 (info
728 (mapcar 739 (mapcar
729 #'(lambda (b) 740 #'(lambda (b)
@@ -802,12 +813,13 @@ See also `desktop-base-file-name'."
802 (setq desktop-dirname dirname)) 813 (setq desktop-dirname dirname))
803 814
804;; ---------------------------------------------------------------------------- 815;; ----------------------------------------------------------------------------
816;;;###autoload
805(defun desktop-remove () 817(defun desktop-remove ()
806 "Delete desktop file in `desktop-dirname'. 818 "Delete desktop file in `desktop-dirname'.
807This function also sets `desktop-dirname' to nil." 819This function also sets `desktop-dirname' to nil."
808 (interactive) 820 (interactive)
809 (when desktop-dirname 821 (when desktop-dirname
810 (let ((filename (expand-file-name desktop-base-file-name desktop-dirname))) 822 (let ((filename (desktop-full-file-name)))
811 (setq desktop-dirname nil) 823 (setq desktop-dirname nil)
812 (when (file-exists-p filename) 824 (when (file-exists-p filename)
813 (delete-file filename))))) 825 (delete-file filename)))))
@@ -830,32 +842,30 @@ It returns t if a desktop file was loaded, nil otherwise."
830 (interactive) 842 (interactive)
831 (unless noninteractive 843 (unless noninteractive
832 (setq desktop-dirname 844 (setq desktop-dirname
833 (file-name-as-directory 845 (file-name-as-directory
834 (expand-file-name 846 (expand-file-name
835 (or 847 (or
836 ;; If DIRNAME is specified, use it. 848 ;; If DIRNAME is specified, use it.
837 (and (< 0 (length dirname)) dirname) 849 (and (< 0 (length dirname)) dirname)
838 ;; Otherwise search desktop file in desktop-path. 850 ;; Otherwise search desktop file in desktop-path.
839 (let ((dirs desktop-path)) 851 (let ((dirs desktop-path))
840 (while 852 (while (and dirs
841 (and 853 (not (file-exists-p
842 dirs 854 (desktop-full-file-name (car dirs)))))
843 (not 855 (setq dirs (cdr dirs)))
844 (file-exists-p (expand-file-name desktop-base-file-name (car dirs))))) 856 (and dirs (car dirs)))
845 (setq dirs (cdr dirs))) 857 ;; If not found and `desktop-path' is non-nil, use its first element.
846 (and dirs (car dirs))) 858 (and desktop-path (car desktop-path))
847 ;; If not found and `desktop-path' is non-nil, use its first element. 859 ;; Default: Home directory.
848 (and desktop-path (car desktop-path)) 860 "~"))))
849 ;; Default: Home directory. 861 (if (file-exists-p (desktop-full-file-name))
850 "~"))))
851 (if (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname))
852 ;; Desktop file found, process it. 862 ;; Desktop file found, process it.
853 (let ((desktop-first-buffer nil) 863 (let ((desktop-first-buffer nil)
854 (desktop-buffer-ok-count 0) 864 (desktop-buffer-ok-count 0)
855 (desktop-buffer-fail-count 0)) 865 (desktop-buffer-fail-count 0))
856 (setq desktop-lazy-timer nil) 866 (setq desktop-lazy-timer nil)
857 ;; Evaluate desktop buffer. 867 ;; Evaluate desktop buffer.
858 (load (expand-file-name desktop-base-file-name desktop-dirname) t t t) 868 (load (desktop-full-file-name) t t t)
859 ;; `desktop-create-buffer' puts buffers at end of the buffer list. 869 ;; `desktop-create-buffer' puts buffers at end of the buffer list.
860 ;; We want buffers existing prior to evaluating the desktop (and not reused) 870 ;; We want buffers existing prior to evaluating the desktop (and not reused)
861 ;; to be placed at the end of the buffer list, so we move them here. 871 ;; to be placed at the end of the buffer list, so we move them here.
@@ -925,7 +935,7 @@ directory DIRNAME."
925 (interactive) 935 (interactive)
926 (unless desktop-dirname 936 (unless desktop-dirname
927 (error "Unknown desktop directory")) 937 (error "Unknown desktop directory"))
928 (unless (file-exists-p (expand-file-name desktop-base-file-name desktop-dirname)) 938 (unless (file-exists-p (desktop-full-file-name))
929 (error "No desktop file found")) 939 (error "No desktop file found"))
930 (desktop-clear) 940 (desktop-clear)
931 (desktop-read desktop-dirname)) 941 (desktop-read desktop-dirname))