Текстовый редактор в тысячу строк как Kilo помогает понять внутренности терминала

11 May, 2026

Репозиторий давно не обновлялся

Последнее обновление было 1 год назад.

Иногда хочется отвлечься от тяжелых IDE, бесконечных обновлений VS Code и просто посмотреть, как вещи работают под капотом. Недавно я наткнулся на репозиторий Kilo. Это крошечный текстовый редактор, написанный Сальваторе Санфилиппо, тем самым antirez, который создал Redis. Весь код проекта умещается менее чем в 1024 строки на языке C.

Честно говоря, сначала я подумал, что это просто очередная игрушка. Но когда открываешь исходники, понимаешь: перед тобой отличный учебник. Здесь нет магии, сторонних библиотек вроде ncurses и лишних абстракций. Только голые системные вызовы и работа с терминалом напрямую.

О чем этот проект

Kilo — это минималистичный редактор для консоли. Он умеет открывать файлы, позволяет их редактировать, искать по тексту и даже подсвечивать синтаксис. Самое приятное, что автор не ставил целью переплюнуть Vim или Nano. Это скорее манифест чистого кода и наглядное пособие для тех, кто хочет разобраться, как устроено управление курсором, обработка ввода и рендеринг текста в терминале.

Если вы когда-нибудь задумывались, как программа понимает, что вы нажали стрелку «влево», или как отрисовать статусную строку в самом низу окна, Kilo даст ответы на эти вопросы.

Что внутри

В проекте реализован базовый набор функций, которых хватает для быстрой правки конфигов или написания простых скриптов.

Реклама
  1. Поиск по тексту. Жмете CTRL-F, вводите строку, и редактор переходит к совпадениям. Можно перемещаться между результатами с помощью стрелок.
  2. Подсветка синтаксиса. Несмотря на размер, Kilo умеет раскрашивать код. Это не полноценный Tree-sitter, но для C-подобных языков работает вполне сносно.
  3. Никаких зависимостей. Автор использовал стандартные escape-последовательности VT100. Это значит, что редактор заведется практически в любом современном эмуляторе терминала без установки дополнительных пакетов.
  4. Статусная строка и сообщения. Внизу экрана всегда видно имя файла и текущую позицию курсора.

Техническая начинка

Архитектура Kilo проста как кирпич. Весь цикл работы сводится к чтению нажатия клавиши, обновлению внутреннего состояния и перерисовке экрана.

Интересно реализована работа с терминалом. Вместо того чтобы полагаться на высокоуровневые API, Kilo переводит терминал в так называемый «raw mode» (сырой режим). В обычном режиме терминал ждет нажатия Enter, прежде чем передать данные программе, и сам обрабатывает часть сочетаний клавиш. В Kilo же каждый байт попадает напрямую в редактор. Это позволяет ловить нажатия мгновенно.

Для отрисовки используется буфер: программа формирует всю картинку кадра в памяти и только потом выводит её одним махом. Это избавляет от неприятного мерцания текста, которое часто встречается в наколенных поделках.

Зачем это скачивать

Я вижу два сценария использования Kilo.

Первый — чисто утилитарный. Если вы работаете на какой-нибудь экзотической встроенной системе, где нет ни Vim, ни даже Vi, а компилятор C под рукой есть, Kilo собирается одной командой:

gcc kilo.c -o kilo -Wall -Wextra -pedantic -std=c99

После этого у вас появляется более-менее вменяемый инструмент для правки кода весом в пару десятков килобайт.

Второй сценарий, и он самый важный — образовательный. Если вы учите C или хотите углубиться в системное программирование под Unix, Kilo — это идеальный проект для чтения на вечер. Код написан плотно, но чисто. В нем легко ориентироваться. Можно взять его за основу и попробовать прикрутить свои фишки: например, поддержку других кодировок или интеграцию с буфером обмена системы.

Стоит ли пробовать

Kilo — это не замена вашим повседневным инструментам. У него есть свои ограничения: он в статусе альфа-версии, там нет внятной обработки ошибок в сложных ситуациях и поддержки юникода. Но его ценность не в функциональности, а в прозрачности.

Рекомендую заглянуть в репозиторий всем, кто устал от сложности современного веба и хочет почувствовать «железо». Это хороший пример того, как много можно сделать, если отбросить всё лишнее и сосредоточиться на главном. Всего тысяча строк кода, а в результате — работающее и полезное приложение.

Кстати, на базе Kilo уже написали десятки расширенных версий. Существует даже подробный туториал «Build Your Own Text Editor», который пошагово объясняет каждую строчку этого проекта. Пожалуй, это лучший комплимент для open-source проекта.