В bash, как связать функциональный ключ с командой?

Пример: я хочу привязать ключ F12 к команде echo "foobar" , так что каждый раз, когда я нажимаю F12, сообщение «foobar» будет напечатано на экране. В идеале это может быть любая произвольная команда оболочки, а не только встроенные. Как это можно сделать?

Вы можете определить последовательность символов, выдаваемую клавишей, нажав Ctrl- v в командной строке, а затем нажав интересующую вас клавишу. В моей системе для F12 я получаю ^[[24~ . ^[ Представляет Esc . Различные типы терминалов или терминальные эмуляторы могут выделять разные коды для одного и того же ключа.

В командной строке Bash вы можете ввести такую ​​команду, чтобы включить ключевой макрос, чтобы вы могли попробовать его.

 bind '"\e[24~":"foobar"' 

Теперь, когда вы нажимаете F12 , вы получите «foobar» в командной строке, готовой для дальнейшего редактирования. Если вы хотите, чтобы нажатие клавиши сразу вводило команду, вы можете добавить новую строку:

 bind '"\e[24~":"pwd\n"' 

Теперь, когда вы нажмете F12 , вы увидите текущий каталог, не нажимая Enter . Что, если вы уже набрали что-то на линии, и используете это, которое автоматически выполняется? Это может стать беспорядочным. Однако вы можете очистить строку как часть своего макроса:

 bind '"\e[24~":"\Ck \C-upwd\n"' 

Пространство гарантирует, что Ctrl- u имеет что-то удалить, чтобы звонок не звонил.

После того, как вы создадите макрос, который вы хотите, вы можете сделать его постоянным, добавив его в ваш файл ~/.inputrc . Нет необходимости в команде bind или внешнем наборе одинарных кавычек:

 "\e[24~":"\Ck \C-upwd\n" 

Редактировать:

Вы также можете создать привязку клавиш, которая будет выполнять что-то, не нарушая текущую командную строку.

 bind -x '"\eW":"who"' 

Затем, когда вы печатаете команду, которая требует, например, имени пользователя, и вам нужно знать имена пользователей, которые вошли в систему, вы можете нажать AltShiftW и вывести того, who будет отображаться, и появится приглашение переиздается с неполной командой, а курсор находится в том же положении в строке.

К сожалению, это не работает должным образом для таких ключей, как F12, которые выводят более двух символов. В некоторых случаях это можно обойти.

Команда ( who в этом случае) может быть любым исполняемым файлом – программой, скриптом или функцией.

Вы можете определить привязки клавиш bash в .inputrc (файл конфигурации для библиотеки GNU Readline). Синтаксис

: макрос

например:

 Control-o: "> output" 

создаст макрос, который вставляет «> вывод» при нажатии

  "\e[11~": "echo foobar" 

создаст макрос, который вставляет «echo foobar», когда вы нажимаете F1 … Я не знаю, что означает keyym для F11.

Это решение относится к средам X11 и не имеет ничего общего с bash, но добавляет следующее к вашим .Xmodmaps

  % loadkeys keycode 88 = F12 string F12 = "foobar" % 

будет посылать строку «foobar» на терминал после удара F12.

Я хотел связать Ctrl+B с командой. Вдохновленный ответом выше, я попытался использовать bind но не мог понять, какая серия критических криков ( \e[24~ ?) Переводит в Ctrl+B

На Mac перейдите в «Настройки приложения терминала», «Профили» -> «Клавиатура» -> « + затем нажмите комбинацию клавиш, после которой вы выходите. Для меня Ctrl+B привел к \002 который я успешно привязал к команде

bind '"\002":"echo command"'

Кроме того, если вы хотите, чтобы команда выполнялась сразу (не просто вставлена ​​в приглашение), вы можете добавить Enter в конец своей команды, например:

bind '"\002":"echo command\015"'

  • Связывание Datagrid в WPF
  • Почему обновление привязки не реализует INotifyPropertyChanged?
  • Как повысить свойства Измененные события в зависимости от свойства?
  • ComboBox.SelectedValue не обновляется из источника привязки
  • MvvmCross Android - альтернатива привязке RelativeSource для команды button
  • Привязка списка в @RequestParam
  • Ошибка WPF: не удается найти управляющий элемент FrameworkElement для целевого элемента
  • Привязка видимости кнопки к значению bool в ViewModel
  • В .NET 4.0 привязка OneWayToSource
  • Отменить изменения в сущностных сущностях
  • WPF StringFormat = {0: C}, показывающий как доллары
  • Давайте будем гением компьютера.