Pull to refresh

TermKit: новая концепция консоли с графическим выводом

*nix *
Командная оболочка (консоль) — пожалуй, самый архаичный элемент Unix, который остаётся почти в неизменном виде уже тридцать лет. Мы любим его, но кому-то кажется странным сидеть у монитора с миллионами пикселей, ежедневно глядя в консольное окошко образца 70-х годов, когда вся информация на компьютерах была исключительно в текстовом виде.


А что если добавить прямо в консоль отображение графики, видео и других типов данных, а не только текста? Изменить концептуальные принципы работы командной оболочки — это сумасшедшая идея, но ведь никто не запрещает экспериментировать.

Так появился TermKit — командная оболочка на движке WebKit. Она способна отображать списки, таблицы, изображения, полосы загрузки и так далее.


На коротком видео можно увидеть консоль в деле. TermKit отображает всё, что и браузер, в том числе контент HTML5.



Как это работает? Архитектура бэкенда и фронтенда TermKit описана здесь. Автор программы Стивен Виттенс (Steven Wittens) в своём блоге объясняет, что для новой командной оболочки иначе обрабатываются потоки данных в операционной системе. Стандартная схема выглядит так.


При этом каждая программа должна следить, находится ли она интерактивном режиме и какие данные нужно выводить на дисплей, а какие — на стандартный вывод. Смешивание человеческого и компьютерного форматов приводит к множеству ограничений и компромиссов. Чтобы решить эту проблему, Виттенс предлагает разделить человеческий и компьютерный потоки.


В этом случае к каждому классическому Std потоку присоединяется MIME-заголовок: Content-Type, Content-Length и т.д., так что программа сразу знает, какой тип данных она получает. Командная оболочка TermKit содержит ряд обработчиков для обработки каждого типа данных (текст, код, изображения...) и каждый раз выбирает нужный обработчик, после чего генерирует поток для отображения на экране. Таким образом, с помощью команды cat вы можете отобразить содержимое файла прямо в оболочке. Эта команда подбирает MIME-заголовок, исходя из имени файла, и передаёт поток следующему процессу.


Для обмена данным используется формат JSON. В случае применения команды по выводу листинга вроде ls данным присваивается заголовок application/json; schema=termkit.files. Второй параметр указывает, что речь идёт о списке файлов, чтобы выбрать правильный обработчик вместо стандартного JSON.


Кроме типов файлов, TermKit разными способами подсвечивает синтаксис команд, в том числе цитаты, параметры команд, автодополнение, так что сам интерфейс командной оболочки становится красочнее, с графическими элементами.


Автор программы считает, что его разработка вполне соответствует философии Unix и надеется, что после соответствующей доработки новая командная оболочка сделает работу в Unix более приятной и интуитивной. Текущая версия TermKit — это жестокая альфа, которая часто падает, так что не рассчитывайте пока работать в ней постоянно, разве что можно полюбоваться и поэкспериментировать.

Конечно, замена традиционному bash выглядит слишком революционно. Но если сделать TermKit как дополнительный режим работы консоли (который можно иногда включать при необходимости), то можно и попробовать.
Tags:
Hubs:
Total votes 189: ↑154 and ↓35 +119
Views 5.1K
Comments Comments 296