Shift + Up не розпізнається Emacs у терміналі


15

Дуже часто використовую Shift+, Up/Downщоб вибрати регіон у Emacs. Він прекрасно працює в режимі GUI, але коли emacsвикликається -nwопцією, я можу вибрати рядки лише з Shift+ Down. Shift+ UpЧи не працює, я отримую повідомлення про помилку в мінібуфер:

<select> is undefined

Як я можу вирішити це питання?

Відповіді:


13

Текстовий термінал передає лише символи (точніше, байти), а не клавіші. Клавіші та клавіатури (клавіші з модифікаторами) кодуються як послідовності символів. Ключі, що вставляють символи для друку, надсилаються як самі; функціональні клавіші надсилаються як послідовності втечі. Більшість послідовностей евакуації складаються з символу Escape ( ?\eу синтаксисі Emacs), за яким слідують два чи більше символів для друку. Див. Розділи Керування клавішами управління та вгору / вниз у терміналі, якими користуються emacs та Як працює введення з клавіатури та вихід тексту? для отримання додаткової інформації.

Emacs має механізм перекладу послідовностей втечі у власне поняття ключів. Таблиця перекладу input-decode-mapініціалізується при запуску Emacs (а точніше, коли новий кадр відкритий: ця змінна має інше значення на кожному терміналі). Іноді Emacs не знає всіх послідовностей евакуації, що надсилаються терміналом.

У вашому випадку виявляється, що Emacs має неправильну інтерпретацію послідовності евакуації, яку надсилає Shift+ Up. Вам потрібно сказати, щоб його інтерпретувати як S-upшвидше select. Спочатку з’ясуйте, що таке послідовність втечі. У *scratch*буфері натисніть Ctrl+, Qа потім Shift+ Up. Команда C-qпризводить до того, що наступний символ, який є символом втечі, буде вставлений буквально з наступною рештою послідовності втечі. Скажімо, що Shift+ Upнадсилає \e[1;2Aв нашій системі, тоді вам потрібно буде переглянути відповідний запис у input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

В принципі, input-decode-mapслід встановлювати на один термінал. На практиці дуже рідко є два термінали, в яких одна і та ж послідовність аварійного кодування кодує різні клавіші, тому глобальна установка спрацює нормально.


Здається, ваша відповідь відповідає на моє запитання тут - emacs.stackexchange.com/questions/33988 . Are the (define-key ...)команди повинні перейти в init.el? Чи є десь докладний приклад, де я можу подивитися?
vfclists

define-keyКоманди @vfclists переходять у ваш файл init. Це може бути ~/.emacs.d/init.elабо декілька інших локацій. Ви знайдете безліч прикладів використання define-key, шукаючи define-key, але пошук карти, яку слід зв’язати, - інша справа. Кілька карт беруть участь: global-map, input-decode-map, function-key-map, keyboard-translate-map. Я не знаю, як відповісти на ваше запитання, тому що я не знаю Spacemacs. Я не рекомендую використовувати такі пакети, як Spacemacs, які безладно переосмислюють стандартні інтерфейси.
Жил 'ТАК - перестань бути злим'

Я перейшов на звичайні emacs, щоб вивчити org-mode, і мені вдалося налагодити роботу, input-decode-mapзнайшовши кілька прикладів. Чи можу я вважати, що це input-decode-mapзастосовується, коли користувач вводить текст у буфер?
vfclists

@vfclists input-decode-map- одна з застосованих ключових карт . Деталі див. У посібнику .
Жил 'ТАК - перестань бути злим'

5

У emacs область розмежована точкою (курсором) та позначкою (деяке попереднє положення курсору, яке було "позначено").

Таким чином, щоб "вибрати регіон", потрібно поставити цю позначку, а потім перемістити точку навколо.

Найпростіший спосіб розміщення позначки - натискання C-SPC. Потім просто перемістіть курсор навколо, ви побачите "регіон" розширення, як і ви.

Щоб "скасувати вибір регіону", ви можете натиснути C-SPCще раз.

Оскільки "shift + motion" є звичайним зв'язуванням клавіш в іншому програмному забезпеченні, за замовчуванням він імітує цю поведінку "select region". Однак він не працює в терміналі, оскільки зсув не може бути надісланий emacs як ключ модифікатора.

Зауважте, що як правило, C-SPCметод набагато потужніший, ніж інші методи вибору регіону: ви не обмежені вгору / вниз / вліво / вправо для руху (ви можете використовувати пошук, наприклад ...), і він не вимагає що ви довго підтримуєте незручну комбінацію клавіш.

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