同じコマンドを使いつつ、有効化条件が異なるメニュー項目を作成すると便利な場合があります。現在のEmacsでこれを実現する最善の方法は、拡張メニュー項目を使用することです。この機能が登場する前は、エイリアスコマンドを定義し、それをメニュー項目で使用することで実現できました。以下に、read-only-mode
に対して2つのエイリアスを作成し、それぞれに異なる有効化条件を設定する例を示します。
(defalias 'make-read-only 'read-only-mode) (put 'make-read-only 'menu-enable '(not buffer-read-only)) (defalias 'make-writable 'read-only-mode) (put 'make-writable 'menu-enable 'buffer-read-only)
メニューでエイリアスを使用する場合、エイリアス(通常はメニュー自体以外にキーバインドを持たない)ではなく、実際のコマンド名に対応するキーバインドを表示させると便利なことが多いです。これを実現するには、エイリアスシンボルに
non-nil menu-alias
プロパティを指定します。したがって、
(put 'make-read-only 'menu-alias t) (put 'make-writable 'menu-alias t)
make-read-only と make-writable のメニュー項目に、read-only-mode のキーボードバインドが表示されるようになります。