Я задаюся питанням , чому Shift+ Arrow Keyрезультат в одному з A, B, Cабо Dбукв.
Чому б не інші листи? Чому взагалі якийсь лист?
Shift + Arrow Keysнічого не роблять.
Я задаюся питанням , чому Shift+ Arrow Keyрезультат в одному з A, B, Cабо Dбукв.
Чому б не інші листи? Чому взагалі якийсь лист?
Shift + Arrow Keysнічого не роблять.
Відповіді:
Емулятори терміналів, такі як gnome-terminal("Terminal" в Ubuntu), але також xtermі urxvtназвані "емуляторами", оскільки вони відтворюють поведінку старих терміналів, які були єдиним дисплеєм комп'ютера. Такі термінали спілкувалися з комп'ютером за допомогою текстового протоколу і спочатку були розроблені для отримання лише тексту. Швидше потрібно було більше контролю: як стерти рядок? Використовуєте кольори? Або змінити положення курсору?
Джерело: The Art of Unix Usability - інтерфейси командного рядка
Послідовності втечі були розроблені для кожного терміналу, щоб робити такі речі. Вони названі втечу , тому що вони починають з кодом ASCII тікання: 33. Немає можливості безпосередньо надрукувати такого символу, що добре підходить для таких послідовностей. Коли ми все ще хочемо відобразити це замислене, ^[[воно використовується, і саме це я використаю в своїх поясненнях.
Коли термінал отримав ^[[A, це означало не "print ^ [[A", а "користувач натиснув клавішу зі стрілкою вгору". "А" тут абсолютно довільний: просто трапляється лист, про який всі домовились, адже саме для цього DEC VT-52 та його наступник використовував популярний термінал VT-100.

Джерело: Посібник з обслуговування DEC VT-52 1976
Це все ще працює емулятори терміналів на сьогодні: залежно від $TERMзмінної, база даних з іменем terminfoвідповідає за те, які коди слід надсилати до оболонки (bash, sh, zsh ...), яка потім відповідає за їх розуміння та реакцію їм.
Тепер кодом для Shift+ upбуває так ^[[1;2A: емулятор термінала посилає цей код в оболонку, яка намагається інтерпретувати, ^[[1;2але нічого не відображає, оскільки не знає про цю послідовність втечі. Але Aзалишається і відображається.
^[[Aмають сенс, коли я натискаю клавіші зі стрілками, поки процес працює на терміналі.
cat >/dev/nullа потім введіть і натисніть Ctrl + C (або Enter, потім Ctrl + D), коли закінчите.