Текстовый терминал передает только символы (точнее, байты), а не ключи. Ключи и цепочки ключей (ключи с модификаторами) кодируются как последовательности символов. Ключи, которые вставляют печатаемые символы, отправляются как они сами; функциональные клавиши отправляются как escape-последовательности. Большинство escape-последовательностей состоят из символа Escape ( ?\e
в синтаксисе Emacs), за которым следуют два или более печатных символа. См. Управление и клавиши вверх / вниз на терминале для использования emacs и Как работает ввод с клавиатуры и вывод текста? Чтобы получить больше информации.
В Emacs есть механизм для перевода escape-последовательностей в собственное представление о ключах. Таблица перевода input-decode-map
инициализируется при запуске Emacs (или, точнее, при открытии нового фрейма: эта переменная имеет разные значения на каждом терминале). Иногда Emacs не знает всех escape-последовательностей, отправленных терминалом.
В вашем случае кажется, что Emacs имеет неверную интерпретацию для escape-последовательности, отправленной Shift+ Up. Вы должны сказать это, чтобы интерпретировать это как, S-up
а не select
. Сначала выясните, что такое escape-последовательность. В *scratch*
буфере нажмите Ctrl+, Qзатем Shift+ Up. Команда C-q
заставляет следующий символ, который является escape-символом, вставляться буквально, сопровождаемый остальной частью escape-последовательности. Допустим, что Shift+ Upотправляет \e[1;2A
в нашу систему, тогда вам нужно переопределить соответствующую запись в input-mode-map
:
(define-key input-decode-map "\e[1;2A" [S-up])
В принципе, input-decode-map
должен быть установлен для каждого терминала. На практике очень редко иметь два терминала, в которых одна и та же escape-последовательность кодирует разные ключи, поэтому глобальная настройка будет работать нормально.
Are the (define-key ...)
команды должны идти в init.el? Есть ли где-нибудь подробный пример, на который я могу посмотреть?define-key
Команды @vfclists входят в ваш файл инициализации. Это может быть~/.emacs.d/init.el
или несколько других мест. Вы найдете множество примеров использованияdefine-key
путем поискаdefine-key
, но поиск карты для привязки - это другой вопрос. Несколько карт участвуют:global-map
,input-decode-map
,function-key-map
,keyboard-translate-map
. Я не знаю, как ответить на ваш вопрос, потому что я не знаю Spacemacs. Я не рекомендую использовать такие пакеты, как Spacemacs, которые беспорядочно переопределяют стандартные интерфейсы.input-decode-map
после нахождения некоторых примеров. Можно ли считать, что этоinput-decode-map
применимо, когда пользователь вводит текст в буфер?input-decode-map
- одна из применяемых комбинаций клавиш . Смотрите руководство для деталей.В emacs область ограничена точкой (курсор) и меткой (некоторая предыдущая позиция курсора, которая была «помечена»).
Таким образом, чтобы «выбрать регион», вам нужно разместить эту отметку, а затем переместить свою точку вокруг.
Самый простой способ разместить отметку - нажать
C-SPC
. Затем просто переместите курсор, и вы увидите, что «регион» расширяется, как и вы.Чтобы «отменить выбор региона», вы можете нажать еще
C-SPC
раз.Поскольку «shift + движение» - это обычное связывание клавиш в других программах, по умолчанию оно эмулирует это поведение «выбора региона». Однако, это не работает в терминале, потому что shift не может быть отправлено в emacs как ключ-модификатор.
Обратите внимание, что, как правило, этот
C-SPC
метод является гораздо более мощным, чем другие методы выбора региона: вы не ограничены движением вверх / вниз / влево / вправо (вы можете использовать поиск, например ...), и он не требует что вы сохраняете неудобную комбинацию клавиш в течение длительного времени.источник