Где находится комбинация клавиш Ctrl + / (^ /) bash для отмены?

Я не могу найти отображение в bind -p или в stty -a . Кроме того, он работает только в эмуляторах терминала, которые я пробовал (xterm, konsole, gnome-terminal), а не в системной консоли Linux. Я думаю, что это традиционно отображение emacs.

EDIT: Когда я ввожу ^V^/ bash prints ^_ , который отображается для отмены в bind. Но где ^/ отображается в ^_ ?

Это эмулятор терминала, который его генерирует (он получает исходное событие X и генерирует поток байтов, а обработка псевдотерминала не имеет понятия ключей-модификаторов, ^_ является управляющим символом кода 037).

Происхождение этого отображения, вероятно, находится в VT100, который отображает как CTRL-? и CTRL-/ к символу 037 и, по-видимому, не отобразили CTRL-_ ни в чем. Терминальные эмуляторы Я пробовал карту CTRL-? либо до 037 из 177.

VT220 сделал что-то еще, но некоторые из его сопоставлений по-прежнему доступны по крайней мере в XTerm.

Как правило, управляющий модификатор воздействует на символы ASCII, удаляя все последние 5 бит. Это отображает несколько разных символов в диапазон 0..31 используемый для управляющих символов ASCII.

Исходя из этого правила, можно было бы ожидать, что они будут отображаться в 031, используя модификатор управления :

 037 31 1F US (unit separator) 077 63 3F ? 137 95 5F _ 177 127 7F DEL 

и это не будет:

 057 47 2F / 117 79 4F O 157 111 6F o 

Альтернативно, модификатор управления может применяться только к символам в диапазоне 32..63 , используя аналогию с клавишей сдвига, которая полезна в ASCII для отображения диапазона от 64..94 до 96..126 (верхний / нижний регистр алфавита). В этом случае они могут отображаться в 031 :

 037 31 1F US (unit separator) 057 47 2F / 077 63 3F ? 

и (это было какое-то время), наблюдение @ aprogrammer звучит знакомо. Но это не в руководстве VT100. В главе 3 он указывает на таблицу, в которой указаны ключи и их контрольные эквиваленты. Это использует коды из полного 95-символьного диапазона (32..126), но только один документ для каждого управляющего символа. Другие возможные символы недокументированы. Но обратите внимание, что управление табличными документами ? , На моей клавиатуре ? это сдвинутый ключ. Изображения, которые я нахожу на клавиатуре VT100, не имеют его как неперемещенный ключ. И (неудивительно), что неуправляемый код для этого конкретного ключа – / . DEC может документировать их на основе существующих ключей с более раннего терминала, но, возможно, они могли сделать это, чтобы таблица была коротка.

Однако преобразование не полностью соответствует xterm . Он принимает X-события, которые имеют определенные коды клавиш вместе с информацией о модификаторе. Вообще говоря, эти коды клавиш соответствуют буквам, указанным на клавиатуре, тогда как модификаторы, такие как сдвиг и управление , передаются отдельно. xterm использует функцию выполнения X, такую ​​как Xutf8LookupString или XmbLookupString чтобы объединить некоторые события (например, сдвиг ). Именно здесь принято решение перевести эти контрольные символы. xterm впоследствии уточняет / изменяет информацию для специальных клавиш (например, backspace ), но большая часть преобразования выполняется в библиотеках X, используя конфигурацию клавиатуры.

Дальнейшее чтение:

  • Таблица ASCII и описание