Попечатаем?
Прямо в Plan 9!
Plan “Typewriter”
Спешу сообщить, что запустил проект по возвращению “печатной машинки” UNIX в Plan 9/9front - Plan “Typewriter”1. Проект ориентирован на подготовку окружения, которое игнорирует мышь полностью и позволяет работать не убирая рук с клавиатуры.
– Мы строили, строили и наконец построили! Да здравствуем мы, ура!
Пока готов очень базово только оконник - nwm. На данном этапе это форк rio из проекта 9front, в который я добавил отрисовку панели навигации и обработку горячих клавиш. При разработке интерфейса я вдохновлялся dwm2 - простой и лаконичный оконник для X-сервера. Непосредственно от rio останется только работа с окнами и файловой системой. По мере развития всё “лишнее” будет удаляться, чтобы уменьшить объём кода.
Идею я вынашивал около года. Проект казался мне слишком сложным и неподъёмным. Но в один день я решил сделать пару набросков отрисовки панели. Дальше как-то само пошло…
На подходе также:
- st3/foot4-подобный эмулятор терминала. Пока сделал только небольшие наброски и погружаюсь в технические детали.
- Emacs5-подобный текстовый редактор, расширяемый (в перспективе) не просто своим диалектом Lisp, а полноценным Scheme (пока не решил который использовать). По мере готовности всё будет публиковаться на сайте проекта.
Acme: OFF
Acme (по задумке разработчиков) представляет из себя интерфейс системы. Ведь если всё файл и большинство из них с текстом, то для работы с системой нужен только текстовый редактор. Но что я не могу принять, так это очень ограниченную поддержку клавиатуры. Редактор слишком ориентирован на мышь. Также в нём отсутствует подсветка синтаксиса. Идея в том, чтобы не писать настолько сложный код, чтобы нужна была подсветка синтаксиса. Если вы планируете ограничивать написание кода “Hello, world!” приложениями, то его возможностей должно вполне хватать. Но мало кто сможет сказать, что код, например, rio - простой.
Так что при разработке я использовал Emacs и сразу тестировал код в 9front. А помогал мне в этом drawterm. При подключении к Plan 9 через drawterm локальная файловая система машины монтируется в текущее окружение. Все файлы доступны абсолютно прозрачно. Просто переходите в нужную директорию, компилируете и запускаете.
Удивительный C
В процессе работы я обнаружил кое-что очень интересное в Plan 9 диалекте C - встраиваение структур. Мы привыкли, что в C использовать одну структуру внутри другой можно двумя способами.
- В виде переменной:
struct A {
int x;
};
struct B {
struct A a;
};
После этого мы можем получать доступ к полю из структуры A
через b.a.x
.
- Как анонимную структуру:
struct B {
struct {
int x;
};
};
Оба варианта выглядят хоть и очень гибко, но немного громоздко. Особенно это ощущается при большом уровне вложенности структур в крупных проектах и длинных именах полей.
Но в Plan 9 диалекте C разработчики не оглядывались назад. Позже они перенесут это поведение в Go:
struct A {
int x;
};
struct B {
A;
};
Теперь поле x
доступно как родное через b.x
.
И знаете что, с этим очень приятно и удобно работать.
Особенно после Go.
Появляется небольшой флёр ООП (в хорошем смысле слова).
Что дальше?
До релизов 1.0 приложения я доведу наверняка (не значит быстро). Проект буду развивать по мере сил и времени. Как и всегда не откажусь от советов и рекомендаций. На этом этапе самая главная помощь, которую вы можете оказать проекту - распространнение информации и коммиты/патчи. Да, сейчас проект на очень ранней стадии. Но я и не говорил, что это готовое Production-ready ПО.
Главная цель этой публикации - внимание и без того узкого сообщества. Может где-то есть эти 3.5 человека, которые хотели видеть в Plan 9 то, к чему привыкли на своих UNIX машинках.
Если вы есть - отзовитесь!
-
https://plantypewriter.tech/ Plan “Typewriter” ↩︎
-
http://dwm.suckless.org/ dwm - dynamic window manager ↩︎
-
https://st.suckless.org/ st - simple terminal ↩︎
-
https://codeberg.org/dnkl/foot foot - A fast, lightweight and minimalistic Wayland terminal emulator ↩︎
-
https://www.gnu.org/software/emacs/ GNU Emacs - An extensible, customizable, free/libre text editor — and more. ↩︎