Odebrałem klucz „d” gnus-article-mode
, ale jego stare zachowanie jest nadal aktywne, gdy punkt znajduje się na załączniku. Widzę, że ponowne wiązanie nie przyniosło skutku C-h k d
, ale nie mówi mi, która mapa klawiszy obowiązuje w tym momencie, abym mógł ją ponownie powiązać.
Czy istnieje sposób, aby się tego dowiedzieć?
Oto dokładny przykład: używam zła i chcę, aby artykuły były w trybie ruchu. Dla mojego układu klawiatury skonfigurowałem „d” jako klawisz do przejścia w górę.
(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)
Aby upewnić się, że złe klucze są brane pod uwagę, rozbroiłem klucz gnus na lokalnej mapie:
(defun as/alter-article-evil-map ()
(local-unset-key "d"))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
Niestety, gdy chodzi o załącznik, klawisz „d” już nie idzie w górę, ale oferuje mi usunięcie załącznika. Wydaje mi się, że w tym momencie aktywne jest inne wiązanie, stąd pytanie.
Rozwiązanie Użyłem keymaps-at-point
poniżej, aby ustalić, że używana mapa klawiszy pochodzi z właściwości text. Następnie spojrzałem na kod powiązanej funkcji, aby znaleźć nazwę mapy klawiszy gnus-mime-button-map
. Poniższy kod robi to, co chcę:
(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)
źródło
Searching Keymaps
. Zobacz także węzłyFunctions for Key Lookup
iActive Keymaps
.Odpowiedzi:
Emacs 25
Jak wspomniano w komentarzach @YoungFrog, poczynając od Emacsa 25.1 , stara, dobra
C-h k
metoda opisywania powiązań klawiszy powie ci również, w której mapie klawiszy znaleziono klucz.Przed Emacsem 25
Jest jakiś kod tutaj na ten temat, ale jest niepełna, gdyż nie obejmuje wszystkiego. Poniżej znajduje się jego ulepszona wersja.
Klucze można powiązać na 9 (!) Sposobów. Dzięki @Drew za ten link (również uzupełniony o to ) z pełną listą. W kolejności pierwszeństwa są to:
overriding-terminal-local-map
. Jest to określone przezset-transient-map
funkcję.overriding-local-map
. Jeśli jest ustawiony, pozycje 3–8 są pomijane (prawdopodobnie dlatego nie widzisz ich wielu).keymap
tekstu-proroctwa (który może dotyczyć samego tekstu lub nakładek).emulation-mode-map-alists
.minor-mode-overriding-map-alist
.minor-mode-map-alist
.local-map
właściwości text. Jeśli tak, pozycja 8 jest pomijana.current-local-map
.current-global-map
.Jest też półpozycja 10. Cokolwiek wydano w powyższej procedurze, mogło zostać również odwzorowane.
Poniższa funkcja sprawdza niektóre z tych możliwości (najbardziej prawdopodobne) i zwraca lub drukuje wynik.
Dla każdego z nich są wbudowane funkcje oprócz pierwszej, dlatego musimy je utworzyć (także ulepszoną wersję kodu, do której link podano powyżej).
Skoro mówisz, że zachowanie jest aktywne, gdy punkt znajduje się na załączniku, istnieje duże prawdopodobieństwo, że ten skrót klawiszowy ma miejsce na nakładce lub właściwości tekstowej.
Jeśli to nie zadziała , spróbuj również wykonać następujące polecenie. Wystarczy umieścić kursor na załączniku i zrobić
M-x
keymaps-at-point
.źródło
k runs the command gnus-summary-kill-same-subject-and-select (found in gnus-summary-mode-map), which is (...)
To dotyczy:
Na przykład dla
(my-lookup-key (kbd "C-c v v"))
Mam listę w*Message*
buforze:To podejście jest przydatne do wyszukiwania podklucza, które zawiera mapę klawiszy wyższego poziomu, na przykład danych wyjściowych z:
jest
vc-prefix-map
zawarta wglobal-map
:Jeśli zmodyfikujesz warunek filtrowania, aby uwzględnić
keymapp
- będziesz mógł zawsze szukać prefiksów:Więc
rst-mode-map
będzie można znaleźć na obu:źródło
Wiem, że poniższe pytanie nie odpowiada na pytanie, w jaki sposób mogę dowiedzieć się, która mapa klawiszy , ale zajmuje się podstawową kwestią w tym przypadku, w jaki sposób upewnić się, że
d
klucz zachowuje się zgodnie z tym, czego chce użytkownik. Jeśli wolisz, mogę usunąć tę odpowiedź i przekonwertować na inne pytanie + odpowiedź na ten temat.Jako metodę przesłonięcia
text-property/overlay
mapy powinieneś móc użyć:Zgodnie z kontrolowaniem aktywnych map ,
overriding-local-map
ma pierwszeństwo przed każdą inną aktywną mapą inną niżoverriding-terminal-local-map
.źródło
emacs-buttons zapewnia
buttons-display
, że z argumentem przedrostka wyświetla rekurencyjną wizualizację wszystkich bieżących powiązań.(Zastrzeżenie: Jestem autorem pakietu)
źródło