敢えて言おう lisp-interaction-mode はいみふめであると
 2006.09.06

*scratch* バッファの major-mode は標準では lisp-interaction-mode ですが、このモードの存在意義がわかりません。

lisp-interaction-mode は emacs-lisp-mode を継承し、キーマップは lisp-mode-shared-map を複製したものに以下を追加しています。

C-M-x   eval-defun
C-M-q   indent-pp-sexp          ; Emacs 22
M-TAB   lisp-complete-symbol
C-j     eval-print-last-sexp

これは emacs-lisp-mode でも同様であり、lisp-interaction-mode-map にあって emacs-lisp-mode-map にないのは eval-print-last-sexp だけです。

C-j といえば Global Bindings では newline-and-indent なわけで、こんな重要なキーを潰す意味がわかりません。 改行はふつー C-j でしょう。 C-m (RET) して C-i (TAB) するより C-j です。

また、eval-print-last-sexp ではなく eval-last-sexp であれば、ストローク数こそ違いますが Global Bindings として C-x C-e にバインドされています。 eval-last-sexp は評価した結果はバッファでなく minibuffer に表示します。 つまり履歴が *Messages* に残ります。 バッファに書き込みたい場合は、引数をつけて C-u C-x C-e とすればできます。 eval-print-last-sexp と違い前後に改行が入りませんが、この方が好ましい場合もあるのではないでしょうか。

どう便利なのかわからない lisp-interaction-mode より、emacs-lisp-mode の方が幸せになれると思います。

(setq initial-major-mode 'emacs-lisp-mode)

Lisper でないひとは fundamental-mode や text-mode, outline-mode あたりにして、 メモとして使うってのもありですね。

豆知識。 *scratch* バッファがなくなったときは、switch-to-buffer なりで新規に *scratch* というバッファを作れば initial-major-mode で初期化されるよ。

カテゴリー:Emacs