Intereting Posts
Как использовать соответствующее регулярное выражение для поиска шаблона в sed? Есть ли файловый менеджер, способный восстановить открытые окна? Как запретить `mv` перемещать коллекцию файлов в один обычный? выполнить команду, чтобы поменять Caps Lock и Ctrl при запуске Права доступа к Linux vsftpd Как убить процесс в терминале внутри emacs Red Hat Enterprise Linux 6.5 перезагружает корневую файловую систему только для чтения после спящего режима Как ограничить скорость соединения для IP-адресов «X-Forwarded-for»? OpenBSD X, только мышь прокрутки вниз Клиент электронной почты, который понимает как HTML, так и maildir Сообщение «Ошибка сегментации» относится к STDERR? Emacs: разные пользователи, разные темы, один и тот же файл инициализации Ошибка при использовании 'sudo pacman -Syu' в Antergos Как измерить использование ОЗУ среды рабочего стола? Помогите понять изменение в Vim

Существуют ли какие-либо терминалы linux, которые могут обрабатывать все комбинации клавиш?

Мне нравится использовать emacs в терминальном режиме ( -nw ), но кажется, что большинство (все?) Терминалов не могут обрабатывать некоторые комбинации клавиш – например, C-<RET> или CM-% . Я знаю, это потому, что большинство терминалов эмулируют VT-100, у которых не было этих комбинаций. Существуют ли какие-либо терминалы linux (предпочтительно KDE), которые могут обрабатывать эти комбинации клавиш, или это фундаментальное ограничение всех терминалов?

Когда вы нажимаете клавишу или комбинацию клавиш в терминале, она передается приложению, запущенному в терминале, в виде последовательности из одного или нескольких символов. Например, когда вы нажимаете a , приложение получает a . Когда вы нажмете Enter , приложение получит символ CR (aka ^M (произносится как «control-emm»), aka character number 13, aka \r или \015 ). Комбинации клавиш, содержащие Alt , обычно передаются как символ ESC (a.ka. ^[ aka \e или \033 ), за которым следует последовательность для комбинации клавиш или клавиш без Alt . Функциональные клавиши и другие комбинации клавиш передаются как escape-последовательности, начинающиеся с \e[ или \eO .

Последовательности экранов не полностью стандартизованы, и терминалы обычно игнорируют определенные атрибуты для определенных ключей. Например, Ctrl + Shift + буква часто передается точно так же, как Ctrl + letter по умолчанию.

Вы можете видеть, что ваш терминал отправляет для комбинации клавиш, нажав Ctrl + V, за которым следует эта комбинация клавиш в командной строке, или Cq или Ch c а затем комбинация клавиш в Emacs.

С помощью некоторых терминальных эмуляторов вы можете настроить escape-последовательности для каждого ключа. На Xterm это делается через ресурсы X. Большинство установок читают ресурсы из ~/.Xresources при запуске X, и вы можете загрузить файл вручную с помощью xrdb -merge ~/.Xresources .

 Term.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 ~ ESC [ number1 ; number2 ~ для функциональных клавиш с модификаторами. number1 указывает функциональную клавишу (от 15 до 24 для F5 по F12 – по историческим причинам, от F1 до F4 – разные escape-последовательности), а number2 – модификатор ( 2 для Shift , 5 для Ctrl , 3 для Meta , 8 для Ctrl + Meta , и добавьте 1 для + Shift – нет, это не очень согласовано).

Emacs переводит escape-последовательности во внутреннее представление ключа через input-decode-map или input-decode-map local-function-key-map (или local-function-key-map function-key-map перед Emacs 23).

 (define-key local-function-key-map "\033[73;5~" [(control return)]) (define-key local-function-key-map "\033[37;6~" [(control ?L)]) 

Короткий ответ заключается в том, что это фундаментальное ограничение всех терминалов.

Несколько более длинный ответ заключается в том, что даже если кто-то создал терминал, который делает то, что вы хотите, Emacs сам потребует серьезных изменений для работы с этим гипотетическим терминалом.

Есть некоторые попытки расширить протокол VT таким образом, чтобы обеспечить возможность ввода без потерь клавиатуры (среди других функций, таких как графика).

Одним из примеров является notty: https://github.com/withoutboats/notty