Biasanya, untuk alasan historis, emacs memperlakukan TAB
kode kunci dan C-i
kunci sebagai sama, lih. dokumentasi emacs lisp pada tombol fungsi atau jawaban abo-abo pada pertanyaan "Apa perbedaan antara TAB dan?" .
CATATAN: Dalam posting ini, keycodes adalah
TAB
,<tab>
, danC-i
; tabdan Ctrl+ idi sisi lain adalah tombol fisik pada keyboard.Namun, saat ini, emacs memperlakukan
TAB
danC-i
sebagai hal yang sama, yaitu(equal (kbd "TAB") (kbd "C-i"))
->t
.
Namun, karena kita tidak lagi hidup di dunia komputasi saya merasa ini sangat menjengkelkan. Ada beberapa saran di luar sana apa yang dapat dilakukan untuk mengatasi hal ini, misalnya
"Bagaimana cara saya mengikat perintah ke Ci tanpa mengubah TAB?"
- Solusi Trey tidak bekerja untuk saya, variabelnya
local-function-key-maps
tidak berubah. Memodifikasi untuk digunakandelete
daripadadelq
menghasilkan variabel yang dimodifikasi tetapi tidak membawa tekad ... tabdan Ctrl+ imasih sama. - Menerjemahkan ke peta hyper sepertinya solusi tahun 1980-an ... Saya mungkin ingin menggunakan Hyper+ ijuga.
- Solusi Trey tidak bekerja untuk saya, variabelnya
Menggunakan
input-decode-map
peta untuk Ctrl+ ike beberapa kode kontrol post-ASCII hampir apa yang saya cari. Kecuali itu tidak berfungsi dengan baik dengankbd
makna makro bahwa seseorang harus memodifikasi semua bit kode sumber yang akan mengikat Ctrl+ i. Bisa dibilang ini adalah solusi terbaik mengingat bahwa semua kode sumber dimodifikasi dengan benar.Menggunakan
(kbd "<tab>")
untuk tabdan(kbd "C-i")
(yang diterjemahkan ke(kbd "TAB")
dalam\t
arti literal) untuk Ctrl+ i berfungsi tetapi Anda harus memodifikasi semua file sumber yang menggunakan jenis tab[Baca: kode kunciTAB
] yang salah yang menjengkelkan.
Ini telah disarankan misalnya dalam masalah github dan emacs.sx juga .
Tak satu pun dari solusi ini yang tampak sebagai solusi nyata, saya lebih suka menganggapnya sebagai solusi atau peretasan (dari bug yang ada ).
Apakah ada cara di luar sana untuk memaksa emacs untuk memetakan tabke
(kbd "<tab>")
dan(kbd "TAB")
sementara Ctrl+ idipetakan ke(kbd "C-i")
singkat modyfing kode emacs sumber?Pendekatan ini harus benar-benar tidak terlihat oleh pengguna, yang berarti bahwa kode kunci tabsuka
<tab>
danTAB
harus memetakan ke satu ikatan sementara kode kunci Ctrl+ isukaC-i
harus memetakan ke ikatan lain.
Pada catatan yang kurang serius: Adakah pengembang emacs di sini yang dapat berkomentar apakah ini akan diubah / diperbaiki dalam kode sumber emacs di beberapa titik?
sumber
TAB
danC-i
(kode, bukan tombol) adalah satu dan sama dengan definisiTAB
.kbd
untuk menerjemahkan TAB sebagai [tab]. Itu tidak akan bekerja untuk bagian Emacs yang dimuat sebelumnya.Jawaban:
Masa depan sudah lama berlalu, dan zaman batu komputasi baru akan datang. Semua terminal teks saya tahu masih mengirim persis sama byte-urutan untuk Emacs untuk C-iseperti untuk TAB, sehingga kebutuhan asli untuk "menyatukan" mereka masih sangat banyak dengan kami.
Input-decode-map (à la
(define-key input-decode-map "\C-i" [C-i])
) mungkin sama baiknya dengan yang didapat sekarang.Sebagai mantan pengelola Emacs, saya akan menyambut solusi yang lebih baik untuk masalah ini, untuk membebaskan kunci C-i(dan C-mdan C-[) di bawah GUI (mungkin membuatnya "dicadangkan untuk pengguna"). Tapi saya tidak tahu bagaimana melakukannya tanpa menyebabkan banyak masalah dengan paket yang ada.
sumber