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, wird die Anwendung empfangen a
. Wenn Sie drücken Enter, erhält die Anwendung das Zeichen CR
(aka ^M
(ausgesprochen "control-emm"), aka Zeichen Nummer 13, aka \r
oder \015
). Tastenkombinationen 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 übertragen, die mit \e[
oder beginnen \eO
.
Die Escape-Sequenzen sind nicht vollständig standardisiert, und Terminals ignorieren normalerweise bestimmte Attribute für bestimmte Schlüssel. Beispielsweise wird Ctrl+ Shift+ letterhäufig standardmäßig genau wie Ctrl+ übertragen letter.
Sie können sehen, was Ihr Terminal für eine Tastenkombination sendet, indem Sie Ctrl+ Vgefolgt von dieser Tastenkombination in einer Shell-Eingabeaufforderung oder C-q
oder C-h c
gefolgt von der Tastenkombination in Emacs drücken.
Mit einigen Terminalemulatoren können Sie die Escape-Sequenzen für jeden Schlüssel konfigurieren. Unter Xterm erfolgt dies über X-Ressourcen . Die meisten Setups lesen Ressourcen ab ~/.Xresources
dem Start von X, und Sie können die Datei manuell mit laden xrdb -merge ~/.Xresources
.
Term.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 des Formulars ESC [ number1 ; number2 ~
für Funktionstasten mit Modifikatoren. number1
gibt die Funktionstaste ( 15
auf 24
für F5zu F12- aus historischen Gründen F1 durch F4verschiedene Escape - Sequenzen haben) und number2
gibt den Modifikator ( 2
für Shift, 5
für Ctrl, 3
für Meta, 8
für Ctrl+ Meta, und fügen Sie 1 für + Shift- nein, ist es nicht sehr konsistent).
Emacs übersetzt Escape-Sequenzen durch input-decode-map
oderlocal-function-key-map
(oder function-key-map
vor Emacs 23) in seine interne Schlüsseldarstellung .
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
infocmp $TERM
?ESC
(es sei denn, Sie möchten ein Zeichen ≥ 128 ausprobieren, dies beschränkt jedoch die möglichen Eingabecodierungen) und das zweite Zeichen etwas sein muss, für das Sie keineESC foo
Bindung wünschen .local-set-key
eigentlich seindefine-key
? Ersteres gibt einen Fehler aus (falsche Anzahl von Argumenten), während letzteres zumindest für <kbd> C-Enter </ kbd> funktioniert. Es scheint, dass konsole immer noch Probleme beim Senden von <kbd> CM-% </ kbd> hat.define-key
. Ich weiß nicht, ob Konsoles Escape-Schlüssel konfiguriert werden können. Xterm ist wahrscheinlich anpassbarer als jede andere Alternative.XTerm*modifyOtherKeys: 2
Ressource werden auch fürC-M-
Kombinationen eindeutige Sequenzen generiert. Mit dieser Einstellung müssen Sie jedoch viele benutzerdefinierte Zuordnungen bereitstellen (XTerm*modifyOtherKeys: 1
ist weniger leistungsfähig, aber sofort weitaus funktionaler). Ein Beispiel (wenn auch eine , die für mich nicht funktioniert hat ) , um die siehtxterm-extras.el
Bibliothek und den damit verbundenen.Xresources
und.inputrc
Dateien im Easymacs herunterladen.Für einen begrenzten, aber signifikanten Satz von Schlüsseln kann man unter der Annahme der KDE-Konsole Folgendes tun, um funktionierende, komplexe Tastenkombinationen in emacs -nw zu haben:
Ich werde meine Implementierung der
S-<RET>
Arbeit als Beispiel verwenden:Return+Shift
und geben Sie ihm eine nützliche Tastenfolge (ich habe ausgewählt,\E[27;3
welche meiner Meinung nach die Tastenfolge ist, die X gesendet hat, als ich mit xev herumgestochert habe, aber das kann falsch sein - das Wichtigste ist, zu machen sicher, dass es eine richtige Flucht hat und mit nichts anderem in Konflikt steht).Starten
emacs -nw
und im Arbeitspuffer auswerten:(read-key-sequence-vector "Type your new key:")
Geben Sie dann Ihre neue Tastenkombination ein.
Es sollte eine Schlüsselsequenz ausspucken, die Sie binden können.
(Es kehrte
[27 91 50 55 59 51]
zu mir zurück , im Gegensatz zu dem langweiligen alten,[13]
bevor ich mich mit der Konsolen-Tastenkombination herumschlug.)Fügen Sie Ihrer Emacs-Konfiguration Folgendes hinzu:
Ich habe es
emacs -nw
in einer Bildschirmsitzung getestet mit :quelle
Die kurze Antwort lautet, dass dies eine grundlegende Einschränkung aller Terminals darstellt.
Die etwas längere Antwort lautet: Selbst wenn jemand ein Terminal erstellt, das das tut, was Sie wollen, würde Emacs selbst größere Änderungen erfordern, um mit diesem hypothetischen Terminal zu arbeiten.
quelle
Es gibt einige Bemühungen, das VT-Protokoll so zu erweitern, dass verlustfreie Tastatureingaben möglich sind (unter anderem Funktionen wie Grafiken).
Ein Beispiel ist notty: https://github.com/withoutboats/notty
quelle