Единственный способ работать с графикой в Inferno - это Tk. Причём
поддержка Tk встроена в ядро (!) Inferno. Безусловно, для программирования
графического UI проще Tk, наверное, ничего быть не может (я не беру сейчас
дизайнеры UI в стиле Delphi, потому что хотя пользоваться ими легко и
удобно, но вот код, который они генерируют, на порядок сложнее кода Tk).
На Limbo/Tk в Inferno написаны абсолютно все графические приложения
включая саму оконную систему wm (аналог X-Window).
Но лично меня всегда расстраивал внешний вид Tk-приложений и я никогда не мог
понять почему никто не сделает для Tk поддержку стилей/шкурок. :(
К сожалению, больше я ничего по этому вопросу добавить не могу, т.к. я с
графикой в Inferno не работал - мне пока интереснее писать распределённые
приложения и файловые сервера.
Ещё один интересный механизм в Inferno и Plan9 это Plumbing. В принципе он
может использоваться и в текстовом режиме, но в основном он используется
при работе в wm.
Этот механизм обеспечивает возможность передачи сообщений между
приложениями, причём юзер может этот процесс контролировать через
конфиг-файл plumber-сервиса. К примеру, когда вы в файловом менеджере
кликаете на файле, он просто передаёт имя этого файла в plumber и тот
запускает приложение соответствующее этому файлу. Или при drag-n-drop,
когда вы перетаскиваете из одного приложения объект в окно другого
приложения то первое просто посылает через plumber сообщение второму с
указанием какой именно объект нужно передать.
Вот пример конфига plumber, для наглядности:
# file URLs go to wm/charon
kind is text
data matches '[a-zA-Z0-9_/\-]+\.html?'
data isfile $0
data set file://localhost$file
plumb to web
plumb start /dis/charon.dis $data
# .m files are looked up in /module and passed to wm/brutus
kind is text
data matches '([a-zA-Z0-9]+\.m)(:[0-9]+)?'
data isfile /module/$1
data set /module/$0
plumb to edit
plumb start /dis/wm/brutus.dis $file$2
К сожалению, с ним я тоже особо не работал… подробнее про plumbing
наверняка смогут рассказать люди, которые работали с Plan9.
Я просто решил, что лучше об этих вещах упомянуть хоть так, чем никак.
Дальше опять буду писать о вещах с которыми работал. :)