Is er een haak die ik kan gebruiken om mijn functie uit te voeren wanneer het punt beweegt?

Ik zou graag een navigatie-context toevoegen aan de modeline. Ik kan uitvinden waar ik prima in zit en de naam van mijn functie geven, maar ik weet niet hoe ik dit moet doen elke keer dat een punt beweegt.

post-command-hook is the only thing I've found, but it sounds like it's overkill. Is there anything more appropriate?

4
@Harald Ik denk dat het misschien niet zo is. De documentatie is niet erg duidelijk over wanneer deze haak wordt uitgevoerd (dat wil zeggen wat een opdracht vormt). Voor de goede orde, ik ben 100% bereid om te accepteren 'dat is in feite het juiste om te gebruiken' als een antwoord.
toegevoegd de auteur pelms, de bron
M-x elisp-index-zoek RET commando . Een opdracht is een functie met een interactief -formulier, of een toetsenbordmacro (tekenreeks- of vectorindeling).
toegevoegd de auteur Mark Ireland, de bron
Waarom is post-command-hook overbodig? Mogelijk wilt u niet dat uw hook wordt uitgevoerd als elk tijdpunt wordt verplaatst, als dit wordt gedaan met een bepaalde elisp-code. Er is veel code die het punt verplaatst om dingen te doen. Toegegeven, het wordt meestal gedaan binnen een save-excursion , maar toch ... (Ik weet niet of de code kan beslissen of save-excursion van kracht is of niet.)
toegevoegd de auteur AttackingHobo, de bron

1 antwoord

Ik denk dat post-command-hook is wat je wilt gebruiken.

Het wordt elke keer uitgevoerd als een commando is uitgevoerd. En een opdracht is in feite elke interactieve actie, zoals het klikken op een muisknop, het typen van een letter (die self-insert-command uitvoert of een opdracht uitvoert met M-x .

Misschien wilt u ervoor zorgen dat uw haak niet wordt gebruikt terwijl u in de minibuffer typt. Ik denk dat het inpakken van het lichaam in (tenzij (window-minibuffer-p) ...) dat voor jou zal verzorgen.

En mogelijk wilt u dat uw hook alleen actief is wanneer u bepaalde bestanden bewerkt. In dat geval zou u kunnen overwegen om de post-command-hook -buffer lokaal te maken: Gebruiken

(add-hook 'post-command-hook #'your-hook nil :local)

zal dat voor je regelen. ( Bewerkt om dit laatste punt toe te voegen.)

7
toegevoegd
Voer hook-variables niet buffer-lokaal uit. Gebruik in plaats daarvan het argument LOCAL bij het aanroepen van add-hook .
toegevoegd de auteur Mark Ireland, de bron
@phils Excellent punt. Ik zal het antwoord bijwerken.
toegevoegd de auteur AttackingHobo, de bron