Wie man C- [für real bindet (diesmal ernsthaft für real)

11

Gibt es eine Möglichkeit, sich C-[an etwas zu binden und nicht alle M-(Meta-) Bindungen durcheinander zu bringen?

Nicht das erste Mal, dass diese Frage auftaucht. Leider ist die einzige Lösung, die im vorherigen Thread angeboten wurde, a) Linux-spezifisch, b) erfordert ein externes Tool (wiederum Linux-spezifisch), das nichts mit Emacs zu tun hat. Ebenso hätte ich so etwas wie Karabiner auf einem OS X verwenden können, um die C-[Sequenz zu stehlen , bevor Emacs sie jemals bekommt, aber das ist klobig und teuer.

Angesichts der Tatsache, dass es Emacs ist, der darauf besteht, C-[zu ESC, C-izu TABund wahrscheinlich zu anderen zu übersetzen , würde ich diese Beziehungen sehr gerne auflösen und wertvolle Schlüsselsequenzen zurückbekommen. Kürzlich bin ich auf dieses Problem gestoßen und habe den ruhigen, unschuldigen Smartparens- Modus beschuldigt .

Eine mögliche Lösung, die involviert war function-key-mapund key-translation-maphier diskutiert wurde, aber leider funktioniert sie entweder nicht mehr oder überhaupt nicht (oder ich mache etwas falsch). Ich denke, es ging in die richtige Richtung.

zeRusski
quelle
3
Emacs nicht darauf bestehen , nicht „auf die Übersetzung C-[zu ESC“. Die beiden sind dasselbe . Ebenso C-iund TABsind unterschiedliche Namen für denselben ASCII-Steuercode.
Drew
2
@Drew Es ist nicht das geringste offensichtlich , dass Tastenkombinationen mit Steuerung muss auf ASCII - Steuercodes Karte (von denen es nur 32) in einer GUI - Anwendung. (Oder, zum Teufel, sogar in xterm, das einen ModifyOtherKeys-Modus hat, um in vielen Fällen eindeutige Escape-Sequenzen zu senden, obwohl ich mir darüber nicht sicher bin)
Random832
3
@ Random832: Sie haben Recht, Schlüssel von Zeichen zu unterscheiden . Es ist etwas logisch und einfach für einen Editor die kartieren Tastenfolge C-[ (drücken Ctrlund Treffer [) an die C-[Steuer Zeichen (auch bekannt als die ESCZeichen), aber nein, das ist nicht obligatorisch für jemanden mit einem Editor zu entwerfen. Und ja, Emacs macht das. C-[und ESCsind das gleiche Zeichen, aber die Tasten Ctrl+ [und Escmüssen keinem bestimmten Zeichen zugeordnet werden.
Drew

Antworten:

8

Angepasst von meiner eigenen Konfiguration :

(define-key input-decode-map [?\C-\[] (kbd "<C-[>"))
(global-set-key (kbd "<C-[>") 'butterfly)

Dies funktioniert natürlich nur in der GUI.

Bearbeiten: Beachten Sie, dass dies input-decode-mapterminallokal ist. Dies bedeutet, dass das Ändern bei Verwendung nicht funktioniert, bei Verwendung emacsclientjedoch funktioniert emacs. Ich habe das Problem in meiner Konfiguration behoben, indem ich es in einen Befehl eingeschlossen habe, der einen Frame ausführt, und ihn dem after-make-frame-functionsHook hinzugefügt habe .

Wasamasa
quelle
Danke, das scheint echt zu sein! Ich frage mich, ob es eine Möglichkeit gibt, Emacs daran zu hindern, Meta und ESC als dasselbe zu behandeln. Ich frage mich auch, ob ich nur ein paar Emacs-Begriffe
durcheinander bringe
1
Das ist eine andere Frage, bitte öffnen Sie eine neue dafür.
Wasamasa
Interessanterweise mit <C-i>und <C-[>gebunden zurück zu TABund ESCin der global-Karte , wie Sie in Ihrer Konfigurations flach heraus vorschlagen stürzt meine Emacs jedes Mal , wenn ich em getroffen:
zeRusski
1
Nun, wenn man bedenkt, dass Sie zufällig der Typ sind, der bei Eingabe des Buchstabens "j" einen Fehler beim Absturz des Ruders gemeldet hat, beschuldige ich Ihren Emacs-Build, abgestürzt zu sein, und würde Ihnen vorschlagen, einen anderen für OS X zu versuchen.
Wasamasa
Glauben Sie mir, ich habe viele Builds ausprobiert. Wird ein weiteres Rätsel sein, mit dem ich leben muss. Ich werde es schaffen -) danke für die Lösung
zeRusski