Bagaimana cara mengikat C- [untuk nyata (serius untuk nyata kali ini)

11

Apakah ada cara untuk mengikat C-[sesuatu dan tidak semua M-binding (Meta) kacau?

Bukan pertama kali pertanyaan ini muncul. Sayangnya, satu-satunya solusi yang ditawarkan di utas sebelumnya adalah a) spesifik Linux, b) membutuhkan alat eksternal (lagi spesifik Linux) yang tidak ada hubungannya dengan Emacs. Dalam nada yang sama saya bisa menggunakan sesuatu seperti Karabiner pada OS X untuk mencuri C-[urutan sebelum Emacs pernah mendapatkannya tetapi ini kikuk dan mahal.

Mengingat bahwa itu adalah Emacs yang bersikeras menerjemahkan C-[ke ESC, C-iuntuk TABdan mungkin orang lain saya akan sangat banyak seperti untuk memecah hubungan ini dan mendapatkan urutan kunci yang berharga kembali. Baru-baru ini saya berlari dengan kecepatan penuh ke masalah ini dan menyalahkan mode smartparens yang tidak bersalah .

Solusi yang mungkin yang terlibat function-key-mapdan key-translation-maptelah dibahas di sini tetapi sayangnya itu tidak lagi berfungsi atau tidak berfungsi sejak awal (atau saya melakukan sesuatu yang salah). Saya pikir itu akan ke arah yang benar.

zeRusski
sumber
3
Emacs tidak bersikeras "menerjemahkan C-[ke ESC". Keduanya adalah hal yang sama . Demikian juga, C-idan TABnama yang berbeda untuk kode kontrol ASCII yang sama .
Drew
2
@ Drew Tidak sedikit pun jelas bahwa kombinasi tombol dengan kontrol harus dipetakan ke kode kontrol ASCII (yang hanya ada 32) dalam aplikasi GUI. (Atau, heck, bahkan dalam xterm, yang memiliki mode modifyOtherKeys untuk mengirim urutan pelarian yang unik dalam banyak kasus, meskipun saya tidak yakin tentang ini pada khususnya)
Random832
3
@ Random832: Anda berhak membedakan kunci dari karakter . Agak logis dan mudah bagi editor untuk memetakan urutan kunci C-[ (tekan Ctrldan tekan [) ke karakterC-[ kontrol (alias karakter), tetapi tidak, itu tidak wajib bagi seseorang yang merancang editor. Dan ya, Emacs yang melakukannya. dan karakter yang sama, tetapi tombol + dan tidak perlu dipetakan ke karakter tertentu. ESCC-[ESCCtrl[Esc
Drew

Jawaban:

8

Diadaptasi dari konfigurasi saya sendiri :

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

Ini jelas hanya akan bekerja di GUI.

edit: Perhatikan bahwa itu input-decode-mapadalah terminal-lokal yang berarti memodifikasi itu tidak akan berfungsi jika Anda menggunakan emacsclient, tetapi akan dilakukan jika Anda menggunakan emacs. Saya telah memperbaiki masalah di konfigurasi saya dengan membungkusnya dalam perintah yang beroperasi pada bingkai dan menambahkannya ke after-make-frame-functionshook.

wasamasa
sumber
terima kasih ini nampak sah-sah saja! Saya ingin tahu apakah ada cara untuk mencegah Emacs memperlakukan Meta dan ESC sebagai hal yang sama? Juga saya bertanya-tanya apakah saya hanya mengacaukan beberapa terminologi Emacs dan tidak berpikir jernih di sini
zeRusski
1
Itu pertanyaan yang berbeda, tolong buka yang baru untuk itu.
wasamasa
Menariknya memiliki <C-i>dan <C-[>terikat kembali ke TABdan ESCdi peta-global seperti yang Anda sarankan di flat konfigurasi Anda crash Emacs saya setiap kali saya menekan mereka:
zeRusski
1
Nah, mengingat kamu kebetulan adalah orang yang telah menyerahkan bug untuk helm yang menabrak masukan huruf "j" , aku menyalahkan Emacs build kamu untuk menjadi crash dan akan menyarankan kamu untuk mencoba yang berbeda untuk OS X.
wasamasa
Percayalah, saya memang mencoba banyak build. Akan menjadi misteri lain yang harus saya jalani. Saya akan mengatur -) terima kasih atas solusinya
zeRusski