1

グローバルモードも付属するマイナーモードがあります。モードにはいくつかのキーバインディングがあり、各モードでどのバインディングが機能するかをユーザーが指定できるようにしたいと考えています。

(my-minor-mode-bindings-for-mode 'some-mode '(key1 key2 ...))
(my-minor-mode-bindings-for-mode 'some-other-mode '(key3 key4 ...))

そのため、ある種のモード/バッファー ローカル キー マップが必要です。ユーザーがメジャーモードを変更できるため、バッファローカルは少し問題があります。

どちらもうまくいかない解決策をいくつか試しました。

  1. 可能なすべてのキーを常にバインドし、ユーザーがキーを入力したときに、そのモードでキーをアクティブにする必要があるかどうかを確認します。true の場合はアクションを実行し、そうでない場合はフォールバックします。
  2. 前のケースと同様に、キーがバインドされていないという点だけです。代わりに、コマンド前のフックを使用して、押されたキーが何かを実行するかどうかを確認します。
  3. バッファの更新ごとに (それが何を意味するにせよ)、最初にキー マップをクリアし、次にその特定のモードのバインディングで更新する関数を実行します。

私はこれらのアプローチを試しましたが、それらすべてに問題があることがわかりました。これを解決する良い方法を知っていますか?

ありがとう!

4

2 に答える 2

1

キーバインディングは私が推測するフックです:

(add-hook 'some-mode-hook
 (lambda ()
 (define-key some-mode-map (kbd "C-c w") 'something)
 ...
 )
)

もちろん、匿名関数はより複雑になる可能性があり、やりたいことは何でもチェックできます。もちろん、バインディングをインタラクティブに変更する必要がある場合は、単にインタラクティブな関数を使用できます...

于 2010-04-18T14:49:47.703 に答える
0

変数some-mode-mapバッファーをローカルにし、some-mode有効にすると、どのキー バインド セットをインストールするかを確認します。はバッファー ローカルであるためsome-mode-map、キー バインドはそのバッファーに対してローカルである必要があります (他のバッファーには影響しません)。

于 2010-04-20T16:52:57.823 に答える