Wygodniejszy będzie X11 Emacs, który może odbierać dane z klawiatury i wyświetlać tekst bez przechodzenia przez kodowanie i dekodowanie terminala . Głównym powodem używania edytora trybu tekstowego jest uruchomienie go na ekranie lub tmuxie na zdalnym komputerze, ale dzięki Trampowi zwykle łatwiej jest edytować plik zdalny w lokalnym Emacsie. Biorąc to pod uwagę, możesz robić, co chcesz, pod warunkiem współpracy emulatora terminala, co ma miejsce w przypadku Xterm.
Po naciśnięciu klawisza lub kombinacji klawiszy w terminalu jest on przesyłany do aplikacji działającej w terminalu jako sekwencja jednego lub więcej znaków. Na przykład po naciśnięciu aaplikacja odbiera a
. Po naciśnięciu Enteraplikacja otrzymuje znak CR
(aka ^M
(wymawia się „control-emm”), aka znak numer 13, aka \r
lub \015
). Kombinacje klawiszy Altsą zwykle przesyłane jako znak ESC
(np. ^[
Aka \e
lub \033
), a następnie sekwencja dla klawisza lub kombinacji klawiszy bez Alt. Klawisze funkcyjne i inne kombinacje klawiszy są przesyłane jako sekwencje specjalne rozpoczynające się od \e[
lub \eO
.
Sekwencje specjalne nie są w pełni znormalizowane, a terminale zwykle ignorują określone atrybuty dla niektórych kluczy. Na przykład hiper i super modyfikatory są zwykle ignorowane. Możesz zobaczyć, co twój terminal wysyła dla kombinacji klawiszy, naciskając Ctrl+, Va następnie tę kombinację klawiszy w wierszu poleceń powłoki, C-q
lub C-h c
po kombinacji klawiszy w Emacsie.
Xterm umożliwia skonfigurowanie sekwencje dla każdego klawisza poprzez zasobów X . Większość ustawień odczytuje zasoby od ~/.Xresources
momentu uruchomienia X i można ręcznie załadować plik xrdb -merge ~/.Xresources
.
XTerm.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <Key> Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <Key> percent: string("\033[37;6~")
Powszechna konwencja wykorzystuje sekwencje specjalne formy ESC [ number1 ; number2 ~
dla klawiszy funkcyjnych z modyfikatorami. number1
oznacza klawisz funkcyjny ( 15
do 24
do F5do F12- ze względów historycznych, poprzez F1 F4mają różne sekwencje) i number2
wskazuje na modyfikator ( 2
na Shift, 5
na Ctrl, 3
na Meta, 8
na Ctrl+ Metai dodać 1 do + Shift- nie, to nie jest bardzo spójne).
Będziesz musiał określić modyfikatory Hyper i Super poprzez ich liczbę, jak Mod1
przez Mod5
. Uruchom, xmodmap -pm
aby zobaczyć mapowanie kluczy do modyfikatorów. Na przykład, jeśli Super_L
jest związany z Mod5, to następujący wiersz (użyj tego dokładnego przypadku) definiuje powiązanie dla Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs tłumaczy sekwencje specjalne na wewnętrzną reprezentację klucza poprzez input-decode-map
lublocal-function-key-map
(lub function-key-map
przed Emacsem 23).
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Ten post jest wykonany w 80% z materiałów pochodzących z recyklingu. Czy są jakieś terminale linux, które mogą obsługiwać wszystkie kluczowe kombinacje?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Ale żeby być kompletnym, próbowałem twojegodefine-key
powyżej, ale nie mogłem wtedy uruchomić(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. Po prostu drukowałem; 16 ~ w buforze. Byłoby miło powiązać tę sekwencję z (kbd „s-SPC”), aby powiązać sekwencję klawiszy i móc ponownie przypisać ją innym poleceniom.C-h l
zwraca teraz po naciśnięciu s-SPC:ESC [ 3 2 ; 1 6 ~
ale emacs wciąż narzeka, żeM-[ 32 is undefined
function-key-map
zamiastlocal-function-key-map
? To może być kwestia kiedy ustawiszlocal-function-key-map
, ponieważ jest to zależne od terminala.Jeśli chcesz zainstalować pakiet Emacsa i skonfigurować terminal, napisałem pakiet Emacsa, który może nauczyć Emacsa i terminale, jak prawidłowo rozpoznawać wszystkie kombinacje klawiszy klawiatury i modyfikatora:
https://github.com/CyberShadow/term-keys
Kodowanie super modyfikatora nie jest domyślnie włączone, ale pakiet można dostosowywać i umożliwia konfigurowanie, które kombinacje klawiszy modyfikatora są kodowane. Aby włączyć kombinacje klawiszy kodowania, które zawierają super modyfikator, ustaw
term-keys/want-key-p-func
funkcję, która zwraca wartość,t
gdy(elt mods 3)
nie ma wartości zerowej ( wyjaśnienie znajduje się w domyślnej implementacji ).źródło
Mam następujące pliki w moich plikach inicjujących:
To pozwala mi wysyłać super i hiper-klucze za pomocą klawiszy funkcyjnych.
źródło
Krótka odpowiedź: użyj
Konsole
.Wyjaśnienie:
local-function-key-map
ma mapowanie wpisówC-x @ s
doevent-apply-super-modifier
.Konsole
odwzorowujeSuper
(klawisz z logo Windows) sekwencję ucieczki^X@s
(która wydaje się nigdzie nie udokumentowana, odkryłem ją przypadkiem). Możesz tego spróbować, otwierającKonsole
i naciskając np Ctrl-v Win-o.źródło