lispxmp - 敢えて言おう lisp-interaction-mode はカスであると

過激なタイトルだがあまり真に受けないようにw

http://memo.jj-net.jp/44より。

eval-last-sexpフェチ発見。俺も含めてけっこうレアかもしれないな。

俺はさらにその考え方を推し進めてeval-last-sexpの評価結果を右横に書き込むようにしている。いわゆるxmpである。rubyistxmpfilterを使っている人ならおなじみ。

以下のコードを評価すればemacs-lisp-modeでC-c C-eを押せばlispxmp-emacs-lispが実行できる。C-x C-eと同じような感覚で実行できるようにC-c C-eだ。ついでにSLIMEでもできるようにしてある。

(defun %lispxmp-doit (eval-last-sexp-function)
  (let ((comment-start ";"))
    (comment-kill nil)
    (comment-indent)
    (save-excursion
      (let ((current-prefix-arg t)) (call-interactively eval-last-sexp-function)))
    (insert " => ")))

(defun lispxmp-emacs-lisp ()
  (interactive)
  (%lispxmp-doit 'eval-last-sexp))

(defun lispxmp-slime ()
  (interactive)
  (%lispxmp-doit 'slime-eval-last-expression))

(define-key emacs-lisp-mode-map "\C-c\C-e" 'lispxmp-emacs-lisp)
(define-key slime-mode-map "\C-c\C-e" 'lispxmp-slime)

実行例はこんな感じ。

(+ 1 3)                                 ; => 4 (#o4, #x4)
(find-file-noselect "~/.emacs")         ; => #<buffer .emacs>