I don't like jumping back and forth between a buffer and the repl when testing small snippets of code, I prefer to temporarily insert them into the buffer and eval them in place.
This creates problems in slime because some features (who-calls, compiler notes) only work properly with compilation, which means I have to use both eval and compile for this strategy to be effective.
This leads to errors when done manually so I defined this function:
(defun slime-eval/compile-defun-dwim (&optional arg) "Call the computation command you want (Do What I Mean). Look at defun and determine whether to call `slime-eval-defun' or `slime-compile-defun'.
A prefix of `-' forces evaluation, any other prefix forces compilation." (interactive "P") (case arg ;; prefix is `-', evaluate defun ('- (slime-eval-defun)) ;; no prefix, automatically determine action ('nil (if (string-match "^(def" (slime-defun-at-point)) (slime-compile-defun) (slime-eval-defun))) ;; prefix is not `-', compile defun (otherwise (slime-compile-defun))))
I use this command all the time so I bind it on M-j. This is bound to indent-new-comment-line by default but it isn't missed since it is also bound on C-M-j. Having the command bound on a Meta key is useful because I don't have to release Meta to M-n or M-p if I get compiler notes.
I thought this might be helpful, but maybe I'm missing something. How do other people typically interact with lisp? What are the most commonly used commands?