Last active
December 28, 2015 17:09
-
-
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).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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