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)
      (set-default var (eval (cdr var)))))
  (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).
                        (if (daemonp) (not (frame-parameter frame 'client)))
			(frame-parameter frame 'desktop-dont-clear))
	      (delete-frame frame))
	  (error
	   (delay-warning 'desktop (error-message-string err))))))))