I\'m using nrepl.el from git (0.1.6-preview, via el-get recipe), and I would like clojure buffer evals: C-x C-e, C-M-x, C-c C-r for form, top-level form and region respectively,
Here is a version that also sends errors to the correct windows:
(defun my-nrepl-handler (buffer)
"Make an interactive eval handler for buffer, but emit the value or out to the repl, not the minibuffer."
(nrepl-make-response-handler buffer
(lambda (buffer value)
(progn
(nrepl-emit-result (nrepl-current-repl-buffer) value t)
(nrepl-emit-prompt (nrepl-current-repl-buffer))))
(lambda (buffer out)
(nrepl-emit-interactive-output out)
(nrepl-emit-prompt (nrepl-current-repl-buffer)))
(lambda (buffer err)
(message "%s" err)
(nrepl-highlight-compilation-errors buffer err))
(lambda (buffer)
(nrepl-emit-prompt buffer))))
(defun my-interactive-eval-to-repl (form)
"Evaluate the given FORM and print value in the repl."
(remove-overlays (point-min) (point-max) 'nrepl-note-p t)
(let ((buffer (current-buffer)))
(nrepl-send-string form (my-nrepl-handler buffer) (nrepl-current-ns))))
(defun my-eval-last-expression-to-repl ()
(interactive)
(my-interactive-eval-to-repl (nrepl-last-expression)))
(eval-after-load 'nrepl
'(progn
(define-key nrepl-interaction-mode-map (kbd "C-x C-e") 'my-eval-last-expression-to-repl)))
Since none of the solutions provided here work with the version I have, I came up with my own implementation:
(defun eval-in-nrepl ()
(interactive)
(let ((exp (nrepl-last-expression)))
(with-current-buffer (nrepl-current-repl-buffer)
(nrepl-replace-input exp)
(nrepl-return))))
(eval-after-load 'nrepl
'(define-key nrepl-interaction-mode-map
(kbd "C-x C-.")
'eval-in-nrepl))
It binds C-x C-. to the desired behavior.
The behavior you described is not presently supported in nrepl.el.
But the good news is you are in emacs-land, so it should be possible to write your own custom handler to direct the output to the nrepl buffer and adjust your key bindings if you like.
For example, this is the equivalent of C-x C-e but sends the result of the evaluation to the repl buffer instead of the minibuffer:
(defun my-interactive-eval-to-repl (form)
(let ((buffer nrepl-nrepl-buffer))
(nrepl-send-string form (nrepl-handler buffer) nrepl-buffer-ns)))
(defun my-eval-last-expression-to-repl ()
(interactive)
(my-interactive-eval-to-repl (nrepl-last-expression)))