Emacs LJ community: Автоматическая кодировка для команд

Что делать, если есть файлы в разной кодировке (например, `utf-8' и `koi8-r') и их нужно сравнивать командами `dired-diff' или `dired-backup-diff'? Приходится открывать файл, смотреть, какую кодировку он использует, а потом вручную указывать кодировку через `C-x RET c' перед запуском `dired-diff'. Слишком много движений, поэтому через defadvice можно навесить определение кодировки файлов и запуск команды с нужной кодировкой (дополнительно рекомендуется использовать UniCAD):

;; Get coding from the file, so diff will output in the correct coding:
(defadvice dired-backup-diff (around my-dired-backup-diff act)
  (let* ((filename (dired-get-filename t))
         (coding-system (with-temp-buffer
                          (insert-file-contents filename nil 0 1024)
                          buffer-file-coding-system))
         (coding-system-for-read coding-system)
         (coding-system-for-write coding-system))
    ad-do-it))

;; Get coding from the file, so diff will output in the correct coding:
(defadvice dired-diff (around my-dired-diff act)
  (let* ((filename (dired-get-filename t))
         (coding-system (with-temp-buffer
                          (insert-file-contents filename nil 0 1024)
                          buffer-file-coding-system))
         (coding-system-for-read coding-system)
         (coding-system-for-write coding-system))
    ad-do-it))


Аналогичная проблема существует также для `grep'. Как автоматически указать правильную кодировку перед запуском грепа, чтобы он искал в файлах с этой кодировкой. Я пока не нашел решения этой проблемы. Есть идеи, как это сделать?
-1:-- Автоматическая кодировка для команд (Post juri@jurta (juri@jurta.org))--L0--C0--April 14, 2013 07:55 PM

Pavel Vyazovoi: Смена цветовой схемы Emacs по времени восхода и захода солнца

Я давно хотел поделиться интересными сниппетами из моего конфига Emacs. Сам конфиг я публиковать не хочу, потому что в нём половина кода не работает, другая половина содержит какие-то пароли и личные данные, которые я не вынес в отдельный файл. А вот этот сниппет опубликую. Даже не сниппет, а пример конфигурации готового пакета theme-changer.

Есть такой пакет для Emacs: theme-changer. Он умеет переключать цветовую схему по времени восхода и захода солнца. А настраивается он вот так:

``` common-lisp theme-changer config http://emacswiki.org/emacs/ColorTheme#toc18 emacswiki (setq calendar-location-name "Dallas, TX") (setq calendar-latitude 32.85) (setq calendar-longitude -96.85)

(require 'theme-changer) (change-theme 'color-theme-solarized-light 'color-theme-solarized-dark) ```

Значения latitude и longitude можно узнать несколькими способами. Во-первых, можно просто тыкнуть в google maps и скопировать координаты. Кроме того можно найти свой город в википедии и там в шаблоне справа будет ссылка на сервис geohack, откуда нужно скопировать координаты в десятичном формате.

Кстати, лично я предпочитаю схему xemacs днём (самая лучшая схема, по моему мнению) и схему zen-and-art ночью. Последняя не входит в color-theme, установить её можно рецептом el-get.

-1:-- Смена цветовой схемы Emacs по времени восхода и захода солнца (Post)--L0--C0--April 11, 2013 05:09 AM

Pavel Vyazovoi: Переключение раскладок в Emacs

UPD: перепост старой заметки в новый блог, планирую обновлять и поддерживать в актуальном состоянии

Последнее обновление: Среда, 10. Март 2010

  <p>Описание проблемы: при переключении на не-латинскую раскладку клавиатуры в Emacs не работают горячие клавиши. Также не запоминается своя раскладка для каждого буфера Emacs.</p>

  <p>Варианты решения проблемы:

    <ul>
      <li>Продублировать все горячие клавиши для нужной раскладки и отказаться от
      отдельной для каждого буфера раскладки (плохой выход из ситуации).</li>
      <li>Использовать встроенную в Emacs переключалку (то, что нам нужно).</li>
    </ul>
  </p>

  <!--more-->

  <p>По умолчанию цикличное переключение раскладок в Emacs работает по комбинации C-\<br />
    Очевидно, вы пожелаете настроить в Emacs клавиатурное сочетание для переключения раскладок как в xorg, и тут появляется проблема номер 2:</p>

  <p>Xorg не передает приложению нажатие клавиш, которыми он переключает раскладку. К тому же нет возможности настроить игнорирование иксорговской переключалкой конкретного приложения. Для решения этой проблемы ранее предлагали использовать патченный xxkb, который переключал раскладку в окне Emacs всегда на латиницу и передавал окну нужные клавиатурные сочетания. Как показала практика - работает это решение не всегда и глючит, поэтому появились следующие, более корректные решения этой проблемы:</p>


  <p>
    <ul>
      <li>Хороший человек с псевдонимом Akshaal написал программку, а другой хороший
      человек с псевдонимом Bzek доработал её. К сожалению, все ссылки на описание
      этого метода померли, поэтому я переношу эту информацию сюда (см. ниже). Этот
      метод имеет свои недостатки, но я пользуюсь именно им. Суть метода сводится к
      переключению раскладок сторонней программой, которая сама определяет окно Emacs
      и отправляет ему нужное сочетание клавиш вместо переключения раскладки.</li>
      <li>Использовать для переключения языков альтернативный метод ввода
      ibus (scim). Достаточно отключить его в Emacs и клавиатурные сочетания, которые вы
      настроили в ibus (scim), будут обрабатываться в Emacs. Описание тоже ниже.</li>
    </ul>
  </p>

  <p><h3>Настраиваем ibus (scim)</h3></p>

  <p>
    <ol>
      <li>Устанавливаем scim, scim-m17n и scim-tables (для ibus сами определяйтесь, не
      пользуюсь им). Последние два включают в себя
      приличное количество раскладок клавиатуры для различных языков.</li>
      <li>Прописываем в профиль переменные среды:

        Для scim:

        <pre><code>

export XMODIFIERS=@im=SCIM export GTK_IM_MODULE=xim export QT_IM_MODULE=xim

        </code></pre>

        Для ibus видимо будет как-то так:

        <pre><code>

export GTK_IM_MODULE=ibu export QT_IM_MODULE=ibu

        </code></pre>

      </li>
      <li>Отключаем ibus (scim) в Emas, для этого пишем в .Xdefaults:

        <pre><code>Emacs*useXIM:false</code></pre>

        (не знаю правда, как тут с ibus; если кто-то знает - пишите мне)

      </li>
      <li>Запускаем scim-setup и настраиваем всё что нужно. Останавливаться на этом не
      буду - если не разберетесь, то можете спросить в xmpp-конференции
      emacs@conference.jabber.ru.</li>
      <li>Настраиваем в Emacs обработку этих сочетаний клавиш. Например так:

        
</code></pre>

<p>(global-set-key (kbd "C-1")</p>

<pre><code>    (lambda ()
      (inactivate-input-method)))
</code></pre>

<p>(global-set-key (kbd "C-2")</p>

<pre><code>    (lambda ()
      (set-input-method 'russian-computer)))
</li> </ol></p> <p>Вы можете добавить сюда переключение словаря flyspell, например. Или настроить цикличное переключение, в этом вам поможет функция toggle-input-method.</p> <p><h3>Использование emxkb</h3></p> <p>Замечание к этому методу: с его помощью нельзя настроить раскладку на цикличное переключение (хотя, можно просто модифицировать программу). У меня, например, группа "us" включается по нажатию C-1, а "ru" - C-2.</p> <p>Первое, что нам понадобится - программа emxkb. Её нужно <a href="http://paul.elms.pro/files/emxkb.c">скачать</a> и скомпилировать вот так:</p> <p><pre><code>

gcc -L/usr/X11R6/lib -lX11 -o emxkb emxkb.c

    </code></pre></p>

  <p>При выполнении emxkb 0 раскладка переключается на первую группу, emxkb 1 -
  вторую и т.д. Если же значение WM_CLASS текущего окна равно "emacs", то вместо
  переключения групп emxkb шлёт нажатие виртуальных клавиш F31, F32, F33 и
  т.д. Остается только обрабатывать эти нажатия в emacs.</p>

  <p>Итак, вы уже настроили в своём wm (или xbindkeys) какие-либо сочетания клавиш на
  выполнение комманд emxkb 0 и emxkb 1. Но ещё не все готово для настройки
  emacs. Дело в том, что клавиш F31, F32 и т.д. не существует и нужно их виртуально
  "создать" с помощью xmodmap:</p>

  <p><pre><code>

keycode 431=F31 keycode 432=F32 keycode 433=F33

  </code></pre></p>

  <p>431, 432, 433 можно заменить на любые другие свободные кейкоды.</p>

  <p>Теперь можно настраивать emacs:</p>

  <p>
</code></pre>

<p>(defun reset-flyspell-with-new-dict (dict)
  "Set new dictionary and restart flyspell"</p>

<p>  (unless (equal dict ispell-local-dictionary)</p>

<pre><code>(setq ispell-local-dictionary dict)
(when flyspell-mode
  (flyspell-mode)
  (flyspell-mode)))
</code></pre>

<p>  (when flyspell-mode</p>

<pre><code>(save-excursion
  (flyspell-region (window-start) (window-end))))
</code></pre>

<p>  (message nil))</p>

<p>(global-set-key [(f31)]</p>

<pre><code>            (lambda ()
              (interactive)
              ;; (reset-flyspell-with-new-dict "american")
              (inactivate-input-method)))
</code></pre>

<p>(global-set-key [(f32)]</p>

<pre><code>            (lambda ()
              (interactive)
              ;; (reset-flyspell-with-new-dict "russian")
              (set-input-method 'russian-computer)))
</code></pre>

<p>(global-set-key [(f33)]</p>

<pre><code>            (lambda ()
              (interactive)
              ;; (reset-flyspell-with-new-dict "italian")
              (set-input-method 'italian-keyboard)))
</code></pre>

<p>(defun toggle-specified-isearch-input-method (new-input-method)
  "Toggle specified input method in interactive search."
  (interactive)
  (let ((overriding-terminal-local-map nil)))</p>

<p>  (if (eq new-input-method 'default-method)</p>

<pre><code>  (inactivate-input-method)
(set-input-method new-input-method))
</code></pre>

<p>  (setq isearch-input-method-function input-method-function</p>

<pre><code>isearch-input-method-local-p t)
</code></pre>

<p>  (setq input-method-function nil)
  (isearch-update))</p>

<p>(add-hook 'isearch-mode-hook</p>

<pre><code>      (lambda ()
        (define-key isearch-mode-map (kbd "&lt;f31&gt;")
          (lambda ()
            (interactive)
            (toggle-specified-isearch-input-method 'default-method)))

        (define-key isearch-mode-map (kbd "&lt;f32&gt;")
          (lambda ()
            (interactive)
            (toggle-specified-isearch-input-method 'russian-computer)))

        (define-key isearch-mode-map (kbd "&lt;f33&gt;")
          (lambda ()
            (interactive)
            (toggle-specified-isearch-input-method 'italian-keyboard)))))
</p> <p>Внимательно (или не очень) изучите приведенный кусок кода на elisp и настройте его под свои нужды.</p> <p>P.S. Если у вас что-то не получилось, <strike>вы можете найти меня в конференции emacs@conference.jabber.ru</strike>. Приветствуются любые дополнения и правки к статье.<br /> P.P.S. Для консольной версии Emacs проблема всё ещё актуальна.</p>
-1:-- Переключение раскладок в Emacs (Post)--L0--C0--April 10, 2013 07:24 PM

Emacs LJ community: Три основных принципа EMACS

Три основных принципа EMACS:

  1. 3 года гарантии.
    Каждая следующая версия выходит не реже, чем через 3 года разработки. В марте в честь юбилея RMS вышла новая версия 24.3. Гарантируется исправление ошибок в версии не старше, чем 3 года - просто опишите найденную ошибку в письме и отправьте по адресу bug-gnu-emacs@gnu.org. Если используете старую версию, рекомендуется обновиться до самой новой (оптимальный вариант - установка snapshot).

  2. Настоящая мощность.
    Вдобавок к большому количеству встроенных пакетов, в emacs 24 также добавился менеджер пакетов, позволяющий устанавливать еще большее количество внешних пакетов, обеспечивающих настоящую мощность, недостижимую в других редакторах. Существует даже возможность использования бабочек для изменения нужного бита.

  3. Подлинная безопасность.
    Весь код выполняется в виртуальной среде, основанной на интерпретаторе Лиспа. Безопасность обеспечивается рядом встроенных возможностей, в том числе safe-local-variable и т.д. Поэтому не существует вирусов, распространяющихся через файлы Emacs Lisp.

-1:-- Три основных принципа EMACS (Post juri@jurta (juri@jurta.org))--L0--C0--April 01, 2013 07:01 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

Emacs@Habrahabr: [recovery mode] Улучшаем emacs-jabber

Начало


На хабре уже была обзорная статья по jabber.el — jabber-клиенту для emacs. Решив попробовать этот клиент после pidgin, я наткнулся на отсутствие таких привычных уже вещей, как история ввода или форматированные сообщения. К сожалению, emacs-jabber не развивается так быстро, как хотелось бы. К счастью, возможности emacs по настройке практически безграничны, поэтому добавить нужное несложно. В этой статье я расскажу, как реализовал историю ввода. Если эта тема заинтересует общественность, в дальнейшем опишу отправку форматированных сообщений (html) и некоторые другие плюшки.
Читать дальше →
-1:-- [recovery mode] Улучшаем emacs-jabber (Post EvilShadow)--L0--C0--January 02, 2013 04:50 PM

Eugene Burmako: сублайм =&gt; емакс

После недавнего дискашена у 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:-- сублайм =&amp;gt; емакс (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

Kostafey: PageUp/PageDown в меню auto-complete

После длительного сидения на 1.2, обновился до версии 1.4 auto-complete.el(через ELPA). Красота, да еще и со всплывающими подсказками. Первое что захотелось сделать перевесить вызов как в популярных IDE:
 (define-key ac-mode-map (kbd "C-SPC") 'auto-complete)
Уже на списке автодополнений захотелось нажать привычную для IDE PageDown для прокрутки по списку. Ан нет, emacs выполняет прокрутку на странице. Сделаем возможность PageDown/PageUp на меню автодополнений:

(defun ac-page-next ()
"Select next completion candidate per `ac-menu-height' range.
Pages down through completion menu."

(interactive)
(let ((counter 0))
(dotimes (counter (1- ac-menu-height))
(ac-next))))

(defun ac-page-previous ()
"Select previous completion candidate per `ac-menu-height' range.
Pages up through completion menu."

(interactive)
(let ((counter 0))
(dotimes (counter (1- ac-menu-height))
(ac-previous))))
(define-key ac-complete-mode-map [next] 'ac-page-next)
(define-key ac-complete-mode-map [prior] 'ac-page-previous)
Поиск в меню давно хотелось перевесить, но все ни как руки не доходили. isearch-forward у меня висит на C-f, соответственно меняем:
(define-key ac-complete-mode-map (kbd "C-f") 'ac-isearch)
-1:-- PageUp/PageDown в меню auto-complete (Post Kostafey (noreply@blogger.com))--L0--C0--October 08, 2012 07:17 AM

Emacs@Habrahabr: Emacs и правильная работа с чужим кодом: отступы

Так повелось, что во многих компаниях есть свой код-стандарт, регламентирующий, как оформлять отступы: пробелами или табуляцией, а также какой ширины они должны быть. Что делает новичок первым делом при работе над проектом, где код уже оформлен согласно стандарту? Правильно, он коммитит плоды своего труда и получает от тимлида по шапке за то, что не посмотрел как именно его редактор работает с отступами. Если вы начинающий(или не в меру удачливый) пользователь emacs и хотите избежать этого печального, но закономерного, если вы еще не сталкивались с этим, исхода, то добро пожаловать под кат.
Читать дальше →
-1:-- Emacs и правильная работа с чужим кодом: отступы (Post PerlPower)--L0--C0--September 17, 2012 05:25 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

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 Ilya Zonov (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