diff options
| author | Juanma Barranquero | 2013-08-04 02:31:33 +0200 |
|---|---|---|
| committer | Juanma Barranquero | 2013-08-04 02:31:33 +0200 |
| commit | 5414a28349ac68be10ef077a59933ce677fd785e (patch) | |
| tree | 8351c7485f3bd6149bca104687594c35870ac524 | |
| parent | 98f638d640c0bb4cbda7a3134611b03b6ee08d44 (diff) | |
| download | emacs-5414a28349ac68be10ef077a59933ce677fd785e.tar.gz emacs-5414a28349ac68be10ef077a59933ce677fd785e.zip | |
lisp/desktop.el (desktop-clear): Be more careful about deleting frames.
Do it only when called interactively and desktop-restore-frames is non-nil.
Doc fix.
(desktop-read): Set desktop-saved-frameset to nil.
| -rw-r--r-- | lisp/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/desktop.el | 30 |
2 files changed, 25 insertions, 11 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f971cb202f4..ae54e4d526e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2013-08-04 Juanma Barranquero <lekktu@gmail.com> | ||
| 2 | |||
| 3 | * desktop.el (desktop-clear): Only delete frames when called | ||
| 4 | interactively and desktop-restore-frames is non-nil. Doc fix. | ||
| 5 | (desktop-read): Set desktop-saved-frameset to nil. | ||
| 6 | |||
| 1 | 2013-08-03 Juanma Barranquero <lekktu@gmail.com> | 7 | 2013-08-03 Juanma Barranquero <lekktu@gmail.com> |
| 2 | 8 | ||
| 3 | * frameset.el (frameset-prop): New function and setter. | 9 | * frameset.el (frameset-prop): New function and setter. |
diff --git a/lisp/desktop.el b/lisp/desktop.el index cf07681d78a..778c37484e1 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el | |||
| @@ -643,7 +643,10 @@ DIRNAME omitted or nil means use `desktop-dirname'." | |||
| 643 | "Empty the Desktop. | 643 | "Empty the Desktop. |
| 644 | This kills all buffers except for internal ones and those with names matched by | 644 | This kills all buffers except for internal ones and those with names matched by |
| 645 | a regular expression in the list `desktop-clear-preserve-buffers'. | 645 | a regular expression in the list `desktop-clear-preserve-buffers'. |
| 646 | Furthermore, it clears the variables listed in `desktop-globals-to-clear'." | 646 | Furthermore, it clears the variables listed in `desktop-globals-to-clear'. |
| 647 | When called interactively and `desktop-restore-frames' is non-nil, it also | ||
| 648 | deletes all frames except the selected one (and its minibuffer frame, | ||
| 649 | if different)." | ||
| 647 | (interactive) | 650 | (interactive) |
| 648 | (desktop-lazy-abort) | 651 | (desktop-lazy-abort) |
| 649 | (dolist (var desktop-globals-to-clear) | 652 | (dolist (var desktop-globals-to-clear) |
| @@ -662,16 +665,20 @@ Furthermore, it clears the variables listed in `desktop-globals-to-clear'." | |||
| 662 | (string-match-p preserve-regexp bufname)) | 665 | (string-match-p preserve-regexp bufname)) |
| 663 | (kill-buffer buffer))))) | 666 | (kill-buffer buffer))))) |
| 664 | (delete-other-windows) | 667 | (delete-other-windows) |
| 665 | (let* ((this (selected-frame)) | 668 | (when (and desktop-restore-frames |
| 666 | (mini (window-frame (minibuffer-window this)))) ; in case they difer | 669 | ;; Non-interactive calls to desktop-clear happen before desktop-read |
| 667 | (dolist (frame (sort (frame-list) #'frameset-sort-frames-for-deletion)) | 670 | ;; which already takes care of frame restoration and deletion. |
| 668 | (condition-case err | 671 | (called-interactively-p 'any)) |
| 669 | (unless (or (eq frame this) | 672 | (let* ((this (selected-frame)) |
| 670 | (eq frame mini) | 673 | (mini (window-frame (minibuffer-window this)))) ; in case they difer |
| 671 | (frame-parameter frame 'desktop-dont-clear)) | 674 | (dolist (frame (sort (frame-list) #'frameset-sort-frames-for-deletion)) |
| 672 | (delete-frame frame)) | 675 | (condition-case err |
| 673 | (error | 676 | (unless (or (eq frame this) |
| 674 | (delay-warning 'desktop (error-message-string err))))))) | 677 | (eq frame mini) |
| 678 | (frame-parameter frame 'desktop-dont-clear)) | ||
| 679 | (delete-frame frame)) | ||
| 680 | (error | ||
| 681 | (delay-warning 'desktop (error-message-string err)))))))) | ||
| 675 | 682 | ||
| 676 | ;; ---------------------------------------------------------------------------- | 683 | ;; ---------------------------------------------------------------------------- |
| 677 | (unless noninteractive | 684 | (unless noninteractive |
| @@ -1152,6 +1159,7 @@ Using it may cause conflicts. Use it anyway? " owner))))) | |||
| 1152 | (walk-window-tree (lambda (window) | 1159 | (walk-window-tree (lambda (window) |
| 1153 | (set-window-prev-buffers window nil) | 1160 | (set-window-prev-buffers window nil) |
| 1154 | (set-window-next-buffers window nil)))) | 1161 | (set-window-next-buffers window nil)))) |
| 1162 | (setq desktop-saved-frameset nil) | ||
| 1155 | t)) | 1163 | t)) |
| 1156 | ;; No desktop file found. | 1164 | ;; No desktop file found. |
| 1157 | (desktop-clear) | 1165 | (desktop-clear) |