[ plan.9 ] 18 newmsg : normal : rss : home

Эха по Plan 9 : 05/12/20 19:52 : hugeping to All [#] [reply]

Долго думал, создавать ли эху. Просто потому, что есть риск того, что она никогда не наполнится.

С другой стороны, уже несколько раз хотел где-то записать заметки/ссылки на интересные ресурсы и было негде. Так что, всё-таки создаю.

Если что, грохнуть всегда можно потом.



Интересные ресурсы : 05/12/20 20:06 : hugeping to All [#] [reply]

Сюда предлагаю добавлять ссылки на интересные ресурсы.

Документация по Plan 9 -- http://doc.cat-v.org/plan_9/

9front -- форк Plan 9 для современного железа -- http://9front.org/

9fans discord -- https://discord.gg/eu8VBUs

Русскоязычная телеграм группа -- https://t.me/ru_plan9

Plan 9 как десктоп -- https://pspodcasting.net/dan/blog/2019/plan9_desktop.html

Интересные заметки по 9front, например есть "рецепт" установки без fsworm партиции. -- http://docs.a-b.xyz/sitemap.html

Музыкальный плеер Zuke -- https://sr.ht/~ft/zuke/

Видео-плеер treason: https://sr.ht/~ft/treason/

Мои патчи/хаки на 9front. Переключение раскладки с клавиатуры, драйверы для eeepc -- https://github.com/gl00my/plan9hacks



Читшит по командам Sam (Edit в ACME) : 06/12/20 09:15 : hugeping to hugeping [#] [reply]

http://sam.cat-v.org/cheatsheet/sam-refcard.pdf



Редактор ACME : 20/01/21 12:17 : hugeping to All [#] [reply]

Я не буду писать руководство по этому редактору. Но мне хотелось в этой небольшой заметке обозначить главную идею редактора. Дело в том, что когда я начинал осваивать acme мне не хватало именно этого -- понимания центральной идеи, архитектуры. Что это вообще такое? Нечто, непохожее ни на один существующий редактор. Да как можно в нём работать?

А идея у acme оказалась простой и при этом мощной. Я в течении 2-х месяцев разрабатывал в нём игру с текстовым вводом, и это было удобно. Привык настолько, что забыл даже часть клавиатурных комбинаций emacs. :)

Итак, в чём идея acme? Идея acme состоит в том, чтобы дать прослойку между ОС и человеком в виде TUI. И это всё.

1) Acme - это просто столбцы, в которых могут создаваться "окна", отображающие текст. Просто текст, поток текста. Без цвета, стилей, номеров строк... Лишь текст.

2) Над окнами есть области, в которых тоже может быть текст, которые играют роль меню.

3) Меню и окнами можно управлять с помощью записи в специальные файлы. С помощью чтения, можно получать события и информацию о текущем содержимом окон и меню.

4) Вы можете "выполнять" команды системы прямо из текста и/или меню. Например, вызывать спеллчекер, форматирование кода, увеличение отступа -- всё это должно быть Unix командами, которые будут выполняться для всего текста или выделенной его части. Текст приходит через stdin и выходит через stdout. Текст может быть внедрён в редактируемый текст или отображаться в отдельном окне (например, ошибки компилятора). Скрипт может понимать, что он запущен из среды acme и управлять редактором через файловую систему!

5) Можно открывать и просматривать файлы/каталоги, переходить на нужные строки, делать поиск в тексте. Всё это делается "выполнением" текста. Есть базовая возможность делать обработку текста на языке, который похож на sed. (Встроенная команда Edit).

При такой простой идее получается, что acme это не просто редактор, а интерфейс к ОС! Настоящий Unix подход, у которого есть неоспоримое преимущество -- простота и низкий порог вхождения! Никаких сочетаний клавиш, всё интуитивно понятно и естественно. Как только привыкаешь к этому, чувствуешь как твоя голова отдыхает!

