Emacs global-set-klucz do C-TAB

Próbuję ustawić powiązanie klawiszy na Ctrl + TAB w Emacsie. Użyłem następującego wywołania:

(global-set-key (read-kbd-macro "C-TAB") 'my-func)

Jednak, gdy go używam, dostaję

<C-tab> is undefined

Komunikat o błędzie. Próba ustawienia powiązania NA "C-tab" powoduje wyświetlenie komunikatu o błędzie.

Jak mogę ustawić Wiązanie na C-TAB?

Author: Martin Cote, 2009-05-27

6 answers

(global-set-key [C-tab] 'my-func)
 42
Author: Nathaniel Flath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-27 17:02:57

W przeciwieństwie do innych sugerowanych, dobrym pomysłem jest użycie kbd (lub read-kbd-macro, co w zasadzie jest tym samym) na wypadek, gdybyś chciał użyć tych samych plików konfiguracyjnych w innych wersjach Emacsa; kbd działa w kilku wersjach Emacsa i Xemacsa, gdzie wewnętrzna reprezentacja sekwencji kluczy jest inna.

(global-set-key (kbd "<C-tab>") 'my-func)

Format wejściowy używany przez {[2] } jest udokumentowany w docstringu edmacro-mode:

  • Słowa specjalne RET, SPC, TAB, DEL, LFD, ESC oraz NUL specjalne znaki kontrolne. Słowa muszą być napisane wielkimi literami.

  • Słowo w nawiasach kątowych, np. , lub , oznacza klawisz funkcyjny. (Zauważ, że w standardowej konfiguracji klawisz funkcyjny I klawisz sterujący RET są synonimami.) Możesz użyć nawiasów kątowych na słowach RET, SPC itp. ale oni nie są tam wymagane.

Jest to napisane nieco niestety; zakładka o której mowa w pierwszym punkcie jest znak ASCII dla TAB, A dodanie modyfikatora Control robi z nim coś bezsensownego. Po naciśnięciu klawisza Control-Tab, Emacs widzi go (przez system okienkowy; nie będzie działał w terminalu tekstowym) jako <tab> z modyfikatorem sterowania, który możesz reprezentować jako C-<tab> lub <C-tab>.

 49
Author: Jouni K. Seppänen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-27 17:30:38

To dlatego, że używasz read-kbd-macro nieprawidłowo. Kiedy widzisz co jest związane z kluczem:

C-h k C-TAB

Emacs mówi:

<C-tab> is undefined.

Musisz włączyć w wywołaniu read-kbd-macro.

(global-set-key (read-kbd-macro "<C-tab>") 'my-func)

I nie wiem jak wygenerować <C-TAB>, ale to nie to samo co <C-tab>.

(equal (kbd "<C-TAB>") (kbd "<C-tab>"))
->
nil
 11
Author: Trey Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-27 17:29:12

Zauważ, że możesz również wywoływać global-set-key interaktywnie. Następnie możesz zobaczyć poprawne polecenie wiązania za pomocą repeat-complex-command (Zobacz także KeybindingGuide):

  1. M-x: global-set-key
  2. wpisz żądaną kombinację klawiszy
  3. Użycie C-x ESC ESC (repeat-complex-command) aby zobaczyć polecenie apropiate. W Twoim przypadku dostaję:

    (global-set-key (quote [C-tab]) (quote my-func))
    
 6
Author: danielpoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-28 07:12:31

Zamiast używać read-kbd-macro, spróbuj użyć bardziej prostej składni?

;(global-set-key [(control tab)] 'my-func)

Może prostsza składnia coś zmieni?

Więcej informacji na temat read-kbd-macro i global-set-key .
 3
Author: artlung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-27 17:01:24

W podręczniku gnu emacs lisp reference manual, sekcja 21.1 "sekwencje klawiszy", odwołują się do \t do reprezentowania klucza tab.

Używając składni pokazanej w podręczniku Lispu, użyłbym następującego polecenia:

(global-set-key (kbd "C-\t") 'my-func)

 0
Author: skm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 04:13:01