У меня есть дерево глубоко вложенных раскладок, с множеством возможных листьев (команд), слишком много для человека, чтобы помнить. Для простоты предположим, что каждая команда связана с данным именем файла.
Я хотел бы отобразить подсказку для справки, когда пользователь идет по этим картам клавиатуры, указывая, какие файлы/команды привязаны к клавишам.
Итак, я хотел бы связать с некоторыми ключевыми картами краткую документацию и отобразить ее всякий раз, когда пользователь «подключен» к раскладке (возможно, используя help-fns + .el или какую-либо другую пользовательскую docstring).
Каков наилучший способ сделать это?
Это похоже на то, что делает тот-ключ . Когда вы вводите префиксный ключ, после короткой паузы в боковом окне отображается список ключей в раскладке и команды, с которыми они связаны. Это здорово для вещей, которые вы не бросаете, достаточно часто, чтобы запомниться.
Установите его с помощью package-install which-key
и активируйте его с помощью (который-key-mode)
.
Существует недоиспользуемая встроенная функциональность с аналогичной целью.
Вы можете увидеть это в действии, выполнив: M-x smerg-mode RET
, а затем C-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))
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.
There is another library, guide-key
, which some of what Icicles key completion does, if you are not interested in using Icicles in general.
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
.