W jaki sposób jest zdefiniowany klucz < backtab >; jak to zetrzeć; i jak stworzyć nowy od podstaw?

Logo
W zasadzie co ja ” Przez ostatnie kilka tygodni próbowałem dostosowywać moje skróty klawiszowe jeden tryb na raz, w ten sposób przechodziłem przez każdy tryb jeden po drugim i całkowicie wyczyściłem jego mapę klawiszy indywidualnie. Następnie wiążę funkcje, które uważam za przydatne.
Robię to również w celach edukacyjnych, aby dowiedzieć się więcej o działaniu map klawiszy, o ich powiązaniach, sposobach manipulowania nimi itp.

Ale to co mnie utknęło, to dlaczego niektóre klucze (lub functions / macros; ja nie pewnie, jak powinny się nazywać). Na przykład <backtab>, <C-return>, <C-tab>, <C-iso-lefttab> itp.

Odłączyłem wszystkie klawisze funkcyjne zarówno w function-key-map, jak i local-function-map za pomocą polecenia: (setf (cdr <keymap>) nil)

Ale te klucze nadal wydają się istnieć.

Być może jestem po prostu zagubiony siebie, próbując objąć głowę wieloma poziomami abstrakcji jednocześnie.


Pytanie
Jak więc całkowicie wymazać te klucze, abym mógł zacząć od pierwszych zasad i stworzyć je samodzielnie (z ich własnymi nazwami i funkcjami)?


Pytanie dodatkowe
Dlaczego (define-key input-decode-map [?\C-i] (kbd "<C-i>")) tworzy abstrakcję, która interpretuje klucze C-i i <C-i> inaczej?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Czy to może mieć coś wspólnego ze zmianą paradygmatu mojego myślenia, która musi się wydarzyć, aby lepiej zrozumieć mapy klawiszy?


Myślę, że naprawdę pomogłoby mi i innym ludziom w przyszłości, gdyby ktoś mógł zrobić trywialny i złożony przykład w takim formacie (zakładając, że obecnie głównym trybem jest text-mode):

keypress Control + Backspace ->
local-function-keymap Control + Backspace = <C-backspace> ->
mapa-trybu-tekstu <C-backspace> = nil ->
mapa-globalna <C-backspace> = backward-kill-word


UPDATE
Przekonałem się, że możesz (w pewnym sensie) wymazać funkcje, a następnie ponownie powiązać je z odpowiadającymi im kluczami ASCII w ten sposób:

(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127]) 

Ale nawet jeśli nigdy nie powiążę ponownie klawiszy, z jakiegoś powodu bez mojej wiedzy mod ifiers z kluczy nadal działają. Czy istnieje mapa klawiszy, o której po prostu nie wiem?

if <tab> = undefined C-<tab> = defined 

Komentarze

  • To ' jest dla mnie tajemnicą. 🙁 ' jest również x-alternatives-map i key-translation-map i input-decode-map, ale mogę ' t dowiedzieć się, gdzie backtab ' pochodzi z…
  • Myślę, że mogłem się dowiedzieć, gdzie są zdefiniowane. Wygląda na to, że są one na stałe zakodowane w keyboard.c plik źródłowy . Dlatego nie ma możliwości całkowitego ich zniszczenia.

Odpowiedź

Może uda mi się odpowiedzieć na część twoich pytań. Inne prawdopodobnie pomogą tutaj bardziej.

<backtab> nazywany jest „klawiszem funkcyjnym”, ale może być powiązany z poleceniem w dowolnym układzie klawiszy (w tym kontekście zapomnij o function-key-map).

Waniliowy Emacs (emacs -Q, brak pliku init) wiąże niektóre klawisze funkcyjne w różnych mapach klawiszy. Biblioteki, które ładujesz, też mogą to robić.

Jeśli naprawdę chcesz usunąć powiązania klawiszy funkcyjnych, sugerowałbym, abyś pracował z trybami, które są aktualne w danym momencie, w dowolnym kontekście. Użyj C-h k, aby dowiedzieć się, do czego jest przypisany taki klucz. Określ, z jaką mapą klawiszy jest powiązany (zazwyczaj jest to mapa klawiszy trybu), a następnie usuń powiązanie z tą mapą (w swoim pliku init , na przykład na zaczepie trybu). Opłucz i powtórz.

Możesz zobaczyć klawisze, które są aktualnie przypisane do danego układu klawiszy, używając C-h M-k (describe-keymap), po którym następuje zmienna powiązana z mapą klawiszy (lub po której następuje rzeczywista mapa klawiszy, jeśli nie ma zmiennej).Potrzebujesz biblioteki help-fns+.el , jeśli chcesz używać describe-keymap.

Niektóre klawisze funkcyjne (takie jak backtab i f1, a raczej <backtab> i <f1> ( ale ja wolę nagą notację ) są dość standardowe. Inne są specyficzne dla Emacsa. Możesz pomyśl o klawiszu funkcyjnym jako logicznej nazwie czegoś, co może mieć różne fizyczne implementacje. backtab to zazwyczaj na przykład S-TAB. co kryje się za wskazaniem „tłumaczenia”, które czasami widzisz w *Help* dla C-h k.


( Ale zastanawiam się dlaczego, poza uczeniem się o klawiszach i mapach klawiszy (co jest dobrą rzeczą), wykonujesz ćwiczenie usuwania przypisań klawiszy. Bardziej typowe jest po prostu przypisywanie innego klawisza do polecenia, którego powiązania nie lubisz mi. W każdym razie nie muszę rozumieć, dlaczego.)

Komentarze

  • Myślę, że mogłem się dowiedzieć, gdzie są zdefiniowane. Wygląda na to, że są na stałe zakodowane w keyboard.c pliku źródłowym . Dlatego nie ma możliwości ich całkowitego zniszczenia.
  • Zaktualizowałem pytanie, co mam do tej pory. Myślę, że mogę szukać nieznane-nieznane brakującej mapy klawiszy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *