Командная оболочка (консоль) — пожалуй, самый архаичный элемент Unix, который остаётся почти в неизменном виде уже тридцать лет. Мы любим его, но кому-то кажется странным сидеть у монитора с миллионами пикселей, ежедневно глядя в консольное окошко образца 70-х годов, когда вся информация на компьютерах была исключительно в текстовом виде.
![](https://habrastorage.org/r/w1560/storage/839dc754/8989903d/16906442/7b7fdd4a.png)
А что если добавить прямо в консоль отображение графики, видео и других типов данных, а не только текста? Изменить концептуальные принципы работы командной оболочки — это сумасшедшая идея, но ведь никто не запрещает экспериментировать.
Так появился TermKit — командная оболочка на движке WebKit. Она способна отображать списки, таблицы, изображения, полосы загрузки и так далее.
![](https://habrastorage.org/r/w1560/storage/d1b9b75d/9a3116e9/fa02d638/8a8fab71.png)
На коротком видео можно увидеть консоль в деле. TermKit отображает всё, что и браузер, в том числе контент HTML5.
Как это работает? Архитектура бэкенда и фронтенда TermKit описана здесь. Автор программы Стивен Виттенс (Steven Wittens) в своём блоге объясняет, что для новой командной оболочки иначе обрабатываются потоки данных в операционной системе. Стандартная схема выглядит так.
![](https://habrastorage.org/r/w1560/storage/db37904d/12ba2479/066c6739/1de57924.png)
При этом каждая программа должна следить, находится ли она интерактивном режиме и какие данные нужно выводить на дисплей, а какие — на стандартный вывод. Смешивание человеческого и компьютерного форматов приводит к множеству ограничений и компромиссов. Чтобы решить эту проблему, Виттенс предлагает разделить человеческий и компьютерный потоки.
![](https://habrastorage.org/r/w1560/storage/386e37fc/996ad259/0b2a4653/65a58181.png)
В этом случае к каждому классическому Std потоку присоединяется MIME-заголовок: Content-Type, Content-Length и т.д., так что программа сразу знает, какой тип данных она получает. Командная оболочка TermKit содержит ряд обработчиков для обработки каждого типа данных (текст, код, изображения...) и каждый раз выбирает нужный обработчик, после чего генерирует поток для отображения на экране. Таким образом, с помощью команды
![](https://habrastorage.org/r/w1560/storage/2d0ed4a6/e206fec0/3a55c99a/10d998f1.png)
Для обмена данным используется формат JSON. В случае применения команды по выводу листинга вроде
![](https://habrastorage.org/r/w1560/storage/56ffa138/400aa806/fb2a0de6/81bae8c9.png)
Кроме типов файлов, TermKit разными способами подсвечивает синтаксис команд, в том числе цитаты, параметры команд, автодополнение, так что сам интерфейс командной оболочки становится красочнее, с графическими элементами.
![](https://habrastorage.org/r/w1560/storage/db482ae8/1e70abdf/75fcbe01/7232345c.png)
Автор программы считает, что его разработка вполне соответствует философии Unix и надеется, что после соответствующей доработки новая командная оболочка сделает работу в Unix более приятной и интуитивной. Текущая версия TermKit — это жестокая альфа, которая часто падает, так что не рассчитывайте пока работать в ней постоянно, разве что можно полюбоваться и поэкспериментировать.
Конечно, замена традиционному bash выглядит слишком революционно. Но если сделать TermKit как дополнительный режим работы консоли (который можно иногда включать при необходимости), то можно и попробовать.
![](https://habrastorage.org/storage/839dc754/8989903d/16906442/7b7fdd4a.png)
А что если добавить прямо в консоль отображение графики, видео и других типов данных, а не только текста? Изменить концептуальные принципы работы командной оболочки — это сумасшедшая идея, но ведь никто не запрещает экспериментировать.
Так появился TermKit — командная оболочка на движке WebKit. Она способна отображать списки, таблицы, изображения, полосы загрузки и так далее.
![](https://habrastorage.org/storage/d1b9b75d/9a3116e9/fa02d638/8a8fab71.png)
На коротком видео можно увидеть консоль в деле. TermKit отображает всё, что и браузер, в том числе контент HTML5.
Как это работает? Архитектура бэкенда и фронтенда TermKit описана здесь. Автор программы Стивен Виттенс (Steven Wittens) в своём блоге объясняет, что для новой командной оболочки иначе обрабатываются потоки данных в операционной системе. Стандартная схема выглядит так.
![](https://habrastorage.org/storage/db37904d/12ba2479/066c6739/1de57924.png)
При этом каждая программа должна следить, находится ли она интерактивном режиме и какие данные нужно выводить на дисплей, а какие — на стандартный вывод. Смешивание человеческого и компьютерного форматов приводит к множеству ограничений и компромиссов. Чтобы решить эту проблему, Виттенс предлагает разделить человеческий и компьютерный потоки.
![](https://habrastorage.org/storage/386e37fc/996ad259/0b2a4653/65a58181.png)
В этом случае к каждому классическому Std потоку присоединяется MIME-заголовок: Content-Type, Content-Length и т.д., так что программа сразу знает, какой тип данных она получает. Командная оболочка TermKit содержит ряд обработчиков для обработки каждого типа данных (текст, код, изображения...) и каждый раз выбирает нужный обработчик, после чего генерирует поток для отображения на экране. Таким образом, с помощью команды
cat
вы можете отобразить содержимое файла прямо в оболочке. Эта команда подбирает MIME-заголовок, исходя из имени файла, и передаёт поток следующему процессу.![](https://habrastorage.org/storage/2d0ed4a6/e206fec0/3a55c99a/10d998f1.png)
Для обмена данным используется формат JSON. В случае применения команды по выводу листинга вроде
ls
данным присваивается заголовок application/json; schema=termkit.files
. Второй параметр указывает, что речь идёт о списке файлов, чтобы выбрать правильный обработчик вместо стандартного JSON.![](https://habrastorage.org/storage/56ffa138/400aa806/fb2a0de6/81bae8c9.png)
Кроме типов файлов, TermKit разными способами подсвечивает синтаксис команд, в том числе цитаты, параметры команд, автодополнение, так что сам интерфейс командной оболочки становится красочнее, с графическими элементами.
![](https://habrastorage.org/storage/db482ae8/1e70abdf/75fcbe01/7232345c.png)
Автор программы считает, что его разработка вполне соответствует философии Unix и надеется, что после соответствующей доработки новая командная оболочка сделает работу в Unix более приятной и интуитивной. Текущая версия TermKit — это жестокая альфа, которая часто падает, так что не рассчитывайте пока работать в ней постоянно, разве что можно полюбоваться и поэкспериментировать.
Конечно, замена традиционному bash выглядит слишком революционно. Но если сделать TermKit как дополнительный режим работы консоли (который можно иногда включать при необходимости), то можно и попробовать.