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?