Bagaimana membedakan Ci dari TAB?

20

Biasanya, untuk alasan historis, emacs memperlakukan TABkode kunci dan C-ikunci 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>, dan C-i; tabdan Ctrl+ idi sisi lain adalah tombol fisik pada keyboard.

Namun, saat ini, emacs memperlakukan TABdan C-isebagai 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-mapstidak berubah. Memodifikasi untuk digunakan deletedaripada delqmenghasilkan 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.
  • Menggunakan input-decode-mappeta untuk Ctrl+ ike beberapa kode kontrol post-ASCII hampir apa yang saya cari. Kecuali itu tidak berfungsi dengan baik dengan kbdmakna 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 \tarti literal) untuk Ctrl+ i berfungsi tetapi Anda harus memodifikasi semua file sumber yang menggunakan jenis tab[Baca: kode kunci TAB] 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>dan TABharus memetakan ke satu ikatan sementara kode kunci Ctrl+ isuka C-iharus 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?

elemakil
sumber
2
Perhatikan bahwa TABdan C-i(kode, bukan tombol) adalah satu dan sama dengan definisi TAB.
Stefan
@Stefan Itu sebabnya saya menambahkan Note . Saya akan mengedit posting dan meletakkannya di sana.
elemakil
Kemungkinan rangkap dari Bagaimana mengikat Ci berbeda dari TAB?
Gilles 'SO- stop being evil'
IMO, pertanyaan ini bukan duplikat, karena ingin memindahkan semua ikatan kunci yang didefinisikan pada TAB (bahkan yang dari paket eksternal), untuk menggunakan <tab>. Sementara pertanyaan lainnya adalah menanyakan bagaimana membedakannya dengan kode Anda sendiri.
Malabarba
Saran saya adalah menyarankan kbduntuk menerjemahkan TAB sebagai [tab]. Itu tidak akan bekerja untuk bagian Emacs yang dimuat sebelumnya.
Malabarba

Jawaban:

21

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.

Stefan
sumber
Bertanya-tanya jenis keyboard apa yang Anda gunakan? Dengan keyboard QWERT yang khas, perbedaannya hanya jelas, dan tidak dapat membedakan tombol-tombol ini sangat menyusahkan ...
Ivan Huang