A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/clojure-emacs/cider/issues/3663 below:

Change `cider-interactive-eval-override` to make it more usable · Issue #3663 · clojure-emacs/cider · GitHub

Is your feature request related to a problem? Please describe.

The cider-interactive-eval-override variable can be used to change the way forms are evaluated by cider-interactive-eval, but contrary to what is said in the docstring, it does not actually forward cider-interactive-eval's last optional argument additional-params.

Consider the following example, where I want to be able to wrap every evaluation with a custom form which simply prints :wrapped before the target form is evaluated:

(defun println-override (form &optional callback bounds)
  (let ((cider-interactive-eval-override nil))
    (cider-interactive-eval (concat "(do (println :wrapped) " form ")")
                            callback
                            bounds)))

(setq cider-interactive-eval-override #'println-override)

This almost works, it correctly wraps any form evaluated and the println happens, but the pretty printing of some commands (like cider-pprint-eval-last-sexp) does not work anymore, because the last argument was not forwarded.

Describe the solution you'd like

Adding the missing argument to cider-interactive-eval-override's call site (funcall cider-interactive-eval-override form callback bounds additional-params) is very easy, but it would break backward compatibility. I'm not very fluent in Elisp so maybe there is a way to work around that.

With that change, the previous code can be changed to the following:

(defun println-override (form &optional callback bounds additional-params)
  (let ((cider-interactive-eval-override nil))
    (cider-interactive-eval (concat "(do (println :wrapped) " form ")")
                            callback
                            bounds
                            additional-params)))

(setq cider-interactive-eval-override #'println-override)

Which seems to work perfectly.

Additional context

As I searched for examples of correct usage of cider-interactive-eval-override on Github, it seems that it is in fact very rarely used. There might be a better way to wrap evaluation than this.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4