
Из того, что я пробовал, "TAB" и "Ci" в .inputrc, похоже, означают одно и то же, все, что я связываю с одним, связывается с другим. Я знаю, что изначально это было одно и то же, и что это поведение унаследовано от старых времен, но в настоящее время, за исключением эмуляторов терминала, все приложения X различают нажатие Ci и TAB.
Итак, есть ли способ запустить команду терминала (например, «complete»), когда я нажимаю клавишу TAB, и запустить другую команду, когда я нажимаю «Ci»?
(тот же вопрос касается Cm и ENTER, Cz, Cd и всех этих управляющих последовательностей, которые я хотел бы отправлять другими способами, нежели их исходная привязка, и применять свои собственные команды к этим драгоценным сочетаниям клавиш)
И кстати, если бы вы могли немного объяснить процесс от нажатия клавиши до интерпретации оболочкой, это помогло бы мне понять. На данный момент я понял, что события клавиатуры транслируются Xmodmap, затем .inputrc и что результат интерпретируется оболочкой или что-то вроде этого.
решение1
xmodmap
Прямой связи между и нет .inputrc
.
Есть несколько способов, в зависимости от эмулятора терминала, для изменения ключей, отправляемых через терминал. Некоторые из них включают
- изменение конфигурации клавиатуры X (хкб)
- изменение кодов клавиш, отправленных для данного события (xmodmap)
- специфичные для терминала вещи, такие как
translations
ресурс, используемый xterm.
Однако в обычной ситуации control/Iотправляет tabсимвол, поскольку именно так настроены почти все терминалы.
С помощью xkb
, вы можете (в принципе) изменить то, что делает клавиатура. В свою очередь, приложения X обнаруживают события нажатия и отпускания клавиш и преобразуют их в символы клавиш. xev
полезно для отображения событий. Эмулятор терминала, работающий в X, получает серию событий, которые (используя вызовы библиотеки X) он может преобразовать в символы. A tab
— это просто еще один символ в этом случае.
xmodmap
Роль в этом процессе будет заключаться в специальном изменении конфигурации клавиатуры X.
Если вы используете xterm
, translations
ресурс предоставляет много возможностей для настройки. Это особенностьX-инструментарий, что позволяет вам связывать различные комбинации клавиш со встроенными действиями xterm. Привязки клавиш по умолчанию перечислены вруководство. Вы можете переопределить или добавить эти привязки. Есть несколько мест, где вы можете задать информацию ( $HOME/.Xdefaults
например, хотя она может легко загромождаться). Например, я задалXAPPLRESDIR
переменная окружения, указывающая на мой пользовательский каталог, содержащий настроенные файлы app-defaults. В одном из названных XTerm
я мог бы поместить это, чтобы изменить результат ctrl/I:
*VT100*translations: #override \n\
Ctrl ~Shift<Key>I:string("??")
Поскольку tabклавиша имеет свой собственный специальный символ-ключ, этот перевод на нее не влияет.