Ich habe die Taste 'd' erneut gedrückt gnus-article-mode
, aber das alte Verhalten ist immer noch aktiv, wenn sich der Punkt auf einem Anhang befindet. Ich kann sehen, dass die erneute Bindung dort dadurch nicht wirksam geworden ist C-h k d
, aber sie sagt mir nicht, welche Keymap zu diesem Zeitpunkt wirksam ist, so dass ich sie erneut binden kann.
Gibt es eine Möglichkeit, es herauszufinden?
Hier ist ein genaues Beispiel: Ich verwende das Böse und möchte, dass Artikel im Bewegungsmodus sind. Für mein Tastaturlayout habe ich "d" als die Taste konfiguriert, die nach oben gehen soll.
(evil-mode 1)
(add-to-list 'evil-motion-state-modes 'gnus-article-mode)
(setq evil-emacs-state-modes (remove 'gnus-article-mode evil-emacs-state-modes))
(define-key evil-motion-state-map "d" 'evil-previous-line)
Um sicherzustellen, dass die bösen Schlüssel berücksichtigt werden, habe ich den Gnus-Schlüssel in der lokalen Karte deaktiviert:
(defun as/alter-article-evil-map ()
(local-unset-key "d"))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
Wenn sich der Punkt auf einem Anhang befindet, wird die Taste 'd' leider nicht mehr angezeigt, aber ich kann den Anhang löschen. Ich denke, an diesem Punkt ist eine andere Bindung aktiv, daher die Frage.
Lösung Ich habe das keymaps-at-point
Folgende verwendet, um die verwendete Keymap aus einer Texteigenschaft zu ermitteln. Ich habe mir dann den Code der gebundenen Funktion angesehen, um den Namen der Keymap zu finden gnus-mime-button-map
. Der folgende Code macht was ich will:
(defun as/alter-article-evil-map ()
(define-key gnus-mime-button-map "d" nil))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
quelle
Searching Keymaps
. Siehe auch KnotenFunctions for Key Lookup
undActive Keymaps
.Antworten:
Emacs 25
Wie von @YoungFrog in den Kommentaren erwähnt, werden Sie ab Emacs 25.1 anhand der guten alten
C-h k
Methode zur Beschreibung von Schlüsselbindungen auch darüber informiert, in welcher Schlüsselzuordnung der Schlüssel gefunden wurde.Vor dem Emacs 25
Es gibt einige Code hier auf das, aber es ist unvollständig , da es nicht alles abdecken. Unten ist eine verbesserte Version davon.
Schlüssel können auf 9 (!) Arten gebunden werden. Vielen Dank an @Drew für diesen Link (auch ergänzt durch diesen ) mit der vollständigen Liste. In der Rangfolge sind dies:
overriding-terminal-local-map
. Dies wird durch dieset-transient-map
Funktion festgelegt.overriding-local-map
. Wenn diese Option aktiviert ist, werden die Punkte 3 bis 8 übersprungen (wahrscheinlich, warum Sie nicht viele davon sehen).keymap
Texteigenschaft (die sich auf den eigentlichen Text oder auf Überlagerungen beziehen kann).emulation-mode-map-alists
.minor-mode-overriding-map-alist
.minor-mode-map-alist
.local-map
Eigenschaft text. Ist dies der Fall, wird Punkt 8 übersprungen.current-local-map
.current-global-map
.Es gibt auch eine Semi-Item 10. Was auch immer Befehl durch das obige Verfahren gefunden wurde, könnte auch neu zugeordnet worden sein.
Die folgende Funktion fragt einige dieser (wahrscheinlichsten) Möglichkeiten ab und gibt das Ergebnis zurück oder druckt es aus.
Für jede dieser Funktionen gibt es integrierte Funktionen, mit Ausnahme der ersten. Daher müssen wir eine erstellen (auch eine verbesserte Version des oben verlinkten Codes).
Da Sie sagen, dass das Verhalten aktiv ist, wenn sich der Punkt auf einem Anhang befindet, besteht eine gute Chance, dass diese Tastenkombination auf einem Overlay oder einer Texteigenschaft ausgeführt wird.
Wenn das nicht funktioniert , versuchen Sie auch den folgenden Befehl. Platzieren Sie einfach den Cursor auf dem Anhang und machen Sie
M-x
keymaps-at-point
.quelle
k runs the command gnus-summary-kill-same-subject-and-select (found in gnus-summary-mode-map), which is (...)
Das über:
Zum Beispiel
(my-lookup-key (kbd "C-c v v"))
bekomme ich eine Liste im*Message*
Puffer:Dieser Ansatz ist nützlich für die Suche nach Sub-Keymaps, die in übergeordneten Keymaps enthalten sind, z. B. Ausgabe von:
ist
vc-prefix-map
was ist enthalten inglobal-map
:Wenn Sie die Filterbedingung so ändern, dass sie einschließt, können
keymapp
Sie immer nach Präfixen suchen:So
rst-mode-map
findet man auf beiden:quelle
Ich bin mir bewusst, dass das Folgende nicht die Frage beantwortet, wie ich herausfinden kann, welche Keymap verwendet wird. In diesem Fall wird jedoch das zugrunde liegende Problem behandelt, wie sichergestellt werden kann, dass sich der
d
Schlüssel entsprechend den Anforderungen des Benutzers verhält. Falls gewünscht, kann ich diese Antwort entfernen und in eine andere Frage + Antwort bezüglich dieses Problems umwandeln.Als Methode zum Überschreiben der
text-property/overlay
Karte sollten Sie Folgendes verwenden können:Wie pro Aktive Karten Controlling ,
overriding-local-map
hat Vorrang vor allen anderen aktiven Karte anders alsoverriding-terminal-local-map
.quelle
emacs-buttons bietet
buttons-display
mit einem Präfix-Argument eine rekursive Visualisierung aller aktuellen Bindungen.(Haftungsausschluss: Ich bin der Autor des Pakets)
quelle