はい、すべての Emacs コマンドは関数ですが、すべての関数が Emacs コマンドであるとは限りません。M-x
以下を使用して、任意の elisp 関数をコマンドにアクセス可能にすることができます(interactive)
。
(defun my-command ()
"This is the docstring"
(interactive)
(do-foo)
(do-bar))
インタラクティブとして定義my-command
したので、すぐにアクセスできますM-x my-command
。Emacs は、名前を使ってすべての簿記を自動的に行います。
新しいコマンドを追加するために必要なことはこれだけです。次に、次のような方法でキーにバインドできます。
(global-set-key (kbd "C-c f") 'my-command)
さらに、すべてのキーバインディングは、このようなインタラクティブな機能に関連付けられています。C-h k
キーシーケンスを使用および入力して、どのキーでどの機能が呼び出されるかを確認できます。これにより、そのキー シーケンスで呼び出される関数のドキュメントが得られます。私が提供したコードを実行すると、C-h k C-c f
(とりわけ) doc-string を含むバッファーが得られます。
C-c f runs the command my-command, which is an interactive Lisp
function.
It is bound to C-c f.
(my-command)
This is the docstring
つまり、すべての Emacs コマンドは、 で定義された単なる関数(interactive)
です。(実際には、Emacs の C コアのプリミティブ関数もいくつかありますが、それほど重要ではありません。)
コマンドと関数の間のこのシンプルで洗練された関係 (どちらの方向にも簡単に従うことができる) は、Emacs を非常に簡単にカスタマイズできる理由の一部です。通常のアクションがどの関数を呼び出したのか疑問に思った場合は、簡単に調べることができます。さらにコマンドを追加したい場合は、関数に 1 行追加するだけです。