Яка історія про клавіші Shift + Arrow у терміналі?


21

Я задаюся питанням , чому Shift+ Arrow Keyрезультат в одному з A, B, Cабо Dбукв.

Чому б не інші листи? Чому взагалі якийсь лист?


Інтригуюча: D Моя ставка? Це стосується ігор на основі тексту: D
Rinzwind

2
Просто зауваження: в tty Shift + Arrow Keysнічого не роблять.
Radu Rădeanu

@Rinzwind: :)))
Radu Rădeanu

1
Я задав це питання на Unix / Linux Stack Exchange. Є кілька корисних відповідей. Можливо, ви хочете подивитися на них. unix.stackexchange.com/questions/73669/…
yfklon

Відповіді:


27

Емулятори терміналів, такі як gnome-terminal("Terminal" в Ubuntu), але також xtermі urxvtназвані "емуляторами", оскільки вони відтворюють поведінку старих терміналів, які були єдиним дисплеєм комп'ютера. Такі термінали спілкувалися з комп'ютером за допомогою текстового протоколу і спочатку були розроблені для отримання лише тексту. Швидше потрібно було більше контролю: як стерти рядок? Використовуєте кольори? Або змінити положення курсору?

Термінал VT-100 Джерело: The Art of Unix Usability - інтерфейси командного рядка

Послідовності втечі були розроблені для кожного терміналу, щоб робити такі речі. Вони названі втечу , тому що вони починають з кодом ASCII тікання: 33. Немає можливості безпосередньо надрукувати такого символу, що добре підходить для таких послідовностей. Коли ми все ще хочемо відобразити це замислене, ^[[воно використовується, і саме це я використаю в своїх поясненнях.

Коли термінал отримав ^[[A, це означало не "print ^ [[A", а "користувач натиснув клавішу зі стрілкою вгору". "А" тут абсолютно довільний: просто трапляється лист, про який всі домовились, адже саме для цього DEC VT-52 та його наступник використовував популярний термінал VT-100.

DEC VT-52 Технічне обслуговування Manuel 1976

Джерело: Посібник з обслуговування DEC VT-52 1976

Це все ще працює емулятори терміналів на сьогодні: залежно від $TERMзмінної, база даних з іменем terminfoвідповідає за те, які коди слід надсилати до оболонки (bash, sh, zsh ...), яка потім відповідає за їх розуміння та реакцію їм.

Тепер кодом для Shift+ upбуває так ^[[1;2A: емулятор термінала посилає цей код в оболонку, яка намагається інтерпретувати, ^[[1;2але нічого не відображає, оскільки не знає про цю послідовність втечі. Але Aзалишається і відображається.


5
Нічого собі, цікавого. Тепер усі вони ^[[Aмають сенс, коли я натискаю клавіші зі стрілками, поки процес працює на терміналі.
День

4
Ви можете натиснути CTRL-v безпосередньо перед натисканням клавіші SHIFT-UpArrow, щоб "переглянути" послідовності втечі у сирому вигляді. Якщо ви не змінили значення за замовчуванням, ESC повинен з’являтися на екрані вашого терміналу як ^ [
arielf

@arielf Ви також можете запустити, cat >/dev/nullа потім введіть і натисніть Ctrl + C (або Enter, потім Ctrl + D), коли закінчите.
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.