Emacs@Habrahabr: Linux для всех / Небольшой лайфхак с редактированием буфера обмена

Я часто сталкиваюсь с такой ситуацией: пишу себе спокойно текст в чем-то (скажем, письмо в веб-интерфейсе гмейла), и вдруг, в какой-то момент возникает необходимость что-то переделать… и случается раздражение. Случается оно от того что редактирование в браузере (да и много где еще) не предполагает некоторых привычных для программиста удобств, вроде автоматической замены, регулярных выражений и макросов. При этом, вроде бы и не сложно скопировать текст в буфер и отредактировать его в правильном редакторе (Vim, Emacs, ...), но очень уж не хочется отрываться от контекста и совершать какие-то телодвижения, отвлекающие от текущей задачи… И вот, я уже расставляю отступы (нумерую список, заменяю слово, ...) вручную — результат достигнут, да и времени потрачено совсем не много, но осадочек остался…

Знакомая ситуация? Если ответ «да», в вашей операционной системе работает bash и ваша первая ассоциация к слову «редактор» это не «Microsoft Office» значит нам есть что обсудить под катом :)

-1:-- Linux для всех / Небольшой лайфхак с редактированием буфера обмена (Post asmolianinov)--L0--C0--January 23, 2012 05:38 PM

kashnikov: Говорим и пишем правильно

Расширение writegood-mode [1] для Emacs помогает аспирантам избежать распространенных стилистических ошибок. Это расширение основано на советах и скриптах от Мэта Майта (Matt Might) [2].

________________________
[1] https://github.com/bnbeckwith/writegood-mode
[2] http://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/
-1:-- Говорим и пишем правильно (Post)--L0--C0--January 19, 2012 03:31 PM

Emacs@Habrahabr: Персональные блоги / «Жизнь» Конвея из каждой буквы, только в Emacs!

Одним рабочим декабрьским вечером



Все мы так или иначе сталкивались с игрой «Жизнь» Конвея. Кто-то писал сам, кто-то смотрел и дивился, кто-то играл…

Под новый год, сидя с коллегой за одним компом и решая какую-то проблемку в конце рабочего дня, мы немного отошли от проблемы и как-то дело свелось к M-x life (мы оба пользуемся Emacs), &emdash кто не знаком с Emacs — это команда запуска игрушки «Жизнь» в Emacs.

Стандартное неинтересно


Вроде бы о чем тут говорить. Да вот только реализация в Emacs имеет около 10 «вшитых» начальных позиции, которые мягко говоря неинтересны.

Вы знаете, что:
  • Конвей первоначально предположил, что никакая начальная комбинация не может привести к неограниченному размножению и предложил премию в 50 долларов тому, кто докажет или опровергнет эту гипотезу.
    цитата из Wikipedia;
  • К настоящему времени более-менее сложилась следующая классификация фигур:
    цитата из Wikipedia;
  • Emacs — это расширяемый текстовый редактор.


-1:-- Персональные блоги / «Жизнь» Конвея из каждой буквы, только в Emacs! (Post aleksandrvin)--L0--C0--January 19, 2012 02:00 PM

Emacs LJ community: Ввод командных комбинаций без переключения русской раскладки

В новой версии Емакс 24.1 при включенной системной русской раскладке можно вводить командные комбинации с любыми символами (с модификаторами и даже без), которые привязаны к командам, кроме `self-insert-command'. При этом, русские буквы автоматически транслируются в соответствующие английские. Например, последовательность `C-ч и' транслируется в `C-x b' и запускает `switch-to-buffer'. Всё это получается при помощи такой функции:

(defun reverse-input-method (input-method)
  "Build the reverse mapping of single letters from INPUT-METHOD."
  (interactive
   (list (read-input-method-name "Use input method (default current): ")))
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (let ((current current-input-method)
        (modifiers '(nil (control) (meta) (control meta))))
    (when input-method
      (activate-input-method input-method))
    (when (and current-input-method quail-keyboard-layout)
      (dolist (map (cdr (quail-map)))
        (let* ((to (car map))
               (from (quail-get-translation
                      (cadr map) (char-to-string to) 1)))
          (when (and (characterp from) (characterp to))
            (dolist (mod modifiers)
              (define-key (if mod input-decode-map local-function-key-map)
                (vector (append mod (list from)))
                (vector (append mod (list to)))))))))
    (when input-method
      (activate-input-method current))))

Команда запускается, например, так: `M-x reverse-input-method RET cyrillic-jcuken RET'

