LINUX.ORG.RU

Операционная система GNU Emacs завоевывает десктоп! :)

 , ,


46

34

Операционная система GNU Emacs получила новые возможности! Собрал волю в кулак и написал библиотеку, которая практически полностью реализует протокол X11. Библиотека незамысловато называется x11 и написана на чистом Emacs Lisp, но пока имеет статус technical preview, хотя в принципе уже можно писать что-то реальное. За основу пока взяты описания протокола на XML из проекта XCB, которые разворачиваются в реализацию. В результате имеем практически все расширения. Работа с протоколом осуществляется в асинхронном стиле подобно XCB. Чего пока нет:

  • MIT-SHM. Запросы реализованы, но работать через разделяемую память из операционной системы Emacs мы пока не можем, поэтому Будем через сокет закидывать. Тем более, что разница в скорости, говорят (видел где-то в инете замеры), не такая сумасшедшая.
  • XKB. Просто забыл реализовать пару конструкций XML, используемых для описания этого расширения. Это я скоро реализую, поэтому расширение будет работать в полном объеме.
  • Big-requests. Тоже будет реализовано. Расширение содержит всего один запрос. Он реализован. Но именно для этого расширения надо несколько перелопатить процедуры формирования запросов к серверу X, так как подсчет размеров запросов изменяется с этим расширением.
  • GLX. Огромнейший пласт. За него возьмусь сильно позже. Тут же еще надо полностью сгенерировать протокол GL, а он очень обширный.

Остальные расширения вроде бы должны работать, если их описания правильные и если я что-то не упустил принципиального. Я работу всех расширений даже не проверил, так как очень спешу радостью поделиться. :)

(размер экрана уменьшил до 1024x768, чтобы скриншот поменьше был)

На скриншоте сверху робкая демонстрашка в стиле LSD основного протокола X11 (Core protocol). Ну с arcs, rectangles и core fonts все и так понятно. А вот как выведены фотографии? Я пока не настолько крут, чтобы писать растеризацию jpg и png на Emacs Lisp. Пораскинув мозгами, пошел смотреть, чем может помочь ImageMagick. Оказалось, есть там возможность получить дамп картинки в нужном формате. Так и сделал: надо отобразить картинку - дергаем stream, она нам отдает дамп в буфер, мы его отсылаем в сервер X. «Привет, Isden» написана мышкой. Демка отслеживает событие motion-notify и рисует маленький квадратик под указателем. По кнопке «q» - выход (отслеживается событие key-press)

На скриншоте снизу робкая и неумелая демонстрашка расширения XRender. Тоже в стиле LSD. На ней мы видим linear gradient, radial gradient, треугольник и отрисовку сглаженных окружностей. Окружности состоят из трапезоидов. Алгоритм рассечения (tessellation) я применил первый, какой мне пришел в голову - горизонтальными трапециями. Какая есть проблема? Сглаженный текст! Что-то мне писать растеризацию TrueType или Type1 на Emacs Lisp не улыбается. Есть идея написать программку на Си с помощью Xft, которую я буду что-то просить растеризовать, а она результат будет отдавать в Emacs. То есть примерно как и с ImageMagick поступить.

Надо хорошенько переобдумать API библиотеки, чтобы его заморозить. При этом надо учесть потенциальные и вероятные будущие новшества в Emacs и в библиотеке, чтобы людям не пришлось переписывать то, что написано ранее. Есть недостатки в Emacs, которые реально мешают и раздражают. Преодолимы, конечно, но это будут костыли. Если интересно, то потом поясню, а то уже и так много воды налил.

Так что есть потенциальная возможность воплотить мечту atoku в жизнь. :)

Традиционная ссылка на обоину: #888888. Старую удалил, так как она надоела, а новую еще не искал. Этот серый цвет реально бесит. :)

>>> Просмотр (1024x1536, 254 Kb)

★★★★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 1)

Кстати, где исходники? )

power
()

Ты крут!

Deleted
()

ЛОР таки форум психонавтов

Но, уважуха!

Nicholass ★★★
()

Ааааа оооо ЭЭЭЭ Ты крут.

Dron ★★★★★
()

Вы реализовали мою мечту, люблю вас.
За ЛСДарт отдельный плюс, а обоина порадовала, да, глазки от неё болят, хочу ебилд!

Ptech
()

кофе!!!11

пока не научишь варить кофе - не, не завоюет ниразу.

system-root ★★★★★
()
Ответ на: комментарий от bhfq

/me прищурив левый глаз «Crysis под Wine запустится?»

bhfq ★★★★★
()

офигенно. ты реально крут и Ъ

sudoer
()

Есть недостатки в Emacs, которые реально мешают и раздражают.

Таки нет желания переписать его на чем-нибудь посовременнее? А так конечно зачет, вот бы все было таким удобным и гибким как емакс.

loz ★★★★★
()

Годно, очень годно =]

neocrust ★★★★★
()

Ахренеть как круто. А практическое применение у этого есть?

tailgunner ★★★★★
()

Есть только один вопрос - как это работает?

visual ★★★
()

Могут удалить за «Привет isden» - у меня есть подозрение, что ту волну аватарок в этой фразой удалили модераторы.

Суперский скриншот!

ZenitharChampion ★★★★★
()

Я правильно понял, что это чтобы были установлены пакеты исключительно вида emacs-* just for fun? Или есть какой-то практический смысл выпиливать xorg?

metar ★★★
()

Да ты просто mr.Proper от мира Emacs :)

Ginki
()

очень круто. уважуха)

ymn ★★★★★
()
Ответ на: комментарий от metar

Или есть какой-то практический смысл выпиливать xorg?

Это аналог xlib, а не xserver.

baverman ★★★
()

МОЛОДЕЦ!!!

А с исходниками познакомиться где нить можно будет?

R_Valery ★★★
()

Мощнейший ВИН! Мужик! На елиспе для полного счастья ещё только ведро переписать.)

Hertz ★★★★★
()
Ответ на: комментарий от bhfq

/me прищурив правый глаз «OpenGL умеет?»

GLX. Огромнейший пласт. За него возьмусь сильно позже. Тут же еще надо полностью сгенерировать протокол GL, а он очень обширный.

Tanger ★★★★★
()

Эпический вин. Срочно на emacswiki!

aidaho ★★★★★
()

Молодец, чо. Осталось понять зачем эта штука нужна.

Burbaka ★★
()

А у clisp уже давно есть модуль clx...

ados ★★★★★
()

Это не просто win, это fatality!

x4DA ★★★★★
()
Ответ на: комментарий от loz

Отдельные разрозненные попытки этого сделать не увенчались успехом. Сейчас какой-то студент в рамках gsoc пилит guile-бекенд для emacs, посмотрим, что из этого выйдет.

x4DA ★★★★★
()

вау! Картинки! Рисовалки!

Bad_ptr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.