Jak ustawić powiązanie klucza, które globalnie zastępuje i ma pierwszeństwo przed wszystkimi innymi powiązaniami dla tego klucza? Chcę przesłonić wszystkie mapy w trybie głównym / pomocniczym i upewnić się, że moje powiązanie zawsze działa.
To oczywiście nie działa:
(global-set-key "\C-i" 'some-function)
Działa w text-mode
, ale kiedy używam lisp-mode
, C-i
jest odbijany lisp-indent-line
.
Mogę przejść przez to powiązanie i nadpisać go lisp-mode
indywidualnie w każdym innym trybie, ale musi istnieć łatwiejszy sposób. Za każdym razem, gdy instaluję nowy tryb dla nowego typu pliku, musiałbym wrócić i sprawdzić, czy wszystkie moje powiązania klawiszy nie są zastępowane przez nowy tryb.
Chcę to zrobić, ponieważ chcę naśladować wiązania, których już nauczyłem się i zakorzeniłem od innych edytorów.
źródło
Jako dodatek do odpowiedzi scottfrazera , napisałem co następuje, aby moje skróty klawiszowe zachowały pierwszeństwo, nawet jeśli później ładowane biblioteki wprowadzają nowe własne mapy klawiszy.
Ponieważ mapy klawiszy można generować w czasie kompilacji,
load
wydawało się , że jest to najlepsze miejsce do zrobienia tego.źródło
Zainstaluj
use-package
, oceń i gotowe:źródło
use-package
:Install package: use-package [No Match]
Znalazłem to pytanie podczas wyszukiwania „emacs undefine org mode keybindings”, ponieważ chciałem usunąć istniejące zachowanie Cc Cb, aby umożliwić mojej mapie globalnej zakopanie bufora w buforze organizacyjnym.
To było dla mnie najprostsze rozwiązanie:
źródło
Chociaż odpowiedź Scottfrazera jest dokładnie tym, o co prosiłeś, dla potomności wspomnę o innym rozwiązaniu.
Z podręcznika Emacsa :
Jeśli powiążesz swoje osobiste powiązania globalne z Cc i literą, wtedy „powinieneś” być bezpieczny. Jest to jednak tylko konwencja, a każdy tryb nadal może przesłonić twoje powiązania.
źródło
Jeśli chcesz "zawsze używać skrótów klawiszowych na mapie, chyba że jawnie nadpisuję je dla określonej mapy trybu" i zakładając, że używasz podejścia scottfraziera , chcesz:
Więc
powinien usunąć powiązanie "\ Ci" z trybu pomocniczego tylko w bieżącym buforze. Ostrzeżenie: to jest całkowicie niesprawdzone, ale wydaje się być właściwym podejściem. Celem ustawienia rodzica, a nie tylko radzenia sobie z globalną wartością mapy my-keys-minor-mode-map, jest to, że wszelkie późniejsze zmiany wartości globalnej są automatycznie odzwierciedlane w wartości lokalnej.
źródło
Myślę, że nie możesz. Jest to z grubsza równoważne stwierdzeniu, że chcesz zdefiniować zmienną globalną, której nie można ukryć za pomocą lokalnych deklaracji zmiennych w funkcjach. Zakres po prostu nie działa w ten sposób.
Jednak może istnieć sposób na napisanie funkcji elisp, która przejdzie przez listę trybów i ponownie przypisze ją w każdym z nich za Ciebie.
źródło
overriding-local-map
został specjalnie zaprojektowany, aby zastąpić wszystkie inne mapy. Jednak używanie go jest niebezpieczne.O ile naprawdę nie chcesz to zrobić sam, powinieneś sprawdzić, czy ktoś inny już to zrobił.
Istnieje pakiet dla Emacsa, który daje przypisania klawiszy w stylu Windows. Powinieneś być w stanie go znaleźć przez Google.
źródło
cua-mode
.