diff --git a/lisp/lib/config.el b/lisp/lib/config.el index 489180d34..2067815ad 100644 --- a/lisp/lib/config.el +++ b/lisp/lib/config.el @@ -1,7 +1,7 @@ ;;; lisp/lib/config.el -*- lexical-binding: t; -*- ;;;###autoload -(defvar doom-after-reload-hook nil +(defvar doom-after-reload-hook '(doom-kill-childframes-h) "A list of hooks to run after `doom/reload' has reloaded Doom.") ;;;###autoload diff --git a/lisp/lib/ui.el b/lisp/lib/ui.el index 4a8d1ac6b..7612e0ac7 100644 --- a/lisp/lib/ui.el +++ b/lisp/lib/ui.el @@ -80,6 +80,20 @@ In tty Emacs, messages are suppressed completely." (defun doom-disable-line-numbers-h () (display-line-numbers-mode -1)) +;;;###autoload +(defun doom-kill-childframes-h () + "Delete all childframes (and `posframe' frames)." + (dolist (frame (frame-list)) + (when (or (frame-parameter frame 'posframe-buffer) + (frame-parameter nil 'parent-frame)) + (let (delete-frame-functions) + (delete-frame frame)))) + (when (featurep 'posframe) + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when posframe--frame + (posframe--kill-buffer buffer)))))) + ;; ;;; Commands diff --git a/modules/completion/ivy/config.el b/modules/completion/ivy/config.el index 5eb502cdb..ee912bc38 100644 --- a/modules/completion/ivy/config.el +++ b/modules/completion/ivy/config.el @@ -357,9 +357,7 @@ workable results ripgrep produces, despite the error." ;; posframe. (dolist (fn '(swiper counsel-rg counsel-grep counsel-git-grep)) (setf (alist-get fn ivy-posframe-display-functions-alist) - #'ivy-display-function-fallback)) - - (add-hook 'doom-after-reload-hook #'posframe-delete-all)) + #'ivy-display-function-fallback))) (use-package! flx diff --git a/modules/completion/vertico/config.el b/modules/completion/vertico/config.el index ae962e7f6..1e09feefb 100644 --- a/modules/completion/vertico/config.el +++ b/modules/completion/vertico/config.el @@ -363,9 +363,8 @@ orderless." (use-package! vertico-posframe :when (modulep! +childframe) - :hook (vertico-mode . vertico-posframe-mode) - :config - (add-hook 'doom-after-reload-hook #'posframe-delete-all)) + :hook (vertico-mode . vertico-posframe-mode)) + ;; From https://github.com/minad/vertico/wiki#candidate-display-transformations-custom-candidate-highlighting ;; diff --git a/modules/ui/workspaces/config.el b/modules/ui/workspaces/config.el index be9031053..225033397 100644 --- a/modules/ui/workspaces/config.el +++ b/modules/ui/workspaces/config.el @@ -214,11 +214,8 @@ stored in `persp-save-dir'.") ;; Fix #1973: visual selection surviving workspace changes (add-hook 'persp-before-deactivate-functions #'deactivate-mark) - ;; Fix #1017: stop session persistence from restoring a broken posframe - (after! posframe - (add-hook! 'persp-after-load-state-functions - (defun +workspaces-delete-all-posframes-h (&rest _) - (posframe-delete-all)))) + ;; Fix #1017: stop session persistence from restoring broken childframes. + (add-hook 'persp-after-load-state-functions #'doom-kill-childframes-h) ;; Don't try to persist dead/remote buffers. They cause errors. (add-hook! 'persp-filter-save-buffers-functions