Skip to content

Instantly share code, notes, and snippets.

@thickey
Last active December 28, 2015 17:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thickey/7533701 to your computer and use it in GitHub Desktop.
Save thickey/7533701 to your computer and use it in GitHub Desktop.
A little bit of elisp for outputting the form in the repl buffer in front of output. (a la Tim Baldridge's Clojure/conj 2013 core.async presentation).
;; Works with nrepl-0.1.6.el
(defun my-form-printing-handler (buffer form)
(lexical-let ((form form))
(nrepl-make-response-handler buffer
(lambda (buffer value)
(nrepl-emit-result buffer (format "%s" form) t)
(nrepl-emit-result buffer (format "%s" value) t))
(lambda (buffer out)
(nrepl-emit-output buffer out t))
(lambda (buffer err)
(nrepl-emit-output buffer err t))
(lambda (buffer)
(nrepl-emit-prompt buffer)))))
(defun my-interactive-eval-to-repl (form)
(let ((buffer nrepl-nrepl-buffer))
(nrepl-send-string form (my-form-printing-handler buffer form) nrepl-buffer-ns)))
(defun my-eval-last-expression-to-repl ()
(interactive)
(my-interactive-eval-to-repl (nrepl-last-expression)))
(defun my-eval-expression-at-point (&optional prefix)
"Evaluate the current toplevel form."
(interactive "P")
(let ((form (nrepl-expression-at-point)))
(if prefix
(nrepl-interactive-eval-print form)
(my-interactive-eval-to-repl form))))
(add-hook 'nrepl-interaction-mode-hook
(lambda ()
(nrepl-turn-on-eldoc-mode)
(enable-paredit-mode)
(define-key nrepl-interaction-mode-map
(kbd "C-x C-e") 'my-eval-last-expression-to-repl)
(define-key nrepl-interaction-mode-map
(kbd "C-M-x") 'my-eval-expression-at-point)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment