diff options
| author | Juanma Barranquero | 2003-05-19 22:17:30 +0000 |
|---|---|---|
| committer | Juanma Barranquero | 2003-05-19 22:17:30 +0000 |
| commit | 7bcbf3c23cb1eaf99e43736b09cb9b451b7cb1c8 (patch) | |
| tree | de6ec395d64c904857baa46d0f793254abd95644 | |
| parent | ab16145759593e5e0eff935a8eb10abbaf57f5a8 (diff) | |
| download | emacs-7bcbf3c23cb1eaf99e43736b09cb9b451b7cb1c8.tar.gz emacs-7bcbf3c23cb1eaf99e43736b09cb9b451b7cb1c8.zip | |
(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.
| -rw-r--r-- | lisp/desktop.el | 111 |
1 files changed, 55 insertions, 56 deletions
diff --git a/lisp/desktop.el b/lisp/desktop.el index 5213e968cf0..7508d46ce29 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el | |||
| @@ -581,53 +581,49 @@ DIRNAME must be the directory in which the desktop file will be saved." | |||
| 581 | "Save the Desktop file. Parameter DIRNAME specifies where to save desktop." | 581 | "Save the Desktop file. Parameter DIRNAME specifies where to save desktop." |
| 582 | (interactive "DDirectory to save desktop file in: ") | 582 | (interactive "DDirectory to save desktop file in: ") |
| 583 | (run-hooks 'desktop-save-hook) | 583 | (run-hooks 'desktop-save-hook) |
| 584 | (setq dirname (file-name-as-directory (expand-file-name dirname))) | ||
| 584 | (save-excursion | 585 | (save-excursion |
| 585 | (let ((filename (expand-file-name desktop-base-file-name dirname)) | 586 | (let ((filename (concat dirname desktop-base-file-name)) |
| 586 | (info | 587 | (info |
| 587 | (mapcar | 588 | (mapcar |
| 588 | (function | 589 | (function |
| 589 | (lambda (b) | 590 | (lambda (b) |
| 590 | (set-buffer b) | 591 | (set-buffer b) |
| 591 | (list | 592 | (list |
| 592 | (desktop-file-name (buffer-file-name) dirname) | 593 | (desktop-file-name (buffer-file-name) dirname) |
| 593 | (buffer-name) | 594 | (buffer-name) |
| 594 | major-mode | 595 | major-mode |
| 595 | ;; minor modes | 596 | ;; minor modes |
| 596 | (let (ret) | 597 | (let (ret) |
| 597 | (mapcar | 598 | (mapcar |
| 598 | #'(lambda (mim) | 599 | #'(lambda (mim) |
| 599 | (and | 600 | (and |
| 600 | (boundp mim) | 601 | (boundp mim) |
| 601 | (symbol-value mim) | 602 | (symbol-value mim) |
| 602 | (setq | 603 | (setq ret |
| 603 | ret | 604 | (cons |
| 604 | (cons | 605 | (let ((special (assq mim desktop-minor-mode-table))) |
| 605 | (let ( | 606 | (if special (cadr special) mim)) |
| 606 | (special (assq mim desktop-minor-mode-table)) | 607 | ret)))) |
| 607 | ) | 608 | (mapcar #'car minor-mode-alist)) |
| 608 | (if special (cadr special) mim)) | 609 | ret) |
| 609 | ret)))) | 610 | (point) |
| 610 | (mapcar #'car minor-mode-alist)) | 611 | (list (mark t) mark-active) |
| 611 | ret) | 612 | buffer-read-only |
| 612 | (point) | 613 | (run-hook-with-args-until-success 'desktop-buffer-misc-functions) |
| 613 | (list (mark t) mark-active) | 614 | (let ((locals desktop-locals-to-save) |
| 614 | buffer-read-only | 615 | (loclist (buffer-local-variables)) |
| 615 | (run-hook-with-args-until-success 'desktop-buffer-misc-functions) | 616 | (ll)) |
| 616 | (let ( | 617 | (while locals |
| 617 | (locals desktop-locals-to-save) | 618 | (let ((here (assq (car locals) loclist))) |
| 618 | (loclist (buffer-local-variables)) | 619 | (if here |
| 619 | (ll) | 620 | (setq ll (cons here ll)) |
| 620 | ) | 621 | (when (member (car locals) loclist) |
| 621 | (while locals | 622 | (setq ll (cons (car locals) ll))))) |
| 622 | (let ((here (assq (car locals) loclist))) | 623 | (setq locals (cdr locals))) |
| 623 | (if here | 624 | ll)))) |
| 624 | (setq ll (cons here ll)) | 625 | (buffer-list))) |
| 625 | (when (member (car locals) loclist) | 626 | (buf (get-buffer-create "*desktop*"))) |
| 626 | (setq ll (cons (car locals) ll))))) | ||
| 627 | (setq locals (cdr locals))) | ||
| 628 | ll)))) | ||
| 629 | (buffer-list))) | ||
| 630 | (buf (get-buffer-create "*desktop*"))) | ||
| 631 | (set-buffer buf) | 627 | (set-buffer buf) |
| 632 | (erase-buffer) | 628 | (erase-buffer) |
| 633 | 629 | ||
| @@ -695,11 +691,14 @@ Returns t if it has read a desktop file, nil otherwise." | |||
| 695 | (setq desktop-dirname (and dirs (expand-file-name (car dirs)))) | 691 | (setq desktop-dirname (and dirs (expand-file-name (car dirs)))) |
| 696 | (if desktop-dirname | 692 | (if desktop-dirname |
| 697 | (let ((desktop-first-buffer nil)) | 693 | (let ((desktop-first-buffer nil)) |
| 698 | ;; `desktop-create-buffer' sets `desktop-first-buffer' to the first | 694 | ;; Evaluate desktop buffer. |
| 699 | ;; buffer in the desktop file (the last for desktop files written | ||
| 700 | ;; by desktop version prior to 206). | ||
| 701 | (load (expand-file-name desktop-base-file-name desktop-dirname) t t t) | 695 | (load (expand-file-name desktop-base-file-name desktop-dirname) t t t) |
| 702 | (when desktop-first-buffer (switch-to-buffer desktop-first-buffer)) | 696 | ;; `desktop-create-buffer' puts buffers at end of the buffer list. |
| 697 | ;; We want buffers existing prior to evaluating the desktop (and not reused) | ||
| 698 | ;; to be placed at the end of the buffer list, so we move them here. | ||
| 699 | (mapcar 'bury-buffer | ||
| 700 | (nreverse (cdr (memq desktop-first-buffer (nreverse (buffer-list)))))) | ||
| 701 | (switch-to-buffer (car (buffer-list))) | ||
| 703 | (run-hooks 'desktop-delay-hook) | 702 | (run-hooks 'desktop-delay-hook) |
| 704 | (setq desktop-delay-hook nil) | 703 | (setq desktop-delay-hook nil) |
| 705 | (run-hooks 'desktop-after-read-hook) | 704 | (run-hooks 'desktop-after-read-hook) |
| @@ -885,14 +884,14 @@ This function always sets `desktop-enable' to t." | |||
| 885 | (setq result (funcall handler)) | 884 | (setq result (funcall handler)) |
| 886 | (setq hlist (cdr hlist))) | 885 | (setq hlist (cdr hlist))) |
| 887 | (unless (bufferp result) (setq result nil)) | 886 | (unless (bufferp result) (setq result nil)) |
| 887 | ;; Restore buffer list order with new buffer at end. Don't change | ||
| 888 | ;; the order for old desktop files (old desktop module behaviour). | ||
| 888 | (unless (< desktop-file-version 206) | 889 | (unless (< desktop-file-version 206) |
| 889 | (when result (setq buffer-list (cons result buffer-list))) | 890 | (mapcar 'bury-buffer buffer-list) |
| 890 | (mapcar 'bury-buffer buffer-list)) | 891 | (when result (bury-buffer result))) |
| 891 | (when result | 892 | (when result |
| 892 | (if (< desktop-file-version 206) | 893 | (unless (or desktop-first-buffer (< desktop-file-version 206)) |
| 893 | (setq desktop-first-buffer result) | 894 | (setq desktop-first-buffer result)) |
| 894 | (bury-buffer result)) | ||
| 895 | (unless desktop-first-buffer (setq desktop-first-buffer result)) | ||
| 896 | (set-buffer result) | 895 | (set-buffer result) |
| 897 | (unless (equal (buffer-name) desktop-buffer-name) | 896 | (unless (equal (buffer-name) desktop-buffer-name) |
| 898 | (rename-buffer desktop-buffer-name)) | 897 | (rename-buffer desktop-buffer-name)) |