Come legare C- [per davvero (seriamente per davvero questa volta)


11

C'è un modo per legarsi C-[a qualcosa e non avere tutti i M-bind (Meta) incasinati?

Non è la prima volta che viene posta questa domanda. Sfortunatamente, l'unica soluzione offerta nel thread precedente è a) specifica per Linux, b) richiede uno strumento esterno (di nuovo specifico per Linux) che non ha nulla a che fare con Emacs. Allo stesso modo avrei potuto usare qualcosa di simile a Karabiner su un OS X per rubare la C-[sequenza prima che Emacs mai la ottenesse, ma questo è goffo e costoso.

Dato che si tratta di Emacs che insiste sulla traduzione C-[per ESC, C-iad TABe probabilmente altri che piacerebbe molto a rompere queste relazioni e ottenere preziose sequenze di tasti indietro. Di recente mi sono imbattuto a pieno ritmo in questo problema e ho incolpato la modalità silenziosa smartparens innocente .

Una possibile soluzione che ha coinvolto function-key-maped è key-translation-mapstata discussa qui, ma purtroppo o non funziona più o non ha funzionato in primo luogo (o sto facendo qualcosa di sbagliato). Penso che stesse andando nella giusta direzione.


3
Emacs non insiste "sulla traduzione C-[in ESC". I due sono la stessa cosa . Allo stesso modo, C-ie TABsono nomi diversi per lo stesso codice di controllo ASCII.
Estratto il

2
@Drew Non è affatto ovvio che le combinazioni di tasti con controllo devono essere mappate a codici di controllo ASCII (di cui ci sono solo 32) in un'applicazione GUI. (O diamine, anche in xterm, che ha una modalità di modifica di Altri tasti per inviare sequenze di escape uniche in molti casi, anche se non ne sono sicuro in particolare)
Casuale 832

3
@ Random832: hai ragione a distinguere le chiavi dai caratteri . È in qualche modo logico e semplice per un editor mappare la sequenza di tasti C-[ (premere Ctrle premere [) sul personaggio diC-[ controllo (aka il personaggio), ma no, non è obbligatorio per qualcuno che progetta un editor. E sì, Emacs lo fa. e hanno lo stesso carattere, ma i tasti + e non devono essere associati a caratteri particolari. ESCC-[ESCCtrl[Esc
Estratto il

Risposte:


8

Adattato dalla mia configurazione :

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

Questo ovviamente funzionerà solo nella GUI.

modifica: Nota che input-decode-mapè un terminale locale, il che significa che non funzionerà se lo stai usando emacsclient, ma lo farà se lo stai usando emacs. Ho risolto il problema nella mia configurazione avvolgendolo in un comando operando su un frame e aggiungendolo after-make-frame-functionsall'hook.


grazie, questo sembra legittimo! Mi chiedo se c'è un modo per impedire a Emacs di trattare Meta ed ESC come la stessa cosa? Mi chiedo anche se sto semplicemente incasinando la terminologia di Emacs e non sto pensando direttamente qui
zeRusski

1
Questa è una domanda diversa, per favore aprine una nuova.
Wasamasa,

avere in modo interessante <C-i>e <C-[>ricollegarsi alla TABe ESCnella mappa globale come suggerisci nella tua configurazione, fa schiantare il mio Emacs ogni volta che lo colpisco:
zeRusski

1
Bene, considerando che ti capita di essere il tipo che ha consegnato un bug per il crash del timone quando si inserisce la lettera "j" , biasimo il tuo Emacs build per essere un crash e ti suggerirei di provarne uno diverso per OS X.
wasamasa,

credimi, ho provato molte build. Sarà un altro mistero con cui dovrò convivere. Ci
riuscirò
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.