NB: Чтобы команды, запрашивающие пароль, не выполняли бы эту перекодировку при чтении пароля, нужно обнулять значение `local-function-key-map' во время выполнения команды, например:

(defadvice read-passwd (around my-read-passwd act)
  (let ((local-function-key-map nil))
    ad-do-it))
-1:-- Ввод командных комбинаций без переключения русской раскладки (Post juri@jurta (juri@jurta.org))--L0--C0--January 12, 2012 03:28 AM

Emacs LJ community: Fwd: Cue a key

Наиболее элегантное из виденных мной решений "Проблемы переключения раскладки" предложено Никитой Даниловым:

; Map Modifier-CyrillicLetter to the underlying Modifier-LatinLetter, so that
; control sequences can be used when keyboard mapping is changed outside of
; Emacs.
;
; For this to work correctly, .emacs must be encoded in the default coding
; system.
;
(mapcar*
 (lambda (r e) ; R and E are matching Russian and English keysyms
   ; iterate over modifiers
   (mapc (lambda (mod)
    (define-key input-decode-map
      (vector (list mod r)) (vector (list mod e))))
  '(control meta super hyper))
   ; finally, if Russian key maps nowhere, remap it to the English key without
   ; any modifiers
   (define-key local-function-key-map (vector r) (vector e)))
   "йцукенгшщзхъфывапролджэячсмитьбю"
   "qwertyuiop[]asdfghjkl;'zxcvbnm,.")
-1:-- Fwd: Cue a key (Post Valery V. Vorotyntsev (valery.vv@gmail.com))--L0--C0--December 25, 2011 09:30 AM

Michael Kazarian: python-mode, памятка

cedet из cvs теперь принудительно дергает python.el (он у меня в /usr/share/emacs/23.1/lisp/progmodes), который конфликтует с python-mode.el, который мне нравится больше. Лечится правкой cedet/semantic/wisent/wisent-python.el Находится строчка (require 'python nil t) и комментируется. При желании перекомпилируется.
Нормальная работа восстановлена и глюков пока не замечено.
-1:-- python-mode, памятка (Post Balu (noreply@blogger.com))--L0--C0--December 21, 2011 12:08 PM

Eugene Burmako: емакс, часть 4: ретроспектива

емакс, часть 1: первый взгляд
емакс, часть 2: восторг
емакс, часть 3: windows
емакс, часть 4: ретроспектива

Вдохновленный сегодняшним выступлением @alexott на митапе scala.by, я тоже решил поделиться наблюдениями из своего опыта. Экспы у меня не то чтобы много, но постараюсь быть максимально адекватным. Если я чего-то не догоняю, это не со зла - вы меня поправьте, ладно?

1) Емакс действительно крут. Главные его плюсы, на мой взгляд - неинтрузивность, программируемость и естественная интеграция с консолью. Например, недавно я соорудил наколенную билд-систему, с помощью которой застримлайнил свою работу над абсолютно разнородными проектами в универе. Она прекрасно заинтегрировалась в фар, и не менее замечательно - в емакс. Чтобы из емакса запустить какой-нибудь процесс и вбросить аутпут в буфер, нужны буквально пару телодвижений. Повесить на это все хоткеи и сделать гиперлинки на ошибки - еще немного работы. Пару обтачиваний и вуаля: myke-backend.el. Страшно представить, как что-то похожее сделать в Эклипсе.

2) Практически все можно пилить самому. Это прекрасно и очень вдохновляет (например, одним телодвижением можно посмотреть, на какой именно код забинджен тот или иной ключик), но есть и обратная сторона. Практически все придется допиливать самому. Даже банальную ширину таба нужно настраивать секретным образом (см. отдельную настройку для tab-stop-list), что уж говорить про такие вещи как копипасту, анду или прокрутку (кстати, у меня до сих пор через раз работает выделение мышкой). Это не то что бы уж очень плохо, но надо иметь ввиду, что первые пару недель емакс будет отнимать колоссальное количество времени.

3) Лисп не античеловечный, но и не простой в освоении. Довольно быстро я научился колбасить говнокод (что, наверняка, уже увидели уважаемые гуру емакса, пробежавшись по моему конфигу), но что-либо сложное я предпочитаю писать на чем-нибудь другом. Например, билд-система, упоминавшаяся выше, естественным образом выросла из ад-хок сниппетов на елиспе, но попытки превратить ее в что-то более-менее стройное успехом не увенчались, поэтому я по-быструхе переписал все с нуля на сишарпе. Наверняка, проблемы с удобством стандартной библиотеки и структур данных - всего лишь следствие моего несистемного подхода к изучению елиспа, но что вижу, то и пою. В любом случае, крайне помог бложек Стива Йегги, например, вот этот пост: Emergency Elisp.

4) Емакс - не панацея, что бы не писали в инете (по крайней мере для меня). Для разработки компилятора Скалы я юзаю Эклипс (контрол + клик на дефинишен и дебаг слишком важны, чтобы от них отказываться), для коммитов и истории я юзаю TortoiseGit (magit работает через раз + для чего-то нетривиального в VCS тупо нужен гуй). Вначале я думал, что это я такой нехардкорный, а потом увидел, что все в команде делают то же самое (только гуй к гиту другой, ибо никто не сидит на венде). Даже Мартин, который юзает емакс уже лет двадцать.

5) И все же я очень доволен емаксом. За денек я интегрировал в него греп по проектам с персональными свистелками, после чего выкинул поиск эклипса. Для сложных сессий репла Скалы я тоже юзаю емакс (идея консоли в буфере просто прелестна!). Да и домашки по алгоритмам в латеке я тоже фигачу в емаксе, ибо там подсветка синтаксиса и вручную прикрученный side-by-side превью.

Вот так и живем. Браузинг кода и дебаг в эклипсе, компиляция в фаре, текстовый поиск и реплы в емаксе. Use the right tools for the right job. Искренне ваш, кэп.
-1:-- емакс, часть 4: ретроспектива (Post)--L0--C0--December 10, 2011 02:32 PM

Eugene Burmako: емакс больше не тормозит

Вылечилось следующим:
1) Емакс запускаю с ключами "-xrm Emacs.FontBackend:gdi" (гигантский эффект).
2) Выкинул нафиг ECB и CEDET (впечатляющий эффект).
3) Отключил linum-mode (заметный эффект).
4) Подкрутил разные другие штучки, но не уверен, что они хоть что-то дают.

upd. 10.12.2011. Крайне помогло заклинание (setq redisplay-dont-pause t). Наконец-то прокрутка больших буферов с раскрашенным текстом перестала тормозить.
-1:-- емакс больше не тормозит (Post)--L0--C0--December 10, 2011 02:10 PM

Andy Legkiy: Организационная пичалька

Org-mode очень хороший аутлайнер. Не являясь ярым сторонником емакса, я люблю этот mode всем сердцем.

У меня тут и журнал для личного пользования, и домашние дела, и рабочие дела. Рабочие дела, на одной работе, были и в виде каких-то крупных кусков, разбитых на мелкие подзадачи, и в виде справочной информации, и как неоформленные мысли и черновые наброски. Описание проб, итд. Так как рабочий процесс там полностью устаканен, это почти не создавало проблем. Для второй работы тоже пытался его использовать, но не так успешно.

А в чем же проблема? Да дело в том, что на каждой работе есть свои вики, трекеры, итд. Необходимость использовать разных средства организации дел ведет к дублированию, устареванию одной из копий (или в org-mode, или на рабочих ресурсах).

Если какая-то область новая, и какую-то задачу через время уже видишь под совсем новым углом, то на подгонку своих мыслей, примечаний, добавление новой информации, только в одном "органайзере", уходит определенное кол-во усилий, на которое я c радостью готов пойти. Но, кроме этого, больше усилий уходит на синхронизацию разных источников, ведь синхронизация происходит руками. А вот тут и начинается главная проблема. Отказываться от org-mode не хочется, потому что он очень удобный, быстрый, очень гибкий, и не зависит от наличия интернета. Но и дублировать информацию, перенося из одного формата в другой, разбивая по разным сущностям (страницы wiki, milestone, tickets) -- довольно таки трудно и неприятно.

Попал в ситуация, когда на рабочую систему забиваешь, а в org-mode сильно много не плодишь, а пишешь или справочную информацию, или как-то аморфно, просто забивая на конкретизацию. Ведь знаешь, что когда-то все прийдется переносить руками в другую систему, с другой структурой и организацией поддокументов, и будет большое количества мартышкиного труда.

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

А что делать? Да пока выбор не большой. Коллегам нужно не только видеть план работ и ход его выполнения, перестройки, уточнения, но еще в нем участвовать.

1. Можно было бы воспользоаться имеющимся html-экспортом, на каком-нибудь рабочем ресурсе, и это было бы неплохим выходом, на начальных этапах. Но для перечисленных выше потребностей коллег оно совсем не расчитанно. Так что, увы, отпадает.
2. Полностью валить на рабочую систему, что и будет сделано, в итоге.
3. Использовать org-mode как буфер для небольших кусков, возможно приделав некоторое подобие простого экспорта. Но это костыль и полумера. После экспорта вся гибкость средств оrg-mode полностью теряется. Кто пользовался, тот знает о чем я. Но без средств автоматического переноса это может привести к очередному накоплению и завалу. Но как добавить дела в кучу, чтобы потом рассортировать, вполне может подойти.

Вот такой небольшой фейл использования для работы замечательного средства организации дел. А жаль.

UPD: Если у кого есть мысли или опыт сопряжения org-mode с популярными средствами управления проектами, буду рад услышать.
-1:-- Организационная пичалька (Post Easy (noreply@blogger.com))--L0--C0--October 27, 2011 10:04 PM

kashnikov: Цветовая схема для текстового редактора.

Для Emacs я долгое время пользовался какой-то хитрой тёмной схемой составленной из кучи других схем найденных в интернетах. Некоторое время назад перешёл на схему от уважаемого мэтра емаксоведения [info]alexott. Его схема рулит.

Для Vim это torte в консоли. Но в графической версии torte, что называется "бьёт по глазам". Подумываю о переводе схемы [info]alexott для Vim.

Какой цветовой схемой пользуетесь вы?
-1:-- Цветовая схема для текстового редактора. (Post)--L0--C0--August 22, 2011 06:41 PM

Ruslan Kosolapov: grundik @ 2011-07-04T11:16:00

"Попробуйте, к примеру, дотянитесь одной рукой одновременно до f и p. Клавиши находятся на большом расстоянии друг от друга, и точное позиционирование курсора с использованием стандартных комбинаций – жуткая морока."

Блять!!1111 ЗАЧЕМ дотягиваться одной рукой до кнопок, которые надо нажимать разными руками?!


И вот так у них всё - берут лопату, и пытаются одной рукой ей пользоваться. Зачем блять?! Лопате надо две руки и две ноги, и это фича, а не баг.
-1:-- grundik @ 2011-07-04T11:16:00 (Post)--L0--C0--July 04, 2011 04:16 AM

Andy Legkiy: Совсем не вовремя заглючил аутлайнер

Нашел в org-mode 7.5 ошибку, которая слегка попортила нервы.
В agenda day/week view, при определенных условиях, не отображаются хидлайны, помеченные как scheduled, если используется настройка "org-enforce-todo-dependencies".

Воспроизводится легко. Новый файлик, без каких-либо свойств, всего с тремя хидлайнами, у второго хидлайна есть подзадача, отмеченая состоянием TODO.
* TODO task 1
SCHEDULED: <2011-06-16 Thu>
* task 2
SCHEDULED: <2011-06-16 Thu>
** TODO subtask 2-1
* task 3
SCHEDULED: <2011-06-16 Thu>
В day-agenda не отображается "task 2" (второй хидлайн верхнего уровня).
  NOTES:      Scheduled:  TODO task 1
NOTES: Scheduled: task 3
Не отображается, но если попробовать выделить и скопировать текст из Agenda (хотя бы строку с "task 1"), "task 2" в буфере будет присутствовать.

Чтобы второй пункт отобразился, нужно:
- Убрать TODO с "task 1",
- Или убрать TODO c "subtask 2-1",
- Или убрать из конфига "(org-enforce-todo-dependencies t)".
-1:-- Совсем не вовремя заглючил аутлайнер (Post Easy (noreply@blogger.com))--L0--C0--June 17, 2011 11:45 AM

Alex Ott: Добавления в haskell-mode

На новогодних каникулах сделал давно запланированное добавление к haskell-mode - добавил поддержку для hlint (команда hs-lint) и haskell style scanner (команда hs-scan). Как и в предыдущей реализации, hs-lint поддерживает замену кода на предлагаемый вариант.
Патчи отправлены мейнтейнеру, но пока они не закоммиченны в основной репозиторий, эти изменения доступны в моем форке. Замечания и пожелания приветствуются...
-1:-- Добавления в haskell-mode (Post Alex Ott (noreply@blogger.com))--L0--C0--February 02, 2011 07:44 AM

swizard: Emacs на nokia n900 tutorial

Сабжу весьма благоприятствуют два факта:
  1. maemo является полноценным линуксом
  2. n900 оснащается хардварной клавиатурой-слайдером

Разумеется, самое главное во втором пункте -- это наличие железной кнопки Ctrl =)

Итак, воспользуемся следующим туториалом одного нашего японского друга: link.

Продублирую его (на всякий случай) на русском.

  1. Скачиваем пакет на устройство отсюда или с моего зеркала.
  2. Под рутом выполняем dpkg -i emacs_23.1.1_armel.deb.
  3. Обновляем apt и доставляем недостающие пакеты: apt-get -f install

Далее, нам предстоит решить такую проблему: на клавиатуре телефона отсутствуют очень полезные для емакса кнопки Meta (Esc) и Tab. Наш верный японский соратник предлагает такую клавиатурную карту для English US: link или mirror.

На стандартном английском макете Meta в этой карте работает через Fn+left, а Tab через Fn+right. Лично для меня табуляция вышла очень удачной (не знаю даже, почему), а мета -- ну так, сойдет.

Инсталлируем карту так:

cp /usr/share/X11/xkb/symbols/nokia_vndr/rx-51 /usr/share/X11/xkb/symbols/nokia_vndr/rx-51.orig
cp rx-51.qole /usr/share/X11/xkb/symbols/nokia_nvdr/rx-51
setxkbmap

Далее, надо решить небольшую проблему с емаксовым фуллскрином. Дело в том, что по-дефолту статусная строка внизу уезжает за пределы экрана.

Японец предлагает поставить специальный мод maxframe.el (здесь mirror). С ним чето мутновато: сначала он у меня не сработал, а после порта моих .emacs.d и .emacs с десктопа, неожиданно заработал. Ладно, пусть его.

В .emacs maxframe.el активируется так:
(add-to-list 'load-path "/path/to/maxframe")
(require 'maxframe)
(add-hook 'window-setup-hook 'maximize-frame t)
(maximize-frame)

Теоретически, можно тащить настройки и все остальное с десктопа и использовать.

Но для моих нужд (у меня там схемка guile) мне потребовалось кое-что подпилить напильником.

Во-первых, на десктопе я олдфажно использую ctrl+ins / shift+ins для копипаста. На n900 таких кнопок нет, поэтому пришлось перевесить:

(global-set-key (kbd "C-c c") 'clipboard-kill-ring-save)
(global-set-key (kbd "C-c v") 'clipboard-yank)

Ничего, нормально.

Во-вторых, не вызывается экранная клавиатура и спец-клавиатура для символов (по Fn+Ctrl). По-большому счету, мне это нафиг не надо, поэтому я даже не заморачивался. Но пары символов критически не хватает: это угловые скобки < и >. Пришлось их вешать на емаксовые комбинации:

(defun insert-less-symbol ()
  (interactive)
  (insert "<"))

(defun insert-more-symbol ()
  (interactive)
  (insert ">"))

(global-set-key (kbd "C-c C-,") 'insert-less-symbol)
(global-set-key (kbd "C-c C-.") 'insert-more-symbol)


Ну и пока вроде все, IDE для scheme у меня построился отличный. Все остальное, как на десктопе: guile, quack.el и т.д.

Иногда ловлю себя на мысли, что не хватает кнопок home, end и page up/down, но пока еще нужда лень не победила.
-1:-- Emacs на nokia n900 tutorial (Post)--L0--C0--January 18, 2011 05:58 PM

Oleksandr Gavenko: Определение рабочего окружения и возможностей платформы в Emacs

Для правильной работы файла настроек .emacs на различных платформах и различных версиях Emacs требуется проверять множество условий.

Я собрал несколько из них.

Итак посмотрите на указанные переменные:

emacs-major-version emacs-minor-version window-system - 'nil' if in terminal, 'w32' if native Windows build, 'x' if under X Window window-system-version - for windows only operating-system-release - release of the operating system Emacs is running on system-configuration - like configuration triplet: cpu-manufacturer-os system-name - host name of the machine you are running on system-time-locale system-type - indicating the type of operating system you are using: 'gnu' (GNU Hurd), 'gnu/linux', 'gnu/kfreebsd' (FreeBSD), 'darwin' (GNU-Darwin, Mac OS X), 'ms-dos', 'windows-nt', 'cygwin' system-uses-terminfo window-size-fixed
а также указанные функции:
(fboundp ...) - return t if SYMBOL's function definition is not void (featurep ...) - returns t if FEATURE is present in this Emacs (display-graphic-p) - return non-nil if DISPLAY is a graphic display; graphical displays are those which are capable of displaying several frames and several different fonts at once (display-multi-font-p) - same as 'display-graphic-p' (display-multi-frame-p) - same as 'display-graphic-p' (display-color-p) - return t if DISPLAY supports color (display-images-p) - return non-nil if DISPLAY can display images (display-grayscale-p) - return non-nil if frames on DISPLAY can display shades of gray (display-mouse-p) - return non-nil if DISPLAY has a mouse available (display-popup-menus-p) - return non-nil if popup menus are supported on DISPLAY (display-selections-p) - return non-nil if DISPLAY supports selections
Виполняйте проверки наподобии того как делается ниже:
(when window-system ...) (when (eq window-system 'x) ...) (when (>= emacs-major-version 22) ...) (when (fboundp '...) ...) (when (featurep '...) ...)
-1:-- Определение рабочего окружения и возможностей платформы в Emacs (Post gavenkoa (noreply@blogger.com))--L0--C0--December 21, 2010 07:57 PM

Alex Ott: Переехал на el-get

Я достаточно долгое время таскал с собой все используемые пакеты для Емакса, вместе с конфигурационными файлами - это позволяло мне иметь везде одинаковую рабочую среду. Большая часть используемых пакетов бралась прямо из репозиториев и регулярно обновлялась с помощью набор шельных скриптов.
Но некоторое время назад я наткнулся на проект el-get, который берет на себя вопросы скачивания и обновления пакетов, и делает это прямо из емакса. Основное удобство заключается в том, что в составе el-get имеется большое количество готовых конфигурационных файлов (рецептов) для самых разных пакетов, и вы можете сразу использовать их в своей конфигурации.
Использование el-get очень просто - вы определяет список пакетов, которые вы хотите использовать, а затем вызываете функцию (el-get), которая выкачивает пакет, компилирует его в соответствии с инструкциями, и загружает нужные части, так что пакет становится доступным для использования.  Подробности использования можно найти в описании проекта.
Неделю назад я наконец-то собрался с духом, и перевел свою рабочую конфигурацию на el-get (я пока использую свой форк проекта, хотя многие из рецептов уже внесены в основной проект), пришлось правда добавить рецептов которых еще не было в репозитории, и немного повозиться со сборкой на Mac OS X. Но в остальном - все работает нормально.
-1:-- Переехал на el-get (Post Alex Ott (noreply@blogger.com))--L0--C0--December 21, 2010 10:57 AM

Voins: Untitled

Обновив coreutils до версии 8.6, обнаружил случайно, что tramp больше не хочет открывать файлы через sudo. То есть это я потом уже понял, что причиной такого поведения стало обновление coreutils, а сначала это было довольно неприятно. Пришлось отвлечься от того, чем занимался, и посвятить вечер разбирательствам с поломкой. Как выяснилось в процессе, кто-то зачем-то поменял формат вывода в утилите stat. Наблюдается это вот так, например:

<new>$ stat . -c "%Y"
1287747411.000000000

Тогда как раньше было:

<old>$ stat . -c "%Y"
1287747411

Tramp пользуется stat'ом для получения атрибутов файлов. Если находит. Можно было, конечно, обмануть его, и заставить думать что stat, который он нашёл, несовместим  с тем, что он привык считать stat'ом, но это не наш путь. Наш путь привёл к появлению маленького автомата, определяющего в каком формате нам были выданы циферки, и выдающего правильные и ожидаемые циферки на выходе. Делать полноценный патч мне было лениво. Так что есть только это.

-1:-- Untitled (Post)--L0--C0--October 22, 2010 01:41 PM

Evgeny Morozov: Ubuntu 10.10, vim, pycharm

Обновил систему до Ubuntu 10.10. Может быть из-за обновления особых изменений не заметил. Нравится новый шрифт. Все остальное выглядит и работает почти так же, как и в 10.04.

Кстати, уже где-то две недели как я переехал на vim. Руки стали уставать заметно меньше. Многие вещи неудобны (не нравится cut/copy требующий трех нажатий — "+x/y, еще раздражает то, что портится буфер, если после этого удалить что-нибудь), многое пока вообще сделать еще не могу. Но обратно возвращаться не хочется.

Пробовал установить PyCharm (такая урезанная IntelliJ Idea), плюнул и бросил через час. Для внешнего вида есть меткое словосочетание на английском: «Blast from the past». Как будто вернулся на 15 лет назад. Даже tcl/tk современнее выглядит. Впрочем, это проблема всех GUI-приложений на Java. Неописуемо тормозит (на Phenom II x4 3.4 Ghz и 8 Gb памяти). Хотя в консоли оно честно пишет, что будет тормозить на OpenJDK. Но у меня другого и не было, это то, что в Ubuntu по умолчанию стоит. Автодополнение не впечатлило. В общем, поищу пока аналог yasnippet для vim.
-1:-- Ubuntu 10.10, vim, pycharm (Post)--L0--C0--October 19, 2010 06:01 PM

grep_z: grep_z @ 2010-10-15T22:12:00

В очередной раз заюзал newsticker в emacs. Читаю rss'ки я не особо много, да и отсилы раз в 2-3е суток. Раньше newsticker был неюзабилен, сейчас вроде работает. Настройки простые, через wget:



(autoload 'w3m-region "w3m"
  "Render region in current buffer and replace with result." t)

(autoload 'newsticker-show-news "newsticker" "Emacs Newsticker" t)

(custom-set-variables
 '(newsticker-retrieval-interval -1)
 '(newsticker-html-renderer 'w3m-region)
 '(newsticker-frontend 'newsticker-treeview)
 '(newsticker-keep-obsolete-items t)
 '(newsticker-automatically-mark-items-as-old nil) 
 '(newsticker-automatically-mark-visited-items-as-old t)
 '(newsticker-retrieval-method 'extern)
 '(newsticker-cache-filename "~/emacs/tmp/newsticker/newsticker.cache")
 '(newsticker-dir "~/emacs/tmp/newsticker/")
 '(newsticker-url-list
   '(("Plane Emacs"
      "http://planet.emacsen.org/atom.xml" nil nil nil)
     ("Kernel Trap"
      "http://kerneltrap.org/node/feed" nil nil nil)
     ("Reddit - Technology"
      "http://www.reddit.com/r/technology/.rss" nil nil nil)
     ("Reddit - Science"
      "http://www.reddit.com/r/science/.rss" nil nil nil)
     ("Reddit - Worldnews"
      "http://www.reddit.com/r/worldnews/.rss" nil nil nil)
     ("Reddit - Math"
      "http://www.reddit.com/r/math/.rss" nil nil nil)
     ("Reddit - Programming"
      "http://www.reddit.com/r/programming/.rss" nil nil nil)
     ("OSNews"
      "http://www.osnews.com/files/recent.xml" nil nil nil))))

(provide 'rc-newsticker)
;;; rc-newsticker.el ends here



-1:-- grep_z @ 2010-10-15T22:12:00 (Post)--L0--C0--October 14, 2010 01:18 PM

grep_z: email indexer - notmuch

Чисто в тексте выглядит интересно: http://notmuchmail.org/
Оптимизация, все дела, интеграция с емаксом.
Обязательно попробую, хотя мне пока и wanderlust за глаза хватает, почты от силы на 4k единиц в месяц, плюс архивирование большей части.
-1:-- email indexer - notmuch (Post)--L0--C0--October 03, 2010 04:00 AM

Ruslan Kosolapov: fun: weather widget for emacs :)



Просто прикольно :)

PS: по клике на картинку - не только про погоду, но и про google maps в emacs-е.
-1:-- fun: weather widget for emacs :) (Post)--L0--C0--September 09, 2010 02:58 AM

Ilya Zonov: Отключение поиска по ctrl-e на Nokia N810

Тоже из старых заметок. На N810 интенсивно пользуюсь emacs из консоли. Но при нажатии C-e в таком случае появляется окно поиска maemo. Это естественно не удобно. Для отключения надо сделать следующее:

$ gconftool -s /apps/osso/keybindings/global/osso-global-search --type=string ''
-1:-- Отключение поиска по ctrl-e на Nokia N810 (Post puzan (noreply@blogger.com))--L0--C0--September 02, 2010 01:36 PM

Ermine: Как уныло быть веб-девелопером

Пару дней потратила на то, чтобы приручить firebug. В поисках решения проблем с неприручаемостью firebug научилась более изящно перекрашивать сам файрфокс, отловила пару мелких бажков в своих "учебных" страничках с учебным же CSS, и решила пока забыть про firebug как про страшный сон. Не смогла найти, откуда растут ноги у цвета фона, например, в Console - он мерзкого белого цвета.
Досталось и емаксу - в режиме редактирования CSS на файле userContent.css (перекрашивает хтмл в файрфоксе) емакс стабильно зависает.
Кароче, всё плохо!
-1:-- Как уныло быть веб-девелопером (Post)--L0--C0--August 17, 2010 02:21 PM

Привинтила к емаксу auto-complete и срязу потеряла курсор. Потратила полчаса на перекраску визуальных элементов автокомплита. Сакс.
-1:--  (Post)--L0--C0--August 14, 2010 08:30 PM

13-49: Емакс

14:18 17.05.2010
Емакс
Решил не связываться с 23.2 из rawhide (у меня f13), скачал тарболл и собрал руками. Теперь запускается вот так :)


$ ~/src/emacs/emacs/src/emacs

В третьем тысячелетии на современном железе отрисовка в Емаксе тормозит =( Но это виноват драйвер интеловской видюхи. Опять посещают крамольные мысли о source-based дистре.

read more at Не люблю проприетарщину/покажи свои сорцы

rss2lj
-1:-- Емакс (Post)--L0--C0--May 17, 2010 12:48 PM

SXEmacsen: Гестуры в xwem

Совсем забыл про классную фукнциональность в xwem — гестуры aka strokes. Это когда рисуешь что-нибудь на экране, а у тебя выполняется какая-нибудь команда. В родном (S)XEmacs есть поддержка, но она конечно далека от идела с точки зрения пользовательского интерфейса, зато дало нужную функциональность для реализации гестур в xwem.

Вот список гестур, которыми я пользуюсь:

global strokes

Глобальные гестуры

xemacs strokes

Гестуры локальные для xemacs фреймов

gv strokes

Гестуры локальные для ghostview приложений

opera strokes

Гестуры локальные для бравзера opera

firefox strokes

Гестуры локальные для бравзера firefox

Скачать эти гестуры можно тут.

Как видно из скринов, гестуры в xwem достаточно прокаченные: они могут запускать команды, произвольные e-lisp выражения, эмулировать нажатия кнопок, а также вводить в текущее приложение всякие строки (на скринах нет такого варианта гестуры).

-1:-- Гестуры в xwem (Post lg (noreply@blogger.com))--L0--C0--April 22, 2010 07:51 PM

SXEmacsen: SXEmacs живёт

После некоторого затишья проект SXEmacs продолжил развитие. Появились merge-requestы и что-то всё таки делается. Залили мои патчи к FFI, которые реализуют новый тип safe-string в помощь дядьке, который пишет FFI к libdbus. Так же в Wand-mode я добавил поддержку модного liquid scale, кто не знает, то это выглядит вот так

Кстати, я наконец-то придумал как можно использовать wand-button в стандартном customize!

-1:-- SXEmacs живёт (Post lg (noreply@blogger.com))--L0--C0--April 02, 2010 11:19 PM

Oleksandr Gavenko: Переход на GNU Emacs 23.1 в Windows.

Переход с версий 22.x на недавно вышедший релиз GNU Emacs 23.1 прошел гладко за исколючением двух моментов.

Первое с чем пришлось столкнутся это сообщение об ошибке при выполнении функции (server-start):

error: The directory e:/home/.emacs.d/server is unsafe
Проблема расположена в функции server-ensure-safe-dir:
(unless (and (eq t (car attrs)) (eql (nth 2 attrs) (user-uid)) (or (eq system-type 'windows-nt) (zerop (logand ?\077 (file-modes dir))))) (error "The directory %s is unsafe" dir))))
На stackoverflow.com описано решение проблемы. Cледует удалить выделенный участок кода и обновить байткод (Emacs сначала ищет .elc файла и только затем .el, редактируем файл emacs-23.1/lisp/server.el, C-x byte-compile-file <Down> <Ret>).

Вторая проблема состояла в том что функция codepage-setup устарела и ее определение исключили из дистрибутива. Теперь нет необходимости предварительно перед использованием кодовой страницы IBM cpXXX ее создавать! Для совместимости со старыми версиями Emacs воспользуйтесь следующим кодом:

(when (<= emacs-major-version 22) (codepage-setup 866) (codepage-setup 1251) )

Новость о релизе GNU Emacs 23.1: groups.google.com

Update: 2010-03-17.

2009-09-19 был исправлен баг #4197 касающийся server-ensure-safe-dir. Из ChangeLog:

This fixes bug#4197 (merged to bug#865, though not identical). * server.el (server-auth-dir): Add docstring note about FAT32. (server-ensure-safe-dir): Accept FAT32 directories as "safe", but warn against using them.
Также я нашел другой способ обойти эту проблему:
(require 'server) (when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32)) (defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error directory ~/.emacs.d/server is unsafe on windows. (server-start)
-1:-- Переход на GNU Emacs 23.1 в Windows. (Post gavenkoa (noreply@blogger.com))--L0--C0--March 17, 2010 09:25 PM

13-49: Emacs is so addictive

Чем восхитительно плох Емакс - это подсаживание на иглу всё больше и больше. С удивлением недавно обнаружил, что при попытке написать коммит мессейдж на удалённой машине выскочил vim вместо привычного Емакса, и пальцы жмут несуществующие емаксовские комбинации. "Это ж вим! Тут другие кнопки жать надо!" - подумал я, и начал опять жать емаксовские распальцовки...

Без везде доступного словаря и спеллчекера вообще хз, как с буржуями общаться...
-1:-- Emacs is so addictive (Post)--L0--C0--November 05, 2009 09:45 AM

Kostafey: Компоновка CLASSPATH с помощью emacs и muCommander

Вообще, CLASSPATH имеет по сути отношение к настоящей заметке как французское полусладкое к физике жидкости, но идея возникла именно в тот момент когда я в очередной раз компоновал CLASSPATH. На самом же деле объединением строк случается пользоваться не только и столько для этого. CLASSPATH - штука капризная. Бывает не любит пробелы или русские буквы в путях. А бывает этот фокус работает "на ура". Конечно, традиционно стараешься этого избежать. Тем не менее, иногда необходимо сформировать строку, в которой должна быть записана "пачка", "jar-ников". Иногда, этот процесс приходится повторять... Иногда и не раз...
Хочется этот процесс автоматизировать. Искать специализированные решения - несколько дико.
В качестве файлового менеджера я использую muCommander. Он реализует минимально необходимый набор функций файлового менеджера, не пытаясь стать системой по управлению ОС (аля TotalCommander), но и не столь аскетичен как dired (хотя, возможно, и менее гибок). Кроме того, cross-platform (java), распространяется под GPL. Настройка muCommander для того, чтобы emacs стал редактором по умолчанию, выглядит следующим образом:
В ~\.mucommander\preferences.xml указывается
<editor>
<use_custom>true</use_custom>
<custom_command>emacsclientw.exe -n &quot;$f&quot;</custom_command>
</editor>

Возвращаемся к CLASSPATH. Находясь в директории библиотеки, например C:\JavaLib\axis\ нажимаем (ключи я описал в стиле emacs, но все это, конечно, выполняется в muCommander):
C-a
M-S-c
Это приведет к тому, что пути к файлам будут скопированы в буфер обмена. Переходим в некоторый буфер emacs, например,temp. Вставляем содержимое буфера обмена (C-v или C-y в зависимости от настроек). Его содержимое принимает следующий вид, например:
C:\JavaLib\axis\axis-ant.jar
C:\JavaLib\axis\axis.jar
C:\JavaLib\axis\commons-discovery-0.2.jar
C:\JavaLib\axis\commons-logging-1.0.4.jar
C:\JavaLib\axis\jaxrpc.jar
C:\JavaLib\axis\log4j-1.2.8.jar
C:\JavaLib\axis\saaj.jar
C:\JavaLib\axis\wsdl4j-1.5.1.jar

Подобным образом дополняем список из библиотек других директорий.
Ниже предлагается ряд функций. Может, это и не очень существенная разработка :), но для меня частота их использования конкурирует разьве только что с к командами движения курсора.
;;=============================================================================
;; Join lines
;;=============================================================================
(defun circle-processing (arg function)
"Circle call 'function' 'arg' times, default - once"
(interactive)
(progn
(if arg
(setq times arg)
(setq times 1))
(let (counter)
(dotimes (counter times)
(apply function nil)))))

(defun join-next-line-space ()
"Joins next line with current with a space between them"
(interactive)
(progn
(end-of-line)
(next-line)
(join-line)))

(defun join-next-line ()
"Joins next line with current without space between them"
(interactive)
(progn
(join-next-line-space)
(delete-char 1)))

(defun join-next-line-semicolon ()
"Joins next line with current with semicolon between them"
(interactive)
(progn
(join-next-line)
(insert ";")))

(defun join-next-line-space-n (&optional arg)
"Joins number of next lines with current with a space between them"
(interactive "P")
(circle-processing arg 'join-next-line-space))
(global-set-key "\C-j" 'join-next-line-space-n)

(defun join-next-line-n (&optional arg)
"Joins number of next lines with current without space between them"
(interactive "P")
(circle-processing arg 'join-next-line))
(global-set-key "\C-cj" 'join-next-line-n)

(defun join-next-line-semicolon-n (&optional arg)
"Joins number of next lines with current with semicolon between them"
(interactive "P")
(circle-processing arg 'join-next-line-semicolon))
(global-set-key "\C-c\C-j" 'join-next-line-semicolon-n)

Так, точка в начале буфера.
M-<число строк> C-c C-j (join-next-line-semicolon-n).
CLASSPATH готов.
Обратная задача - преобразование из строки в список удобный для чтения. Вставив строку CLASSPATH в буфер набираем:
M-x replace-string ; <RET> ; C-q <RET> <RET>
К сожалению, перевод строки и/или возврат каретки будет представлен в буфере символом ^M вместо собственно начала новой строки. Но скопировав этот фрагмент из emacs, текст представляется в том виде, в котором изначально и ожидалось.

P.S. При поддержке emacs@conference.jabber.ru :)
P.P.S. Комментарии приветствуются, прежде всего, по стилю написания на elisp (можно ли что-то упростить, унифицировать, etc).
-1:-- Компоновка CLASSPATH с помощью emacs и muCommander (Post Kostafey (noreply@blogger.com))--L0--C0--October 07, 2009 09:00 AM