Не смотря на простоту, acme оказывается мощным. В том числе благодаря возможности работать с ним, как с файловой системой. Так как мы можем ловить события редактора и управлять им, то, к примеру, для acme есть почтовый клиент Mail, который выглядит так же, как и всё остальное -- просто текст с активными элементами. Можно запустить win -- "терминал" и выполнять в нём команды. acme умеет дампить и восстанавливать своё состояние. Сразу оговорюсь, до мощи Emacs acme далеко. Хотя бы потому, что в acme окнах возможно отображать только текст. Но учитывая его простоту, мощности на строку кода у acme больше!

Когда я использовал acme для написания игры, то выглядело это примерно так:

1) Левый столбец содержал окна с кодом и окно, в котором я запускал консольный метапарсер, через который прогонял автоскрипт (все команды игры, для полного прохождения).

2) Правый столбец содержал окна: вывод спеллчекера, файл с автокомандами.

Интересно то, что со временем строка меню обросла теми командами, которые я использовал больше всего именно при работе над игрой. Там были фрагменты строк для поиска, какие-то выбранные места кода, запуск форматирования кода и прочее. Таким образом, acme подстраивался под конкретную задачу. Это было удобно и сам факт показался мне интересным.

В общем, acme -- отличный пример удачного применения KISS подхода. Теперь, кроме emacs в Linux я также использую и acme и этот опыт мне нравится. Переходя с emacs на acme, отчётливо чувствуешь разницу подходов и то, как освобождаются ресурсы в твоей голове, когда можно забыть, хотя бы на время, все эти клавиатурные комбинации. :)



