プレフィックスキーマップのバインディングの表示

私は深くネストされたキーマップのツリーを持ち、多くの可能な葉(コマンド)を持ち、人間が覚えるには余りにも多くあります。簡単にするために、各コマンドが特定のファイル名に関連付けられているとします。

ユーザーがこれらのキーマップを歩いているときにヘルプツールチップを表示して、どのファイル/コマンドがどのキーにバインドされているかを示したいと思います。

だから、特定のキーマップに関連する短いドキュメントを関連づけて、ユーザーがキーマップを "オン"しているときはいつでも表示したい(おそらくhelp-fns + .elやその他のカスタムドキュメント文字列を使用する)。

これを行う最善の方法は何ですか?

5
"ユーザーがこれらのキーマップを歩いているとき"とはどういう意味ですか?ここで "歩く"とはどういう意味ですか?同様に、ユーザーがキーマップを「オン」にしているとはどういう意味ですか?このような状況でユーザーが何をしているのか説明できますか?
追加された 著者 Ryan Eastabrook,

3 答え

これは which-key パッケージのようなものです。プレフィックスキーを入力すると、短い一時停止の後に、キーマップ内のキーのリストとそれらがバインドされているコマンドがサイドウィンドウに表示されます。あなたが何度も覚えていないほどやりたくないものには最適です。

package-install which-key でインストールし、(which-key-mode)で有効にします。

3
追加された
which-key-idle-delay0.0 に設定すると、遅延を変更できます。ポップアップが表示される場所を変更することができます。 which-key-setup-side-window-right を使用して、右側に一時バッファを作成します。
追加された 著者 Fernando Barrocal,
これは、私がいくつかの問題を除いて私が望むことをほとんど行いません:1.私の関数は名前がないので、私は役に立たない "キー==>ラムダ"をすべてのキーに得ます。 2.ミニバッファ領域が小さすぎるため、すべてのバインディングを表示できません。一時バッファが必要です。3.マップを表示する前に0遅延が必要です。しかし、私は確かにソースを見て、私の場合はこれらを修正することができます。ありがとう
追加された 著者 Jeff Atwood,

同様の目的で不足している組み込み機能があります。

M-smmer-mode RETC-c ^ = を実行すると、そのプレフィックスキーマップの可能なオプションを直ちに表示することで、

Diff: = = mine-other, > = base-other, < = base-mine

これはあまり使用されていません(上記の例では = キーと = 記号の混乱がむしろ厄介です)。これを得るために、コードの主要部分は( easy-mmode-defmap の使用から翻訳された)

(define-key map [?=] (make-sparse-keymap "Diff")
(define-key map [?= ?<] '("base-mine" . smerge-diff-base-mine))
(define-key map [?= ?>] '("base-other" . smerge-diff-base-other))
(define-key map [?= ?=] '("mine-other" . smerge-diff-mine-other))
1
追加された
あなたの答えは元の質問とは関係ありません。
追加された 著者 Avrom,
ああ、あなたは正しいです。私はあなたがsmmer-modeそのものを意味するのではなく、C-c ^の後ろのヒントを見つけるために、質問とあなたの答えの両方を再読しなければならなかった。申し訳ありませんが、私は答えを読むだけでなく、実際にそれを試した後にそれを理解することができませんでした。それでも、私はそれを使うことができません。
追加された 著者 Avrom,
@avp:多分私は彼の質問を誤解したかもしれませんが、私はそれが間違いなくオリジナルの質問に対する答えだと思います。
追加された 著者 sds,
あなたはこの機能を使用すると、それに問題がある場合、私はあなたを助けることができます。上記の答えは、スマーリッジがどのようにそれを使用しているかを示しています。
追加された 著者 sds,
  1. Not sure I understand the question, but it sounds like Icicles key completion will help.

    When you have hit a prefix key (e.g. C-x or C-x 4), if you hit S-TAB (by default) all of the bindings on that prefix key are displayed in buffer *Completions* along with the commands they are bound to. You can explore them (showing complete descriptions on demand or short descriptions just by cycling among them) -- and hit C-g if you don't want to invoke any of them. Or you can complete any of them and invoke it.

    This works also for prefix keys that are on prefix keys, such as C-x 4, which is in C-x. If you hit C-x S-TAB then one of the candidates you see in *Completions* is 4 = .... The ... here means that 4 is itself a prefix key. If you choose that candidate then *Completions* is changed to show you the keys (and commands) bound on C-x 4.

    You can also navigate upward in the keymap hierarchy. The first candidate in *Completions* for a prefix keymap is ... Choosing that candidate moves you back up to the parent keymap.

  2. There is another library, guide-key, which some of what Icicles key completion does, if you are not interested in using Icicles in general.

  3. Without Icicles or guide-key, you can at least use C-h with vanilla Emacs to get a listing (in *Help*) of the keys bound on a prefix key. For example, C-x C-h shows you the keys bound on prefix key C-x.

0
追加された
非常に有望なドキュメンテーションではありますが、この機能自体は非常に直感的です。したがって、私は which-key に投票します。
追加された 著者 Avrom,