の2番目の引数は、コマンド定義global-set-key
である必要があります。通常は、対話型関数に名前を付けるシンボルです。インタラクティブ関数は、フォームで始まる関数です。例えば:(interactive)
(defun delete-to-end ()
"Delete text from point to the end of buffer."
(interactive)
(delete-region (point) (point-max)))
これにより、対話型関数が定義され、シンボルに割り当てられますdelete-to-end
。その後、にdelete-to-end
渡すことができる有効なコマンドですglobal-set-key
:
(global-set-key [f12] 'delete-to-end)
(interactive)
この行がなくてdelete-to-end
も、Lispプログラムから呼び出し可能な関数に名前を付けることができますが、それは「コマンド」ではありません。インタラクティブとしてマークされているため、(commandp 'delete-to-end)
trueを返し、機能しM-x delete-to-endます。
インタラクティブ関数はシンボルにバインドする必要はなく、匿名にすることができます。他の無名関数と同様に、lambda
フォームを使用して作成されますが、コマンドの場合は。も含める必要があります(interactive)
。global-set-key
匿名コマンドは、シンボルに割り当てずに2番目の引数として渡すことができるため、次の定義は上記の定義と同等です。
(global-set-key [f12]
(lambda ()
"Delete text from point to the end of buffer."
(interactive)
(delete-region (point) (point-max))))
C-h c
...少し読みにくく、またはで検査すると見栄えが悪いことを除いてC-h k。
あなたの場合、への最初の呼び出しにglobal-set-key
は有効なコマンドが与えられますが(引用符で囲まれたlambda
形式自体は有効な関数です)、2番目の呼び出しにはそうではなく、呼び出すことも要件を満たさない2要素のリストが与えられます。 「インタラクティブ」とマークされています。