Як зв’язати C- [по-справжньому (серйозно реально на цей раз)


11

Чи є якийсь спосіб прив’язати C-[до чогось, і не всі M-(Meta) прив'язки переплутаються?

Це питання не вперше виникає. На жаль, єдине рішення, що пропонується в попередньому потоці, це: a) специфічний для Linux, б) потрібен зовнішній інструмент (знову ж таки для Linux), який не має нічого спільного з Emacs. У такому ж ключі я міг би використати щось на зразок Karabiner на OS X, щоб вкрасти C-[послідовність, перш ніж Emacs коли-небудь отримає це, але це незграбно і дорого.

З огляду на , що Emacs , що наполягає на переведенні C-[на ESC, C-iщоб TABі , можливо , інші , я б дуже хотів , щоб розірвати ці стосунки і отримати дорогоцінні послідовності ключових назад. Нещодавно я зіткнувся на повну швидкість з цією проблемою і звинувачував тихий невинний режим розумного одягу .

Можливе рішення , що участь function-key-mapі key-translation-mapбув обговорюватися тут , але на жаль вона більше або не працює або не працювати в першу чергу (або я роблю що - то неправильно). Я думаю, що це йшло в правильному напрямку.


3
Emacs не наполягає на "перекладі C-[на ESC". Два - це одне і те ж . Так само C-iі TABрізні назви одного і того ж коду управління ASCII.
Дрю

2
@Drew Не менш очевидно, що комбінації клавіш із керуванням повинні відображатися в кодах керування ASCII (яких лише 32) у додатку GUI. (Або, чортви, навіть у xterm, який має режим modifyOtherKeys для надсилання унікальних послідовностей евакуації у багатьох випадках, хоча я в цьому не впевнений зокрема)
Random832,

3
@ Random832: Ви маєте право відрізняти ключі від символів . Редактору є дещо логічним і зрозумілим відображення послідовності клавіш C-[ (натискання Ctrlта натискання [) на C-[керуючий символ (він же ESCперсонаж), але ні, це не є обов'язковим для того, хто розробляє редактор. І так, Emacs це робить. C-[і ESCє тим самим символом, але клавіші Ctrl+ [і Escне повинні бути відображені в будь-яких конкретних символах.
Дрю

Відповіді:


8

Адаптований із моєї власної конфігурації :

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

Це, очевидно, буде працювати лише в графічному інтерфейсі.

редагувати: Зауважте, що input-decode-mapтермінал локальний, що означає, що модифікація не працюватиме, якщо ви використовуєте emacsclient, але буде робити, якщо ви використовуєте emacs. Я вирішив проблему в моїй конфігурації, загорнувши її в команду, що працює на кадрі, і додавши її до after-make-frame-functionsгака.


дякую, це здається легітимним! Цікаво, чи існує спосіб запобігти Emacs трактувати Meta та ESC як одне й те саме? Також мені цікаво, чи просто я
зіпсую

1
Це вже інше питання, будь ласка, відкрийте для цього нове.
wasamasa

що цікаво мати <C-i>та <C-[>прив’язатись до TABта ESCна глобальній карті, як ви пропонуєте, у вашому конфігураційному квартирі вибивається мій Emacs кожного разу, коли я натискаю їх:
zeRusski

1
Ну, враховуючи, що вам трапляється хлопець, який передав помилку за кермовий збій при введенні літери "j" , я звинувачую вашу конструкцію Emacs за збій, і я б запропонував вам спробувати інший для OS X.
wasamasa

повірте, я намагався багато побудувати. Буде ще одна таємниця, з якою мені доведеться жити. Я
обійдусь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.