Sie werden sich in einem X11 Emacs wohler fühlen, der Tastatureingaben empfangen und Text anzeigen kann, ohne das Terminal zu codieren und zu decodieren . Der Hauptgrund für die Verwendung eines Textmodus-Editors besteht darin, ihn in screen oder tmux auf einem Remote-Computer auszuführen. Dank Tramp ist es jedoch in der Regel einfacher, die Remote-Datei in Ihrem lokalen Emacs zu bearbeiten. Abgesehen davon können Sie tun, was Sie wollen, solange Ihr Terminal-Emulator zusammenarbeitet, was bei Xterm der Fall ist.
Wenn Sie eine Taste oder Tastenkombination in einem Terminal drücken, wird diese als Folge von einem oder mehreren Zeichen an die im Terminal ausgeführte Anwendung übertragen. Wenn Sie beispielsweise drücken a, empfängt die Anwendung a
. Wenn Sie auf drücken Enter, erhält die Anwendung das Zeichen CR
(aka ^M
(ausgesprochen „control-emm“), aka Zeichen Nummer 13, aka \r
oder \015
). Tastenkombinationen mit Altwerden normalerweise als Zeichen ESC
(a.ka. ^[
aka \e
oder \033
) übertragen, gefolgt von der Sequenz für die Taste oder Tastenkombination ohne Alt. Funktionstasten und andere Tastenkombinationen werden als Escape-Sequenzen beginnend mit \e[
oder übertragen \eO
.
Die Escape-Sequenzen sind nicht vollständig standardisiert, und Terminals ignorieren normalerweise bestimmte Attribute für bestimmte Schlüssel. Beispielsweise werden die Modifikatoren hyper und super normalerweise ignoriert. Sie können sehen, was Ihr Terminal für eine Tastenkombination sendet, indem Sie Ctrl+ Vgefolgt von dieser Tastenkombination in einer Shell-Eingabeaufforderung C-q
oder C-h c
gefolgt von der Tastenkombination in Emacs drücken.
Mit Xterm können Sie die Escape-Sequenzen für jeden Schlüssel über X-Ressourcen konfigurieren . Die meisten Setups lesen Ressourcen ab dem ~/.Xresources
Zeitpunkt, an dem X gestartet wird, und Sie können die Datei manuell mit laden 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~")
Eine übliche Konvention verwendet Escape-Sequenzen der Form ESC [ number1 ; number2 ~
für Funktionstasten mit Modifikatoren. number1
gibt die Funktionstaste an ( 15
bis 24
für F5bis F12- aus historischen Gründen haben F1 bis F4unterschiedliche Escape-Sequenzen) und number2
gibt den Modifikator an ( 2
für Shift, 5
für Ctrl, 3
für Meta, 8
für Ctrl+ Metaund addiere 1 für + Shift- nein, es ist nicht sehr konsistent).
Sie müssen die Hyper- und Super-Modifikatoren durch ihre Nummer wie Mod1
durch angeben Mod5
. Führen xmodmap -pm
Sie den Befehl aus, um die Zuordnung von Keysyms zu Modifikatoren anzuzeigen. Wenn zum Beispiel Super_L
an Mod5 gebunden ist, definiert die folgende Zeile (genau in diesem Fall) eine Bindung für Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs übersetzt Escape-Sequenzen durch input-decode-map
oderlocal-function-key-map
(oder function-key-map
vor Emacs 23) in ihre interne Tastendarstellung.
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Dieser Pfosten besteht zu 80% aus recyceltem Material von Gibt es Linux-Terminals, die alle Tastenkombinationen verarbeiten können?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Aber um vollständig zu sein, habe ich Ihrdefine-key
oben versucht , aber ich konnte dann nicht auslösen(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. Es wurde gerade gedruckt, 16 ~ im Puffer. Es wäre schön gewesen, diese Sequenz an (kbd "s-SPC") zu binden, damit ich die Tastenfolge gebunden habe und sie anderen Befehlen zuweisen kann.C-h l
gibt beim Drücken von s-SPC jetzt Folgendes zurück:ESC [ 3 2 ; 1 6 ~
Aber Emacs beklagt sich immer noch darüberM-[ 32 is undefined
function-key-map
anstelle von verwendenlocal-function-key-map
? Es kann eine Frage der Einstellung seinlocal-function-key-map
, da es terminalabhängig ist.Wenn Sie bereit sind, ein Emacs-Paket zu installieren und Ihr Terminal zu konfigurieren, habe ich ein Emacs-Paket geschrieben, mit dem Sie Emacs und Terminals beibringen können, wie alle PC-Tastatur- und Modifikatortastenkombinationen richtig erkannt werden:
https://github.com/CyberShadow/term-keys
Das Kodieren des Super-Modifikators ist standardmäßig nicht aktiviert, aber das Paket ist anpassbar und ermöglicht die Konfiguration, welche Modifikatortastenkombinationen kodiert werden. Um die Codierung von Tastenkombinationen zu aktivieren, die den Modifizierer Super enthalten
term-keys/want-key-p-func
, müssen Sie eine Funktion festlegen , die zurückgibt,t
wenn(elt mods 3)
der Wert nicht null ist ( eine Erläuterung finden Sie in der Standardimplementierung ).quelle
In meinen Init-Dateien ist Folgendes enthalten:
Dadurch kann ich Super- und Hypertasten mit den Funktionstasten senden.
quelle
Kurze Antwort: verwenden
Konsole
.Erläuterung:
local-function-key-map
hat eine EintragszuordnungC-x @ s
zuevent-apply-super-modifier
.Konsole
ordnetSuper
der Escape-Sequenz^X@s
(die nirgendwo dokumentiert zu sein scheint, ich habe sie zufällig entdeckt) (die Windows-Logo-Taste) zu . Sie können dies versuchen, indemKonsole
Sie zB öffnen und drücken Ctrl-v Win-o.quelle