Мета привязки в inputrc не имеет эффекта, macosx

Я пытаюсь расширить readline, добавив привязку к мета-ключу в моем файле inputrc. Я использую Терминал (OSX)

В идеале я хотел бы добавить "\M-h": "\C-w"

Однако я не могу связать какой-либо мета-ключ. У меня есть опция в Терминале, которая обрабатывает мою опцию как мета. В результате я могу войти в M-b просто отлично. Привязка к нему в моем inputrc не работает.

Я попытался использовать sed -nl, чтобы записать, какие управляющие последовательности отправлялись на мой терминал. Нажатие M-x выводит ^[h, однако привязка типа "^[h":"\C-w" не работает. Помощь очень ценится.

изменить: вот пример файла из документации readline, в которой показано, как выполнить привязку на основе отправляемых escape-ключей ansi. Возможно, я не сопоставляю нужные управляющие клавиши, есть ли лучший способ проверить, чем с помощью sed?


person cdosborn    schedule 19.03.2015    source источник


Ответы (2)


Решением моего вопроса является следующая привязка: "\eh": "\C-w"

\e — это сопоставление строки чтения с клавишей Esc.

Не существует единого способа представления метаклавиши на клавиатурах, где ее нет. Как результат:

Параметр Mac OS X Terminal «опция как метаключ» означает только> «префикс с ESC» - Крис Пейдж

Таким образом, Терминал рассматривает Мета как Опцию, которая, в свою очередь, отправляет Esc в строку чтения.

person cdosborn    schedule 19.03.2015
comment
В ПОРЯДКЕ. Прости. Спасибо и за уточнение в ответе. - person Bill Woodger; 19.03.2015

Это правильный способ связать его? Разве это не должно быть keyname:function-name ? Хотя и не грабил.

Из справочных страниц:

   Readline Key Bindings
   The syntax for controlling key bindings in the inputrc file is simple.  All that is required is the name of the command or the text of a macro and a key sequence to which
   it should be bound. The name may be specified in one of two ways: as a symbolic key name, possibly with Meta- or Control- prefixes, or as a key sequence.

   When using the form keyname:function-name or macro, keyname is the name of a key spelled out in English.  For example:

          Control-u: universal-argument
          Meta-Rubout: backward-kill-word
          Control-o: "> output"

   In the above example, C-u is bound to the function universal-argument, M-DEL is bound to the function backward-kill-word, and C-o is bound to run the macro  expressed  on
   the right hand side (that is, to insert the text \u2018\u2018> output\u2019\u2019 into the line).

   In  the  second  form,  "keyseq":function-name or macro, keyseq differs from keyname above in that strings denoting an entire key sequence may be specified by placing the
   sequence within double quotes.  Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized.

          "\C-u": universal-argument
          "\C-x\C-r": re-read-init-file
          "\e[11~": "Function Key 1"

   In this example, C-u is again bound to the function universal-argument.  C-x C-r is bound to the function re-read-init-file, and ESC [ 1 1 ~ is bound to insert  the  text
   \u2018\u2018Function Key 1\u2019\u2019.

Также вы можете подумать о том, чтобы заглянуть в /etc/inputrc, в нем присутствуют привязки по умолчанию.

person baky    schedule 19.03.2015
comment
Я считаю, что это так. Вот пример файла из документации для чтения. - person cdosborn; 19.03.2015