отдельные отображения для TAB и Ci в .inputrc

262
Antoine Gallix

Для того, что я пробовал, «TAB» и «Ci» в .inputrc, кажется, означают одно и то же, все, что я связываю с одним, связано с другим. Я знаю, что первоначально это было то же самое, и что это поведение отчасти унаследовано от старых времен, но в настоящее время, кроме эмуляторов терминалов, все X-приложения делают разницу между Ci и TAB-прессом.

Так есть ли способ запустить команду терминала (например, «завершить»), когда я нажимаю клавишу TAB, и запустить другую команду, когда я нажимаю «Ci»?

(тот же вопрос относится к Cm и ENTER, Cz, Cd и ко всем этим управляющим последовательностям, которые я хотел бы отправить другими способами, кроме их первоначальной привязки, и применить мои собственные команды к этим драгоценным сочетаниям клавиш)

И, кстати, если бы вы могли немного объяснить процесс от нажатия клавиши до интерпретации оболочки, это помогло бы мне понять. На данный момент я понял, что события клавиатуры транслируются Xmodmap, а затем .inputrc, и что результат интерпретируется оболочкой или чем-то вроде этого.

0

1 ответ на вопрос

0
Thomas Dickey

Нет прямой связи между xmodmapи .inputrc.

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

  • изменение конфигурации клавиатуры X ( xkb )
  • изменение кодов клавиш, отправляемых для данного события ( xmodmap )
  • специфичные для терминала вещи, такие как translationsресурс, используемый xterm.

Однако в обычной ситуации control/Iотправляет tabсимвол, потому что так настроены почти все терминалы.

С помощью xkb, вы можете (в принципе) изменить то, что делает клавиатура. В свою очередь, приложения X обнаруживают события нажатия и отпускания клавиш и переводят их в символы клавиш. xevполезно для показа событий. Эмулятор терминала, работающий в X, получает серию событий, которые (используя вызовы библиотеки X) он может преобразовывать в символы. А tabэто просто еще один символ в этом случае.

xmodmapРоль в этом процессе будет заключаться в специальном изменении конфигурации клавиатуры X.

Если вы используете xterm, translationsресурс дает много возможностей для настройки. Это особенность X Toolkit, которая позволяет связывать различные комбинации клавиш со встроенными действиями xterm. Привязки клавиш по умолчанию перечислены в руководстве . Вы можете переопределить или добавить эти привязки. Есть несколько мест, где вы можете установить информацию ( $HOME/.Xdefaultsнапример, хотя она может быть загромождена легко). Например, я установил XAPPLRESDIRпеременную окружения так, чтобы она указывала на мой пользовательский каталог, который содержит настроенные по умолчанию файлы приложения. В одном названии XTermя мог бы поместить это, чтобы изменить результат ctrl/I:

*VT100*translations: #override \n\  Ctrl ~Shift<Key>I:string("??") 

Поскольку tabключ имеет свой собственный специальный ключ-символ, этот перевод не влияет на него.

Перевод из X keysym TAB в Ci выполняется эмулятором терминала для отправки его в оболочку. Мне нужно, чтобы клавиша TAB продолжала отправляться во все приложения X, когда я нажимаю клавишу Tab на моей клавиатуре. Поэтому я считаю, что единственное решение состоит в том, чтобы найти способ настроить эмулятор терминала для преобразования ключа симуляции TAB в пользовательскую последовательность символов (отличную от Ci), чтобы впоследствии я мог назначить их тому, что я хочу, с помощью .inputrc. Есть идеи, как это сделать? Я пытался найти способ в документации xterm, но я не могу найти ничего о пользовательских переводах. Antoine Gallix 8 лет назад 0