Текстовий термінал передає лише символи (точніше, байти), а не клавіші. Клавіші та клавіатури (клавіші з модифікаторами) кодуються як послідовності символів. Ключі, що вставляють символи для друку, надсилаються як самі; функціональні клавіші надсилаються як послідовності втечі. Більшість послідовностей евакуації складаються з символу 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слід встановлювати на один термінал. На практиці дуже рідко є два термінали, в яких одна і та ж послідовність аварійного кодування кодує різні клавіші, тому глобальна установка спрацює нормально.
Are the (define-key ...)команди повинні перейти в init.el? Чи є десь докладний приклад, де я можу подивитися?