(desktop-save): Ensure parameter is expanded and ends with a slash before

assigning it to desktop-dirname and default-directory.
(desktop-read): Put buffers existing prior to evaluating the desktop (and not
reused) at the end of the buffer list.
(desktop-create-buffer): Don't update desktop-first-buffer for old desktop
files.
This commit is contained in:
Juanma Barranquero 2003-05-19 22:17:30 +00:00
parent ab16145759
commit 7bcbf3c23c

View file

@ -581,53 +581,49 @@ DIRNAME must be the directory in which the desktop file will be saved."
"Save the Desktop file. Parameter DIRNAME specifies where to save desktop." "Save the Desktop file. Parameter DIRNAME specifies where to save desktop."
(interactive "DDirectory to save desktop file in: ") (interactive "DDirectory to save desktop file in: ")
(run-hooks 'desktop-save-hook) (run-hooks 'desktop-save-hook)
(setq dirname (file-name-as-directory (expand-file-name dirname)))
(save-excursion (save-excursion
(let ((filename (expand-file-name desktop-base-file-name dirname)) (let ((filename (concat dirname desktop-base-file-name))
(info (info
(mapcar (mapcar
(function (function
(lambda (b) (lambda (b)
(set-buffer b) (set-buffer b)
(list (list
(desktop-file-name (buffer-file-name) dirname) (desktop-file-name (buffer-file-name) dirname)
(buffer-name) (buffer-name)
major-mode major-mode
;; minor modes ;; minor modes
(let (ret) (let (ret)
(mapcar (mapcar
#'(lambda (mim) #'(lambda (mim)
(and (and
(boundp mim) (boundp mim)
(symbol-value mim) (symbol-value mim)
(setq (setq ret
ret (cons
(cons (let ((special (assq mim desktop-minor-mode-table)))
(let ( (if special (cadr special) mim))
(special (assq mim desktop-minor-mode-table)) ret))))
) (mapcar #'car minor-mode-alist))
(if special (cadr special) mim)) ret)
ret)))) (point)
(mapcar #'car minor-mode-alist)) (list (mark t) mark-active)
ret) buffer-read-only
(point) (run-hook-with-args-until-success 'desktop-buffer-misc-functions)
(list (mark t) mark-active) (let ((locals desktop-locals-to-save)
buffer-read-only (loclist (buffer-local-variables))
(run-hook-with-args-until-success 'desktop-buffer-misc-functions) (ll))
(let ( (while locals
(locals desktop-locals-to-save) (let ((here (assq (car locals) loclist)))
(loclist (buffer-local-variables)) (if here
(ll) (setq ll (cons here ll))
) (when (member (car locals) loclist)
(while locals (setq ll (cons (car locals) ll)))))
(let ((here (assq (car locals) loclist))) (setq locals (cdr locals)))
(if here ll))))
(setq ll (cons here ll)) (buffer-list)))
(when (member (car locals) loclist) (buf (get-buffer-create "*desktop*")))
(setq ll (cons (car locals) ll)))))
(setq locals (cdr locals)))
ll))))
(buffer-list)))
(buf (get-buffer-create "*desktop*")))
(set-buffer buf) (set-buffer buf)
(erase-buffer) (erase-buffer)
@ -695,11 +691,14 @@ Returns t if it has read a desktop file, nil otherwise."
(setq desktop-dirname (and dirs (expand-file-name (car dirs)))) (setq desktop-dirname (and dirs (expand-file-name (car dirs))))
(if desktop-dirname (if desktop-dirname
(let ((desktop-first-buffer nil)) (let ((desktop-first-buffer nil))
;; `desktop-create-buffer' sets `desktop-first-buffer' to the first ;; Evaluate desktop buffer.
;; buffer in the desktop file (the last for desktop files written
;; by desktop version prior to 206).
(load (expand-file-name desktop-base-file-name desktop-dirname) t t t) (load (expand-file-name desktop-base-file-name desktop-dirname) t t t)
(when desktop-first-buffer (switch-to-buffer desktop-first-buffer)) ;; `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.
(mapcar 'bury-buffer
(nreverse (cdr (memq desktop-first-buffer (nreverse (buffer-list))))))
(switch-to-buffer (car (buffer-list)))
(run-hooks 'desktop-delay-hook) (run-hooks 'desktop-delay-hook)
(setq desktop-delay-hook nil) (setq desktop-delay-hook nil)
(run-hooks 'desktop-after-read-hook) (run-hooks 'desktop-after-read-hook)
@ -885,14 +884,14 @@ This function always sets `desktop-enable' to t."
(setq result (funcall handler)) (setq result (funcall handler))
(setq hlist (cdr hlist))) (setq hlist (cdr hlist)))
(unless (bufferp result) (setq result nil)) (unless (bufferp result) (setq result nil))
;; Restore buffer list order with new buffer at end. Don't change
;; the order for old desktop files (old desktop module behaviour).
(unless (< desktop-file-version 206) (unless (< desktop-file-version 206)
(when result (setq buffer-list (cons result buffer-list))) (mapcar 'bury-buffer buffer-list)
(mapcar 'bury-buffer buffer-list)) (when result (bury-buffer result)))
(when result (when result
(if (< desktop-file-version 206) (unless (or desktop-first-buffer (< desktop-file-version 206))
(setq desktop-first-buffer result) (setq desktop-first-buffer result))
(bury-buffer result))
(unless desktop-first-buffer (setq desktop-first-buffer result))
(set-buffer result) (set-buffer result)
(unless (equal (buffer-name) desktop-buffer-name) (unless (equal (buffer-name) desktop-buffer-name)
(rename-buffer desktop-buffer-name)) (rename-buffer desktop-buffer-name))