Как отправить C- / (то есть, control-slash) на терминал?

13

Я пытаюсь запустить Emacs в терминале. Я включил «использовать опцию как мета» в настройках терминала, и примерно 95% работают правильно.

Последовательность клавиш ctrl- / (или в обозначении Emacs C- /) - "отменить". Эта последовательность клавиш просто заставляет терминал звонить в звонок. Как я могу это исправить?

Кевин Петерсон
источник
FWIW, это работает в iTerm2 - iterm2.com - но я думаю, что я просто переучу себя, чтобы использовать ^ _ везде, чтобы быть более портативным.
Стивен Р. Лумис
@ StevenR.Loomis портативный? ни control- /, ни control-_ не работают под Android ...
Michael
@ Михаил Я сказал, что переносимый, потому что он представлен в ASCII (см. Принятый ответ) и, таким образом, может без проблем передавать сетевые соединения. Кроме того, его можно использовать на большинстве физических клавиатур, которые я видел. Я не пробовал подключать клавиатуру к устройству Android, вы имеете в виду мягкую или жесткую клавиатуру?
Стивен Р. Лумис
@ StevenR.Loomis software ... кажется, что управляющая часть игнорируется, что приводит к попыткам отменить вставку косой черты или подчеркивания.
Майкл

Ответы:

19

Контроль /- не входит в набор стандартных кодов управления . Это не может быть непосредственно представлено как нажатие клавиши во многих терминальных эмуляциях. Такое нажатие клавиши правильно определяется только в определенных для платформы «режимах сканкода» или «режиме GUI» (где API сообщает вам, какие именно ключи и модификаторы используются). Ваш эмулятор терминала издает звуковой сигнал, потому что он фактически является недопустимым нажатием клавиши.

Стандартные контрольные коды охватывают только «контрольные» версии

  • @ A- Z [\]^_(ASCII 0 - 31) и
  • ? (ASCII 127)

В большинстве программ эмулятора терминала, работающих с большинством раскладок клавиш США, вам может потребоваться нажать Shiftдля генерации некоторых «управляющих кодов»:

  • C- @ есть ControlShift2(так как @есть Shift2)
  • C- ^ есть ControlShift6(так как ^есть Shift6)
  • C-_ есть ControlShift-(так как _есть Shift-)
  • Тем не менее, C-? может не всегда быть ControlShift/(так как ?есть Shift/); C-? обычно генерируется либо Backspace(на клавиатурах Apple клавиша, помеченная просто «удалить» без дополнительного символа ⌦), либо Delete(клавиша с ⌦ на клавиатуре Apple).

В основанном на tty Emacs вы обычно можете использовать C-_ undoвместо C- /.

Крис Джонсен
источник
1
Спасибо за подробный ответ. Я собираюсь попробовать поиграть с различными типами терминалов, чтобы посмотреть, смогу ли я заставить его работать.
Кевин Петерсон
1
"Разные типы терминалов"? Вы имеете в виду разные программы-эмуляторы терминалов или ссылаетесь на значение $ TERM, которое в Терминале задается через Терминал> Настройки> Настройки> [профиль]> Дополнительно> Объявить терминал как ? (Все, что делает предпочтение, это устанавливает значение $ TERM. Оно не меняет работу эмуляции терминала.) Control- / является функцией X11 и не поддерживается Какао или Терминалом.
Крис Пейдж
5

Ctrl- / отправляет 0x1f, что эквивалентно Ctrl-_ со времен VT102. Существует много эмуляторов VT100, но на самом деле это эмуляторы VT102. iTerm2 работает, потому что он следует этому поведению.

Только эмуляторы, которые строго соответствуют спецификации VT100, не могут отправлять Ctrl- /. Я считаю, что приложение Terminal является одним из них.

VT100 маскирует 2 старших разряда 7-битного ASCII при нажатии клавиши управления. / равно 0x2f, o равно 0x6f. Когда 2 бита замаскированы, они оба равны 0x0f. VT100 может отправлять Ctrl-o, но не Ctrl- /.

Кендзи Ногучи
источник
Это должен быть принятый ответ.
ocodo