Saya ingin menggunakan ESC
kunci, bukan C-g
untuk keyboard-quit
. Pendekatan naif saya untuk hanya melakukan
(define-key global-map (kbd "ESC") 'keyboard-quit)
tidak bekerja. ESC
masih merupakan kunci awalan dan menekannya tidak memanggil keyboard-quit
.
key-bindings
Geier
sumber
sumber
universal-argument
denganuniversal-argument-map
.Jawaban:
Anda bisa melakukannya
(define-key key-translation-map (kbd "ESC") (kbd "C-g"))
. Saya melakukan hal yang sama sejak lama dan tidak memiliki masalah.Edit untuk meningkatkan jawaban sesuai dengan komentar:
Jika Anda ingin menjaga
ESC
fungsionalitas utama, Anda dapat melakukannya(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Satu hal yang perlu diperhatikan adalah bahwa jika Emacs hang Anda masih harus menggunakan
C-g
kunci untuk beberapa alasan, tetapi itu jarang terjadi.sumber
C-g
untuk melepasnya,ESC
remapping tidak berfungsi dalam kasus ini.ESC
jadi ini tidak mengganggu saya. Tetapi jika Anda membutuhkannya, Anda dapat melakukan terjemahan lain, misalnya(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Saran saya adalah pergi
ESC
sendiri, karena itu adalah kunci khusus.Secara default, Emacs menggunakan
ESC
(ASCII 27) sebagaimeta-prefix-key
. Dari Manual Elisp:dan
Jadi untuk menggunakan ESC untuk sesuatu yang lain, Anda perlu mengatur
meta-pefix-key
ke sesuatu yang lain, dan juga mengikat beberapa kunci lainnyaESC-prefix
. Mungkin ada perubahan lain yang diperlukan juga - Saya belum pernah mencoba ini.Untuk lebih lanjut tentang
meta-prefix-char
, lihat Fungsi untuk Pencarian Kunci di manual Elisp.sumber
ESC
. Ikat kunci lain untukkeyboard-quit
, jika Anda mau. Dan sadarilah bahwaESC ESC ESC
sudah memberi Anda perilaku melarikan diri yang Anda inginkan - lihat manual Emacs, simpul Berhenti .meta-prefix-char
kenil
pada OSX tidak akan menonaktifkannya dari menjadi kunci awalan - itu hanya akan memisahkannya dari kunci meta. Pada OSX dengan versi grafis Emacs, saya ingin memisahkan kunci dari meta key - saya atur(setq meta-prefix-char nil)
pada awal inisialisasi saya sehingga semua perpustakaan yang dimuat kemudian mengerti apa yang saya inginkan. Ini memberi saya kemampuan untuk menggunakan kunci meta sebagai kunci awalan, dan tombol melarikan diri sebagai kunci awalan. Iniesc-map
didefinisikan pada level kode sumber-C di dalamkeymap.c
. Ini dimaksudkan untuk digunakan sebagai kunci awalan.esc-map
awalan untuk mempertahankan standar M-binding?(setq ns-alternate-modifier 'meta)
yang menjadikan meta tombol alt kiri pada keyboard Apple. Saya suka menggunakan tombol alt kanan untuk membuat karakter unicode menggunakan pengaturan default OSX:(setq ns-right-alternate-modifier 'none)
- untuk memasukkan karakter Spanyol, simbol paragraf, dll. Ketika membangun--with-ns
, baik tombol alt kiri dan kanan diatur ke meta. Pengaturan default mengikat kunci escape ke kunci meta pada OSX menggunakanmeta-prefix-char
, yang27
seperti yang Anda nyatakan.Jawaban yang indah di sini: https://superuser.com/a/945245/624661
Mengutip:
Anda dapat menggunakan ini di file init Emacs Anda:
sumber
Anda ingin mengikat
[escape]
, bukan(kbd "ESC")
, seperti ikatan yang dirujuk oleh Ole menunjukkan. Dalam persediaan, ini hanya akan berfungsi jika emacs bingkai dalam sistem jendela. Saya pikir ini perlu sedikit penjelasan.(kdb "ESC")
berarti sebenarnya karakter kontrol ASCIIESC
, dan seperti yang disebutkan oleh glucas , Anda tentu tidak ingin memetakan yang ini. Tetapi Escbukan ASCIIESC
: itu adalah simbolescape
, setidaknya dalam lingkungan grafis. Bagaimana bisa terjadi pengikatan yang(kbd "ESC")
memengaruhi Esc? Ini terjadi karena emacs menerjemahkanescape
keESC
jika tidak ada ikatan yang tersedia untukescape
. Jenis mundur jika Anda inginkan (yang dilaksanakan dengan caralocal-function-key-map
jika Anda tertarik pada hal-hal seperti itu).Dengan demikian, ketika Anda mengikat
[escape]
, Anda aman dan tidak perlu khawatirESC
; terlepas dari binding Anda sendiri, Anda hanya perlu menambah keymap yang mengatakanESC
kapan mereka maksud[escape]
.Hmm ... yah, hampir. Mengapa peta ini tidak digunakan
[escape]
pertama kali? Karena ini tidak akan berfungsi di terminal. Jika Anda ingin Escpekerjaan Anda pada perangkat seperti itu, Anda harus memiliki paling tidak untuk menyesuaikan terminal Anda sebelumnya.Kisah terminal dilaporkan di pos lain: Bagaimana cara mengikat C- [nyata? . Yang harus Anda lakukan adalah memberi tahu terminal untuk mengirim beberapa urutan khusus ketika Escditekan, lalu memetakan urutan ini
[escape]
pada tahap input awal di emacs (theinput-decode-map
).Semoga ini membantu.
sumber