2012-09-25 5 views
11

コマンド、Emacsで私が実行できるコマンドなど(ちなみに私はexecute-extended-command用スタンドを信じて)M-X。このコマンドM-x自体は、customize_faceのようなものを実行するために使用されます。ミニバッファにM-x customize-faceと入力します。の関係は、私が理解から

私の質問は以下のとおりです。

Q.1。customize-face?それともファンクションですか?そしてcustomize-faceコマンドM-xの引数として渡されているとしますか?

Q.2すべてのEmacsコマンドに、関連するEmacs ファンクションがありますか? (つまり、M-x customize-faceと入力すると、定義された関数が呼び出されます)。もしそうなら、どのようにしてコマンド名から関数名を調べることができますか?

+0

M-xは関数ではなく、関数にバインドされたキーシーケンスです。それが起こると、コマンドをパラメータとして受け取る関数にバインドされます。インタラクティブに呼び出されると、その 'interactive'形式はコマンド名の入力を要求します。 – tripleee

答えて

19

はい、すべてのEmacsコマンドは機能ですが、すべての機能がEmacsコマンドではありません。あなたは、任意のelisp機能(interactive)を使用してM-x介してアクセス可能なコマンドにすることができます。今すぐ

(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-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 

:あなたがコードを実行した場合、私は(他のものの間で)あなたを含む緩衝液を与えるだろうC-h k C-c fをやって、あなたのドキュメント文字列をあなたに与えたすべてのEmacsコマンドは(interactive)で定義された関数だけです。 (実際には、EmacsのCコアのプリミティブ関数もいくつかありますが、それはそれほど重要ではありません)

コマンドと関数の間のこのシンプルで洗練された関係は、 Emacsを簡単にカスタマイズできるようにするものです。あなたの通常のアクションが呼び出す関数が何であるか不思議であれば、それらを簡単に調べることができます。コマンドを追加したい場合は、関数内に余分な行が1つだけあります。

+2

http://www.gnu.org/software/emacs/manual/html_node/elisp/Command-Overview.htmlは、今後の読書の出発点になるかもしれません。 – tripleee

+1

@Tikhon Jelvisさん、ありがとうございました。もう1つの質問ですが、 'C-h k'を使ってどのキーがどの関数を呼び出すかを調べる方法を説明しましたが、コマンドによって呼び出される関数を見つけるにはどうすればいいですか? (例えば、** Dired + **を使用する場合は 'M-x dired') –

+3

' C-h F'を実行してコマンド名を入力できます。 *必ずしもコマンドではない*関数を探すには、スコープ内のすべての関数で動作する 'C-h f'を使うことができます。 –

6

さらに詳しく:関数にもコマンドとしてラベル付けするために(interactive)を追加する必要があるのではないかと疑問を抱く人にとっては、関数に引数を提供する方法を説明するのはinteractiveです。したがって、(interactive)は "これもコマンドであり、インタラクティブに実行すると、の引数をの引数なしで呼び出します。(interactive (list 2))は"これもコマンドであり、インタラクティブに実行すると、式(list 2)は引数のリストを作成しますコマンドに "。

ので、代わりに専用フォーム(interactive ARGs-FORM)を取る、それはまたRETURN-FORMが対話的に呼ばれ、戻り値、をどうするかを指定するフォーム(interactive ARGS-FORM RETURN-FORM)を取ることができinteractiveの拡張について議論が行われています。典型的な例:current-column機能としては何も表示しますが、単に数を返しますが、対話的に実行したとき(すなわちコマンドとして使用)、それはそれは無用になり、何も印刷されない場合は、そのRETURN-FORMていません返された数字を受け取り、それを印刷します。

関連する問題