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)

Из разряда: просыпайся ЛОР, я тебе скриншоты принес ...

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

Мы с вами не знакомы, раз, если мне нравится смотреть на извращенные проекты, мне кажется это хорошим развлечением и отдыхом, что вам не нравится и, каким образом вы тут детерминируете школьников, лично мне непонятно. С равным успехом вы можете назвать Вербицкого школьником. Что вас задело в данной разработке — непонятно.

Ptech
()

30 человек подписалось. 23 в избранное

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

Что вас задело

меня - ничего, просто позабавило как отреагировал на скриншот тот же ZenitharChampion, когда увидел много «умных» слов

vaino
()
Ответ на: комментарий от vaino

Лично меня порадовала идея, не знаю, что порадовало остальных, а то, что даже не тянет на курсач... Как мне кажется, идея была в другом.
P.S. just for fun

Ptech
()
Ответ на: комментарий от Ptech

я очевидно слишком поспешил обобщить, приношу извинения

vaino
()

Ъ! Ждем сырцы!

unfo ★★★★★
()

Великий успех. А исходники где?

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

однозначно :) но у меня были и более интересные, вроде:

www.linux.org.ru/gallery/6246362.png

оно кстати уже значительно выросло и используется в работе; а вообще я ж против данного скрина ничего не имею, но взять тебя, например, ты пользуешься emacs, emacs lisp, xlib etc.? или просто решил, что это непонятно и «Офигенно»? ;)

vaino
()

Офигительно!

Ты молодец. Это один из уже редких в моей жизни случаев, когда чужой пример вдохновляет. Удачи!

Bass ★★★★★
()

Э, коллега, да вы просто нереальный маньяк! :-D

cache ★★
()

Уважаемые знатоки, внимание вопрос!

Кто-нибудь, скажите мне: какая разница между хирургом проведшим сложнейшую операцию на сердце ребёнка; и хирургом, который сам, без чьей-либо помощи, искусно пришил себе на лоб член с яйцами?

Essentuki_17 ★★
()

бгыгы, а я как раз приделываю к емаксу OpenGL оверлей. Только делаю это отдельным сишным процессом, лол)

AiFiLTr0 ★★★★★
()
Ответ на: Уважаемые знатоки, внимание вопрос! от Essentuki_17

Кто-нибудь, скажите мне: какая разница между хирургом проведшим сложнейшую операцию на сердце ребёнка; и хирургом, который сам, без чьей-либо помощи, искусно пришил себе на лоб член с яйцами?

первый- ремесленник, второй- художник

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

А я помню этот скриншот. :-)

но взять тебя, например, ты пользуешься emacs, emacs lisp, xlib etc.? или просто решил, что это непонятно и «Офигенно»?

Осваиваю Emacs в качестве IDE для написания собственного велосипеда. Ну и разве ТС не заслуживает восторженных отзывов в галерее, сплошь забитой дефолтными скринами полудефолтных DE? :-)

AnimusPEXUS
()
Ответ на: комментарий от AnimusPEXUS

Ну и разве ТС не заслуживает восторженных отзывов в галерее

заслуживает, конечно, я не это хотел сказать

// закрываем тему

vaino
()
Ответ на: комментарий от pyometra

первый- ремесленник, второй- художник

первый- ремесленник, второй- бездельник (c) Мужики с Нижнего Тагила :-))

fix

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

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

ZenitharChampion ★★★★★
()

А emacs уже можно на этом запускать?

toon
()

Ну все, теперь осталось переписать эмаксовый гуй на этом и уйти в рекурсию!

fat_angel ★★★★★
()

(Ох, а я и не думал, что все комментарии идут в уведомления!)

Исправление по сопроводительному тексту. Состояние не technical preview. Это у меня путанница с терминами. Technical preview согласно wikipedia называют бета-версию. Текущее состояние пока что пре-альфа или ниже. Никакой ранней оптимизации я и не думал делать, так как это зло. Нет обработки ошибок и всякого разного, будут изменения в API.

Сразу насчет исходников (самый частый вопрос). Разумеется, я ожидал, что их попросят, но на момент публикования скрина я не был готов к их выкладыванию. Там нет ни лицензии (есть пока кое-какие вопросики), ни хоста, где бы все лежало. Рассматриваю пока три варианта, но пока решения не принял. К тому же, надо написать краткую инструкцию как запустить. На файлообменник сойдет? Напишу файлик INSTALL, запакую и выложу.

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

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

Ну, на Си же есть! Это же современно. :)

