Ich möchte den ESC
Schlüssel anstelle von C-g
für verwenden keyboard-quit
. Mein naiver Ansatz, es einfach zu tun
(define-key global-map (kbd "ESC") 'keyboard-quit)
funktioniert nicht. ESC
ist immer noch eine Präfix-Taste und das Drücken dieser Taste ruft nicht auf keyboard-quit
.
key-bindings
Geier
quelle
quelle
universal-argument
mit dem verwendet wirduniversal-argument-map
.Antworten:
Das kannst du machen
(define-key key-translation-map (kbd "ESC") (kbd "C-g"))
. Ich habe das vor langer Zeit getan und hatte keine Probleme.Bearbeiten , um die Antwort gemäß den Kommentaren zu verbessern:
Wenn Sie die
ESC
Schlüsselfunktionalität beibehalten möchten , können Sie dies tun(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Eine Sache zu beachten ist, dass wenn Emacs hängt, Sie den
C-g
Schlüssel aus irgendeinem Grund immer noch verwenden müssen , aber das passiert selten.quelle
C-g
es aufzuhängen, dieESC
Neuzuordnung in diesem Fall nicht funktioniert.ESC
also hat mich das nicht gestört. Aber wenn Sie es brauchen, können Sie eine andere Übersetzung machen, zum Beispiel(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Mein Rat wäre, in
ESC
Ruhe zu lassen , weil es ein besonderer Schlüssel ist.Standardmäßig verwendet Emacs
ESC
(ASCII 27) alsmeta-prefix-key
. Aus dem Elisp-Handbuch:und
Um ESC für etwas anderes zu verwenden, müssten Sie etwas anderes festlegen
meta-pefix-key
und auch einen anderen Schlüssel daran bindenESC-prefix
. Möglicherweise sind auch andere Änderungen erforderlich - ich habe dies noch nie versucht.Weitere Informationen finden
meta-prefix-char
Sie unter Funktionen für die Schlüsselsuche im Elisp-Handbuch.quelle
ESC
. Binden Sie einen anderen Schlüssel ankeyboard-quit
, wenn Sie möchten. Beachten Sie auch, dass SieESC ESC ESC
bereits das gewünschte Escape-Verhalten erhalten - siehe Emacs-Handbuch, Knoten Beenden .meta-prefix-char
zunil
auf OSX wird nicht deaktivieren aus einem Präfix Schlüssel zu sein - es wird sie nur von der Meta - Taste trennen. Unter OSX mit einer grafischen Version von Emacs möchte ich, dass der Escape-Schlüssel vom Meta-Schlüssel getrennt wird. Ich habe ihn(setq meta-prefix-char nil)
zu Beginn meiner Initialisierung festgelegt, damit alle anschließend geladenen Bibliotheken verstehen, was ich will. Dies gibt mir die Möglichkeit, den Metaschlüssel als Präfixschlüssel und den Escape-Schlüssel als Präfixschlüssel zu verwenden. Dasesc-map
wird auf der C-Quellcode-Ebene innerhalb definiertkeymap.c
. Es soll als Präfixschlüssel verwendet werden.esc-map
Präfix zu, um die Standard-M-Bindungen beizubehalten ?(setq ns-alternate-modifier 'meta)
, wodurch Meta zur linken Alt-Taste auf der Apple-Tastatur wird. Ich verwende gerne die rechte Alt-Taste, um Unicode-Zeichen mit den OSX-Standardeinstellungen zu erstellen:(setq ns-right-alternate-modifier 'none)
- um spanische Zeichen, Absatzsymbole usw. einzufügen. Beim Erstellen werden--with-ns
sowohl die linke als auch die rechte Alt-Taste auf Meta gesetzt. Die Standardeinstellung bindet den Escape-Schlüssel unter OSX mit dem Meta-Schlüsselmeta-prefix-char
,27
wie von Ihnen angegeben.Schöne Antwort hier: https://superuser.com/a/945245/624661
Zitat:
Sie können dies in Ihrer Emacs-Init-Datei verwenden:
quelle
Sie möchten binden
[escape]
, nicht(kbd "ESC")
, wie die von Ole referenzierten Bindungen zeigen. Auf Lager funktioniert dies nur, wenn Emacs-Frames in einem Fenstersystem vorhanden sind. Ich denke, das ist eine Erklärung wert.(kdb "ESC")
bedeutet eigentlich das ASCII-SteuerzeichenESC
, und wie Glucas erwähnt hat, möchten Sie dieses sicherlich nicht neu zuordnen. Ist Escaber nicht ASCIIESC
: Es ist ein Symbolescape
, zumindest in einer grafischen Umgebung. Wie kommt es dann dazu, dass sich die Bindung(kbd "ESC")
auswirkt Esc? Dies geschieht, weil emacs übersetztescape
,ESC
wenn keine Bindung für verfügbar istescape
. Eine Art Fallback, wenn Sie es wünschen (was mithilfe von implementiert wird,local-function-key-map
wenn Sie an solchen Dingen interessiert sind).Wenn Sie also binden
[escape]
, sind Sie in Sicherheit und müssen sich keine Sorgen machenESC
. Abgesehen von Ihren eigenen Bindungen müssen Sie nur die Keymaps erweitern, die angeben,ESC
wann sie bedeuten[escape]
.Hmm ... na ja, fast. Warum werden diese Karten nicht
[escape]
zum ersten Mal verwendet? Weil dies in einem Terminal nicht funktioniert. Wenn Sie Escan einem solchen Gerät arbeiten möchten , müssen Sie Ihr Terminal zumindest vorher anpassen .Die Geschichte des Terminals wird in einem anderen Beitrag berichtet: Wie bindet man C- [wirklich? . Sie müssen das Terminal anweisen, beim EscDrücken eine benutzerdefinierte Sequenz zu senden , und diese Sequenz dann
[escape]
zu einem frühen Zeitpunkt in emacs (theinput-decode-map
) zuordnen .Hoffe das hilft.
quelle