Frage

Betrachtet man einen Tastendruck in Emacs, z.B. C-x C-s . Ich kann herausfinden, welche Funktion es durch Eingabe von ruft C-h c Tastendruck , aber wie kann ich feststellen, wo dieser Keybinding definiert wurde?

(Vielleicht ist die richtige Antwort ist, dass es nicht entschieden werden kann, weil die keymaps speichern nicht diese Art von Informationen.)

War es hilfreich?

Lösung

Die Information, wo keybindings mit Funktionen zugeordnet sind, nicht von Emacs gehalten. In der Tat ist die Antwort in der Regel nicht definiert.

Viele Male Tastenbelegungen werden als Nebeneffekt eines kleineren Modus oder durch Modus Haken einrichten. Die Tastenbelegung für kleinere Modi wird oft in einem gewissen Variable wie comint-mode-map gespeichert. Diese keymap wird durch Setzen des Modus-Variable comint-mode aktiviert. Allerdings ist dieser Modus Karte eine globale Variable und jedermann, überall können Tastenbelegungen, um es hinzuzufügen. Also, zu tun, was Sie wollen, ist im Wesentlichen Tracking, die eine Variable mit einem bestimmten Wert festgelegt. In ähnlicher Weise für Tastenbelegungen, die gerade eingestellt lokal durch Modus Haken (mit local-set-key) sind. Darüber hinaus können Sie auch Tastenbelegungen durch Dateivariablen . nur All dies ist zu sagen, dass die Tastenbelegungen in Emacs kurzlebig sind.

über das Beste, was Sie tun können, ist die Funktion mit dem Schlüssel gefunden, und suchen Sie in der Datei (oder alle zugehörigen Dateien, wenn der Modus in mehrere Dateien aufgeteilt wird).

Key Bindung Lookup in Emacs ziemlich beteiligt ist, aufgrund der Vielzahl von Möglichkeiten, wie Sie / Associate Tastenanschläge einstellen können (global, Dur, Moll, übergeordnete kleinere Modi, lokal zu Puffern, Texteigenschaften, etc.). Für einen schnellen Überblick Besuche diese Dokumentation .

Sie können eine Funktion wie diese schreiben in dem kleineren Modi, um zu sehen, wo ein Keybinding könnte festgelegt werden, aber natürlich mein erster Test zeigte der Keybinding dort nicht definiert wurde. Aber vielleicht wird der Code aufschlussreich sein.

(defun guess-where-keybinding-is-defined (key)
  "try to guess where a key binding might be defined"
  (interactive (list (read-key-sequence "Describe key: ")))
  (let ((bindings (minor-mode-key-binding key))
        found)
    (while (and bindings (not found))
      (if (setq found (caar bindings))
          (find-function (cdar bindings)))
      (setq bindings (cdr bindings)))))

Gibt es ein bestimmtes Problem versucht man (anders als diese Frage) zu lösen?

Andere Tipps

Just do M-x finden-Funktion

Von Emacs doc:

  

(find-Funktion Funktion)

     

Hier finden Sie die Definition der Funktion   in der Nähe von Punkt.

     

Findet die Quelldatei enthält, die   Definition der Funktion Nahpunkt   (ausgesucht von   `Funktion genannte-at-Punkt ') in einem   Puffer und Orte zeigen, bevor die   Definition. Set Marke, bevor er, wenn   der Puffer bereits existierte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top