Тема-то не нова. Аналогичные библиотеки есть, но их состояние мне неведомо. Есть для Java: Echer, XTC. Внутри XCB разрабатывается для Python - xpyb. Есть CLX для Common Lisp: реализация telent-clx (работает на нескольких реализациях CL, для clisp я даже патчил это дело когда-то), и new-clx для clisp. CLX начали разрабатывать еще в 1987 году, копирайты Тexas Instruments стоят еще с тех времен, когда они свои Lisp-машины выпускали. И для Smalltalk была когда-то такая. Доходили слухи, что и для perl даже было (http://search.cpan.org/dist/X11-Protocol/)

Но практически все из них написаны в стиле xlib. Пока только xpyb использует XCB и вот для Emacs. Вообще, все начиналось с того, что я хотел переписать CLX на базе XCB и сделать проект CLX2. Это, кстати, кто-то тоже хотел бы сделать http://www.cliki.net/CLX:

Use XmlXcb (XML description of the X protocol as used by XCB) as basis.

Сейчас в CLX все прибито гвоздями зачем-то. Странно, что раньше лисперам не пришла в голову мысль сделать описание протокола на CL.

Zubok ★★★★★
() автор топика
Ответ на: комментарий от vyazovoi

cast lg

Да, забыл его прокастить. А то xwem.org уже все - не работает. :) В SXEmacs в объявлениях жизнеутверждающее «эй, вы думали, что мы умерли, а мы еще не умерли, мы просто так пахнем». :)

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

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

Не-е-е, это же не реализация X-сервера (xorg). Это реализация библиотеки для написания X-клиентов.

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

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

Надеюсь, что научу. Про GLX в сопроводиловке написано. В планах.

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

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

Самая главная анноящая вещь в Emacs, с которой я столкнулся в данном случае - это отсутсвие bignums. Я уже раза три тут жаловался. В принципе это преодолимо (XEmacs же преодолел). Получается нелепая ситуация. X-протокол вовсю использует 32-битные поля, а в Emacs целые числа определяются архитектурой и минус три бита. То есть на 32-битной машине - это 29 бит, а на 64-битной - 61 бит (легко проверить через константу most-positive-fixnum и most-negative-fixnum). Ну жопа же! Вот если бы были bignums или хотя бы 64-битные числа обеспечавались, то уже гора с плеч бы сошла.

Просто если человек пишет программу на 64-битном Emacs, то у него нет проблем. Приносишь прогу на 32-битную, то все, аллес, может неправильно заработать. Поэтому пришлось работать с 32-битными числами как с вектором (либо 2 по 16, либо 4 по 8, либо как со строчкой). Так что надо будет писать абстракцию какую-то сейчас. Есть варианты, я их выписал у себя, но все они имеют недостатки.

Zubok ★★★★★
() автор топика

Вот бы ещё то же самое под vim...

queen3 ★★★★★
()

Выложил. http://rghost.ru/38354132

Внутри есть файлик INSTALL с пояснениями. Интересно, у кого-нибудь заработает? Я успел проверить работу только в Emacs 22 и 23. Emacs 24 у меня нет, пользуюсь дистрибутивным.

Еще раз предупреждаю, что все находится на начальном этапе, однако пользоваться даже можно.

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

А, да. Особо не ресайзите окошко x11-demo за уголки, так как оно шлет очень много событий Expose, я просто с этим не боролся. Лучше развернуть на весь экран, свернуть. Окна лучше не таскать по нему, а то он начинает картинки все время обновлять.

x11-demo-render не послылает expose, отрисовывает один раз окно по событию map-notify и все. Поэтому содержимое не восстанавливает.

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

Вообще, все начиналось с того, что я хотел переписать CLX на базе XCB и сделать проект CLX2.

а вот это очень и очень интересно

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

just for fun

Идея, конечно, оригинальная, но не особо полезная для практики. Скорее jff. Было бы куда более радостно увидеть нормальную интеграцию gtk-виджетов с emacs, и _рабочую_ реализацию uzbl+emacs aka ezbl, вроде пашет тока под 24 причем с какими-то патчами, но у меня вообще ничего не заработало.

первый- ремесленник, второй- бездельник (c) Мужики с Нижнего Тагила :-))<<

Общественнополезнодрочеры. Презираю их всех. Надо быть реально тупыми чтобы не понимать простую и очевидную истину — если бы наука была направлена только на практическую пользу мы были бы в полной жопе.

P.S. Кстати почему-то кажется что прожект до рабочего так и не дорастет.

//offtop Люто бесят идиоты, которые программистов называют инженерами(в своем вузе от некоторых наслушался), всё бы им на пользу да для общества, вот как раз это напомнило, надо было валить на мехмат, бесят эти гопники.

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

вы чего это усы с, пардон, лобковыми волосами путаете?

ms-dos32
()
Ответ на: комментарий от pyometra

в фортунки если не весь тред, то этот пост точно.

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