Вам будет удобнее в X11 Emacs, который может получать ввод с клавиатуры и отображать текст, не проходя кодирование и декодирование для терминала . Основная причина использования редактора текстового режима - запуск его внутри экрана или tmux на удаленной машине, но благодаря Tramp, как правило, легче редактировать удаленный файл в вашем локальном Emacs. Тем не менее, вы можете делать то, что вы хотите, пока ваш эмулятор терминала взаимодействует, как в случае с Xterm.
Когда вы нажимаете клавишу или комбинацию клавиш в терминале, она передается приложению, работающему в терминале, как последовательность из одного или нескольких символов. Например, когда вы нажимаете a, приложение получает a
. При нажатии Enterприложение получает символ CR
(он же ^M
(произносится как «control-emm»), он же символ номер 13, он же \r
или \015
). Включающие комбинации клавиш Altобычно передаются в виде символа ESC
( ^[
aka \e
или aka \033
), за которым следует последовательность для клавиши или комбинации клавиш без Alt. Функциональные клавиши и другие комбинации клавиш передаются как escape-последовательности, начинающиеся с \e[
или \eO
.
Последовательности escape-полей не полностью стандартизированы, и терминалы обычно игнорируют определенные атрибуты для определенных ключей. Например, гипер и супер модификаторы обычно игнорируются. Вы можете увидеть, что ваш терминал отправляет для комбинации клавиш, нажав Ctrl+, Vзатем эту комбинацию клавиш в приглашении оболочки или C-q
или C-h c
после комбинации клавиш в Emacs.
Xterm позволяет вам настроить escape-последовательности для каждого ключа через X-ресурсы . Большинство настроек считывают ресурсы с ~/.Xresources
момента запуска X, и вы можете загрузить файл вручную с помощью xrdb -merge ~/.Xresources
.
XTerm.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <Key> Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <Key> percent: string("\033[37;6~")
Общее соглашение использует escape-последовательности формы ESC [ number1 ; number2 ~
для функциональных клавиш с модификаторами. number1
указывает на функциональную клавишу ( 15
в 24
течение F5до F12- по историческим причинам, F1 через F4разные управляющие последовательности) и number2
указывает модификатор ( 2
для Shift, 5
для Ctrl, 3
для Meta, 8
для Ctrl+ Metaи добавить 1 для + Shift- нет, это не очень последовательно).
Вы должны будете указать модификаторы Hyper и супер через их количество, так как Mod1
через Mod5
. Запустите, xmodmap -pm
чтобы увидеть отображение ключевых символов на модификаторы. Например, если Super_L
привязано к Mod5, то следующая строка (используйте именно этот случай) определяет привязку для Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs переводит escape-последовательности во внутреннее представление ключа через input-decode-map
илиlocal-function-key-map
(или function-key-map
до Emacs 23).
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Этот пост сделан на 80% из переработанного материала. Есть ли терминалы Linux, которые могут обрабатывать все комбинации клавиш?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Но, чтобы быть полным, я попробовал вашеdefine-key
выше, но я не мог тогда вызвать(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. Это была просто печать, 16 ~ в буфере. Было бы неплохо связать эту последовательность с (kbd "s-SPC"), чтобы у меня была привязана последовательность клавиш, и я могу переназначить ее другим командам.C-h l
при нажатии s-SPC теперь возвращает следующее:ESC [ 3 2 ; 1 6 ~
но emacs по-прежнему жалуется на этоM-[ 32 is undefined
function-key-map
вместоlocal-function-key-map
? Это может быть вопросом того, когда вы устанавливаетеlocal-function-key-map
, поскольку это зависит от терминала.Если вы хотите установить пакет Emacs и настроить свой терминал, я написал пакет Emacs, который может научить Emacs и терминалы правильно распознавать все комбинации клавиш на клавиатуре ПК и комбинации клавиш-модификаторов:
https://github.com/CyberShadow/term-keys
Кодирование модификатора Super не включено по умолчанию, но пакет настраивается и позволяет настроить, какие комбинации клавиш модификатора кодируются. Чтобы включить кодирующая комбинации клавиш , которые включают модификатор Супер, установленный
term-keys/want-key-p-func
на функцию , которая возвращает ,t
если(elt mods 3)
это не-ноль (см реализацию по умолчанию для объяснения).источник
У меня есть следующее в моих файлах инициализации:
Это позволяет мне отправлять супер и гипер ключи с помощью функциональных клавиш.
источник
Краткий ответ: используйте
Konsole
.Объяснение:
local-function-key-map
имеет сопоставление записиC-x @ s
сevent-apply-super-modifier
.Konsole
сопоставляетSuper
(ключ логотипа Windows) с escape-последовательностью^X@s
(которая нигде не документирована, я обнаружил ее случайно). Вы можете попробовать это, открывKonsole
и нажав например Ctrl-v Win-o.источник