Emacs@Habrahabr: Emacs и Hunspell: нормальная проверка правописания



     Hunspell является наиболее перспективным из имеющихся на сегодняшний день свободных приложений для проверки правописания. Он встроен по умолчанию в такие программы как Firefox и OpenOffice. Словари к нему на сегодняшний день самые большие среди аналогов. Но с Emacs его так просто не подружить.
Читать дальше →
-1:-- Emacs и Hunspell: нормальная проверка правописания (Post PerlPower)--L0--C0--March 07, 2014 06:15 PM

Pavel Vyazovoi: Относительная нумерация строк в Emacs и VIM

Я не стану в очередной раз писать, что многие пользователи Emacs и VIM используют свои редакторы не эффективно, применяя к ним принципы работы с "обычными" редакторами кода типа Sublime Text и Textmate. Скажу только что среди всего прочего, для эффективного использования можно применять цифровые префиксы.

Например, если мне в Emacs надо удалить десять строк подряд: то я могу выжать комбинацию C-1 C-0 C-k. Это значит с зажатым контролом нажать по очереди 10 и k. Таким образом, Emacs повторит удаление строки 10 раз.

Отвлекаясь от темы, скажу что у меня контрол висит на капслоке и на return. Поэтому сложные емаксовые комбинации выжимать очень удобно. С дефолтным расположением контролов я бы использовал vim или один из "вимификаторов" емакса. Как настроить таким образом OS X я тоже напишу. А заодно и обновлю статью про переключение раскладок в Linux под OS X.

Итак, возвращаемся к теме: выжать числовой префикс удобнее, чем выделять эти строки или 10 раз нажимать C-k. Особенно если строк не 10, а скажем 30. Есть конечно и другие способы навигации и редактирования, но числовые префиксы – один из них, не самый худший.

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

В vim относительная нумерация строк появилась, кажется, в версии 7.3. Включается она очень просто:

set number
set relativenumber

А в Emacs у меня есть два варианта. Во-первых, старый кусок кода, который устанавливает две полосы номеров строк: обычную и относительную. Но он гадит в Messages варнингами (но работает):

