← All posts tagged Emacs

dk
Emacs Пока я был в танке, народ сделал нормальную solarized тему для emacs: github.com Она гораздо лучше проработана чем та, что появилась первой в официальном solarized репозитории (https://github.com/altercation/solarized/tree/master/emacs-colors-solarized)
dk
Emacs programming Обнаружил, что люди, которые пользуются gnu global, почему-то игнорируют тот факт, что gtag'и умеют делать инкрементальный update. Логично же использовать этот функционал. В случае emacs'а можно повесить update gtag'ов на after-save-hook.
Что-то вроде этого: gist.github.com
dk
Emacs programming xmonad Набросал на коленке функциональность для popup фрейма, отображающего специальные буферы типа help, compilation, grep, etc в мелком фрейме внизу экрана: gist.github.com
Расположение фрейма и его размер рулятся Xmonad'овским лейаутом:

perWS = onWorkspace "logs" (withTitles $ lTerm) $
...
onWorkspace "emacs" (noTitles $ lEmacs) $
...
lEmacs = StackTile 1 (3/100) (2/3)
...
myManageHook = composeAll [ className =? "Emacs" --> doF(W.shift "emacs") <+> doF(W.swapDown)
dk
Emacs programming compilers Блин, жаль, что идея incremental compiler server'а для clang'а заглохла :( clang-developers.42468.n3.nabble.com
Пожалуй, отсутствие incremental compilation — это единственная фича, которая останавливает многих разработчиков забыть про костыльный cedet semantic и использовать нормальный clang'овский AST.
dk
Emacs programming Нормальные люди приходят в ужас, когда ты им говоришь, что твой конфиг текстового редактора хранится в git репозитории около 2х лет, а до этого хранился в svn репозитории год, а до этого 2 года он хранился в cvs'е. Выражение их лиц надо видеть.
dk
Emacs programming (defalias 'read-directory-name 'ido-read-directory-name)
и жизнь стала проще. Не понимаю, почему такой простой не впендюрен в соответвующий раздел emacswiki, нужно это исправить
dk
Emacs Продолжая тему #1196273 (bottom window для compilatio и completion буферов). Нашёл прелестный модуль: github.com
Он вносит некоторый порядок в emacs'овский хаос с соотношением temporary buffer'ов и окон.
dk
Emacs Eclipse programming Хм, похоже переходить на eclipse я пытался больше раз чем бросить курить. Переход с emacs на eclipse, скажу я вам, требует гораздо больше силы воли и выдержки, чем держаться неделю-две без сигарет.
dk
Emacs Lisp programming 2minutes-hate У emacs'а есть одна очень важная проблема. Нет, это не проблема дизинтегрированности идей, пожеланий, разработок и баттлплана(это кстати проблема всего open-source), это даже не проблема, мягко говоря, не очень эффективной архитектуры emacs'овских окон, и это вовсе не проблема того, что люди годами задрачиваются, чтобы прикрутить к своему emacs'у свой же велосипедный набор костылей и подпорок, который худо-бедно имплементит жалкое подобие на всё то, что уже давным-давно есть в нормальных IDE. На самом деле, это проблема развращённости языком без строгой типизации. Когда в функциях, входящих в public API, не проверяется валидность аргументов, когда понятие оборонительного программирования очень быстро забывается, когда одна глобальная(ну ладно, пусть даже buffer-local) переменная в зависимости от положения звёзд и сезона спаривания хомячков содержит то alist, то string, то ещё какую-нибудь херню, когда делая defadvice ты гадаешь, в скольких модулях заадвайсили тот же кусок кода, а потом хватаешься за голову, когда какой-то динамически подгруженный модуль добавляет адвайс перед твоим адвайсом и портит тебе всю малину.
Да, это охуенная, ниебическая, практически вселенская проблема. Но, чёрт возьми, разве можно не любить этот няшный набор костылей и подпорок, написанный скорее всего под LSD добрейшим бородачом? Знаю, риторический вопрос.
dk
Emacs programming На всякий случай оставлю тут некое предостережение emacs'ерам, чтобы они не тратили N часов на поиски решения описанной ниже проблемы.
Казалось бы такая банальная и простая штука, как создание окошка в самом низу emacs'овского фрейма, которое бы создалось под существующими окошками — неосуществимая задача(хотел заюзать его для compilation и completion буферов). Фактически я хотел сделать примерно то, что делает ECB с помощью кучи сатанинских извращений над фреймами: ecb.sourceforge.net
На данный момент существуют два по сути одинаковых способа решить сию задачу: split-root(http://nschum.de/src/emacs/split-root/) и winsav(http://ourcomments.org/Emacs/DL/elisp/winsav.el). Проблема в том, что оба метода вводят нехреновый баг, посокльку единственный способ создать такое окошко(конечно после того, как split-window-horizontally была вызвана на рутовом окошке) из elisp кода — убить все существующие окошки с помощью (delete-other-windows), создать окно внизу, а после воссоздать удалённую конфигурацию(читай пересоздать дерево окон), используя верхнее окошко в качестве parent'а. Ясное дело, что оверлеи, которые ссылались на старые(уничтоженные) окна будут невалидны. Теоретически для того, чтобы легко и просто решить данную проблему, нужно написать сишную функцию для репарента дерева emacs'овских окон(того, что возвращает (window-tree)) и вывести её в elisp.
Жаль потраченного времени.
dk
Emacs Eclipse programming В очередной раз попытался перепрыгнуть с emacs на eclipse из-за отсутствия в первом нормального code complete и project manager'а. В очередной же раз испытал рвотные позывы от убогости функций редактирования, fuzzy матчинга, управления окнами, да, чёрт возьми, всего того, что я за 6 лет использования emacs я привык считать нормой. Совсем уж было расстроился, но нашёл такого красавчика, как GCCSence cx4a.org
Эта милашка использует gcc для формирования интеллектуального комплита. И как я раньше без неё жил? Факт наличия такого тула вдохнул в меня новую надежду, и я на коленке налабал свой project manager с преферансом и поэтессами на базе EIEIO, сделал нормальное compile window(в ECB стиле) с помощью split-root nschum.de , допилил автоматический апдейт cscope и gnu globals по idle timeout и прикрутил настройку workspace через elscreen emacswiki.org
Всё же можно ещё жить со старичком emacs'ом, ещё как можно.
dk
Linux Emacs Кто там говорил, что emacs — операционная система без ядра? Вот пример запуска emacs поверх голого ядра linux: informatimago.com
Ничего кроме самого ядра и emacs'а в системе нет.
dk
Emacs Нашёл несколько полезных советов от Эрика Людлама по масштабируемости CEDET'а на больших проектах(где semantic может знатно тормозить после нескольких суток работы) stackoverflow.com
dk
Emacs programming existence Раз в полгода в мою дурную голову приходит гаденькая мысль поменять что-нибудь в своих emacs-config'ах. Она влечёт за собой очень неприятные последствия. Это похоже на чтение википедии: начинаешь читать про kd-tree, а заканчиваешь статьями про развитие письменности у древних шумеров. Тоже и с emacs: начинаешь с банальных переопределений биндингов на "более удобные", а заканчиваешь либо новым самописным модулем, либо кучей конфигов сторонних модулей.
Потерял кучу времени на конфигурацию(читай практически впустую), но доволен, как слон. Что ж, ещё полгода можно спокойно работать.
dk
Emacs WTF Emacs как-то по-своему, по-особенному, понимает термин "user-friendly interface":
"You have typed C-x n p, invoking disabled command narrow-to-page.
It is disabled because new users often find it confusing.
Here's the first part of its description:
Make text outside current page invisible.
A numeric arg specifies to move forward or backward by that many pages,
thus showing a page other than the one point was originally in.
Do you want to use this command anyway?

You can now type
y to try it and enable it (no questions if you use it again).
n to cancel--don't try the command, and it remains disabled.
SPC to try the command just this once, but leave it disabled.
! to try it, and enable all disabled commands for this session only."

Пытались сделать как лучше, а получилось как всегда.
dk
Emacs Android Открыл для себя mobileorg для синхронизации org-mode файла с моим андройдом. Из коробки, как и всё emacs-related, не работает, но жить вполне можно(учитывая, что это единственный тул, который может засинкать org с android).