diff --git a/CHANGELOG.md b/CHANGELOG.md index d17f69c16..80b7af676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ ### Changes +- `cider-eval`: support re-rendering the Inspector buffer when `cider-inspector-auto-select-buffer` is set to nil and there's a `*cider-inspect*` buffer shown in a non-visible frame. + - This supports the workflow of using the inspector occasionally (less intrusively), but ready to be shown anytime. - [#3626](https://github.com/clojure-emacs/cider/issues/3626): `cider-ns-refresh`: jump to the relevant file/line on errors. - [#3628](https://github.com/clojure-emacs/cider/issues/3628): `cider-ns-refresh`: summarize errors as an overlay. - Bump the injected nREPL to [1.1.1](https://github.com/nrepl/nrepl/blob/v1.1.1/CHANGELOG.md#111-2024-02-20). diff --git a/cider-eval.el b/cider-eval.el index b504e5b40..3b02c3d26 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -1001,7 +1001,7 @@ when `cider-auto-inspect-after-eval' is non-nil." (cider--make-fringe-overlay end)) (when (and cider-auto-inspect-after-eval (boundp 'cider-inspector-buffer) - (windowp (get-buffer-window cider-inspector-buffer 'visible))) + (windowp (cider--get-inspector-window))) (cider-inspect-last-result) (select-window (get-buffer-window buffer))) (when cider-eval-register diff --git a/cider-inspector.el b/cider-inspector.el index 103452c17..6cca0de00 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -31,13 +31,12 @@ (require 'easymenu) (require 'seq) (require 'cider-eval) +(require 'cider-util) ;; =================================== ;; Inspector Key Map and Derived Mode ;; =================================== -(defconst cider-inspector-buffer "*cider-inspect*") - ;;; Customization (defgroup cider-inspector nil "Presentation and behavior of the CIDER value inspector." diff --git a/cider-util.el b/cider-util.el index 8316af962..b18235ecc 100644 --- a/cider-util.el +++ b/cider-util.el @@ -826,6 +826,24 @@ KIND can be the symbols `ns', `var', `emph', `fn', or a face name." (t x))) menu-list)) +;; Defined here to avoid circular dependencies +(defconst cider-inspector-buffer "*cider-inspect*") + +(defun cider--get-inspector-window () + "Returns a window showing the *cider-inspect* buffer, +honoring the `cider-inspector-auto-select-buffer' preference. + +May return nil." + (get-buffer-window cider-inspector-buffer + ;; pass arguments that work well with the existing + ;; `(cider-popup-buffer-display cider-inspector-buffer cider-inspector-auto-select-buffer)' + ;; usage in cider-inspector.el, + ;; namely: for `cider-inspector-auto-select-buffer' t, only consider windows that can be selected, + ;; for `cider-inspector-auto-select-buffer' nil, consider windows in all frames. + (if cider-inspector-auto-select-buffer + 'visible + t))) + (provide 'cider-util) ;;; cider-util.el ends here diff --git a/doc/modules/ROOT/pages/debugging/inspector.adoc b/doc/modules/ROOT/pages/debugging/inspector.adoc index d894f492b..5aa98f52b 100644 --- a/doc/modules/ROOT/pages/debugging/inspector.adoc +++ b/doc/modules/ROOT/pages/debugging/inspector.adoc @@ -17,7 +17,12 @@ Alternatively, after a regular eval command, you can inspect the last evaluated value using `cider-inspect-last-result`. When an inspector buffer is visible in the background, it is automatically updated with the last result. This behavior can be controlled with the variable -`cider-auto-inspect-after-eval`. +`cider-auto-inspect-after-eval` (and `cider-inspector-auto-select-buffer` +for even more fine-grained control over the UX). + +TIP: setting `cider-auto-inspect-after-eval` to `t` and `cider-inspector-auto-select-buffer` to nil +allows you to have the cider-inspector permanently open in a background frame. This way, +it's always there as you eval forms, while it doesn't interrupt you when it's not needed.` TIP: The inspector can also be invoked in the middle of a debugging session, see xref:debugging/debugger.adoc[here] for more details.