Re: Интересные ресурсы : 02/02/21 13:25 : hugeping to hugeping [#] [reply]

Описание rc на русском:

http://doc.cat-v.org/plan_9/translations/russian/papers/rc



Запуск нового экземпляра acme в plan9port : 04/02/21 21:48 : hugeping to hugeping [#] [reply]

Если запустить acme из plan9port, а затем попробовать запустить его снова, то получим ошибку, вроде такой:

> 9pserve: announce unix!/tmp/ns.peter.:0/acme: Address already in use acme: can't post service: 9pserve failed

Поэтому, у меня есть простой скрипт, который запускает acme если он ещё не был запущен. А в последующие разы открывает файл через plumber в уже существующем экземпляре acme. Выглядит скрипт так:

====
#!/bin/sh
9

PAGER=nobs
MANPAGER=nobs

# Default font for Plan 9 programs.
font=/mnt/font/GoMono/14a/font

# Equivalent variables for rc(1).
home=$HOME
prompt="$ "

# if you want to use rc instead of your shell within acme, uncomment the following line
shell=rc

user=$USER

export \
font\
home\
shell\
prompt\
user\
PAGER\
MANPAGER

if ! pidof plumber >/dev/null; then
plumber
fi

if pidof acme >/dev/null; then
plumb -d edit "$@"
else
acme -f /mnt/font/Iosevka/14a/font "$@" &
fi
====



Но иногда хочется все-таки запустить ещё один (или не один) acme! Оказывается, это возможно!

====
#!/bin/sh
export NAMESPACE=`mktemp -d /tmp/acmeXXXX`

9

PAGER=nobs
MANPAGER=nobs

# Default font for Plan 9 programs.
font=/mnt/font/GoMono/14a/font

# Equivalent variables for rc(1).
home=$HOME
prompt="$ "

# if you want to use rc instead of your shell within acme, uncomment the following line
shell=rc

user=$USER

export \
font\
home\
shell\
prompt\
user\
PAGER\
MANPAGER

plumber "$NAMESPACE"
acme -f /mnt/font/Iosevka/14a/font "$@"
for p in `pidof plumber`; do
if cat /proc/$p/cmdline | grep -q "$NAMESPACE"; then
kill $p
break
fi
done
rmdir $NAMESPACE
====



Скрипт запустит столько acme, сколько понадобится.



Скрипты и заметки по ACME : 18/02/21 07:33 : hugeping to hugeping [#] [reply]

Несколько раз уже натыкался на этот репозиторий.

https://github.com/evbogdanov/acme



cwfs без WORM : 18/02/21 15:49 : hugeping to hugeping [#] [reply]

Конфигурация cwfs без WORM:
http://docs.a-b.xyz/cwfs.html



Статья про export/import : 19/02/21 08:11 : hugeping to hugeping [#] [reply]

https://9p.io/wiki/plan9/9p_services_using_srv,_listen,_exportfs,_import/index.html



Plan9 от Bell Labs на русском : 21/02/21 07:40 : hugeping to hugeping [#] [reply]

http://www.raaar.ru/unix/Plan9/Plan9.pdf
http://doc.cat-v.org/plan_9/translations/russian/papers/

P.S. Edited: 2021-02-21 09:24:41



Re: Скрипты и заметки по ACME : 10/03/21 04:19 : hugeping to hugeping [#] [reply]

Ещё скрипты и заметки: https://github.com/jinyangustc/acme-editor



shithub : 27/07/21 06:51 : hugeping to hugeping [#] [reply]

https://shithub.us - git9 репозитории разного софта под 9front.



dumb : 02/08/21 19:47 : nvkv to hugeping [#] [reply]

https://github.com/emptymonkey/dumb/

Полезная утилита для обрубания escape-последовательностей. Совершенно незаменимая штука в win-окнах Acme.

Что примечательно, написана целиком на lex.

Удобнее всего использовать через |&, если у вас свежий баш, тогда оба, stderr и stdout, будут завернуты в dumb

% zig build |& dumb
P.S. Edited: 2021-08-02 20:48:55



netsurf и iconv : 12/09/21 21:11 : hugeping to All [#] [reply]

Те, кто пользуются 9front наверняка знают, что есть порт netsurf: https://github.com/netsurf-plan9/netsurf

К сожалению, порт собран без iconv поддержки. Поэтому некоторые сайты (например, opennet) открываются с убитой кодировкой.

Я взял iconv реализацию из openwrt и грязным образом прикрутил к netsurf. Положил в свой репозиторий: https://github.com/gl00my/plan9hacks

P.S. Кроме этого, у меня там есть ещё какие-то патчи, которые что-то исправляют в плане русского и шрифтов.



ACME в Linux: пишем почтовый клиент : 13/10/21 16:48 : hugeping to hugeping [#] [reply]

Написал статью о том, как писал фронтенд к почте для acme:
ii://S4sJA2iZYo83k8ZnpjEX[*][*]



drawterm на 9front : 05/11/21 09:14 : hugeping to All [#] [reply]

Настроил себе drawterm на малинку с 9front.
Причём, сделал это не так, как положено, а просто с помощью запуска скрипта из lib/profile. :)
Потому что я использую малинку и как terminal. Так что мне важно, чтобы она оставалась графической.

Вот скрипт:

====
#!/bin/rc
#auth/factotum -n -- uncomment this if you want new instance
echo 'key proto=p9sk1 dom=rpi4 user=glenda !password=pass' > /mnt/factotum/ctl
aux/listen1 -t tcp!*!17019 /rc/bin/service/tcp17019 &
====



Запускаю его из lib/profile ветки terminal.
drawterm вариант от 9front.



Re: drawterm на 9front : 07/11/21 12:14 : hugeping to hugeping [#] [reply]

Патч на drawterm, который включает fullscreen на X11

====
diff --git a/gui-x11/x11.c b/gui-x11/x11.c
index 74412f9..9dda3a5 100644
--- a/gui-x11/x11.c
+++ b/gui-x11/x11.c
@@ -190,6 +190,13 @@ flushmemscreen(Rectangle r)
XFlush(xdisplay);
}

+void fullscreen(Display* dpy, Window win)
+{
+ Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None };
+ XChangeProperty(dpy, win, XInternAtom(dpy, "_NET_WM_STATE", False),
+ XA_ATOM, 32, PropModeReplace, atoms, 1);
+}
+
void
screeninit(void)
{
@@ -370,7 +377,8 @@ screeninit(void)
1); /* int nelements */
XFlush(xkmcon);
}
-
+ fullscreen(xdisplay, xdrawable);
+
/*
* put the window on the screen
*/
====




Re: dumb : 25/08/21 14:28 : Difrex to nvkv [#] [reply]

О, эта штука может пригодиться на очередном CTF :)