Jak powiązać C- [naprawdę (tym razem naprawdę poważnie)

11

Czy istnieje jakiś sposób na powiązanie C-[z czymś i nie M-pomieszanie wszystkich powiązań (Meta)?

Nie pierwszy raz pojawia się to pytanie. Niestety, jedynym rozwiązaniem oferowanym w poprzednim wątku jest: a) specyficzne dla Linuksa, b) wymaga zewnętrznego narzędzia (znowu specyficznego dla Linuksa), które nie ma nic wspólnego z Emacsem. W tym samym duchu mogłem użyć czegoś takiego jak Karabiner na OS X, aby ukraść C-[sekwencję, zanim Emacs ją kiedykolwiek dostanie, ale jest to niezgrabne i kosztowne.

Biorąc pod uwagę, że jest Emacs, że kładzie nacisk na tłumaczenia C-[do ESC, C-iaby TABi prawdopodobnie inni ja bardzo chciałbym złamać te relacje i uzyskać cenne sekwencje klawiszy z powrotem. Niedawno wbiegłem w ten problem z pełną prędkością i obwiniałem cichy tryb niewinnych smartparenów .

Możliwe rozwiązanie, które dotyczyło function-key-mapi key-translation-mapzostało omówione tutaj, ale niestety już nie działa lub nie działało w pierwszej kolejności (lub robię coś złego). Myślę jednak, że zmierzał we właściwym kierunku.

zeRusski
źródło
3
Emacs nie nalega na „przetłumaczenie C-[na ESC”. Te dwie rzeczytakie same . Podobnie C-ii TABsą różne nazwy dla tego samego kodu sterującego ASCII.
Drew
2
@Drew Nie jest wcale oczywiste, że kombinacje klawiszy ze sterowaniem muszą być mapowane na kody sterujące ASCII (których jest tylko 32) w aplikacji GUI. (Lub, do cholery, nawet w Xterm, który ma tryb modyfikować inne klucze do wysyłania unikatowych sekwencji ucieczki w wielu przypadkach, chociaż nie jestem tego pewien)
Random832
3
@ Random832: Masz rację, odróżniając klawisze od znaków . Edytor mapuje sekwencję klawiszy C-[ (naciśnięcie Ctrli naciśnięcie [) na znakC-[ kontrolny (znany również jako znak), ale jest to logiczne i proste , ale nie jest to obowiązkowe dla kogoś, kto projektuje edytor. I tak, Emacs to robi. i są tym samym znakiem, ale klawisze + i nie muszą być przypisane do konkretnych znaków. ESCC-[ESCCtrl[Esc
Drew

Odpowiedzi:

8

Zaadaptowano z mojej własnej konfiguracji :

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

Będzie to oczywiście działać tylko w GUI.

edycja: Zauważ, że input-decode-mapjest to terminal lokalny, co oznacza, że ​​modyfikacja nie będzie działać, jeśli używasz emacsclient, ale zrobi to, jeśli używasz emacs. Naprawiłem problem w mojej konfiguracji, zawijając go w poleceniu operującym na ramce i dodając do after-make-frame-functionszaczepu.

wasamasa
źródło
dziękuję, to wydaje się uzasadnione! Zastanawiam się, czy istnieje sposób, aby powstrzymać Emacsa przed traktowaniem Meta i ESC jako tego samego? Również zastanawiam się, czy ja po prostu bawić się trochę terminologii Emacs i nie myśląc prosto tutaj
zeRusski
1
To inne pytanie, proszę otworzyć nowe.
wasamasa
ciekawe posiadanie <C-i>i <C-[>powrót do TABi ESCna mapie globalnej, jak sugerujesz w konfiguracji, powoduje awarię mojego Emacsa za każdym razem, gdy go uderzę:
zeRusski
1
Cóż, biorąc pod uwagę, że jesteś facetem, który podał błąd powodujący awarię steru po wprowadzeniu litery „j” , obwiniam twoją kompilację Emacsa za awarię i sugeruję, abyś spróbował innej wersji dla OS X.
wasamasa
uwierz mi, próbowałem wielu kompilacji. Będzie kolejną tajemnicą, z którą będę musiał żyć.
Poradzę