Як мені надіслати C- / (тобто контрольну косу рису) до терміналу?


12

Я намагаюся запустити Emacs в терміналі. Я ввімкнув "параметр використання як мета" в налаштуваннях терміналів, і це приблизно 95% працює правильно.

Ключова послідовність ctrl- / (або в позначенні Emacs C- /) - "скасувати". Ця послідовність клавіш просто викликає дзвінок на термінал. Як це виправити?


FWIW, це працює в iTerm2 - iterm2.com - але я думаю, що я просто перевчитимусь використовувати ^ _ скрізь, щоб бути більш портативним.
Стівен Р. Луміс

@ StevenR.Loomis портативний? ні управління, ні контроль - не працюють під Android ...
Майкл

@Michael Я сказав, що портативний, тому що він є представним в ASCII (див. Прийняту відповідь) і, таким чином, може без проблем переходити до мережевих з'єднань. Плюс, здається, він може бути використаний на більшості фізичних клавіатур, які я бачив. Я не намагався поєднати клавіатуру з пристроєм Android, ви маєте на увазі м'яку чи жорстку клавіатуру?
Стівен Р. Луміс,

@ Програмне забезпечення StevenR.Loomis ... контрольна частина, здається, ігнорується, що призводить до спроб скасувати вставлення косої риси або підкреслення.
Майкл

Відповіді:


18

Управління /- не є частиною набору стандартних кодів управління . Він не є безпосередньо представленим як натиск клавіш у багатьох емуляціях терміналів. Таке натискання клавіш виявляється належним чином лише у певних "платформах сканування" або "режимі GUI", специфічних для платформи (де API точно повідомляє, які клавіші та модифікатори використовуються). Ваш емулятор терміналу подає звуковий сигнал, оскільки він фактично є недійсним натисканням клавіші.

Стандартні коди управління охоплюють лише "Control" версії

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

У більшості програм емуляторів терміналів, що працюють з більшістю макетів ключів у США, вам може знадобитися натиснути, Shiftщоб генерувати деякі "Коди управління":

  • C- @ є ControlShift2(оскільки @є Shift2)
  • C- ^ є ControlShift6(оскільки ^є Shift6)
  • C-_ є ControlShift-(оскільки _є Shift-)
  • Однак C-? може не завжди бути ControlShift/(оскільки ?є Shift/); С-? зазвичай генерується або Backspace(на клавіатурах Apple, ключ із написом просто "видалити" без додаткового символу ⌦), або Delete(той, що на клавіатурах Apple клавіше ⌦).

У Emacs на основі tty зазвичай можна використовувати C-_ для undoзамість C- /.


1
Дякую за ретельну відповідь. Я спробую пограти з різними типами терміналів, щоб побачити, чи зможу я змусити його працювати.
Кевін Петерсон

1
"Різні типи терміналів"? Ви маєте на увазі різні емуляторні програми терміналів або ви посилаєтесь на значення $ TERM, яке в Terminal встановлюється за допомогою Terminal> Preferences> Settings> [profile]> Advanced> Declare terminal as ? (Все, що потрібно робити, - це встановити значення $ TERM. Це не змінює роботу емуляції терміналу.) Control- / є особливістю X11 і не підтримується какао чи терміналом.
Кріс Пейдж

3

Ctrl- / посилає 0x1f, що еквівалентно Ctrl-_ з днів VT102. Існує багато емуляторів VT100, але насправді вони є емуляторами VT102. iTerm2 працює, оскільки він дотримується такої поведінки.

Тільки емулятори, які суворо відповідають специфікації VT100, не можуть надсилати Ctrl- /. Я вважаю, що додаток Термінал є одним із них.

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


Це має бути прийнятою відповіддю.
окудо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.