Emacs C-. не працює в терміналі


11

Я використовую GNU Emacs, як правило, emacs -nwякий запускає термінальну версію (на відміну від віконної GUI-версії).

Я пишу шкільні документи, LaTeXтому використовую flyspell-modeдля перевірки орфографії в emacs. Це добре працює у версії GUI, але в терміналі я стикаюся з проблемами з натисканням клавіші C-.( Ctrl- .). У tty, це нічого не робить, і в terminatorабо gnome-terminal, це просто вводить ".".

Що я можу зробити, щоб він робив те, що робить у віконній версії (показує орфографічні пропозиції для неправильно написаного слова)?

EDIT: Якщо це має значення, я використовую 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, програма отримує оригінальний ключ плюс усі застосовні модифікатори, окремо). Тому, мабуть, неможливо змусити emacs на основі tty обробляти ctrl-. якщо ви не внесете спеціальних модифікацій в емулятор терміналу (і, ймовірно, також emacs).


1
Ця відповідь справді цікава. Я заглибився в глибші і виявив, що DEC VT100 працює аналогічно, але по-різному, строго кажучи. Ось що це робиться, коли клавішу управління та іншу клавішу натискають разом: 1) пошук таблиці ASCII за кодом сканування клавіатури 2) пошук таблиці дійсних кодів управління за ASCII 3), якщо вона дійсна, маска bit5 та bit6 ASCII 4 ) відправляти. Отже, ctrl-J, ctrl-j і ctrl- * всі могли надсилати LF, але перевірка дійсності обмежувала їх комбінації. Див. Технічний посібник DEC VT100, розділ 4-43 (PDF сторінка 93).
Кенджі Ногучі

Я можу захоплювати 'C-.'чудово за допомогою emacs в xterm, але не з urxvt або st. Будь-яка ідея, чому це може бути так?
stewSquared

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.