aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuanma Barranquero2013-08-04 02:31:33 +0200
committerJuanma Barranquero2013-08-04 02:31:33 +0200
commit5414a28349ac68be10ef077a59933ce677fd785e (patch)
tree8351c7485f3bd6149bca104687594c35870ac524
parent98f638d640c0bb4cbda7a3134611b03b6ee08d44 (diff)
downloademacs-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/ChangeLog6
-rw-r--r--lisp/desktop.el30
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 @@
12013-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
12013-08-03 Juanma Barranquero <lekktu@gmail.com> 72013-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.
644This kills all buffers except for internal ones and those with names matched by 644This kills all buffers except for internal ones and those with names matched by
645a regular expression in the list `desktop-clear-preserve-buffers'. 645a regular expression in the list `desktop-clear-preserve-buffers'.
646Furthermore, it clears the variables listed in `desktop-globals-to-clear'." 646Furthermore, it clears the variables listed in `desktop-globals-to-clear'.
647When called interactively and `desktop-restore-frames' is non-nil, it also
648deletes all frames except the selected one (and its minibuffer frame,
649if 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)