From e140417b934069f702a7136907290c3b076db7f1 Mon Sep 17 00:00:00 2001 From: vemv Date: Thu, 14 Mar 2024 08:42:27 +0100 Subject: [PATCH] `cider-eval`: Introduce new `cider-auto-inspect-after-eval-select-window` defcustom It allows one to have the `*cider-inspect*` buffer rendered without switching to it. --- CHANGELOG.md | 2 ++ cider-eval.el | 7 +++--- cider-inspector.el | 3 +-- cider-util.el | 24 +++++++++++++++++++ .../ROOT/pages/debugging/inspector.adoc | 3 ++- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d17f69c16..025207c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ ### Changes +- `cider-eval`: Introduce new `cider-auto-inspect-after-eval-select-window` defcustom. + - It allows one to have the `*cider-inspect*` buffer rendered without switching to it. - [#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..81e16deb4 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -993,7 +993,7 @@ when `cider-auto-inspect-after-eval' is non-nil." ;; and needs no jumping: phase))) ;; done handler: - (lambda (buffer) + (lambda (_buffer) (if beg (unless fringed (cider--make-fringe-overlays-for-region beg end) @@ -1001,9 +1001,10 @@ 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-auto-inspect-after-eval-select-window + (select-window (cider--get-inspector-window)))) (when cider-eval-register (set-register cider-eval-register res)))))) 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..27ce6c8a1 100644 --- a/cider-util.el +++ b/cider-util.el @@ -826,6 +826,30 @@ 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*") + +(defcustom cider-auto-inspect-after-eval-select-window t + "When t (and `cider-auto-inspect-after-eval' is also t), +the inspector window will be selected after eval. + +When nil, while the underlying *cider-inspect* buffer will be re-rendered, +its window won't be selected. + +You may want the nil value if you like having *cider-inspect* in a background frame." + :type 'boolean + :group 'cider + :package-version '(cider . "1.14.0")) + +(defun cider--get-inspector-window () + "Returns a window showing the *cider-inspect* buffer, +honoring the `cider-auto-inspect-after-eval-select-window' preference. + +May return nil." + (get-buffer-window cider-inspector-buffer (if cider-auto-inspect-after-eval-select-window + '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..f281c9006 100644 --- a/doc/modules/ROOT/pages/debugging/inspector.adoc +++ b/doc/modules/ROOT/pages/debugging/inspector.adoc @@ -17,7 +17,8 @@ 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-auto-inspect-after-eval-select-window`, +`cider-inspector-auto-select-buffer` for even more fine-grained control over the UX). TIP: The inspector can also be invoked in the middle of a debugging session, see xref:debugging/debugger.adoc[here] for more details.