Emacs C-. не работает в терминале


11

Я использую GNU Emacs, обычно такой, emacs -nwкоторый запускает версию терминала (в отличие от оконной версии GUI).

Я пишу школьные документы, LaTeXпоэтому использую их flyspell-modeдля проверки орфографии в emacs. Это хорошо работает в версии с графическим интерфейсом, но в терминале у меня возникают проблемы с нажатием клавиши C-.( Ctrl- .). В tty это ничего не делает, а в terminatorили gnome-terminalпросто вводит «.».

Что я могу сделать, чтобы заставить его делать то же, что и в оконной версии (показывать варианты написания слов с ошибками)?

РЕДАКТИРОВАТЬ: В случае, если это имеет значение, я использую Ubuntu 12.04 с Emacs 23.3.1 (который я считаю по умолчанию из репо 12.04).


1
Тоже самое. Вы пробовали Esc- x flyspell-mode? Это работает для меня.
Масрур

Ну да. Я всегда начинаю flyspell-modeс M-x, но ESC x, похоже , ничего не изменилось.
cg505

1
Тоже самое. Однако я нашел связывание клавиш по умолчанию, которое работает для обеих версий ESC-TAB.
Макнисс

Да, ESC TABили M-TABоба работают на меня. Спасибо за совет @McNisse.
cg505

Ответы:


4

Похоже, что важная часть этого вопроса уже была дана в комментариях, но для устранения основной причины, если вам интересно, я думаю, ctrl-. не работает в терминале из-за некоторых ограничений эмуляторов терминала. В стандартном терминале ctrl определен для отправки кода ASCII клавиши, которую вы нажимаете минус 64 (вот почему ctrl-J (74) отправляет символ новой строки (10), а ctrl-I (73) отправляет вкладку (9), например ). Поскольку ASCII-код периода равен 46, вычитание 64 даст -18, что недопустимо, поскольку оно отрицательно и нет отрицательных ASCII-кодов и, следовательно, ничего не может получить и понять emacs.

Когда вы запускаете emacs в оконном режиме, механизм эмулятора терминала обходится, и вместо этого используется более надежная обработка клавиатуры X11, которая может обрабатывать более неясные нажатия клавиш (вместо того, чтобы сводить каждое нажатие клавиши до одного символа ASCII, программа получает исходный ключ). плюс все применимые модификаторы, отдельно). Так что, вероятно, невозможно заставить основанный на tty emacs обрабатывать ctrl-. если вы не вносите пользовательские изменения в свой эмулятор терминала (и, возможно, также в emacs).


1
Этот ответ действительно интересный. Я копался глубже и обнаружил, что DEC VT100 работает аналогично, но, строго говоря, по-другому. Вот что он делает, когда клавиша управления и другая клавиша нажимаются вместе: 1) поиск таблицы ASCII по коду сканирования клавиатуры 2) поиск таблицы действительных кодов управления с помощью ASCII 3) если она действительна, маскируйте биты 5 и 6 биты ASCII 4 ) отправлять. Таким образом, ctrl-J, ctrl-j и ctrl- * могут отправлять LF, но проверка достоверности ограничивает комбинации. См. Раздел 4-43 технического руководства DEC VT100 (PDF, стр. 93).
Кендзи Ногучи,

Я могу 'C-.'просто захватить с emacs в xterm, но не с urxvt или st. Есть идеи, почему это так?
stewSquared

0

Хотя приведенный выше ответ дает хорошее объяснение того, почему он не работает, в действительности он не рассматривает, как заставить его работать. Для iTerm2вы можете решить эту проблему путем добавления сопоставления клавиш для последовательности побега . Я думаю, что было бы что-то подобное в terminatorилиgnome-terminal

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.