Von Zeit zu Zeit beobachte ich unerwartetes Verhalten beim Bearbeiten von Text. Meine erste Möglichkeit besteht normalerweise darin C-h k
, herauszufinden, welche Funktionen von einer bestimmten Tastenfolge aufgerufen werden. Manchmal widerspricht die Dokumentation jedoch dem beobachteten Verhalten. In diesen Fällen gehe ich normalerweise davon aus, dass sich ein anderes Paket in diese Funktion oder Tastenfolge eingebunden hat und ihr Verhalten ändert.
Wie kann ich herausfinden, welche Funktionen in meine Tastenfolge eingebunden sind?
Ein Beispiel, auf das ich kürzlich gestoßen bin, war das Drücken der "Taste und das Einfügen von Anführungszeichen am Anfang und Ende des aktiven Bereichs. Ich hatte den Verdacht, dass dies nicht das Standardverhalten von Emacs war, also habe ich C-h k "
herausgefunden, welche Funktion tatsächlich aufgerufen wurde.
Die describe-key
Dokumentation hat mir gesagt , dass die Funktion self-insert-command
aufgerufen wurde, die eine eingebaute Funktion ist. Um es kurz zu machen, nach einigem Ausprobieren konnte ich feststellen, dass das Verhalten durch verursacht wurde electric-pair-mode
. Gibt es in Zukunft einen schnelleren Weg, um zu dieser Schlussfolgerung zu gelangen, als verdächtige Pakete einzeln auszuschalten, bis der Täter gefunden ist?
electric-pair-mode
nur in einigen Hauptmodi aktiviert wurde? Sehen Sie nochself-insert-command
für ,"
wenn Sie tun ,C-h k
währendelectric-pair-mode
aktiv ist?electric-pair-mode
funktioniert, indem man sich einhaktpost-self-insert-hook
und nicht, indem man die Tastenkombination ändert.C-h k
sagt Ihnen genau, was bei einem Tastendruck passiert. Wenn Sie sich die Dokumentation ansehenself-insert-command
, wird sehr deutlich angezeigt,post-self-insert-hook
dass der Befehl ausgeführt wird, nachdem er ausgeführt wurde.after-change-functions
wie Jordon in seiner Antwort erwähnt? In der Dokumentation einer Funktion wird dieser Haken wahrscheinlich nicht speziell erwähnt, oder?C-h k
+ die Standard-Hooks == das komplette Verhalten (mehr oder weniger). Natürlich lässt das manchmal eine Menge Möglichkeiten offen, aber es ist immer noch viel transparenter als jedes andere komplexe Softwaresystem, das ich kenne.Antworten:
Es gibt keine einfache Möglichkeit, genau zu wissen, was ein einziger Tastendruck bewirkt.
Wenn Sie zusätzliches Verhalten sehen, überprüfen Sie immer die allgemeinen Haken. Die Liste finden Sie hier: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html
In den meisten Fällen sind die wichtigsten:
Sie müssen diese Haken untersuchen und die darin enthaltenen Funktionen überprüfen, um festzustellen, welche Ihr Verhalten ändert.
Wenn die Funktionen in diesen Hooks das beobachtete Verhalten nicht vollständig beschreiben, überprüfen Sie die Funktionen auf Hinweise, die in der Dokumentation von aufgeführt werden
describe-function
.Bearbeiten: Ich habe einige Funktionen geschrieben, um einen Hook besser zu beschreiben, als die einzelnen Funktionen durchzugehen : https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb Sie können dort
describe-hook
definierte Funktionen wie die anderen Beschreibungsfunktionen verwenden. Hier ist ein Beispiel für die Ausgabe:Und hier ist der gesamte Code für den Fall, dass das Wesentliche verschwindet:
quelle
documentation
wird entsprechend aktualisiert.Möglicherweise ist Ihre Frage nicht vollständig beantwortet, aber das Paket
helm-descbinds
hilft Ihnen beim Durchsuchen aller definierten Tastaturbelegungen in der ASCII-Darstellung der Verknüpfung. Für jeden Treffer wird die mit der Tastenkombination verknüpfte interaktive Funktion angezeigt. Sie können danach fragenhelm-descbinds
, ob Sie sie beschreiben möchten, oder sie direkt aus den Suchergebnissen ausführen .Hier ist die Paketbeschreibung von der GitHub-Site:
quelle
C-h b
. Mein einziger Wunsch ist , dass ich die aktuelle Tastenfolge auf der Liste zu dem Element springen könnte durch Eingabe statt einer Eingabe ausC
-
c
_
C
-
p