Bindingen tonen voor prefix keymaps

Ik heb een boom met diep geneste keymaps, met veel mogelijke bladeren (commando's), te veel voor een mens om te onthouden. Laten we voor de eenvoud zeggen dat elke opdracht is gekoppeld aan een bepaalde bestandsnaam.

Ik wil graag een helptool-tip weergeven als de gebruiker deze keymaps doorloopt, om aan te geven welke bestanden/opdrachten aan welke toetsen gebonden zijn.

Ik zou dus graag een korte documentatie willen koppelen aan bepaalde keymaps en deze weergeven wanneer de gebruiker "op" de keymap staat (misschien met behulp van help-fns + .el of een andere aangepaste docstring).

Wat is de beste manier om dit te doen?

5
Wat bedoel je met " als de gebruiker deze keymaps afloopt "? Wat bedoel je hier met "naar beneden lopen"? Evenzo, wat bedoel je met een gebruiker die "op" een keymap is? Kun je beschrijven wat de gebruiker in een dergelijke situatie doet?
toegevoegd de auteur Ryan Eastabrook, de bron

3 antwoord

Dit klinkt als precies wat het pakket met de sleutel doet. Wanneer u een prefixcode typt, wordt na een korte pauze een lijst met toetsen in de toetsenbordindeling en de opdrachten waaraan ze zijn gebonden weergegeven in een zijvenster. Het is geweldig voor dingen waar je niet mee ophoudt vaak genoeg doet om te onthouden.

Installeer het met pakket-installeer welke-sleutel en activeer het met (welke-toets-modus) .

3
toegevoegd
U kunt de vertraging wijzigen door die-sleutel-idle-vertraging in te stellen op 0.0 . U kunt wijzigen waar de pop-up wordt getoond. Ik gebruik which-key-setup-side-window-right om er een temp-buffer aan de rechterkant van te maken.
toegevoegd de auteur Fernando Barrocal, de bron
Dit doet bijna wat ik wil, behalve enkele problemen: 1. omdat mijn functies naamloos zijn, krijg ik een nutteloze "sleutel ==> lambda" voor alle sleutels. 2. het minibuffergebied is te klein om alle bindingen weer te geven, ik zou een tijdelijke buffer nodig hebben, en 3. Ik zou graag 0 vertraging willen voordat de kaart getoond wordt. Maar ik kan zeker naar de bron kijken en deze voor mijn geval repareren. Bedankt
toegevoegd de auteur Jeff Atwood, de bron

Er is een onderbenutte ingebouwde functionaliteit met een vergelijkbaar doel.

Je kunt het in actie zien door te doen: M-x smerg-mode RET en dan C-c ^ = die je onmiddellijk de mogelijke opties in die prefix keymap zou moeten laten zien, in de trant van

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

Omdat het te weinig wordt gebruikt, is het ook nogal primitief (de verwarring tussen de = -toets en het = -teken is nogal vervelend in het bovenstaande voorbeeld). Om dit te krijgen, was het belangrijkste deel van de code (getranslitereerd door het gebruik van 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
toegevoegd
Je antwoord heeft niets te maken met de oorspronkelijke vraag.
toegevoegd de auteur Avrom, de bron
Ah rotzooi, je hebt gelijk. Ik moest zowel de vraag als je antwoord opnieuw lezen om te ontdekken dat je niet de smerg-modus zelf bedoelde, maar de hint na de C-c ^ =. Sorry, ik kon het niet uitvinden nadat ik niet alleen het antwoord had gelezen, maar het ook echt had geprobeerd. En toch, in org-mode kan ik het niet gebruiken.
toegevoegd de auteur Avrom, de bron
@avp: misschien heb ik zijn vraag verkeerd begrepen, maar ik denk dat het zeker een antwoord is op de oorspronkelijke vraag.
toegevoegd de auteur sds, de bron
Als u deze faciliteit wilt gebruiken en er problemen mee hebt, kan ik u helpen. Het bovenstaande antwoord laat zien hoe smerge het gebruikt.
toegevoegd de auteur sds, de bron
  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
toegevoegd
Hoewel het een zeer veelbelovende documentatie is, werkt de functie zelf heel contra-intuïtief. Daarom stem ik voor welke-sleutel .
toegevoegd de auteur Avrom, de bron