Существует большое руководство по написанию текстовых редакторов для терминалов Unix с необработанным вводом, окраской синтаксиса и т. Д., В котором используются только стандартная библиотека C и стандартные заголовки, доступные в Unix-подобных системах:
https://viewsourcecode.org/snaptoken/kilo/02.enteringRawMode.html
В этой главе руководства объясняется, как переключить вход терминала в необработанный режим и обработать его стандартными функциями ввода-вывода из C (read()
и прочее). Затем вы можете обрабатывать такие вещи, как перемещение курсора, прокрутка, цвета и т. Д., Записывая в выход определенные последовательности переключения терминала VT100. Вы можете найти больше в этом руководстве, включая ссылки на все необходимые документы и примеры исходных кодов. Есть также репозиторий GitHub со всеми образцами из учебника, а также конечный продукт, основанный на Kilo editor , написанном antirez .
Что касается чтения специальных клавиш, таких как клавиши со стрелками, Home, End, PgUp, PgDown и т. Д., Попробуйте вывести необработанные символы, которые вы получаете от ввода, и просто нажмите клавиши, которые вы хотите увидеть, на какие коды они отображаются. Например, для клавиш со стрелками они обычно отображаются на escape-последовательности <ESC>[A
- <ESC>[D
, где <ESC>
- это специальный управляющий символ с ASCII-кодом 27
десятичный или 0x1B
шестнадцатеричный. Это коды выхода терминала VT100, которые инструктируют терминал перемещать курсор на один символ в одном из этих четырех направлений. Подробнее об обработке этих нажатий клавиш в следующей главе вышеупомянутого руководства:
https://viewsourcecode.org/snaptoken/kilo/03.rawInputAndOutput.html