コマンドを無効化するとは、対話的に呼び出した際にユーザーに確認を求めるようになることを意味します。コマンドを無効化する目的は、ユーザーが誤って実行してしまうのを防ぐことであり、不慣れな人にとって紛らわしい可能性のあるコマンドに対してこの措置を講じます。
Emacsで無効なコマンドを対話的に実行しようとすると、コマンド名、ドキュメント、および直ちに行うべき操作に関する指示を含むウィンドウが表示されます。その後、Emacsは、要求通りにコマンドを実行するか、有効にして実行するか、あるいはキャンセルするかを問う入力を求めます。コマンドを有効にすることに決めた場合は、さらに別の質問――これを恒久的に行うか、あるいは現在のセッションのみで行うか――に答える必要があります。(恒久的に有効にするには、初期化ファイルが自動的に編集されます。)また、! と入力することで、現在のセッションに限りすべてのコマンドを有効にすることもできます。
コマンドを無効化する直接的な方法は、そのコマンドのLispシンボルにnil disabled以外のプロパティを設定することです。これを行うためのLispプログラムを以下に示します。
(put 'delete-region 'disabled t)
disabled
プロパティの値が文字列の場合、その文字列はコマンド使用時に表示されるメッセージに含まれます:
(put 'delete-region 'disabled
"It's better to use `kill-region' instead.\n")
コマンドを無効化する手法よりも控えめな代替案として、コマンド実行前に確認を求めるという方法があります。例えば、M-> (end-of-buffer)
コマンドの実行前に確認を行うには、initファイルに以下のような記述を追加します。
(command-query 'end-of-buffer "Do you really want to go to the end of the buffer?")
デフォルトでは y/n
の質問が投げられますが、3番目のオプション引数に nil 以外の値を指定すると、代わりに yes/no の質問が投げられます。
コマンドを無効にするには、初期化ファイルを直接編集するか、初期化ファイルを編集してくれる M-x disable-command コマンドを使用します。同様に、M-x enable-command は初期化ファイルを編集して、コマンドを恒久的に有効にします。Emacs 初期化ファイル を参照してください。
Emacsを-qまたは--no-init-fileオプション(初期オプションを参照)付きで起動した場合、初期化ファイルは編集されません。そうすると、Emacsが初期化ファイルを読み込んでいないため、情報が失われる可能性があります。
コマンドが無効かどうかは、どのキーで呼び出すかとは無関係であり、M-x を用いて呼び出す場合も無効になります。ただし、コマンドを無効にしても、Lisp プログラムから関数として呼び出す場合には影響はありません。