(eval-after-load "linum"
  '(defun linum-update (buffer)
     "Update line numbers for all windows displaying BUFFER."
     ;; this is only change but couldn't find better way to do it, tried
     ;; linum-before-update-hook but it runs in an excursion so I couldn't get
     ;; current line number
     (setq linum-last-pos (line-number-at-pos))
     (with-current-buffer buffer
       (when linum-mode
         (setq linum-available linum-overlays)
         (setq linum-overlays nil)
         (save-excursion
           (mapc #'linum-update-window
                 (get-buffer-window-list buffer nil 'visible)))
         (mapc #'delete-overlay linum-available)
         (setq linum-available nil)))))

(defun linum-relativenumber-format (line-number)
  (let ((diff (abs (- line-number linum-last-pos))))
    (concat (propertize (format "%5d" line-number)
                        'face 'linum-line)
            (propertize (format "%3d" diff)
                        'face (cond ((zerop diff) 'linum-zero)
                                    ((eq 1 line-number) 'linum-top)
                                    (t 'linum))))))

;; (setq linum-format 'dynamic)
(setq linum-format 'linum-relativenumber-format)

Во-вторых, в melpa и в рецептах el-get есть пакет linum-relative. Он заменяет обычную нумерацию на относительную. Работает из коробки, только я поменял у него оформление текущей строки через customize-face linum-relative-current-face.

-1:-- Относительная нумерация строк в Emacs и VIM (Post)--L0--C0--February 07, 2014 10:32 PM

Kostafey: popup-switcher - переключение буферов и навигация по функциям, используя TUI-меню

Эргономика промышленных решений

С некоторого времени для разработки на Java я использую IntelliJ IDEA. Какова там навигация по файлам или по методам! Нажимаешь C-S-n (или C-n для классов) и появляется окошко поиска со списком. Вводишь буквы из названия файла и список сокращается - самый удобный способ навигации по файлам проекта. Аналогично C-F12 для навигации по методам открытого класса - интерактивно изменяющееся меню на основе вводимых символов из имени метода. Ничего эргономичнее до этого не видел.

Изящество и красота текстовых интерфейсов

В emacs это все есть, безусловно, но выглядит это... в emacs вообще все выглядит абсолютно самобытно. Именно самобытно. Думаю, вряд ли кто-то скажет, что emacs предоставляет GUI - интерфейс, возможно лишь местами. В большинстве случаев, emacs не предоставляет и CLI - да, он часто интегрируется и CLI-инструментами: CLI-утилита является back-end-ом, а emacs предоставляет свою обертку, он имеет внутренние оболочки shell-ы и repl-ы, может сам быть запущен из внешних, но этот интерфейс, хоть и играет важную роль, все же является скорее вспомогательным. Выходит TUI? Во-многом, да. Но он зачастую деформируется механизмом окон. Если взять, например, mc, far, ndd, старые, времен DOS, среды разработки, антивирусы, архиваторы, предоставляющие TUI-интерфейс, то там любое диалоговое окно - часть общего текстового рабочего пространства. В emacs же окна жестко механически разделяют текстовые области. Данный подход стал идиоматическим. Скажем, org-mode и magit - примеры эффективного разделения возможностей TUI в рамках основного буфера и добавления вспомогательных окон и буферов. Такие буферы имеют свои специальные режимы с удобными таблицами ключей. Может оно и хорошо, и у такого подхода безусловно есть свои плюсы, но всегда ли это нужно? На каждый чих создается новое окно и в нем свой буфер. Лично мне куда приятнее чаще видеть старый-добрый TUI-интерфейс там, где создание отдельного окна избыточно.

TUI в emacs

Библиотеки popup-el (выпадающие меню) и direx-el (деревья) - примеры расширений, предоставляющих некоторую функциональность TUI. К сожалению, предоставляется лишь некоторая часть возможных виджетов, но тем не менее, имеющиеся весьма удобны.

Так, например, первая из них позволила мне реализовать в TUI некоторые из идей, используемых в IntelliJ IDEA: popup-switcher. Вызов интерактивной функции

  • psw-switch-buffer - приведет к появлению списка открытых буферов. Ввод символов имени буфера будет сокращать список. Именно в качестве (еще одного) механизма переключения буферов и задумывался изначально popup-switcher, однако на самом деле, он может быть использован для переключения чего угодно (отсюда и название).
  • psw-switch-projectile-files - работает со всеми файлами проекта (файлы проекта рассматриваются в контексте расширения projectile).
  • psw-switch-function - работает с функциями/методами в текущем файле.
Пример навигации по буферам.
Пример навигации по функциям в файле с исходным кодом на Clojure.

Установка

Установка расширения довольно проста. Добавьте MELPA в вашу переменную package-archives (если у вас он еще не был добавлен):

(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)
Далее popup-switcher устанавливается командой:

M-x package-install [RET] popup-switcher [RET]
Кроме того, в файле инициализации .emacs необходимо указать:

(require 'popup-switcher)

Настройка

После установки psw-in-window-center в значение t всплывающее меню будет появляться в середине окна. По умолчанию появляется в посередине меду левым краем окна и значением fill-column.

(setq psw-in-window-center t)
Вы можете установить интерактивные функции переключения буферов и навигации по методам для определенных клавиатурных сочетаний на ваш вкус, например:

(global-set-key [f2] 'psw-switch-buffer)
(global-set-key (kbd "C-S-n") 'psw-switch-projectile-files)
Для активации возможности навигации по функциям/методам необходимо установить последнюю версию CEDET и подключить библиотеку eassist. Это не является обязательным, и вы можете использовать popup-switcher без CEDET (и, очевидно, без данной функциональности). Пример настройки:

;; Activate semantic
(semantic-mode 1)

;; Load contrib library
(add-to-list 'load-path "~/.emacs.d/cedet/contrib/")
(require 'eassist)

(eval-after-load "eassist"
'(global-set-key [f3] 'psw-switch-function))

Добавление переключений

Добавлять новые применения механизма переключения очень просто, так функция psw-switch-buffer выглядит следующим образом:

(defun psw-switch-buffer ()
(interactive)
(psw-switcher
:items-list (psw-get-buffer-list)
:item-name-getter 'buffer-name
:switcher 'switch-to-buffer))
где
  • items-list - список, в котором осуществляется выбор (psw-get-buffer-list - просто использует встроеную функцию buffer-list с некоторыми дополнительными фильтрами).
  • item-name-getter - функция получения текстового обозначения каждого элемента списка в меню выбора.
  • switcher - функция, описывающая что делать с выбранным элементом.

Заключение

Для emacs существуют хоть и не всеобъемлющие, но весьма удобные библиотеки работы с TUI. Например, popup-elуже использующаяся в проектах auto-complete и emacs-jedi, а теперь и в popup-switcher.

Библиотека direx-el используется, например, в проекте emacs-jedi-direx. direx-el потенциально может выступать в качестве основы для более простого и современного аналога ECB. Конечно, в данном случае создание нового окна будет необходимо, но мне кажется, что это как раз тот случай, когда это оправдано.

Надеюсь, вас зантересовала идея более широкого применения TUI в emacs, а также написания и развития расширений, как использующих эти возможности, так и предоставляющих новые возможности для TUI - виджетов.

-1:-- popup-switcher - переключение буферов и навигация по функциям, используя TUI-меню (Post Kostafey (noreply@blogger.com))--L0--C0--November 05, 2013 02:06 PM

Emacs@Habrahabr: [Из песочницы] Emacs как IDE для Python


Как известно, существует множество решений которые позволяют сделать из «консольного» редактора (vim/emacs) более-менее удобную IDE для языка Python. Представляю Вашему вниманию наиболее успешную, на мой взгляд, реализацию среды разработкы в редакторе emacs на основе пакета python-jedi.el. Отмечу, что бандл заменяющий rope(*-jedi) есть так же для vim, инстукцию по его настройке можно найти здесь .
Читать дальше →
-1:-- [Из песочницы] Emacs как IDE для Python (Post ex0hunt)--L0--C0--October 28, 2013 08:51 PM

Pavel Vyazovoi: Правильная установка ctags с расширенной поддержкой PHP в OS X

На github есть форк ctags с расширенной поддержкой PHP. Скорее всего, мы не скоро дождемся этого в основной ветке, поэтому проще всего установить этот форк самостоятельно прямо сейчас. Вопрос только в том, как это правильно сделать.

У вас уже установлен homebrew? Если нет, устанавливайте:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

В homebrew уже есть рецепт для сборки и установки ctags, нужно только правильно отредактировать его.

Сначала делаем так:

brew update
brew edit ctags

Откроется рецепт на редактирование, меняем в нем следующее:

  1. Url меняем на следующий:

     url 'https://github.com/vyazovoi/ctags/archive/master.zip'
    
  2. Обычно brew берет номер версии из имени файла, но в master.zip нет информации о версии, поэтому на следующей строке после url добавляем:

     version '5.8'
    
  3. Комментируем символом "#" строку с sha:

     # sha1 '482da1ecd182ab39bbdc09f2f02c9fba8cd20030'
    

Всё, закрываем редактор с сохранением изменений и запускаем сборку ctags:

brew install ctags

Он сам подтянет за собой все зависимости и соберет ctags (как в портах freebsd или портеже gentoo).

P.S. А ещё можно установить brew-cask и после этого можно устанавливать многие программы без сборки: brew cask install evernote, brew cask install aquamacs, brew cask install iterm2 и т.д.

P.P.S. Вот только проблема — textmate вообще никак работает с ctags, поэтому я возвращаюсь к Emacs.

-1:-- Правильная установка ctags с расширенной поддержкой PHP в OS X (Post)--L0--C0--October 03, 2013 10:09 PM

Ilya Zonov: Emacs + Java

Появилась у меня в последнее время необходимость основательно познать Java. Очень долго не смотрел в его сторону, были у меня некоторые предубеждения. Я всегда думал, что plain C и Lisp это наше все. И этого достаточно. А сейчас работа повернулась стороной с Java лицом и соответственно захотел быстренько познать его особенности, а также настроить свой любимый редактор для удобной работы с этим популярным языком программирования.

Для каждого языка программирования в Emacs я стараюсь настроить следующие возможности:

  • Подсветка синтаксиса (есть из коробки)
  • Авто дополнения (желательно через auto-complete)
  • Навигация по коду
  • Работа с проектами (опционально, люблю работать в консоли вне Emacs)
  • REPL (также опционально, но очень помогает во время обучения)

Из коробки в java-mode фактически работает только подсветка синтаксиса. Cedet идущий с Emacs'ом также позваляет настроить автодополнения и навигацию внутри классов. Но вот, например, системные вещи наотрез отказывается предлагать в качестве дополнений.

В общем я решил посмотреть, какие сейчас есть удобств для работы с Java в Emacs. При этом я наткнулся на следующие вещи:

Немного впечатлений о каждом расширении. Все пробовал на MacBook Air, OS X, Emacs 24.3.1 из MacPorts.

JDEE

Старое и похоже переставшее развиваться расширение. Сразу не понравилось, что тянет с собой свою цветовую схему. Мелочи, но они всегда бросаются в глаза. Также JDEE каким-то образом умудряется нарушить работу whitespace-mode, который перестает подсвечивать вообще что-либо. Данную проблему решить не смог. Есть у меня подозрение, что это связано с перекрашиванием буфера, но глубока не капал за ненадобностью. Нечто похожее сейчас есть в markdown-mode. Ну и каких-то особых возможностей здесь не нашел. Все плюшки сделаны через Cedet, соответственно их можно получить и без JDEE.

Malabar-mode

Завязан на Maven, про который ранее слышал совсем чуть-чуть и отдаленно. Быстренько глянул, как работать с этим менеджером проектов. Создал тестовый проект, но производительность malabar-mode вообще не порадовала. Он как я понял использует Groovy console для формирования дополнений. И это похоже порой не быстрый процесс. В общем от этого варианта тоже отказался. Кроме того проект также загибается. Хотя в знакомстве с malabar-mode есть свой плюс: я узнал что такое Maven и как с ним работать.

Eclime

Вот это вообще монстр. Идея затащить в Emacs (изначально в Vim) функционал Eclipse через некий интерфейс тоже на деле оказывается не шибко производительна. В данном случае eclime запускает Eclipse на заднем плане и общается с ним, чтобы получить автодополнения и еще некоторый функционал (рефакторинг, навигация по коду и т.п.). Скорость отзывчивости данной системы еще меньше, чем у Malabar.

Auto Java Complete

Смысл данного расширения прост: сгенерировать теги необходимых Java библиотек и предоставить интерфейс для auto-complete. Я попробовал использовать готовые теги и это работает достаточно быстро и удобно. Но тут мы получаем только информацию системных библиотек и того что сами укажем ручками при генерации тегов. В принципе в связке со стандартным Cedet идущим с Emacs'ом должно всего этого хватить.

Cedet Dev

Самый удобный, как мне кажется, вариант это использовать последнюю версию Cedet из Bazaar репозитория. Тут сейчас Java хорошо поддерживается. Maven проекты кстати тоже отлично воспринимаются. По работе и настройке Cedet лучше обращаться к статье Alex Ott'а.


На данный момент я остановился на последнем варианте: Cedet Dev + auto-complete. Есть у кого еще предложения как улучшить жизнь в Emacs при работе с Java? Или все таки Cedet это наше все и смотреть в другие стороны лучше не стоит?

-1:-- Emacs + Java (Post Ilya Zonov (noreply@blogger.com))--L0--C0--September 04, 2013 06:25 PM

Emacs LJ community: ru_emacs @ 2013-07-24T13:27:00

Всем привет! Ищу плагин для Emacs, ориентированный на работу с плоской базой данных в текстовом файле, как в forms-mode, со следующими требованиями:

1. Желательно, чтобы данные хранились в минималистичном формате (только содержимое ячеек и разделители). Т.е. как в forms-mode.

2. Нужен редактор данных, в идеале полу-ридонли окно с настраиваемым содержимым, в котором я могу править только текст записей БД. Т.е. как в forms-mode.

3. Нужно средство просмотра БД, например постраничный вывод содержимого по 10 записей, с возможностью быстро перескочить в редактор. Обязательно нужна возможность выводить на экран не только сами записи, но и произвольные Elisp функции от них.

4. Плагин должен предоставлять API для работы с БД внешними средствами. (Добавить запись, удалить запись, вывести запись в форматную строку итд.).

5. Должны быть поддержка многострочных записей.


Чем не подошли существующие средства:

Forms-mode:
Просмотрщика и API нет. Редактор неидеален, т.к. я не могу выделить readonly текст, что иногда нужно.

Properties в Org-mode:
Многострочных записей (в column-view) нет и не будет. Вывод данных не программируем (п.3).

Таблицы из встроенного table.el:
API нет. Вывод данных не программируем (п.3).


Есть ли ещё что-то подходящее?
-1:-- ru_emacs @ 2013-07-24T13:27:00 (Post Cheater)--L0--C0--July 24, 2013 09:30 AM

Emacs LJ community: Исправление russian-keyboard для MacBook Pro

Если вы набираете русский текст в Emacs и используете для этого

`C-\'
     Enable or disable use of the selected input method
     (`toggle-input-method').

`C-x  C-\ METHOD '
     Select a new input method for the current buffer
     (`set-input-method').
, то вы могли обнаружить, что некоторые символы в русской раскладке (`russian-computer') не соответствуют их расположению на клавиатуре MacBook.

Я вчера разобрался, как это исправить:
https://github.com/vvv/dotfiles/commit/b0292c6aea8ff856f40b932210a888d68b1a90d3

Вдруг кому пригодится. :-)

-1:-- Исправление russian-keyboard для MacBook Pro (Post Valery V. Vorotyntsev (valery.vv@gmail.com))--L0--C0--July 19, 2013 07:36 AM

Oleksandr Gavenko: Сортируем без повторений в Emacs.

Только для сортировки строк в Emacs имеется встроенная функция: M-x sort-lines.

Для сортировки без повторений выполняем:

  • выделить область
  • C-u M-| sort -u RET

С включенными режимами transient-mark-mode и delete-selection-mode можно сразу заменить выделенную область отсортированными без повторения строками:

  • выделить область
  • M-| sort -u RET
-1:-- Сортируем без повторений в Emacs. (Post Oleksandr Gavenko (noreply@blogger.com))--L0--C0--January 31, 2013 06:18 PM

Ilya Zonov: Blogger пост из Emacs? Markdown + Googlecl script

Побаловался с googlecl. Умудрился случайно наделать множество постов, состоящих всего лишь из одного слова в своем читальном блоге. Сейчас вроде бы все исправил. Постараюсь подобное предотвращать в будущем. Но главное — проверил, что googlecl работает. Далее хочу обсудить варианты публикации сообщений из Emacs.

Ранее для написания заметок я использовал muse-mode. Каждая muse-заметка экспортировалась в html. А далее я ручками копировал в форму Блоггера нужный контент. Долго я пользовался именно этой схемой. Muse в какой-то момент перестал удовлетворять моим требованиям. Были у него некоторые проблемы со вложенными списками и вставками кода. А всякие списки я ой как люблю. Это наверное последствия долгого использования org-mode. Ну а потом я вообще перестал что-либо публиковать в сети.

Также когда-то я пробовал наладить google интерфейс, который шел в поставке с emacsspeak. Но безуспешно. Интересно в каком состоянии он сейчас? Давно не слышал.

Теперь я собираюсь изобрести новый велосипед. В его основе Markdown и Googlecl. Собственно смысл в том, чтобы написать мини скрипт на bash, который переведет md-файл в html (python-markdown). При этом он должен вырезать избыточные поля. Например, заголовок, который в блоггере в отдельное поле вводится. Далее отправить это добро в googlecl, который успешно опубликует новую заметку с правильным заголовком и тегами в нужном месте. То есть из Emacs надо будет дернуть этот скриптик и собственно все.

Как вариант можно написать полностью тоже самое на elisp, но хочется простой возможности публиковать файлы из консоли. Также я пока не совсем понимаю, как настроить раскраску кода при конвертировании md в html, но думаю с этим больших проблем не должно быть.

Как вам такая схема? Не слишком ли я заворачиваю? Сейчас буду реализовывать это добро.

-1:-- Blogger пост из Emacs? Markdown + Googlecl script (Post Ilya Zonov (noreply@blogger.com))--L0--C0--January 24, 2013 06:25 PM

Eugene Burmako: сублайм => емакс

После недавнего дискашена у metaclass и tonsky (клик клик) решил снова попробовать емакс. Особенно с учетом того, что сублайм closed source и развитие его, еще три-четыре месяца назад весьма бодрое, полностью остановилось.

Подумал и с удивлением заметил, что в сублайме для меня киллер фич не так уж и много. Первое это очень быстрый поиск по файлам в проекте (find + grep гораздо медленнее, к сожалению). Второе это возможность сохранять стейт проекта (открытые файлы, позиции в них) между запусками. Третье и четвертое это сниппеты и дефинишены синтаксиса (использующиеся для подсветки, комментирования и выщемливания определений - классов, методов, и т.п.). Вроде бы, все. Какой в этом плане state of the art в емаксе?

Еще доставляет go to symbol, который показывает список всех определений в файле и предоставляет для них fuzzy matching. Особенно удобно то, что по мере набора имени определения положение вьюпорта меняется, прокручивая файл к текущему в данный момент айтему. Вдвойне удобно, что по нажатию Escape вьюпорт откатывается обратно на позицию до начала поиска. Интересно, есть ли что-то такое уже существующее для емакса?

Screen Shot 2012-12-11 at 11.03.38

С нетерпением жду релиза и свободного времени, чтобы продолжить эксперименты с емаксом.
-1:-- сублайм => емакс (Post)--L0--C0--December 11, 2012 10:24 AM

Alex Ott: Новая версия статьи про CEDET

Только что залил на сайт новую версию своей статьи про настройку CEDET. Я также оставил доступной старую версию статьи, но в виде отдельной страницы.
Новая версия описывает новую схему расположения исходного кода, а также новый способ активации под-режимов, так что статья теперь применима и к версии из bzr, и к версии идущей в составе GNU Emacs (после того как выпустят новую его версию).
Кроме того, я добавил небольшое описание того, как настроить связку CEDET + Java, а также небольшое описание настройки дополнений через auto-complete.

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

P.S. кстати, в последних снапшотах, CEDET умеет находить проекты Maven, и получать информацию о classpath прямо из них, так что теперь работает и дополнение имен для классов из сторонних библиотек.  Например, вот так (Это дополнение при работе с кодом Apache Tika):


P.P.S. If you found error, or typo - please write comment on page, or fork source code on github (it's enough to fix only .muse file), and create pull request :-)
-1:-- Новая версия статьи про CEDET (Post Alex Ott (noreply@blogger.com))--L0--C0--October 30, 2012 06:39 PM

Kostafey: Функциональная и информативная mode-line

Давно хотелось сделать отображаемую в emacs mode-line информацию более понятной. В то же время, слишком отходить от стандартного вида тоже не хотелось, т.к. уже есть много всего удобного, например всплывающее меню для основного режима. Конечно, прежде всего хотелось поменять обозначение кодировки, признак read-only и признак того, что буфер был изменен. По этому поводу Xah Lee верно подметил, что начало mode-line выглядит загадочно :). За основу я взял описание конфигурации в emacs-fu.

Несколько ключевых моментов:

  • mode-line-mule-info
    о сдной стороны не слишком красива и информативна, зато позволяет переключать кодировки и символ завершения строк мышкой (и да, я польуюсь мышкой в emacs :)).
  • buffer-file-coding-system
    все что нужно для красивого описания текущей кодировки.
  • mode-line-buffer-identification
    имя буфера (как в стандартой mode-line)
  • mode-line-modes
    еще одна важная деталь из стандартной mode-line, которая отображает список minor-mode, сужения и ассоциированный с буфером процесс.
  • Положение курсора в буфере, идентификация режима Insert/Overwrite взята из emacs-fu.

В итоге получилось так:

Полный вариант данной конфигурации на bitbucket.
-1:-- Функциональная и информативная mode-line (Post Kostafey (noreply@blogger.com))--L0--C0--October 19, 2012 01:35 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

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

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 я долгое время пользовался какой-то хитрой тёмной схемой составленной из кучи других схем найденных в интернетах. Некоторое время назад перешёл на схему от уважаемого мэтра емаксоведения alexott. Его схема рулит.

Для Vim это torte в консоли. Но в графической версии torte, что называется "бьёт по глазам". Подумываю о переводе схемы 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 Oleksandr Gavenko (noreply@blogger.com))--L0--C0--December 21, 2010 07:57 PM

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

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