Emacs C-. tidak bekerja di terminal

11

Saya menggunakan GNU Emacs, biasanya seperti emacs -nwyang meluncurkan versi terminal (sebagai lawan dari versi GUI berjendela).

Saya menulis makalah sekolah di LaTeXjadi saya gunakan flyspell-modeuntuk memeriksa ejaan dalam emacs. Ini berfungsi dengan baik di versi GUI, tetapi di terminal, saya mengalami masalah dengan keystroke C-.( Ctrl- .). Dalam tty, ini tidak melakukan apa-apa, dan dalam terminatoratau gnome-terminal, ini hanya memasukkan "."

Apa yang dapat saya lakukan untuk membuatnya melakukan apa yang dilakukannya di versi berjendela (tampilkan saran ejaan untuk kata yang salah eja)?

EDIT: Dalam hal ini penting, saya menggunakan Ubuntu 12.04 dengan Emacs 23.3.1 (yang saya percaya adalah default dari repo 12,04).

cg505
sumber
1
Sama disini. Apakah kamu mencoba Esc- x flyspell-mode? Ini bekerja untuk saya.
Masroor
Baiklah. Saya selalu mulai flyspell-modedengan M-x, tetapi ESC xtampaknya tidak membuat perbedaan.
cg505
1
Sama disini. Namun saya menemukan pengikat kunci default yang berfungsi untuk kedua versi ESC-TAB.
McNisse
Ya, ESC TABatau M-TABkeduanya bekerja untuk saya. Terima kasih atas tipnya @McNisse.
cg505

Jawaban:

4

Sepertinya bagian penting dari pertanyaan ini sudah dijawab dalam komentar, tetapi untuk mengatasi akar penyebabnya jika Anda penasaran, saya pikir ctrl-. tidak berfungsi di terminal karena beberapa batasan emulator terminal. Di terminal standar, ctrl didefinisikan untuk mengirim kode ASCII dari tombol yang Anda tekan minus 64 (inilah sebabnya ctrl-J (74) mengirim baris baru (10) dan ctrl-I (73) mengirimkan tab (9), misalnya ). Karena kode ASCII periode 46, mengurangi 64 akan memberikan -18, yang tidak valid karena negatif dan tidak ada kode ASCII negatif dan karenanya tidak ada yang diterima dan dipahami oleh emacs.

Ketika Anda menjalankan emacs dalam mode windowed, mekanisme terminal emulator di-bypass dan alih-alih penanganan keyboard yang lebih kuat dari X11 digunakan, yang dapat menangani penekanan tombol yang lebih kabur (daripada mengurangi setiap penekanan tombol menjadi satu karakter ASCII, program menerima kunci asli ditambah semua pengubah yang berlaku, secara terpisah). Jadi mungkin tidak mungkin membuat emacs berbasis tty menangani ctrl-. kecuali Anda membuat modifikasi khusus untuk emulator terminal Anda (dan mungkin juga emacs).

Paul
sumber
1
Jawaban ini sangat menarik. Saya menggali lebih dalam, dan menemukan DEC VT100 bekerja serupa tetapi berbeda, secara tegas. Inilah yang dilakukannya ketika tombol kontrol dan tombol lainnya ditekan bersamaan: 1) mencari tabel ASCII dengan kode pindai keyboard 2) mencari tabel kode kontrol yang valid oleh ASCII 3) jika valid, tutup bit5 dan bit6 dari ASCII 4 ) mengirim. Jadi ctrl-J, ctrl-j, dan ctrl- * semua bisa mengirim LF tetapi pemeriksaan validitas membatasi kombinasi. Lihat DEC VT100 manual manual bagian 4-43 (PDF halaman 93).
Kenji Noguchi
Saya dapat menangkap 'C-.'dengan baik dengan emacs di xterm tetapi tidak dengan urxvt atau st. Adakah yang tahu mengapa itu bisa terjadi?
stewSquared
0

Sementara jawaban di atas memberikan penjelasan yang baik tentang mengapa itu tidak berhasil, itu tidak benar-benar membahas bagaimana membuatnya bekerja. Untuk iTerm2Anda dapat menyelesaikan ini dengan menambahkan pemetaan kunci untuk urutan pelarian . Saya membayangkan akan ada sesuatu yang serupa di terminatorataugnome-terminal

Chris
sumber