Bagaimana cara mengirim C- / (yaitu, kontrol-slash) ke terminal?

13

Saya mencoba menjalankan Emacs di terminal. Saya telah mengaktifkan "opsi penggunaan sebagai meta" di preferensi terminal dan jadi sekitar 95% berfungsi dengan baik.

Urutan kunci ctrl- / (atau dalam notasi Emacs C- /) adalah "undo". Urutan kunci ini hanya menyebabkan terminal membunyikan bel. Bagaimana cara saya memperbaikinya?

Kevin Peterson
sumber
FWIW, ini berfungsi di iTerm2 - iterm2.com - tapi saya rasa saya hanya akan melatih diri lagi untuk menggunakan ^ _ di mana-mana, agar lebih portabel.
Steven R. Loomis
@ StevenR.Loomis portable? baik control- / atau control-_ tidak bekerja di Android ...
Michael
@Michael saya katakan portabel karena mewakili di ASCII (lihat jawaban yang diterima) dan dengan demikian dapat transit koneksi jaringan tanpa masalah. Plus, tampaknya dapat digunakan pada sebagian besar keyboard fisik yang saya lihat. Saya tidak mencoba memasangkan keyboard ke perangkat android, apakah Anda mengacu pada keyboard lunak atau keras?
Steven R. Loomis
@ StevenR.Loomis perangkat lunak ... bagian kontrol tampaknya diabaikan sehingga upaya untuk membatalkan memasukkan garis miring atau garis bawah.
Michael

Jawaban:

19

Kontrol- /bukan bagian dari rangkaian kode kontrol standar . Ini tidak secara langsung direpresentasikan sebagai keystroke di banyak emulasi terminal. Keystroke semacam itu hanya dapat dideteksi dengan tepat di "mode scancode" khusus platform atau "mode GUI" (di mana API memberi tahu Anda secara tepat tombol dan pengubah mana yang sedang digunakan). Emulator terminal Anda berbunyi bip karena secara efektif keystroke yang tidak valid.

Kode kontrol standar hanya mencakup versi "Kontrol" dari

  • @ A- Z [\]^_(ASCII 0 - 31), dan
  • ? (ASCII 127)

Di sebagian besar program emulator terminal yang menjalankan sebagian besar tata letak kunci AS, Anda mungkin perlu menekan Shiftuntuk membuat beberapa "kode kontrol":

  • C- @ adalah ControlShift2(karena @merupakan Shift2)
  • C- ^ adalah ControlShift6(karena ^merupakan Shift6)
  • C-_ adalah ControlShift-(karena _merupakan Shift-)
  • Namun, C-? mungkin tidak selalu ControlShift/(sejak ?itu Shift/); C-? biasanya dihasilkan oleh salah satu Backspace(pada keyboard Apple, kunci berlabel "hapus" tanpa simbol tambahan ⌦) atau Delete(yang dengan ⌦ pada keyboard Apple).

Di Emacs berbasis tty, Anda biasanya dapat menggunakan C-_ untuk undoalih - alih C- /.

Chris Johnsen
sumber
1
Terima kasih atas jawabannya. Saya akan mencoba bermain dengan tipe terminal yang berbeda untuk melihat apakah saya bisa membuatnya bekerja.
Kevin Peterson
1
"Jenis terminal yang berbeda"? Apakah yang Anda maksud adalah program emulator terminal yang berbeda, atau apakah Anda merujuk pada nilai $ TERM, yang di Terminal diatur melalui Terminal> Preferensi> Pengaturan> [profil]> Tingkat Lanjut> Deklarasikan terminal sebagai ? (Semua preferensi yang dilakukan adalah menetapkan nilai $ TERM. Itu tidak mengubah operasi emulasi terminal.) Control- / adalah fitur X11 dan tidak didukung oleh Cocoa atau Terminal.
Chris Page
5

Ctrl- / mengirim 0x1f yang setara dengan Ctrl-_ sejak zaman VT102. Ada banyak emulator VT100 tetapi sebenarnya emulator VT102. iTerm2 berfungsi karena mengikuti perilaku ini.

Hanya emulator yang benar-benar sesuai dengan spesifikasi VT100 yang tidak dapat mengirim Ctrl- /. Saya percaya aplikasi Terminal adalah salah satunya.

VT100 menutupi 2 bit paling signifikan dari 7 bit ASCII ketika tombol kontrol ditekan. / is 0x2f, o adalah 0x6f. Ketika 2 bit bertopeng keduanya 0x0f. VT100 dapat mengirim Ctrl-o tetapi tidak Ctrl- /.

Kenji Noguchi
sumber
Ini harus menjadi jawaban yang diterima.
ocodo