2

Есть ли способ связать Control+ апостоф через bindkey?
Я пытался:

 bindkey "\C-'"
 bindkey "^'"
 bindkey "\C-\x27"

и все это не работает

1 ответ1

3

Возможно нет. По крайней мере, без изменения вашего терминала тоже.

Оболочка работает на терминале. Основной единицей ввода на терминале является символ, а не нажатие клавиши. Когда вы добавляете привязку клавиш к вашей оболочке, вы действительно связываете последовательность символов, а не комбинацию клавиш. Там нет символа Ctrl-апостроф.

Начиная с самых ранних ASCII-терминалов, существует набор клавиш, которые можно комбинировать с Ctrl для получения одного символа. Клавиши , которые соответствуют этим ASCII кодов 0x3F через ? @ A-Z [ \ ] ^ _

Когда клавиша Ctrl нажата с одним из этих символов, значение передается с инвертированным битом 0x40. 0x3f ? становится 0x7f DEL , а остальные становятся 0x00 через 0x1f. Апостроф равен 0x27, поэтому если его объединить с помощью клавиши Ctrl по этому правилу, он станет 0x67, то есть g . Получение g при вводе Ctrl-апостроф не будет полезным, поэтому терминал этого не делает.

Однако можно связать клавиши, которые не соответствуют отдельным символам ASCII, например, клавиши со стрелками. Это работает, потому что эти ключи переводятся терминалом в escape-последовательность - последовательность символов, начинающуюся с escape. Эти последовательности могут быть связаны с полезными действиями. Например, ESC [ A - это обычно клавиша со стрелкой вверх, которая связана с историческим действием в оболочке.

Если вы достаточно полны решимости, вы можете убедить свой терминал вывести некоторую escape-последовательность для Ctrl-апостроф, а затем использовать эту escape-последовательность в вашей команде bindkey. Чтобы продолжить в том же духе, обратитесь к документации для вашего терминала.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .