Next: , Previous: Recursive Editing, Up: Command Loop


20.12 コマンドを禁止する

コマンドを禁止するとは、 コマンドを実行するまえにユーザーの確認を必要とするように コマンドに印を付けることです。 コマンドを禁止するのは、 初心者に混乱をもたらす可能性のあるコマンドに対してや、 コマンドの誤用を防ぐためです。

コマンドを禁止する低レベルの機構は、 コマンドのLispシンボルにnil以外の属性disabledを入れることです。 これらの属性は、通常、ユーザーの.emacsファイルにて つぎのようなLisp式で設定します。

     (put 'upcase-region 'disabled t)

数個のコマンドにはデフォルトでこれらの属性がありますから、 .emacsファイルで属性を取り除きます。

属性disabledの値は文字列であり、 コマンドを禁止したことを表すメッセージです。 たとえばつぎのとおりです。

     (put 'delete-region 'disabled
          "Text deleted this way cannot be yanked back!\n")

禁止したコマンドを対話的に起動するとどうなるかについて 詳しくはSee 使用禁止コマンド。 コマンドを禁止しても、Lispプログラムから関数として呼び出すことには なんの影響もありません。

— コマンド: enable-command command

これ以降、特別な確認なしにcommandを実行可能にする。 さらに(ユーザーが了承すれば)ユーザーの.emacsファイルを変更して、 将来のセッションでもそのようにする。

— コマンド: disable-command command

これ以降、commandの実行には特別な確認を必要とするようにする。 さらに(ユーザーが了承すれば)ユーザーの.emacsファイルを変更して、 将来のセッションでもそのようにする。

— Variable: disabled-command-hook

禁止したコマンドをユーザーが対話的に起動したとき、 禁止したコマンドのかわりにこのノーマルフックを実行する。 フック関数では、this-command-keysを使って コマンドを実行するためにユーザーがなにを入力したかを調べ、 コマンドそのものを探し出せる。 see Hooks

デフォルトでは、disabled-command-hookには、 ユーザーに処理を進めるかどうかを問い合わせる関数が入っている。