Function: desktop-clear
desktop-clear is an autoloaded, interactive and byte-compiled function
defined in desktop.el.gz.
Signature
(desktop-clear)
Documentation
Empty the Desktop.
This kills all buffers except for internal ones and those with names matched by
a regular expression in the list desktop-clear-preserve-buffers.
Furthermore, it clears the variables listed in desktop-globals-to-clear.
When called interactively and desktop-restore-frames is non-nil, it also
deletes all frames except the selected one (and its minibuffer frame,
if different).
Probably introduced at or before Emacs version 22.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/desktop.el.gz
;; ----------------------------------------------------------------------------
;;;###autoload
(defun desktop-clear ()
"Empty the Desktop.
This kills all buffers except for internal ones and those with names matched by
a regular expression in the list `desktop-clear-preserve-buffers'.
Furthermore, it clears the variables listed in `desktop-globals-to-clear'.
When called interactively and `desktop-restore-frames' is non-nil, it also
deletes all frames except the selected one (and its minibuffer frame,
if different)."
(interactive)
(desktop-lazy-abort)
(setq desktop-io-file-version nil)
(dolist (var desktop-globals-to-clear)
(if (symbolp var)
(set-default var nil)
;; FIXME: To avoid maiming kitten we should also support `funcall'
;; instead of only `eval' here.
(set-default var (eval (cdr var) t))))
(let ((preserve-regexp (concat "\\`\\("
(mapconcat (lambda (regexp)
(concat "\\(" regexp "\\)"))
desktop-clear-preserve-buffers
"\\|")
"\\)\\'")))
(dolist (buffer (buffer-list))
(let ((bufname (buffer-name buffer)))
(unless (or (null bufname)
(eq (aref bufname 0) ?\s) ;; Don't kill internal buffers
(string-match-p preserve-regexp bufname))
(kill-buffer buffer)))))
(delete-other-windows)
(when (and desktop-restore-frames
;; Non-interactive calls to desktop-clear happen before desktop-read
;; which already takes care of frame restoration and deletion.
(called-interactively-p 'any))
(let* ((this (selected-frame))
(mini (window-frame (minibuffer-window this)))) ; in case they differ
(dolist (frame (sort (frame-list) #'frameset-minibufferless-first-p))
(condition-case err
(unless (or (eq frame this)
(eq frame mini)
;; Don't delete daemon's initial frame, or
;; we'll never be able to close the last
;; client's frame (Bug#26912).
(and (daemonp) (eq frame terminal-frame))
(frame-parameter frame 'desktop-dont-clear))
(delete-frame frame))
(error
(delay-warning 'desktop (error-message-string err))))))))