171 |
:type 'hook |
:type 'hook |
172 |
:group 'desktop) |
:group 'desktop) |
173 |
|
|
174 |
(defcustom desktop-globals-to-save '( |
(defcustom desktop-globals-to-save |
175 |
desktop-missing-file-warning |
'(desktop-missing-file-warning |
176 |
tags-file-name |
tags-file-name |
177 |
tags-table-list |
tags-table-list |
178 |
search-ring |
search-ring |
179 |
regexp-search-ring |
regexp-search-ring |
180 |
register-alist) |
register-alist) |
181 |
"List of global variables saved by `desktop-save'. |
"List of global variables saved by `desktop-save'. |
182 |
An element may be variable name (a symbol) or a cons cell of the form |
An element may be variable name (a symbol) or a cons cell of the form |
183 |
\(VAR . MAX-SIZE), which means to truncate VAR's value to at most |
\(VAR . MAX-SIZE), which means to truncate VAR's value to at most |
186 |
:type '(repeat (restricted-sexp :match-alternatives (symbolp consp))) |
:type '(repeat (restricted-sexp :match-alternatives (symbolp consp))) |
187 |
:group 'desktop) |
:group 'desktop) |
188 |
|
|
189 |
(defcustom desktop-globals-to-clear '( |
(defcustom desktop-globals-to-clear |
190 |
kill-ring |
'(kill-ring |
191 |
kill-ring-yank-pointer |
kill-ring-yank-pointer |
192 |
search-ring |
search-ring |
193 |
search-ring-yank-pointer |
search-ring-yank-pointer |
194 |
regexp-search-ring |
regexp-search-ring |
195 |
regexp-search-ring-yank-pointer) |
regexp-search-ring-yank-pointer) |
196 |
"List of global variables to clear by `desktop-clear'. |
"List of global variables to clear by `desktop-clear'. |
197 |
An element may be variable name (a symbol) or a cons cell of the form |
An element may be variable name (a symbol) or a cons cell of the form |
198 |
\(VAR . FORM). Symbols are set to nil and for cons cells VAR is set |
\(VAR . FORM). Symbols are set to nil and for cons cells VAR is set |
202 |
|
|
203 |
(defcustom desktop-clear-preserve-buffers-regexp |
(defcustom desktop-clear-preserve-buffers-regexp |
204 |
"^\\(\\*scratch\\*\\|\\*Messages\\*\\|\\*tramp/.+\\*\\)$" |
"^\\(\\*scratch\\*\\|\\*Messages\\*\\|\\*tramp/.+\\*\\)$" |
205 |
"Regexp identifying buffers that `desktop-clear' should not delete." |
"Regexp identifying buffers that `desktop-clear' should not delete. |
206 |
|
See also `desktop-clear-preserve-buffers'." |
207 |
:type 'regexp |
:type 'regexp |
208 |
:group 'desktop) |
:group 'desktop) |
209 |
|
|
|
;; Maintained for backward compatibility |
|
210 |
(defcustom desktop-clear-preserve-buffers nil |
(defcustom desktop-clear-preserve-buffers nil |
211 |
"*List of buffer names that `desktop-clear' should not delete. |
"*List of buffer names that `desktop-clear' should not delete. |
212 |
This variable is maintained for backward compatibility only." |
See also `desktop-clear-preserve-buffers-regexp'." |
213 |
:type '(repeat string) |
:type '(repeat string) |
214 |
:group 'desktop) |
:group 'desktop) |
|
(make-obsolete-variable 'desktop-clear-preserve-buffers |
|
|
'desktop-clear-preserve-buffers-regexp) |
|
215 |
|
|
216 |
(defcustom desktop-locals-to-save '( |
(defcustom desktop-locals-to-save |
217 |
desktop-locals-to-save ; Itself! Think it over. |
'(desktop-locals-to-save ; Itself! Think it over. |
218 |
truncate-lines |
truncate-lines |
219 |
case-fold-search |
case-fold-search |
220 |
case-replace |
case-replace |
221 |
fill-column |
fill-column |
222 |
overwrite-mode |
overwrite-mode |
223 |
change-log-default-name |
change-log-default-name |
224 |
line-number-mode |
line-number-mode |
225 |
buffer-file-coding-system) |
buffer-file-coding-system) |
226 |
"List of local variables to save for each buffer. |
"List of local variables to save for each buffer. |
227 |
The variables are saved only when they really are local." |
The variables are saved only when they really are local." |
228 |
:type '(repeat symbol) |
:type '(repeat symbol) |
280 |
(make-obsolete-variable 'desktop-buffer-misc-functions |
(make-obsolete-variable 'desktop-buffer-misc-functions |
281 |
'desktop-save-buffer) |
'desktop-save-buffer) |
282 |
|
|
283 |
(defcustom desktop-buffer-mode-handlers '( |
(defcustom desktop-buffer-mode-handlers |
284 |
(dired-mode . dired-restore-desktop-buffer) |
'((dired-mode . dired-restore-desktop-buffer) |
285 |
(rmail-mode . rmail-restore-desktop-buffer) |
(rmail-mode . rmail-restore-desktop-buffer) |
286 |
(mh-folder-mode . mh-restore-desktop-buffer) |
(mh-folder-mode . mh-restore-desktop-buffer) |
287 |
(Info-mode . Info-restore-desktop-buffer)) |
(Info-mode . Info-restore-desktop-buffer)) |
288 |
"Alist of major mode specific functions to restore a desktop buffer. |
"Alist of major mode specific functions to restore a desktop buffer. |
289 |
Functions are called by `desktop-read'. List elements must have the form |
Functions are called by `desktop-read'. List elements must have the form |
290 |
\(MAJOR-MODE . RESTORE-BUFFER-FUNCTION). |
\(MAJOR-MODE . RESTORE-BUFFER-FUNCTION). |
578 |
(let ((filename (expand-file-name desktop-base-file-name dirname)) |
(let ((filename (expand-file-name desktop-base-file-name dirname)) |
579 |
(info |
(info |
580 |
(mapcar |
(mapcar |
581 |
(function |
#'(lambda (b) |
|
(lambda (b) |
|
582 |
(set-buffer b) |
(set-buffer b) |
583 |
(list |
(list |
584 |
(desktop-file-name (buffer-file-name) dirname) |
(desktop-file-name (buffer-file-name) dirname) |
615 |
(when (member (car locals) loclist) |
(when (member (car locals) loclist) |
616 |
(setq ll (cons (car locals) ll))))) |
(setq ll (cons (car locals) ll))))) |
617 |
(setq locals (cdr locals))) |
(setq locals (cdr locals))) |
618 |
ll)))) |
ll))) |
619 |
(buffer-list))) |
(buffer-list))) |
620 |
(buf (get-buffer-create "*desktop*"))) |
(buf (get-buffer-create "*desktop*"))) |
621 |
(set-buffer buf) |
(set-buffer buf) |
636 |
" kill-ring))\n")) |
" kill-ring))\n")) |
637 |
|
|
638 |
(insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n") |
(insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n") |
639 |
(mapcar |
(mapcar #'(lambda (l) |
640 |
(function |
(if (apply 'desktop-save-buffer-p l) |
641 |
(lambda (l) |
(progn |
642 |
(if (apply 'desktop-save-buffer-p l) |
(insert "(desktop-create-buffer " desktop-file-version) |
643 |
(progn |
(mapcar #'(lambda (e) |
644 |
(insert "(desktop-create-buffer " desktop-file-version) |
(insert "\n " (desktop-value-to-string e))) |
645 |
(mapcar |
l) |
646 |
(function |
(insert ")\n\n")))) |
647 |
(lambda (e) |
info) |
|
(insert "\n " (desktop-value-to-string e)))) |
|
|
l) |
|
|
(insert ")\n\n"))))) |
|
|
info) |
|
648 |
(setq default-directory dirname) |
(setq default-directory dirname) |
649 |
(when (file-exists-p filename) (delete-file filename)) |
(when (file-exists-p filename) (delete-file filename)) |
650 |
(let ((coding-system-for-write 'emacs-mule)) |
(let ((coding-system-for-write 'emacs-mule)) |
809 |
(defvar desktop-first-buffer) ;; Dynamically bound in `desktop-read' |
(defvar desktop-first-buffer) ;; Dynamically bound in `desktop-read' |
810 |
) |
) |
811 |
|
|
812 |
(defun desktop-create-buffer ( |
(defun desktop-create-buffer |
813 |
desktop-file-version |
(desktop-file-version |
814 |
desktop-buffer-file-name |
desktop-buffer-file-name |
815 |
desktop-buffer-name |
desktop-buffer-name |
816 |
desktop-buffer-major-mode |
desktop-buffer-major-mode |
817 |
desktop-buffer-minor-modes |
desktop-buffer-minor-modes |
818 |
desktop-buffer-point |
desktop-buffer-point |
819 |
desktop-buffer-mark |
desktop-buffer-mark |
820 |
desktop-buffer-read-only |
desktop-buffer-read-only |
821 |
desktop-buffer-misc |
desktop-buffer-misc |
822 |
&optional |
&optional |
823 |
desktop-buffer-locals) |
desktop-buffer-locals) |
824 |
;; Just to silence the byte compiler. Bound locally in `desktop-read'. |
;; Just to silence the byte compiler. Bound locally in `desktop-read'. |
825 |
(eval-when-compile |
(eval-when-compile |
826 |
(defvar desktop-buffer-ok-count) |
(defvar desktop-buffer-ok-count) |
828 |
;; To make desktop files with relative file names possible, we cannot |
;; To make desktop files with relative file names possible, we cannot |
829 |
;; allow `default-directory' to change. Therefore we save current buffer. |
;; allow `default-directory' to change. Therefore we save current buffer. |
830 |
(save-current-buffer |
(save-current-buffer |
831 |
(let ( |
(let ((buffer-list (buffer-list)) |
832 |
(buffer-list (buffer-list)) |
(result |
833 |
(result |
(condition-case err |
834 |
(condition-case err |
(funcall (or (cdr (assq desktop-buffer-major-mode |
835 |
(funcall (or (cdr (assq desktop-buffer-major-mode desktop-buffer-mode-handlers)) |
desktop-buffer-mode-handlers)) |
836 |
'desktop-restore-file-buffer) |
'desktop-restore-file-buffer) |
837 |
desktop-buffer-file-name |
desktop-buffer-file-name |
838 |
desktop-buffer-name |
desktop-buffer-name |
839 |
desktop-buffer-misc) |
desktop-buffer-misc) |
840 |
(error |
(error |
841 |
(message "Desktop: Can't load buffer %s: %s" |
(message "Desktop: Can't load buffer %s: %s" |
842 |
desktop-buffer-name (error-message-string err)) |
desktop-buffer-name |
843 |
(when desktop-missing-file-warning (sit-for 1)) |
(error-message-string err)) |
844 |
nil))) |
(when desktop-missing-file-warning (sit-for 1)) |
845 |
) |
nil)))) |
846 |
(if (bufferp result) |
(if (bufferp result) |
847 |
(setq desktop-buffer-ok-count (1+ desktop-buffer-ok-count)) |
(setq desktop-buffer-ok-count (1+ desktop-buffer-ok-count)) |
848 |
(setq desktop-buffer-fail-count (1+ desktop-buffer-fail-count)) |
(setq desktop-buffer-fail-count (1+ desktop-buffer-fail-count)) |
860 |
(unless (equal (buffer-name) desktop-buffer-name) |
(unless (equal (buffer-name) desktop-buffer-name) |
861 |
(rename-buffer desktop-buffer-name)) |
(rename-buffer desktop-buffer-name)) |
862 |
;; minor modes |
;; minor modes |
863 |
(cond ( |
(cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible |
864 |
;; backwards compatible |
(auto-fill-mode 1)) |
865 |
(equal '(t) desktop-buffer-minor-modes) |
((equal '(nil) desktop-buffer-minor-modes) ; backwards compatible |
866 |
(auto-fill-mode 1))( |
(auto-fill-mode 0)) |
867 |
(equal '(nil) desktop-buffer-minor-modes) |
(t |
868 |
(auto-fill-mode 0))( |
(mapcar #'(lambda (minor-mode) |
869 |
t |
(when (functionp minor-mode) (funcall minor-mode 1))) |
870 |
(mapcar |
desktop-buffer-minor-modes))) |
|
#'(lambda (minor-mode) |
|
|
(when (functionp minor-mode) (funcall minor-mode 1))) |
|
|
desktop-buffer-minor-modes))) |
|
871 |
;; Even though point and mark are non-nil when written by `desktop-save' |
;; Even though point and mark are non-nil when written by `desktop-save' |
872 |
;; they may be modified by handlers wanting to set point or mark themselves. |
;; they may be modified by handlers wanting to set point or mark themselves. |
873 |
(when desktop-buffer-point |
(when desktop-buffer-point |