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.
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) sebagai meta-prefix-key
. Dari Manual Elisp:
'esc-map' adalah keymap global untuk kunci awalan. Dengan demikian, definisi global semua karakter meta sebenarnya ditemukan di sini. Peta ini juga merupakan definisi fungsi 'awalan ESC'.
dan
Sebagai gantinya, karakter meta dianggap untuk keperluan pencarian kunci sebagai urutan dua karakter, yang pertama adalah ESC (atau apa pun yang saat ini nilai 'meta-prefix-char'). Dengan demikian, kunci 'M-a' secara internal direpresentasikan sebagai 'ESC a', dan pengikatan globalnya ditemukan pada slot untuk 'a' di 'esc-map'.
Jadi untuk menggunakan ESC untuk sesuatu yang lain, Anda perlu mengatur meta-pefix-key
ke sesuatu yang lain, dan juga mengikat beberapa kunci lainnya ESC-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.
meta-prefix-char
ke nil
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. Ini esc-map
didefinisikan pada level kode sumber-C di dalam keymap.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 menggunakan meta-prefix-char
, yang 27
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:
;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)
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 ASCII ESC
, dan seperti yang disebutkan oleh glucas , Anda tentu tidak ingin memetakan yang ini. Tetapi Escbukan ASCII ESC
: itu adalah simbol escape
, setidaknya dalam lingkungan grafis. Bagaimana bisa terjadi pengikatan yang (kbd "ESC")
memengaruhi Esc? Ini terjadi karena emacs menerjemahkan escape
ke ESC
jika tidak ada ikatan yang tersedia untukescape
. Jenis mundur jika Anda inginkan (yang dilaksanakan dengan cara local-function-key-map
jika Anda tertarik pada hal-hal seperti itu).
Dengan demikian, ketika Anda mengikat [escape]
, Anda aman dan tidak perlu khawatir ESC
; terlepas dari binding Anda sendiri, Anda hanya perlu menambah keymap yang mengatakan ESC
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 (the input-decode-map
).
Semoga ini membantu.
universal-argument
denganuniversal-argument-map
.