<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Русская планета Emacs</title>
	<link rel="self" href="http://planet.emacsen.org/ru/atom.xml"/>
	<link href="http://planet.emacsen.org/ru/"/>
	<id>http://planet.emacsen.org/ru/atom.xml</id>
	<updated>2019-02-10T03:03:11+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html">Michael Kazarian: What is Python's biggest disadvantage?</title>
		<link href="http://mkazarian.blogspot.com/2019/01/what-is-pythons-biggest-disadvantage.html"/>
		<id>tag:blogger.com,1999:blog-660391924419264317.post-426400124042884973</id>
		<updated>2019-01-28T08:09:39+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;inline_editor_value&quot; id=&quot;__w2_wXyo7F0B53_answer_content&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;u-serif-font-main--regular&quot;&gt;&lt;div class=&quot;ui_qtext_expanded&quot;&gt;&lt;span class=&quot;ui_qtext_rendered_qtext&quot;&gt;&lt;div class=&quot;ui_qtext_para&quot;&gt;&lt;a href=&quot;https://www.quora.com/What-is-Pythons-biggest-disadvantage/answer/Michael-Kazarian?__nsrc__=4&amp;amp;__snid3__=3834371122&quot; target=&quot;_blank&quot;&gt;Most important for me are&lt;/a&gt;:&lt;/div&gt;&lt;div class=&quot;ui_qtext_para&quot;&gt;1)  Python seems simple at first glance. There are a lot of points that  always need to keep in mind. Since 2003 I used Python because it was  simple. Since 2016 I use Emacs Lisp instead of Python for disposable  tasks, prototypes and text processing.&lt;/div&gt;&lt;div class=&quot;ui_qtext_para&quot;&gt;2) Backward incompatibility of language and libraries more than of Java, Delphi or Emacs.&lt;/div&gt;&lt;div class=&quot;ui_qtext_para&quot;&gt;3)  Dynamic typing per se. This is good for little project/team but, it is a  pain in another case. I wrote a library for type checking in a big  project.&lt;/div&gt;&lt;div class=&quot;ui_qtext_para&quot;&gt;4) Dynamic typing implementation  makes Python slow. Even slower than Emacs Lisp. Common Lisp  implementations prove that dynamically typed languages could be faster.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
		<author>
			<name>Michael Kazarian</name>
			<email>noreply@blogger.com</email>
			<uri>http://mkazarian.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Michael Kazarian's blog about IT-related things</title>
			<link rel="self" href="http://www.blogger.com/feeds/660391924419264317/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-660391924419264317</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="ru">Emacs@Habrahabr: Голосование по второй бета-версии Revised 7 Report on Algorithmic Language Scheme (Large Language)</title>
		<link href="https://habr.com/ru/post/431316/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=tag"/>
		<id>https://habr.com/ru/post/431316/</id>
		<updated>2018-11-28T02:21:03+00:00</updated>
		<content type="html">&lt;img src=&quot;https://habrastorage.org/webt/gb/2y/sd/gb2ysdcfcjghpflkptsvxy_ymfk.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Открыто голосование по содержанию второй (из восьми) бета-редакции алгоритмического языка Scheme R7RS-large (Tangerine Edition), а также сбор предложений по третьей бета-редакции (Orange Edition).&lt;br /&gt; &lt;a href=&quot;https://habr.com/ru/post/431316/?utm_source=habrahabr&amp;amp;utm_medium=rss&amp;amp;utm_campaign=tag#habracut&quot;&gt;Читать дальше →&lt;/a&gt;</content>
		<author>
			<name>lockywolf</name>
			<uri>https://habr.com/ru/</uri>
		</author>
		<source>
			<title type="html">Хабр / Посты с меткой «emacs»</title>
			<subtitle type="html">Хабр / Посты с меткой «emacs»</subtitle>
			<link rel="self" href="http://habrahabr.ru/rss/tag/emacs/"/>
			<id>https://habr.com/ru/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="ru">Emacs@Habrahabr: Как начать писать код на Lisp?</title>
		<link href="https://habr.com/ru/post/413061/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=tag"/>
		<id>https://habr.com/ru/post/413061/</id>
		<updated>2018-06-03T09:33:00+00:00</updated>
		<content type="html">&lt;p&gt;Часто приходится видеть, как новички пробуют Common Lisp и потом жалуются, что с ним невозможно нормально работать. Как правило, это происходит из-за того, что они не понимают как настроить себе процесс, обеспечивающий тот самый &quot;быстрый отклик&quot; от среды разработки, когда ты поменял функцию, скомпилировал её и изменения тут же начали использоваться внутри уже &quot;бегущей&quot; прогрммы без её перезапуска.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Понять, как это выглядит, можно посмотрев какой-нибудь ролик на youtube, где демонстрируется интерактивная разработка на Common Lisp.&lt;/p&gt;&lt;br /&gt;
&lt;div class=&quot;oembed&quot;&gt;&lt;div&gt;&lt;div style=&quot;width: 100%; height: 0;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;a href=&quot;https://habr.com/ru/post/413061/?utm_source=habrahabr&amp;amp;utm_medium=rss&amp;amp;utm_campaign=tag#habracut&quot;&gt;Читать дальше →&lt;/a&gt;</content>
		<author>
			<name>Svetlyak</name>
			<uri>https://habr.com/ru/</uri>
		</author>
		<source>
			<title type="html">Хабр / Посты с меткой «emacs»</title>
			<subtitle type="html">Хабр / Посты с меткой «emacs»</subtitle>
			<link rel="self" href="http://habrahabr.ru/rss/tag/emacs/"/>
			<id>https://habr.com/ru/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Emacs LJ community: Emacs как IDE для Go</title>
		<link href="https://ru-emacs.livejournal.com/85651.html"/>
		<id>urn:lj:livejournal.com:atom1:ru_emacs:85651</id>
		<updated>2016-06-08T08:00:33+00:00</updated>
		<content type="html">(оригинал: &lt;a href=&quot;http://reangdblog.blogspot.com/2016/06/emacs-ide-go.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ReanGDblog&lt;/a&gt;)&lt;div&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-4fC3dS73X5c/V0t42dE1EiI/AAAAAAAAAn8/sYIMTbFo7Fg3Q1mSG12v1N7l7--MMGMuwCLcB/s1600/logo_emacs.jpg&quot; rel=&quot;nofollow&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://2.bp.blogspot.com/-4fC3dS73X5c/V0t42dE1EiI/AAAAAAAAAn8/sYIMTbFo7Fg3Q1mSG12v1N7l7--MMGMuwCLcB/s200/logo_emacs.jpg&quot; width=&quot;170&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Цель статьи дать обзор инструментов в Emacs для работы с Go кодом. Настроить горячие клавиши, возможно добавить алиасы и сделать их удобнее для повседневного использования - на вашей совести. Хочу отметить, что поддержка языка в Emacs - на высоком уровне: подсветка кода, автодополнение, сниппеты, рефакторинг, подсветка ошибок, отображение документации, тестирование, компиляция и многое другое. Сразу оговорюсь, что проверял я только под Linux, под альтернативные OS могут быть особенности, которые тут не освещены.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Общая настройка Go&lt;/h2&gt;Надеюсь у вас уже стоит go, правильно настроены &quot;GOPATH&quot; и т.п., поскольку отдельные плагины чувствительны к подобного рода вещам. Не забудьте добавить &quot;$GOPATH/bin&quot; в PATH, что бы утилиты, который будем ставить, запускались без указания полного пути. Так же я рассчитываю, что с основами Emacs и Go вы знакомы.&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Вся настройка в одном месте&lt;/h2&gt;Сначала коротко о настройке. Устанавливаем набор приложений, которые необходимы плагинам:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;go get -u github.com/nsf/gocode
go get -u github.com/rogpeppe/godef
go get -u github.com/jstemmer/gotags
go get -u github.com/kisielk/errcheck
go get -u golang.org/x/tools/cmd/guru
go get -u github.com/golang/lint/golint
go get -u golang.org/x/tools/cmd/gorename
go get -u golang.org/x/tools/cmd/goimports
sudo go get -u golang.org/x/tools/cmd/godoc
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Обратите внимание, что &quot;godoc&quot; нуждается в &quot;sudo&quot;, т.к. ставятся в системную директорию, остальные будут установлены в локальный &quot;GOPATH&quot;. Я бы посоветовал ставить &quot;godoc&quot; последним, что бы он не создавал директорий с правами root.&lt;br /&gt;&lt;br /&gt;Из плагинов Emacs понадобятся следующие: &lt;a href=&quot;http://melpa.org/#/go-mode&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-mode&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-eldoc&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-eldoc&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/company&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;company&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/company-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;company-go&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/yasnippet&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;yasnippet&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-rename&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-rename&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/multi-compile&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;multi-compile&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/flycheck&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;flycheck&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/gotest&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;gotest&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-scratch&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-scratch&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-direx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-direx&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-guru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-guru&lt;/a&gt;.&lt;br /&gt;&lt;ul class=&quot;&quot;&gt;&lt;br /&gt;&lt;li&gt;Как альтернативу company и company-go можно использовать &lt;a href=&quot;http://melpa.org/#/auto-complete&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;auto-complete&lt;/a&gt; и &lt;a href=&quot;http://melpa.org/#/go-autocomplete&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-autocomplete&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Flycheck заменяется &lt;a href=&quot;http://melpa.org/#/flymake-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;flymake-go&lt;/a&gt;, так же посмотрите на &lt;a href=&quot;http://melpa.org/#/golint&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;golint&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-errcheck&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-errcheck&lt;/a&gt; и &lt;a href=&quot;http://melpa.org/#/govet&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;govet&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Вместо go-scratch иногда используют &lt;a href=&quot;http://melpa.org/#/go-playground&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-playground&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Полная настройка специфичная для go-mode режима выглядит у меня вот так:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;company&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;flycheck&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;yasnippet&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;multi-compile&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;go-eldoc&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;company-go&lt;/span&gt;)

(add-hook 'before-save-hook 'gofmt-before-save)
(setq-default gofmt-command &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;goimports&quot;&lt;/span&gt;)
(add-hook 'go-mode-hook 'go-eldoc-setup)
(add-hook 'go-mode-hook (&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; ()
                            (set (make-local-variable 'company-backends) '(company-go))
                            (company-mode)))
(add-hook 'go-mode-hook 'yas-minor-mode)
(add-hook 'go-mode-hook 'flycheck-mode)
(setq multi-compile-alist '(
    (go-mode . (
(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go-build&quot;&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go build -v&quot;&lt;/span&gt;
   (locate-dominating-file buffer-file-name &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;.git&quot;&lt;/span&gt;))
(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go-build-and-run&quot;&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go build -v &amp;amp;&amp;amp; echo 'build finish' &amp;amp;&amp;amp; eval ./${PWD##*/}&quot;&lt;/span&gt;
   (multi-compile-locate-file-dir &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;.git&quot;&lt;/span&gt;))))
    ))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Go mode&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Теперь по порядку. &lt;a href=&quot;http://melpa.org/#/go-mode&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Go-mode&lt;/a&gt; - базовый пакет, вокруг которого строится остальное. Кроме подсветки, он приносит с собой поддержку команд:&lt;br /&gt;&lt;ul class=&quot;&quot;&gt;&lt;br /&gt;&lt;li&gt;M-x godef-jump (C-c C-j) - перейти к реализации функции под курсором (вернуться назад, можно через M-*)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x godef-jump-other-window (C-x 4 C-c C-j) - аналогично &quot;godef-jump&quot; только открывается в новом окне&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x godoc-at-point - покажет документацию по команде под курсором&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-goto-imports (C-c C-f i) - перейти к секции &quot;import&quot; текущего файла&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-goto-function (C-c C-f f) - перейти к началу функции, внутри которой находится курсор&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-goto-arguments (C-c C-f a) - перейти к аргументам текущей функции&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-goto-docstring (C-c C-f d) - перейти к комментариям функции&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-goto-return-values (C-c C-f r) - перейти к описанию возвращаемого значения для функции&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x beginning-of-defun (C-M-a) - перейти к началу функции&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x end-of-defun (C-M-e) - перейти к концу функции&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Есть базовая поддержка imenu для функций и типов&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Форматирование исходников я делаю через &quot;&lt;a href=&quot;https://godoc.org/golang.org/x/tools/cmd/goimports&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;goimports&lt;/a&gt;&quot;, который установили выше. Он помимо собственно форматирования, умеет добавлять необходимые импорты в текущем файле и вычищать неиспользуемые. Удобно вызывать его автоматически, при сохранении:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(add-hook 'before-save-hook 'gofmt-before-save)
(setq-default gofmt-command &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;goimports&quot;&lt;/span&gt;)
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Вручную вызывается через &quot;M-x gofmt&quot;.&lt;br /&gt;Вот как это выглядит:&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://3.bp.blogspot.com/-eh18DmjIbO4/V0t1EBD8aKI/AAAAAAAAAnM/vAJ358g43N4hoWkz7XKMUj4MvYjDp-QkwCLcB/s1600/1_gofmt.gif&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Go eldoc&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Плагин &lt;a href=&quot;http://melpa.org/#/go-eldoc&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-eldoc&lt;/a&gt; - умеет показывать в строке состояния информацию о переменной или аргументе\возвращаемом значении функции находящейся под курсором. Фактически документация по сигнатурам. Скриншот я нагло украл у автора:&lt;br /&gt;&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-efPHpkBXttI/V0t11eutItI/AAAAAAAAAnw/tir3rr-jigseBvCYkaZc1IljCCnpyhUowCLcB/s1600/2_go-eldoc.png&quot; rel=&quot;nofollow&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;497&quot; src=&quot;https://1.bp.blogspot.com/-efPHpkBXttI/V0t11eutItI/AAAAAAAAAnw/tir3rr-jigseBvCYkaZc1IljCCnpyhUowCLcB/s640/2_go-eldoc.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Для настройки добавьте вот такие строки:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;go-eldoc&lt;/span&gt;)
(add-hook 'go-mode-hook 'go-eldoc-setup)
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Автодополнение&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Я предпочитаю для автодополнения &lt;a href=&quot;http://melpa.org/#/company&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;company&lt;/a&gt;, поэтому ставим ещё &lt;a href=&quot;http://melpa.org/#/company-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;company-go&lt;/a&gt; и добавляем в конфиг:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;company&lt;/span&gt;)
(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;company-go&lt;/span&gt;)
(add-hook 'go-mode-hook (&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; ()
                            (set (make-local-variable 'company-backends) '(company-go))
                            (company-mode)))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Это единственная специфичная настройка для Go, сам &quot;company&quot;, кто пользуется им, настраивать умеют.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://2.bp.blogspot.com/-UOxmwgu7DVk/V0t6h8GOlwI/AAAAAAAAAoI/9BlJROYO8nMhER2B5nTdFrvDq2XblZPdgCLcB/s640/3_company.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Если вам нравится &lt;a href=&quot;http://melpa.org/#/auto-complete&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;auto-complete&lt;/a&gt;, то для go понадобиться &lt;a href=&quot;http://melpa.org/#/go-autocomplete&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-autocomplete&lt;/a&gt;, а настройка описана &lt;a href=&quot;https://github.com/nsf/gocode#emacs-setup&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;вот тут&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Сниппеты&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Тут стандарт - &lt;a href=&quot;http://melpa.org/#/yasnippet&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;yasnippet&lt;/a&gt;, который поставляется с поддержкой Go, если у вас &quot;yasnippet&quot; не включён глобально, достаточно добавить хук для go-mode:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;yasnippet&lt;/span&gt;)
(yas-reload-all)
(add-hook 'go-mode-hook 'yas-minor-mode)
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Доступные сниппеты смотрите в &lt;a href=&quot;https://github.com/AndreaCrotti/yasnippet-snippets/tree/master/go-mode&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;репозитории&lt;/a&gt;. Если вас они не удовлетворяют, существуют альтернативные наборы: &lt;a href=&quot;https://github.com/dominikh/yasnippet-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;yasnippet-go&lt;/a&gt; и &lt;a href=&quot;https://github.com/toumorokoshi/go-snippets&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-snippets&lt;/a&gt;, но там, на мой вкус, ничего интересного.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://2.bp.blogspot.com/-NCEqhmgRyp4/V0t1EJ9EkSI/AAAAAAAAAns/c7RqxImmr8UZhG3qcuhmRO8WaAV---DLQCKgB/s1600/4_snippets.gif&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Переименование функций и структур&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Переименование самый используемый из методов рефакторинга. Он поддерживается плагином &lt;a href=&quot;http://melpa.org/#/go-rename&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-rename&lt;/a&gt; и вызывается при помощи &quot;M-x go-rename&quot;. Из недостатков - go-rename не работает, если в проекте есть синтаксические ошибки.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://3.bp.blogspot.com/-_gtcEQjQYuY/V0t1EYR2wlI/AAAAAAAAAns/791k28bIe5c1Krt2iBEDzRJZpP9FLcxsQCKgB/s1600/5_rename.gif&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Подсветка ошибок&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Сильно ускоряет разработку - подсветка ошибок до компиляции. Для этого ставим &lt;a href=&quot;http://melpa.org/#/flycheck&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;flycheck&lt;/a&gt; и делаем общие настройки, по необходимости. Затем переключаемся в буфер &lt;b&gt;в котором включен режим go-mode&lt;/b&gt; и проверяем, что flycheck видит все необходимые утилиты: &quot;M-x flycheck-verify-setup&quot;, у меня получилось так:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;  go-gofmt
    - predicate:  t
    - executable: Found at /usr/bin/gofmt
  go-golint
    - predicate:  t
    - executable: Found at /home/user/go/bin/golint
  go-vet
    - predicate:  t
    - executable: Found at /usr/bin/go
  go-build
    - predicate:  t
    - executable: Found at /usr/bin/go
  go-test
    - predicate:  nil
    - executable: Found at /usr/bin/go
  go-errcheck
    - predicate:  t
    - executable: Found at /home/user/go/bin/errcheck
Flycheck Mode is enabled.
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Если что-то не найдено, то вы поставили не все утилиты из списка в начале статьи или не добавили их в PATH. go-test тут не включён, т.к. он срабатывает только для файлов имя которых оканчивается на &quot;_test.go&quot;.&lt;br /&gt;&lt;br /&gt;Настройка заключается в том, что бы включить &quot;flycheck-mode&quot; для режима go:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;flycheck&lt;/span&gt;)
(add-hook 'go-mode-hook 'flycheck-mode)
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Об общих настройках flycheck, я надеюсь рассказывать не нужно.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://1.bp.blogspot.com/-miyIGJfhCc4/V0t1ERkBjXI/AAAAAAAAAns/eCPKwXYQXtYEcGkhTginTrTrvu7BZOQqACKgB/s1600/6_flycheck.gif&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Поклонники flymake - сделают аналогичное при помощи пакета &lt;a href=&quot;http://melpa.org/#/flymake-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;flymake-go&lt;/a&gt; (инструкции по настройке у &lt;a href=&quot;https://github.com/robert-zaremba/flymake-go&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;автора в репозитории&lt;/a&gt;), а так же &lt;a href=&quot;https://github.com/dougm/goflymake&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;goflymake&lt;/a&gt;. При желании посмотрите на &lt;a href=&quot;http://melpa.org/#/golint&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;golint&lt;/a&gt;, &lt;a href=&quot;http://melpa.org/#/go-errcheck&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-errcheck&lt;/a&gt; и &lt;a href=&quot;http://melpa.org/#/govet&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;govet&lt;/a&gt;. Но на мой взгляд flycheck функциональнее.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Компиляция и запуск&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Тут сразу две проблемы:&lt;br /&gt;&lt;ul class=&quot;&quot;&gt;&lt;br /&gt;&lt;li&gt;Стандартный модуль &lt;a href=&quot;https://www.emacswiki.org/emacs/CompileCommand&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;compile&lt;/a&gt; позволяет настроить только одну команду для режима. А я хочу меню с компиляцией, компиляцией и запуском, запуском тестов и т.п.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Я перерыл пол интернета и не нашёл способ обнаружения корня проекта на Go. Если у вас сложная иерархия проекта и открыт файл внутри этого проекта - найти место где нужно грубо говоря запустить build это та ещё задачка.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Первая проблема решается при помощи плагина &lt;a href=&quot;http://melpa.org/#/multi-compile&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;multi-compile&lt;/a&gt;, подробнее читайте в &lt;a href=&quot;http://reangdblog.blogspot.com/2016/02/emacs-multi-compile.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;этой статье&lt;/a&gt;. А вот вторая в каждом конкретном случае решается особо. Для себя я решил считать корнем проекта ту директорию, где лежит &quot;.git&quot;, поскольку любой проект начинаю с &quot;git init&quot;. А для экспериментов с языком - использую go-scratch.&lt;br /&gt;&lt;br /&gt;Настройка для плагина multi-compile выглядит вот так:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;multi-compile&lt;/span&gt;)
(setq multi-compile-alist '(
    (go-mode . (
(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go-build&quot;&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go build -v&quot;&lt;/span&gt;
   (locate-dominating-file buffer-file-name &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;.git&quot;&lt;/span&gt;))
(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go-build-and-run&quot;&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;go build -v &amp;amp;&amp;amp; echo 'build finish' &amp;amp;&amp;amp; eval ./${PWD##*/}&quot;&lt;/span&gt;
   (multi-compile-locate-file-dir &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;.git&quot;&lt;/span&gt;))))
    ))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Да, на первый взгляд - сложно, но если разобраться, то не очень.&lt;br /&gt;&lt;br /&gt;Тут написано что для файла открытого в режиме &quot;go-mode&quot; добавить два пункта меню &quot;go-build&quot; и &quot;go-build-and-run&quot; . Первый вызывает консольную команду &quot;go build -v&quot;. Второй &quot;go build -v &amp;amp;&amp;amp; echo 'build finish' &amp;amp;&amp;amp; eval ./${PWD##*/}&quot;.&lt;br /&gt;&lt;br /&gt;Как рабочая директория у обеих команд устанавливается та, внутри которой лежит &quot;.git&quot;, т.е. если у нас открыт файл &quot;~/go/go1/go.go&quot; плагин поищет директорию &quot;.git&quot; внутри &quot;~/go/go1/&quot;, если не найдёт, ищет уровнем выше - в &quot;~/go/&quot;. Как только нужная директория найдена - она считается рабочей из которой и вызваются скрипты.&lt;br /&gt;&lt;br /&gt;Теперь о страшных bash командах: &quot;go build -v&quot; вопросов не вызовет - стандартная компиляция проекта. А вот вторая сложнее:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;go build -v &amp;amp;&amp;amp; &lt;span style=&quot;color: #657b83; font-style: italic; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;'build finish'&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #657b83; font-style: italic; font-weight: bold;&quot;&gt;eval&lt;/span&gt; ./${&lt;span style=&quot;color: #268bd2;&quot;&gt;PWD&lt;/span&gt;##*/}
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Конструкция &quot;${PWD##*/}&quot; разворачивается в имя последнего элемента текущей директории. Н-р для &quot;~/go/super_project&quot;, получим &quot;super_project&quot;. Т.е. для этого примера, команда превращается вот в это:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;go build -v &amp;amp;&amp;amp; &lt;span style=&quot;color: #657b83; font-style: italic; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;'build finish'&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #657b83; font-style: italic; font-weight: bold;&quot;&gt;eval&lt;/span&gt; ./super_project
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Теперь читается проще - компилируем, пишем в консоль, что компиляция завершилась и запускаем получившийся бинарник. Go по умолчанию называет бинарник по имени директории, где находится проект, в нашем случае это &quot;super_project&quot;.&lt;br /&gt;&lt;br /&gt;Меню с командами компиляции вызывается вот так: M-x multi-compile.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://1.bp.blogspot.com/-eO4KeLDmkL8/V0t1ETMIs3I/AAAAAAAAAns/Z2P2iZh04kUGfPIqoAKi0S53sID57hS3wCKgB/s1600/7_compile.gif&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Больше примеров настройки на &lt;a href=&quot;https://github.com/ReanGD/emacs-multi-compile&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Тестирование&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Я для тестирования пользуюсь &lt;a href=&quot;http://goconvey.co/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;goconvey&lt;/a&gt;, который умеет самостоятельно обнаруживать изменения в файлах, и перезапускать тесты. Но часто запуск всего набора тестов - лишнее действие, которое сильно грузит процессор и заставляет менять контекст переключаясь в браузер. Поэтому хочется иметь возможность запустить только один тест или все тесты в данном файле оставаясь в Emacs. В этом нам поможет пакет &lt;a href=&quot;http://melpa.org/#/gotest&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;gotest&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Дополнительной настройки он не требует (ну может только горячие клавиши назначить). Умеет он следующее:&lt;br /&gt;&lt;ul class=&quot;&quot;&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-test - запустить тест внутри которого находится курсор&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-file - запустить тесты внутри текущего файла&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-project - запустить тесты для текущего проекта&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-benchmark - по аналогии - запустить бенчмарк внутри которого находится курсор&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-file-benchmarks - запустить бенчмарки в файле&lt;/li&gt;&lt;br /&gt;&lt;li&gt;M-x go-test-current-project-benchmarks - запустить бенчмарки в проекте&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Локальный Go Playground&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Что-бы попробовать как работает та или иная часть Go, обычно пользуются &lt;a href=&quot;https://play.golang.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;play.golang.org&lt;/a&gt;, но у него большой недостаток - он работает в браузере, это не удобно. А локально создавать проект для каждой мелочи лень. Эту нишу покрывает плагин &lt;a href=&quot;http://melpa.org/#/go-scratch&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-scratch&lt;/a&gt;. После команды &quot;M-x go-scratch&quot; откроется новый буфер с заготовкой функции main. Компиляция запускается сочетанием клавиш &quot;C-c C-c&quot;.&lt;br /&gt;&lt;br /&gt;Существует похожий плагин &lt;a href=&quot;http://melpa.org/#/go-playground&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-playground&lt;/a&gt;, но мне он не понравился, т.к. физически создаёт файл на диске, а чистить за ним не хочется.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Отображение структуры кода&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Если вас не устраивает imenu, поддержку которого добавляет go-mode, то воспользуйтесь &lt;a href=&quot;http://melpa.org/#/go-direx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-direx&lt;/a&gt;, который, нужно отдать должное, покажет структуру текущего кода в гораздо более наглядном виде. Как-то настраивать его не нужно, достаточно вызвать &quot;M-x go-direx-switch-to-buffer&quot;.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://4.bp.blogspot.com/-XlpwoX98k34/V0t1EmJJNzI/AAAAAAAAAns/jYXCqMBabCIAjt2eoYTm_iU9W5HHxz5jwCKgB/s1600/8_go_direx.gif&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;&quot;&gt;&lt;h2&gt;Go guru&lt;/h2&gt;&lt;div class=&quot;&quot;&gt;Я не могу не упомянуть ещё об одном плагине - &lt;a href=&quot;http://melpa.org/#/go-guru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;go-guru&lt;/a&gt;. Он умеет много интересных и полезных вещей, но в рамки статьи они не поместятся. Подробно почитать о них можно в &lt;a href=&quot;http://golang.org/s/oracle-user-manual&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;oracle-user-manual&lt;/a&gt;, там правда речь идёт о предыдущем названии &quot;go-oracle&quot;, сейчас проект переименован в &quot;go-guru&quot;, но суть осталась прежней.&lt;br /&gt;&lt;br /&gt;Для затравки покажу как найти места откуда вызывается функция. Вызываем:&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;M-x go-guru-set-scope
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;И вводим пакет с которым работает (в моём случае это &quot;github.com/ReanGD/go-web-search&quot;). После этого ставим курсор на интересующую функцию и вызываем&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;M-x go-guru-callers
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;В отдельном буфере отобразиться список мест откуда функция вызывается. На gif надеюсь понятнее:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://4.bp.blogspot.com/-vyWp3ybgpOA/V0t1ErGwFuI/AAAAAAAAAns/AZCDzKU_3TMS2P9IQNbX7hnV272c7ljVQCKgB/s1600/9_go_guru.gif&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Из недостатков - работает медленно, но в любом случае - руками делать подобные вещи дольше. И как я слышал, авторы сейчас серьёзно взялись за проект, надеюсь работать станет удобнее и быстрее.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name=&quot;cutid1-end&quot;&gt;&lt;/a&gt;</content>
		<author>
			<name>reangd</name>
			<uri>https://ru-emacs.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Обсуждаем (X)Emacs на русском</title>
			<subtitle type="html">Обсуждаем (X)Emacs на русском</subtitle>
			<link rel="self" href="https://ru-emacs.livejournal.com/data/atom"/>
			<id>urn:lj:livejournal.com:atom1:ru_emacs</id>
		</source>
	</entry>

	<entry>
		<title type="html">Emacs LJ community: Мой первый пакет для Emacs: multi-compile</title>
		<link href="https://ru-emacs.livejournal.com/85406.html"/>
		<id>urn:lj:livejournal.com:atom1:ru_emacs:85406</id>
		<updated>2015-10-06T20:07:18+00:00</updated>
		<content type="html">&lt;p&gt;(оригинал: &lt;a href=&quot;http://reangdblog.blogspot.com/2015/10/emacs-multi-compile.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ReanGDblog&lt;/a&gt;)&lt;br /&gt;Я часто пишу заметки о Emacs, в формате: скопируйте вот эти строки подкорректируйте под себя, вставьте в конфиг, установите ещё вот этот плагин и т.п. Сегодня решил выйти на &quot;новый уровень&quot; и сделал полноценный пакет для Emacs и что бы нанести пользу максимально большой аудитории - разместил его в &lt;a href=&quot;http://melpa.org/&quot; rel=&quot;nofollow&quot;&gt;melpa&lt;/a&gt;. Конечно подготовить его несколько сложнее, чем просто пример конфига для блога, но для меня это своеобразное возвращение долгов за используемые мной open-source решения.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Начну с описания проблемы. Для компиляции проектов обычно используют стандартный модуль &lt;a href=&quot;http://www.emacswiki.org/emacs/CompileCommand&quot; rel=&quot;nofollow&quot;&gt;compile&lt;/a&gt;. Если вкратце то для его настройки нужно для интересующего вас режима переопределить локальную переменную compile-command командой, которую модуль compile выполнит при компиляции. Допустим для &quot;c++-mode&quot; она может быть вот такой:&lt;/p&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;make --no-print-directory -C 
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Проблема подхода в том, что одной команды не хватает, часто помимо компиляции требуется ещё запуск тестов, компиляция в release\debug, запуск скомпилированного кода и т.п. Как вариант решения предлагают создавать для каждого режима свой набор функций, по одной на каждый подобный use case, где будет вызываться &quot;compile&quot; с нужными параметрами и потом вешать их на горячие клавиши. Это мягко говоря не удобно, поскольку все простые сочетания давно заняты, а запоминать 5-6 новых пальцедробительных не хочется.&lt;/p&gt;&lt;p&gt;Мне кажется удобным решением было бы при компиляции показывать меню со всеми вариантами действий, что собственно я и реализовал, выглядит это вот так:&lt;/p&gt;&lt;a href=&quot;http://ic.pics.livejournal.com/reangd/75072032/552/552_original.png&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://ic.pics.livejournal.com/reangd/75072032/552/552_900.png&quot; title=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Настройка для именно этого меню:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(&lt;span style=&quot;color: #859900; font-weight: bold;&quot;&gt;require&lt;/span&gt; '&lt;span style=&quot;color: #268bd2; font-weight: bold;&quot;&gt;multi-compile&lt;/span&gt;)

(setq multi-compile-alist '(
    (rust-mode . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-debug&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-release&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run --release&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-test&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo test&quot;&lt;/span&gt;)))
    ))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ну и перед включением конечно нужно установить пакет, (предварительно подключив Melpa репозиторий, если его у вас нет):&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;M-x package-install multi-compile
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;В командах компиляции можно использовать шаблоны:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(setq multi-compile-alist '(
    (c++-mode . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cpp-run&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;make --no-print-directory -C %make-dir&quot;&lt;/span&gt;)))
    (rust-mode . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-debug&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-release&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run --release&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-test&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo test&quot;&lt;/span&gt;)))
    ))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Полный список реализованных шаблонов вот такой:&lt;br /&gt;&lt;ul class=&quot;&quot;&gt;&lt;br /&gt;&lt;li&gt;&quot;%path&quot; - &quot;/tmp/prj/file.rs&quot; - полный путь к открытому файлу.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&quot;%dir&quot; - &quot;&lt;i&gt;tmp/prj&lt;/i&gt;&quot; - директория, где он лежит.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&quot;%file-name&quot; - &quot;file.rs&quot; - имя текущего файла.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&quot;%file-sans&quot; - &quot;file&quot; - имя без расширения.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&quot;%file-ext&quot; - &quot;rs&quot; - расширение файла.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&quot;%make-dir&quot; - &quot;&lt;i&gt;tmp&lt;/i&gt;&quot; - просматривается вся иерархия директорий текущего файла и возвращается та, в которой лежит &quot;Makefile&quot;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Шаблоны файлов не обязательно задавать для всего режима, можно использовать регулярные выражения для имени файла:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;(setq multi-compile-alist '(
    (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;\\.txt\\'&quot;&lt;/span&gt; . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;text-filename&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;echo %file-name&quot;&lt;/span&gt;)))
    (c++-mode . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cpp-run&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;make --no-print-directory -C %make-dir&quot;&lt;/span&gt;)))
    (rust-mode . ((&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-debug&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-release&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo run --release&quot;&lt;/span&gt;)
                  (&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;rust-test&quot;&lt;/span&gt; . &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;cargo test&quot;&lt;/span&gt;)))
    ))
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Теперь по отображаемому меню: по умолчанию оно формируется через ido, но можно использовать helm, а для сторонников default конфигурации Emacs есть опция &quot;default&quot;:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;&quot;&gt;&lt;br /&gt;&lt;pre class=&quot;&quot;&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;;;&lt;/span&gt;&lt;span style=&quot;color: #93a1a1;&quot;&gt;(setq multi-compile-completion-system 'ido)&lt;/span&gt;
(setq multi-compile-completion-system 'helm)
&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #93a1a1;&quot;&gt;(setq multi-compile-completion-system 'default)&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ну и собственно вызов меню компиляции осуществляется через &quot;M-x multi-compile-run&quot;. Какие-то горячие клавиши я добавлять не стал, каждый добавит свои по вкусу.&lt;br /&gt;&lt;br /&gt;Если кому интересно, то исходники лежат &lt;a href=&quot;https://github.com/ReanGD/emacs-multi-compile&quot; rel=&quot;nofollow&quot;&gt;на github&lt;/a&gt; и вот ссылка на сам пакет &lt;a href=&quot;http://melpa.org/#/multi-compile&quot; rel=&quot;nofollow&quot;&gt;multi-compile&lt;/a&gt; на Melpa.&lt;br /&gt;&lt;a name=&quot;cutid1-end&quot;&gt;&lt;/a&gt;</content>
		<author>
			<name>reangd</name>
			<uri>https://ru-emacs.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Обсуждаем (X)Emacs на русском</title>
			<subtitle type="html">Обсуждаем (X)Emacs на русском</subtitle>
			<link rel="self" href="https://ru-emacs.livejournal.com/data/atom"/>
			<id>urn:lj:livejournal.com:atom1:ru_emacs</id>
		</source>
	</entry>

	<entry>
		<title type="html">Alexander Sviridov: Встречайте: undercover.el</title>
		<link href="http://sviridov.github.io/blog/2014/10/06/meet-undercover-dot-el/"/>
		<id>http://sviridov.github.io/blog/2014/10/06/meet-undercover-dot-el</id>
		<updated>2014-10-06T10:23:27+00:00</updated>
		<content type="html">&lt;p&gt;В арсенале &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top&quot;&gt;Emacs Lisp&lt;/a&gt; разработчика доступна весьма неплохая коллекция инструментов для тестирования: &lt;a href=&quot;https://github.com/rejeep/evm&quot;&gt;evm&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/software/emacs/manual/html_node/ert/&quot;&gt;ert&lt;/a&gt;, &lt;a href=&quot;https://github.com/ecukes/ecukes&quot;&gt;ecukes&lt;/a&gt;, &lt;a href=&quot;https://github.com/cask/cask&quot;&gt;Cask&lt;/a&gt;, &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt; и многое-многое другое.&lt;/p&gt;

&lt;p&gt;Сегодня я рад анонсировать &lt;a href=&quot;https://github.com/sviridov/undercover.el&quot;&gt;undercover.el&lt;/a&gt; – новую библиотеку, рассчитывающую покрытие тестами файлов вашего &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html#Top&quot;&gt;Emacs Lisp&lt;/a&gt; проекта и визуализирующую результат с помощью сервиса &lt;a href=&quot;https://coveralls.io/&quot;&gt;Coveralls&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://sviridov.github.io/images/posts/undercover-and-coveralls.png&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;




&lt;p&gt;Добавить &lt;a href=&quot;https://github.com/sviridov/undercover.el&quot;&gt;undercover.el&lt;/a&gt; в ваш проект очень просто:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Добавьте свой репозиторий в &lt;a href=&quot;https://coveralls.io/&quot;&gt;Coveralls&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Добавьте &lt;a href=&quot;https://github.com/sviridov/undercover.el&quot;&gt;undercover.el&lt;/a&gt; в &lt;a href=&quot;https://github.com/cask/cask&quot;&gt;Cask&lt;/a&gt; файл проекта:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;common-lisp&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;gnu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;melpa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;package-file&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;awesome-package.el&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;depends-on&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;undercover&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ul&gt;
&lt;li&gt;Перед тем как загрузить ваш проект для тестирования (например, в файле &lt;code&gt;test/test-helper.el&lt;/code&gt;, если вы используете &lt;a href=&quot;https://github.com/rejeep/ert-runner.el&quot;&gt;ert-runner&lt;/a&gt;), укажите, для каких файлов будет выполняться проверка покрытия тестами:&lt;/li&gt;
&lt;/ul&gt;


&lt;figure class=&quot;code&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;code class=&quot;common-lisp&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;'undercover&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;undercover&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*.el&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;awesome-extensions/*.el&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:exclude&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*-test.el&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;'awesome-package&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ul&gt;
&lt;li&gt;Все! При следующей сборке проекта в &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt; отчет по покрытию тестами будет автоматически сформирован и отправлен.&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Свиридов Александр</name>
			<uri>http://sviridov.github.io/</uri>
		</author>
		<source>
			<title type="html">Category: Emacs | Свиридов Александр</title>
			<link rel="self" href="http://sviridov.github.io/blog/categories/emacs/atom.xml"/>
			<id>http://sviridov.github.io/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Michael Kazarian: python-mode, памятка</title>
		<link href="http://mkazarian.blogspot.com/2011/12/python-mode.html"/>
		<id>tag:blogger.com,1999:blog-660391924419264317.post-7813923557722820914</id>
		<updated>2014-09-29T14:17:59+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;cedet из cvs теперь принудительно дергает python.el (он у меня в /usr/share/emacs/23.1/lisp/progmodes), который конфликтует с python-mode.el, который мне нравится больше. Лечится правкой cedet/semantic/wisent/wisent-python.el Находится строчка (require 'python nil t) и комментируется. При желании перекомпилируется.&lt;br /&gt;Нормальная работа восстановлена и глюков пока не замечено.&lt;br /&gt;&lt;/div&gt;</content>
		<author>
			<name>Michael Kazarian</name>
			<email>noreply@blogger.com</email>
			<uri>http://mkazarian.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Michael Kazarian's blog about IT-related things</title>
			<link rel="self" href="http://www.blogger.com/feeds/660391924419264317/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-660391924419264317</id>
		</source>
	</entry>

	<entry>
		<title type="html">Alexander Sviridov: Emacs Lisp Style Guide</title>
		<link href="http://sviridov.github.io/blog/2014/09/07/emacs-lisp-style-guide/"/>
		<id>http://sviridov.github.io/blog/2014/09/07/emacs-lisp-style-guide</id>
		<updated>2014-09-07T05:56:53+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/bbatsov&quot;&gt;Божидар Батсов&lt;/a&gt; на днях стартовал &lt;a href=&quot;https://github.com/bbatsov/emacs-lisp-style-guide&quot;&gt;Emacs Lisp Style Guide&lt;/a&gt;. Присоединяйтесь!&lt;/p&gt;</content>
		<author>
			<name>Свиридов Александр</name>
			<uri>http://sviridov.github.io/</uri>
		</author>
		<source>
			<title type="html">Category: Emacs | Свиридов Александр</title>
			<link rel="self" href="http://sviridov.github.io/blog/categories/emacs/atom.xml"/>
			<id>http://sviridov.github.io/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Ilya Zonov: EDE боль</title>
		<link href="http://puzan.info/linux/2014-08-19-ede-bol.html"/>
		<id>tag:puzan.info,2014-08-19:linux/2014-08-19-ede-bol.html</id>
		<updated>2014-08-18T20:00:00+00:00</updated>
		<content type="html">&lt;p&gt;Примерно раз  в год я возвращаюсь  к работе над некоторыми  &lt;em&gt;C/C++&lt;/em&gt; проектами. И
каждый  раз я  сталкиваюсь с  неудобствами работы  &lt;strong&gt;CEDET +  EDE&lt;/strong&gt;.  Сначала  я
попробую описать  свои невзгоды, а в  конце предложу свой вариант  сделать жизнь
чуточку лучше. Комментарии приветствуются.&lt;/p&gt;
&lt;p&gt;Какова вообще задача  использовать &lt;em&gt;EDE&lt;/em&gt;? Я хочу указать  где-то все зависимости
для конкретного проекта и передать эту  информацию в &lt;em&gt;semantic&lt;/em&gt; для навигации по
коду  и авто  дополнений. И  есть (по-моему  здравое) желание  не смешивать  эту
информацию для  различных проектов. По-идее  большего от  &lt;em&gt;EDE&lt;/em&gt; мне не  надо. Ну
может еще команду для сборки  проекта добавить. Хотя предпочитаю делать подобное
в  отдельно  взятой  консоли.  Итак,   что  нам  предлатает  &lt;em&gt;Emacs  Development
Environment&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Пара  слов про  проекты по-умолчанию  (то  что создается  с помощью  &lt;code&gt;ede-new&lt;/code&gt;).
Больше  всего меня  бесит  настройка через  &lt;em&gt;customize&lt;/em&gt;-подобный интерфейс.   Им
вообще не пользоваться  для настройки &lt;strong&gt;Emacs'а&lt;/strong&gt; в принципе.   Если пойдешь сам
что-то  править в  &lt;em&gt;EDE&lt;/em&gt;  файле, то  точно натолкнешься  на  беду.  Как  минимум
придется перезапускать &lt;strong&gt;Emacs&lt;/strong&gt;  или пересоздавать проект.  Кроме  того, либо я
что-то  потерял, либо  в проекте  по-умолчанию нельзя  указать список  &lt;em&gt;include&lt;/em&gt;
папок.   Смысла в  данном  типе EDE-проекта  на мой  взгляд  нет.  Можно  видимо
использовать  его для  генерации &lt;em&gt;make&lt;/em&gt;-файлов,  но как  показывает практика  их
писать и поддерживать лучше самому.  &lt;strong&gt;Automake&lt;/strong&gt; и подобное вам в помощь.&lt;/p&gt;
&lt;p&gt;Также  с помощью  &lt;em&gt;EDE&lt;/em&gt; можно  добавить  и работать  с некоторыми  существующими
проектами. Например,  есть проекты для &lt;em&gt;C/C++&lt;/em&gt;  (&lt;code&gt;ede-cpp-root-project&lt;/code&gt;), &lt;em&gt;Java&lt;/em&gt;
(&lt;code&gt;ede-java-root-project&lt;/code&gt;)  и  другие.   В  них как  раз  можно  указать  внешние
зависимости, и Semantic  с переменным успехом их обрабатывает. Но  есть одно но:
почему-то  эти  настройки  нельзя  положить в  &lt;code&gt;Project.ede&lt;/code&gt;  файл  для  полного
счастья.&lt;/p&gt;
&lt;p&gt;Видел такое решение:  указать настройки всех проектов  в конфигурационных файлах
&lt;strong&gt;Emacs&lt;/strong&gt;.  Это мне  тоже не нравится.  Моя &lt;strong&gt;Emacs&lt;/strong&gt; конфигурация  все пухнет и
пухнет,  как я  не пытаюсь  ее аккуратно  структурировать.  Если  еще там  будет
информация о всех проектах жизнь станет ужасна.&lt;/p&gt;
&lt;p&gt;Была  у  меня  идея  положить  все настройки  в  &lt;code&gt;.dir-locals.el&lt;/code&gt;.   Но  тут  мы
сталкиваемся с  проблемой множественного создания  одного и того же  проекта для
каждого  открытого файла.   По-идее можно  написать всю  обработку этого  случая
внутри &lt;code&gt;.dir-locals.el&lt;/code&gt;,  но так пришлось бы  тянуть и копировать это  решение в
каждый проект. Не айс. Хочется более универсального решения.&lt;/p&gt;
&lt;p&gt;В общем к чему это я все. Для себя я написал небольшой хук для &lt;em&gt;c-mode&lt;/em&gt;, который
загружает конфигурацию проекта из &lt;code&gt;.Project&lt;/code&gt; файла, если он еще не был загружен.
Также он  обновляет список &lt;em&gt;include&lt;/em&gt;  путей для &lt;code&gt;clang&lt;/code&gt;, который  используется в
&lt;code&gt;auto-complete-clang&lt;/code&gt; и &lt;code&gt;flycheck&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;init/project-update&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;let*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;proj-file&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;.Project&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-current-project&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;proj-dir-tmp&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;locate-dominating-file&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;buffer-file-name&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;proj-dir&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir-tmp&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;expand-file-name&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir-tmp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;root-dir&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt;
                     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;expand-file-name&lt;/span&gt;
                      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-project-root-directory&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))))&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;equal&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;root-dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;load project %s&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;default-directory&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;load&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;expand-file-name&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;proj-file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))))&lt;/span&gt;

  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;let*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-current-project&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;root-dir&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt;
                     &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-project-root-directory&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;root-dir&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;flycheck-clang-include-path&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mapcar&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;concat&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;root-dir&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;oref&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ede-proj&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;include-path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;make-variable-buffer-local&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;'ac-clang-flags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ac-clang-flags&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mapcar&lt;/span&gt;
             &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
               &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;concat&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;-I&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
             &lt;span class=&quot;nv&quot;&gt;flycheck-clang-include-path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;А сам  .Project файл лежит  в корне проекта  и содержит только  описание проекта
(как видите реальной проверки на это нету). Например вот такое:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ede-cpp-root-project&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;NewProject&quot;&lt;/span&gt;
                      &lt;span class=&quot;ss&quot;&gt;:name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;NewProject&quot;&lt;/span&gt;
                      &lt;span class=&quot;ss&quot;&gt;:file&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Makefile&quot;&lt;/span&gt;
                      &lt;span class=&quot;ss&quot;&gt;:include-path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/inc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;ss&quot;&gt;:system-include-path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/usr/include/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                      &lt;span class=&quot;ss&quot;&gt;:spp-table&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;PROJECT_EXPORT&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;В душе я надеюсь, что я что-то делаю не так, что все в реальности легко и просто
настраивается. Что  на самом деле  я просто где-то пропустил  правильный вариант
настройки  в  мануале &lt;em&gt;CEDET&lt;/em&gt;.   Если  это  действительно  так, укажите  на  мою
ошибку. Если же эти хуки являются единственным вариантом для удовлетворения моих
запросов,  то  оформлю  минорный   мод  для  поддержки  автоматической  загрузки
проектов.  В общем  делитесь вашими вариантами и  впечатлениями от использования
&lt;em&gt;EDE&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;P.S. Все  эти негативные  впечатления от использования  &lt;em&gt;EDE&lt;/em&gt; видимо  возникли в
результате годового использования &lt;strong&gt;Eclipse&lt;/strong&gt; и &lt;strong&gt;Idea&lt;/strong&gt; для программирования на
&lt;em&gt;Java&lt;/em&gt;.   Пробовал  &lt;strong&gt;Emacs&lt;/strong&gt;  заточить  для  &lt;em&gt;Java&lt;/em&gt;,  но  затея  не  увенчалась
успехом. Но для &lt;em&gt;C/C++&lt;/em&gt; проектов только &lt;strong&gt;Emacs&lt;/strong&gt;, только хардкор.&lt;/p&gt;</content>
		<author>
			<name>Ilya Zonov</name>
			<uri>http://puzan.info/</uri>
		</author>
		<source>
			<title type="html">Puzan's Pages</title>
			<link rel="self" href="http://feeds.feedburner.com/puzan-emacs"/>
			<id>http://puzan.info/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Pavel Vyazovoi: Как готовить Emacs в OS X</title>
		<link href="http://paul.elms.pro/blog/2014/05/12/emacs_in_osx/"/>
		<id>http://paul.elms.pro/blog/2014/05/12/emacs_in_osx</id>
		<updated>2014-05-12T02:53:00+00:00</updated>
		<content type="html">&lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;

&lt;p&gt;Самая лучшая сборка Emacs для OS X устанавливается следующим образом (у тебя ведь уже есть &lt;a href=&quot;http://brew.sh&quot;&gt;homebrew&lt;/a&gt;, верно?):&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;brew tap railwaycat/emacsmacport
brew install emacs-mac --icon-modern
brew linkapps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Это свежий GNU Emacs с рядом патчей “под макось”.&lt;br /&gt;
Например, этот порт по-умолчанию меняет местами ⌘ и ⌥ в Emacs, потому что так удобнее.
Но это отключается.
А полный список патчей &lt;a href=&quot;https://github.com/railwaycat/emacs-mac-port/blob/master/README-mac&quot;&gt;здесь&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;клавиатура-под-emacs&quot;&gt;Клавиатура под Emacs&lt;/h2&gt;

&lt;p&gt;Теперь займемся хардварной оптимизацией. Необходимо демонтировать клаву вашего макбука и заменить на… Да я шучу, конечно =)&lt;/p&gt;

&lt;p&gt;Не обязательно, но рекомендую: для комфортной работы в Emacs надо немного поменять расположение самых часто используемых клавиш.
А именно: нужно поменять местами левый control с caps lock (это почти обязательно), и правый контрол с return (желательно, чтобы не превратиться в осьминога).&lt;/p&gt;

&lt;p&gt;Шутки шутками, а без этого не знаю смог бы ли я познать всю внутреннюю красоту емакса со сломанными пальцами.&lt;/p&gt;

&lt;p&gt;Левый контрол с капсом легко меняются средствами системы. Ключ вот здесь:&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;screenshot&quot; href=&quot;http://monosnap.com/image/UyRm2puGZMPN9N6KS03pjrYwtQMsk0.png&quot; rel=&quot;screenshot&quot; title=&quot;Назначаем control на capslock&quot;&gt;&lt;img alt=&quot;caps-ctrl-swap&quot; src=&quot;http://monosnap.com/image/UyRm2puGZMPN9N6KS03pjrYwtQMsk0.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;С правым контролом чуть сложнее – понадобится программа &lt;a href=&quot;https://pqrs.org/macosx/keyremap4macbook/&quot;&gt;KeyRemap4MacBook&lt;/a&gt;.
Зато она умеет много других полезных штук, например – переключаться на английский язык
по одиночному нажатию левой клавиши ⌘, и на русский – по нажатию правой.&lt;/p&gt;

&lt;p&gt;В KeyRemap4MacBook нужно включить опцию “Change Return Key &amp;gt; Return to Control_L”.
При этом стандартная функция кнопки Return тоже сохраняется – срабатывает в том случае, если нажата только одна клавиша Return, без сочетания с другими.
Правда ты же подсел на Emacs, теперь ты должен использовать только ⌃M, точнее сказать C-m, %username%.&lt;br /&gt;
Единственный неприятный момент – на такой Return не совсем адекватно реагирует Alfred. Но это было давно, может уже само починилось.&lt;/p&gt;

&lt;h2 id=&quot;emacs-mode-в-keyremap4macbook&quot;&gt;Emacs Mode в KeyRemap4MacBook&lt;/h2&gt;

&lt;p&gt;В этой программе есть целая группа опций под названием Emacs Mode.
Она позволяет применять Emacs-like хоткеи для всей системы.
На самом деле, во всех полях ввода OS X уже и так работают Emacs-like хоткеи.
Но только основные, а эти опции могут сделать больше, например, транслировать
⌥W в ⌘C (для копирования в emacs-стиле).&lt;/p&gt;

&lt;h2 id=&quot;emacsclient&quot;&gt;EmacsClient&lt;/h2&gt;

&lt;p&gt;Для того, чтобы открывать файлы из командной строки в emacs, служит emacsclient,
который устанавливается в /usr/local/bin, если ты воспользовался рекомендуемым мной
способом установки Emacs. Это не относится к OS X, но на всякий случай уточнил, что он работает.
Не забудь только сделать (server-start) в одном инстансе емакса.&lt;/p&gt;

&lt;h2 id=&quot;настройки-osx-only&quot;&gt;Настройки OSX-only&lt;/h2&gt;

&lt;p&gt;Для тех, кто использует один конфиг Emacs на разных ОС, существует возможность задавать настройки локально.
Для OS X это делается следующим образом:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(when (eq system-type 'darwin)
; ты знаешь что делать
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Сразу рекомендую прописать туда:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(menu-bar-mode 1)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Дело в том, что любой уважающий себя емаксер сразу отключает тулбар, менюбар и, не редко, скроллбар.
В емаксе это всё лишнее расходование экранного пространства, но вышеозначенная опция все-таки
менюбар включает. Дело в том, что в OS X меню расположено в панели, а вот если его отключить,
окно меняет свой тип и его уже не получится развернуть в фулл-скрин, а также будут проблемы
с потерей фокуса.&lt;/p&gt;

&lt;h2 id=&quot;переключение-языков-в-emacs&quot;&gt;Переключение языков в Emacs&lt;/h2&gt;

&lt;p&gt;Хорошо бы написать аналог программы emxkb для оконной системы OS X, чтобы удобно переключать
языки ввода в Emacs. &lt;a href=&quot;http://paul.elms.pro/blog/2013/04/11/pieriekliuchieniie-raskladok-v-emacs/&quot;&gt;Подробнее про emxkb&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;org-protocol&quot;&gt;org-protocol&lt;/h2&gt;

&lt;p&gt;Org-mode это &lt;a href=&quot;http://doc.norang.ca/org-mode.html&quot;&gt;обалденный&lt;/a&gt; пакет.
Если ты им пользуешься и тебе нужен рабочий org-protocol в OS X, то читай дальше.&lt;/p&gt;

&lt;p&gt;Подробнее что зачем и почему написано &lt;a href=&quot;http://jcardente.blogspot.ru/2010/09/saving-weblinks-to-org-mode-from-safari.html&quot;&gt;вот здесь&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Реализация для Aquamacs &lt;a href=&quot;https://github.com/neil-smithline-elisp/EmacsClient.app&quot;&gt;здесь&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Реализацию для GNU Emacs из brew я сделал и положил &lt;a href=&quot;http://take.ms/uCG7l&quot;&gt;сюда&lt;/a&gt;. Нужно просто скачать и положить в /Applications.&lt;/p&gt;

&lt;p&gt;Есть ещё один нюанс: у меня в safari не работали букмарклеты для org-protocol пока я не заменил
двойные слеши на одинарные, вот так:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;javascript:location.href='org-protocol:/store-link:/'+encodeURIComponent(location.href)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content>
		<author>
			<name>Павел Вязовой</name>
			<uri>http://paul.elms.pro/</uri>
		</author>
		<source>
			<title type="html">Unix Way</title>
			<link rel="self" href="http://feeds.feedburner.com/vyazovoi-emacs"/>
			<id>http://paul.elms.pro/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Pavel Vyazovoi: Скромное мнение о редакторах текста</title>
		<link href="http://paul.elms.pro/blog/2014/05/12/text_editors/"/>
		<id>http://paul.elms.pro/blog/2014/05/12/text_editors</id>
		<updated>2014-05-12T00:40:00+00:00</updated>
		<content type="html">&lt;p&gt;Я люблю экспериментировать с разными редакторами кода для программистов.
Особый интерес проявляю к так называемым “hackable” редакторам кода (затрудняюсь перевести на русский).
Давно хотел написать такой пост – просто мнение о тех редакторах, на которые обращаю внимание.&lt;/p&gt;

&lt;h2 id=&quot;vim-macvim&quot;&gt;VIM (MacVim)&lt;/h2&gt;

&lt;p&gt;Автор vim-плагина Airline очень хорошо охарактеризовал его, когда &lt;a href=&quot;http://bling.github.io/blog/2013/10/27/emacs-as-my-leader-vim-survival-guide/&quot;&gt;сваливал на Emacs&lt;/a&gt;.
Он написал примерно так: “VIM лучше в редактировании текста, но Emacs лучше для работы”.
Я полностью согласен, команды vim очень хороши в навигации по тексту и его редактировании.
Только для того, чтобы понять эту магию, необходимо хорошо изучить vim.
Но vim тормоз и ограниченный. Если попытаться добавить в него часть функциональности, которую я привык видеть в Emacs,
он начинает дико тормозить. Я пробовал профилировать плагины, тормозят все по немногу.&lt;/p&gt;

&lt;h2 id=&quot;emacs&quot;&gt;Emacs&lt;/h2&gt;

&lt;p&gt;До сих пор считаю эту среду лучшей для множества задач.
Emacs это не редактор, а интерпретатор лиспа – этим всё сказано.
Если в виме есть работа с метками (закладками) и история изменений в виде дерева,
то для Emacs существует несколько пакетов рыботы с метками и пакет для реализации истории, как в vim.
Всё это реализовано на elisp и программист (у Emacs нет “просто пользователей”) может в реальном времени
изменять или полностью переделывать реализацию этих функций.
Emacs – замечательный почтовый и jabber клиент, &lt;a href=&quot;http://doc.norang.ca/org-mode.html&quot;&gt;лучший органайзер&lt;/a&gt; и т.д.
Но всё это великолепие затмевается высоким порогом вхождения. Если не углубиться в Emacs и сразу свалить на vim,
то так и не познаешь всю эту магию (у большинства заявляющих “пробовал я этот ваш emacs” именно так и было, не распробовал).
Кстати, упомянутый выше автор Airline перешел на Emacs только потому, что для Emacs существует лучшая
реализация эмуляции vim-а. Работают все команды, которые я знаю в vim (а я их знаю много, целенаправленно изучал).
Некоторые считают evil-mode реализацией недостающего текстового редактора в операционной системе Emacs.
Для него даже замечательный плагин surround реализован и работает точно как в vim, а не так, как жалкое подобие в sublime.&lt;/p&gt;

&lt;h2 id=&quot;sublime-text-3&quot;&gt;Sublime Text 3&lt;/h2&gt;

&lt;p&gt;Действительно хороший редактор, но с ним как-то скучно. UI для плагинов у него слишком простой,
но зато это единственный редактор, в котором есть умный авто-комплит и переход к определению для PHP.
Всё благодаря плагину Sublime CodeIntel, код которого был взят из Komodo IDE.
Плагины в саблайме работают в отдельном потоке, именно поэтому линтеры работают в фоне, а не при каждом сохранеии (как vim).
И именно поэтому возможна реализация CodeIntel, который в фоне индексирует код.
Не тормозит с кучей плагинов, красивый, всё работает.&lt;/p&gt;

&lt;h2 id=&quot;atom&quot;&gt;Atom&lt;/h2&gt;

&lt;p&gt;Вроде как “hackable editor for the 21st Century”, но пока слишком тормозной.
Зато сразу на старте появилась почти вся нужная мне функциональность, потому что
плагины клепают очень быстро, они ведь на javascript (и coffee).
Плагины на javascript это хорошо.
А вот “taking the web native” пока не в полной мере присутствует.
Где live-coding для javascript как в LightTable?
Кстати, они, кажется, хотели его продавать. А как это, если исходники открыты под
либеральной лицензией?&lt;/p&gt;

&lt;h2 id=&quot;lighttable&quot;&gt;LightTable&lt;/h2&gt;

&lt;p&gt;По задумке классный проект, но в данный момент больше напоминает демку.
Из коробки live coding для нескольких языков: html/css, javascript, clojure, clojurescript, python. Можно ещё плагин для ruby доустановить.
Live coding реализован классно – можно видеть результат выполнения кода прямо в редакторе,
а можно подключиться к своему браузеру/repl/приложению и выполнять его там.
Но много чего пока нету и самое печальное – нет документации для разработчиков. Так – пару статей в блогах о внутренностях LT.
Короче говоря нет такой инструкции как у атома – садимся и за пять минут пишем демо-плагин.
Кстати, сделан этот редактор (IDE?) тоже на web-технологиях, поэтому в качестве редактора используется &lt;a href=&quot;http://codemirror.net&quot;&gt;CodeMirror&lt;/a&gt;.
Ощущения от редактирования как-то не очень, хотя тормозит меньше чем atom.
Тем не менее, что бы я там себе не думал, программисты на clojure уже используют его в работе.&lt;/p&gt;</content>
		<author>
			<name>Павел Вязовой</name>
			<uri>http://paul.elms.pro/</uri>
		</author>
		<source>
			<title type="html">Unix Way</title>
			<link rel="self" href="http://feeds.feedburner.com/vyazovoi-emacs"/>
			<id>http://paul.elms.pro/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Kostafey: Fuzzy matching в popup-switcher с использованием flx</title>
		<link href="http://kostafey.blogspot.com/2014/05/fuzzy-matching-popup-switcher-flx.html"/>
		<id>tag:blogger.com,1999:blog-6158999380322649405.post-5808905107431643170</id>
		<updated>2014-05-03T11:02:35+00:00</updated>
		<content type="html">Наконец добрался до fuzzy matching в &lt;a href=&quot;https://github.com/kostafey/popup-switcher&quot;&gt;popup-switcher&lt;/a&gt;. Есть несколько решений для осуществления нечеткого поиска в Emacs. Например:  &lt;ul&gt;      &lt;li&gt; &lt;a href=&quot;https://github.com/lewang/flx&quot;&gt;flx&lt;/a&gt;    &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://github.com/auto-complete/fuzzy-el&quot;&gt;fuzzy-el&lt;/a&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Настройка&lt;/h2&gt; &lt;p&gt;В popup-switcher используется &lt;a href=&quot;https://github.com/lewang/flx&quot;&gt;flx&lt;/a&gt;. ИМХО, это просто прекрасный движек для нечеткого поиска, хотя автор и предупреждает о том, что проект достаточно молодой и возможно еще остались ошибки.  &lt;/p&gt;&lt;p&gt;В flx-ido есть более высокоуровневые функции, поэтому фактически зависимость именно от flx-ido.  &lt;/p&gt;&lt;p&gt;Как и в случае с CEDET и projectile, явно зависимость не указывается (чтобы не превращать popup-switcher в монстра с большим количеством обязательных зависимостей). Чтобы воспользоваться возможностью нечеткого поиска, необходимо установить &lt;a href=&quot;https://github.com/lewang/flx&quot;&gt;flx&lt;/a&gt; и &lt;a href=&quot;https://github.com/lewang/flx&quot;&gt;flx-ido&lt;/a&gt; любым удобным вам способом, например через MELPA: &lt;/p&gt;&lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;span class=&quot;idle-highlight&quot;&gt; M-x&lt;/span&gt; package-install [RET] flx-ido [RET]&lt;/pre&gt;&lt;/div&gt; Кроме этого, необходимо установить &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-use-flx&lt;/b&gt;&lt;/span&gt; в значение t &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (setq psw-use-flx t)&lt;/pre&gt;&lt;/div&gt; &lt;h2&gt;Пример использования&lt;/h2&gt; Например, неообходимо найти функцию &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-get-item-by-name&lt;/b&gt;&lt;/span&gt;. Вызываем &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-switch-function&lt;/b&gt;&lt;/span&gt; (любым выбранным клавиатурным сочетанием), набираем первые буквы слов &quot;get&quot; и &quot;item&quot; - &quot;gi&quot;, flx сузит список поиска и отсортирует по релевантности:&lt;br /&gt; &lt;img border=&quot;0&quot; src=&quot;https://dl.dropboxusercontent.com/u/820526/popup-switcher-flx.png&quot; /&gt;&lt;div&gt;Пример использования flx в popup-switcher.&lt;/div&gt; &lt;h2&gt;P.S.&lt;/h2&gt; Happy hacking! :)</content>
		<author>
			<name>Kostafey</name>
			<email>noreply@blogger.com</email>
			<uri>http://kostafey.blogspot.com/search/label/Emacs</uri>
		</author>
		<source>
			<title type="html">Kostafey's Blog</title>
			<link rel="self" href="http://www.blogger.com/feeds/6158999380322649405/posts/default/-/Emacs"/>
			<id>tag:blogger.com,1999:blog-6158999380322649405</id>
		</source>
	</entry>

	<entry>
		<title type="html">Kostafey: popup-switcher - переключение буферов и навигация по функциям, используя TUI-меню</title>
		<link href="http://kostafey.blogspot.com/2013/11/popup-switcher-tui.html"/>
		<id>tag:blogger.com,1999:blog-6158999380322649405.post-4536858996652630702</id>
		<updated>2013-11-05T14:06:19+00:00</updated>
		<content type="html">&lt;h2&gt;Эргономика промышленных решений&lt;/h2&gt; С некоторого времени для разработки на Java я использую IntelliJ IDEA. Какова там навигация по файлам или по методам! Нажимаешь C-S-n (или C-n для классов) и появляется окошко поиска со списком. Вводишь буквы из названия файла и список сокращается - самый удобный способ навигации по файлам проекта. Аналогично C-F12 для навигации по методам открытого класса - интерактивно изменяющееся меню на основе вводимых символов из имени метода. Ничего эргономичнее до этого не видел.  &lt;h2&gt;Изящество и красота текстовых интерфейсов&lt;/h2&gt; В 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-интерфейс там, где создание отдельного окна избыточно.  &lt;h2&gt;TUI в emacs&lt;/h2&gt; Библиотеки &lt;a href=&quot;https://github.com/auto-complete/popup-el&quot;&gt;popup-el&lt;/a&gt; (выпадающие меню) и &lt;a href=&quot;https://github.com/m2ym/direx-el&quot;&gt;direx-el&lt;/a&gt; (деревья) - примеры расширений, предоставляющих некоторую функциональность TUI. К сожалению, предоставляется лишь некоторая часть возможных виджетов, но тем не менее, имеющиеся весьма удобны.  &lt;p&gt;Так, например, первая из них позволила мне реализовать в TUI некоторые из идей, используемых в IntelliJ IDEA: &lt;a href=&quot;https://github.com/kostafey/popup-switcher&quot;&gt;popup-switcher&lt;/a&gt;.  Вызов интерактивной функции  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-switch-buffer&lt;/b&gt;&lt;/span&gt; - приведет к появлению списка открытых буферов. Ввод символов имени буфера будет сокращать список. Именно в качестве (еще одного) механизма переключения буферов и задумывался изначально &lt;a href=&quot;https://github.com/kostafey/popup-switcher&quot;&gt;popup-switcher&lt;/a&gt;, однако на самом деле, он может быть использован для переключения чего угодно (отсюда и название). &lt;/li&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-switch-projectile-files&lt;/b&gt;&lt;/span&gt; - работает со всеми файлами проекта (файлы проекта рассматриваются в контексте расширения &lt;a href=&quot;https://github.com/bbatsov/projectile&quot;&gt;projectile&lt;/a&gt;). &lt;/li&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-switch-function&lt;/b&gt;&lt;/span&gt; - работает с функциями/методами в текущем файле. &lt;/li&gt;&lt;/ul&gt; &lt;img border=&quot;0&quot; src=&quot;https://dl.dropboxusercontent.com/u/820526/psw-switch-buffer.png&quot; /&gt;&lt;div&gt;Пример навигации по буферам.&lt;/div&gt; &lt;img border=&quot;0&quot; src=&quot;https://dl.dropboxusercontent.com/u/820526/psw-switch-function.png&quot; /&gt;&lt;div&gt;Пример навигации по функциям в файле с исходным кодом на Clojure.&lt;/div&gt; &lt;h2&gt;Установка&lt;/h2&gt; Установка расширения довольно проста. Добавьте MELPA в вашу переменную &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;package-archives&lt;/b&gt;&lt;/span&gt;  (если у вас он еще не был добавлен):  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (&lt;span class=&quot;keyword&quot;&gt;require&lt;/span&gt; '&lt;span class=&quot;constant&quot;&gt;package&lt;/span&gt;)&lt;br /&gt; (add-to-list 'package-archives&lt;br /&gt;              '(&lt;span class=&quot;string&quot;&gt;&quot;melpa&quot;&lt;/span&gt; . &lt;span class=&quot;string&quot;&gt;&quot;http://melpa.milkbox.net/packages/&quot;&lt;/span&gt;))&lt;br /&gt; (package-initialize)&lt;/pre&gt;&lt;/div&gt; Далее &lt;a href=&quot;https://github.com/kostafey/popup-switcher&quot;&gt;popup-switcher&lt;/a&gt; устанавливается командой:  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class=&quot;idle-highlight&quot;&gt; M-x&lt;/span&gt; package-install [RET] popup-switcher [RET]&lt;/pre&gt;&lt;/div&gt; Кроме того, в файле инициализации .emacs необходимо указать:  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (&lt;span class=&quot;keyword&quot;&gt;require&lt;/span&gt; '&lt;span class=&quot;constant&quot;&gt;popup-switcher&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; &lt;h2&gt;Настройка&lt;/h2&gt; После установки &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-in-window-center&lt;/b&gt;&lt;/span&gt; в значение t всплывающее меню будет появляться в середине окна. По умолчанию появляется в посередине меду левым краем окна и значением &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;fill-column&lt;/b&gt;&lt;/span&gt;.  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (setq psw-in-window-center t)&lt;/pre&gt;&lt;/div&gt;  Вы можете установить интерактивные функции переключения буферов и навигации по методам для определенных клавиатурных сочетаний на ваш вкус, например:  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (global-set-key [f2] 'psw-switch-buffer)&lt;br /&gt; (global-set-key (kbd &quot;C-S-n&quot;) 'psw-switch-projectile-files)&lt;/pre&gt;&lt;/div&gt; Для активации возможности навигации по функциям/методам необходимо установить последнюю версию &lt;a href=&quot;http://cedet.sourceforge.net/bzr-repo.shtml&quot;&gt;CEDET&lt;/a&gt; и подключить библиотеку eassist. Это не является обязательным, и вы можете использовать popup-switcher без CEDET (и, очевидно, без данной функциональности). Пример настройки:  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt;&lt;span class=&quot;comment-delimiter&quot;&gt; ;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Activate semantic&lt;br /&gt;&lt;/span&gt; (semantic-mode 1)&lt;br /&gt; &lt;br /&gt;&lt;span class=&quot;comment-delimiter&quot;&gt; ;; &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Load contrib library&lt;br /&gt;&lt;/span&gt; (add-to-list 'load-path &lt;span class=&quot;string&quot;&gt;&quot;~/.emacs.d/cedet/contrib/&quot;&lt;/span&gt;)&lt;br /&gt; (&lt;span class=&quot;keyword&quot;&gt;require&lt;/span&gt; '&lt;span class=&quot;constant&quot;&gt;eassist&lt;/span&gt;)&lt;br /&gt; &lt;br /&gt; (&lt;span class=&quot;keyword&quot;&gt;eval-after-load&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;eassist&quot;&lt;/span&gt;&lt;br /&gt;   '(global-set-key [f3] 'psw-switch-function))&lt;/pre&gt;&lt;/div&gt; &lt;h2&gt;Добавление переключений&lt;/h2&gt; Добавлять новые применения механизма переключения очень просто, так функция &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-switch-buffer&lt;/b&gt;&lt;/span&gt; выглядит следующим образом:  &lt;div class=&quot;src&quot;&gt;    &lt;pre&gt;&lt;br /&gt; (&lt;span class=&quot;keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;psw-switch-buffer&lt;/span&gt; ()&lt;br /&gt;    (interactive)&lt;br /&gt;    (psw-switcher&lt;br /&gt;     &lt;span class=&quot;builtin&quot;&gt;:items-list&lt;/span&gt; (psw-get-buffer-list)&lt;br /&gt;     &lt;span class=&quot;builtin&quot;&gt;:item-name-getter&lt;/span&gt; 'buffer-name&lt;br /&gt;     &lt;span class=&quot;builtin&quot;&gt;:switcher&lt;/span&gt; 'switch-to-buffer))&lt;/pre&gt;&lt;/div&gt; где  &lt;ul&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;items-list&lt;/b&gt;&lt;/span&gt; - список, в котором осуществляется выбор (&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;psw-get-buffer-list&lt;/b&gt;&lt;/span&gt; - просто использует встроеную функцию &lt;span class=&quot;constant&quot;&gt;&lt;b&gt;buffer-list&lt;/b&gt;&lt;/span&gt; с некоторыми дополнительными фильтрами). &lt;/li&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;item-name-getter&lt;/b&gt;&lt;/span&gt; - функция получения текстового обозначения каждого элемента списка в меню выбора. &lt;/li&gt;&lt;li&gt;&lt;span class=&quot;constant&quot;&gt;&lt;b&gt;switcher&lt;/b&gt;&lt;/span&gt; - функция, описывающая что делать с выбранным элементом. &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Заключение&lt;/h2&gt; Для emacs существуют хоть и не всеобъемлющие, но весьма удобные библиотеки работы с TUI. Например, &lt;a href=&quot;https://github.com/auto-complete/popup-el&quot;&gt;popup-el&lt;/a&gt;уже использующаяся в проектах &lt;a href=&quot;https://github.com/auto-complete/auto-complete&quot;&gt;auto-complete&lt;/a&gt; и &lt;a href=&quot;https://github.com/tkf/emacs-jedi&quot;&gt;emacs-jedi&lt;/a&gt;, а теперь и в &lt;a href=&quot;https://github.com/kostafey/popup-switcher&quot;&gt;popup-switcher&lt;/a&gt;.  &lt;p&gt;Библиотека &lt;a href=&quot;https://github.com/m2ym/direx-el&quot;&gt;direx-el&lt;/a&gt; используется, например, в проекте &lt;a href=&quot;https://github.com/tkf/emacs-jedi-direx&quot;&gt;emacs-jedi-direx&lt;/a&gt;. direx-el  потенциально может выступать в качестве основы для более простого и современного аналога &lt;a href=&quot;http://ecb.sourceforge.net/&quot;&gt;ECB&lt;/a&gt;. Конечно, в данном случае создание нового окна будет необходимо, но мне кажется, что это как раз тот случай, когда это оправдано.  &lt;/p&gt;&lt;p&gt;Надеюсь, вас зантересовала идея более широкого применения TUI в emacs, а также написания и развития расширений, как использующих эти возможности, так и предоставляющих новые возможности для TUI - виджетов.&lt;/p&gt;</content>
		<author>
			<name>Kostafey</name>
			<email>noreply@blogger.com</email>
			<uri>http://kostafey.blogspot.com/search/label/Emacs</uri>
		</author>
		<source>
			<title type="html">Kostafey's Blog</title>
			<link rel="self" href="http://www.blogger.com/feeds/6158999380322649405/posts/default/-/Emacs"/>
			<id>tag:blogger.com,1999:blog-6158999380322649405</id>
		</source>
	</entry>

	<entry>
		<title type="html">Ilya Zonov: Emacs + Java</title>
		<link href="http://puzan.info/linux/2013-08-25-emacs-java.html"/>
		<id>tag:puzan.info,2013-08-25:linux/2013-08-25-emacs-java.html</id>
		<updated>2013-08-24T20:00:00+00:00</updated>
		<content type="html">&lt;p&gt;Появилась у  меня в последнее  время необходимость основательно  познать &lt;em&gt;Java&lt;/em&gt;.
Очень долго  не смотрел в  его сторону, были  у меня некоторые  предубеждения. Я
всегда думал,  что &lt;em&gt;plain  C&lt;/em&gt; и  &lt;em&gt;Lisp&lt;/em&gt; это  наше все.   И этого  достаточно.  А
сейчас  работа повернулась  стороной  с &lt;em&gt;Java&lt;/em&gt;  лицом  и соответственно  захотел
быстренько познать его особенности, а  также настроить свой любимый редактор для
удобной работы с этим популярным языком программирования.&lt;/p&gt;
&lt;p&gt;Для  каждого языка  программирования в  &lt;em&gt;Emacs&lt;/em&gt; я  стараюсь настроить  следующие
возможности:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Подсветка синтаксиса (есть из коробки)&lt;/li&gt;
&lt;li&gt;Авто дополнения (желательно через auto-complete)&lt;/li&gt;
&lt;li&gt;Навигация по коду&lt;/li&gt;
&lt;li&gt;Работа с проектами (опционально, люблю работать в консоли вне Emacs)&lt;/li&gt;
&lt;li&gt;REPL (также опционально, но очень помогает во время обучения)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из коробки в &lt;code&gt;java-mode&lt;/code&gt; фактически  работает только подсветка синтаксиса. Cedet
идущий с  Emacs'ом также позваляет  настроить автодополнения и  навигацию внутри
классов.  Но  вот, например,  системные вещи  наотрез отказывается  предлагать в
качестве дополнений.&lt;/p&gt;
&lt;p&gt;В общем  я решил  посмотреть, какие сейчас  есть удобств для  работы с  &lt;em&gt;Java&lt;/em&gt; в
&lt;em&gt;Emacs&lt;/em&gt;. При этом я наткнулся на следующие вещи:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jdee.sourceforge.net/&quot;&gt;JDEE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/buzztaiki/malabar-mode&quot;&gt;malabar-mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/senny/emacs-eclim/&quot;&gt;Eclime for Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/emacs-java/auto-java-complete&quot;&gt;Auto Java Complete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CEDET Developer Version (&lt;a href=&quot;http://cedet.sourceforge.net/bzr-repo.shtml&quot;&gt;Bazaar repo&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Немного впечатлений о каждом расширении. Все  пробовал на &lt;em&gt;MacBook Air&lt;/em&gt;, &lt;em&gt;OS X&lt;/em&gt;,
&lt;em&gt;Emacs 24.3.1&lt;/em&gt; из &lt;a href=&quot;http://macports.org/&quot;&gt;MacPorts&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;JDEE&lt;/h2&gt;
&lt;p&gt;Старое и  похоже переставшее развиваться  расширение. Сразу не  понравилось, что
тянет с  собой свою цветовую  схему.  Мелочи, но  они всегда бросаются  в глаза.
Также  &lt;em&gt;JDEE&lt;/em&gt; каким-то  образом  умудряется  нарушить работу  &lt;code&gt;whitespace-mode&lt;/code&gt;,
который перестает подсвечивать вообще что-либо.  Данную проблему решить не смог.
Есть у меня подозрение, что это  связано с перекрашиванием буфера, но глубока не
капал  за ненадобностью.   Нечто похожее  сейчас  есть в  &lt;code&gt;markdown-mode&lt;/code&gt;. Ну  и
каких-то особых возможностей здесь не  нашел.  Все плюшки сделаны через &lt;em&gt;Cedet&lt;/em&gt;,
соответственно их можно получить и без &lt;em&gt;JDEE&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Malabar-mode&lt;/h2&gt;
&lt;p&gt;Завязан   на   &lt;em&gt;Maven&lt;/em&gt;,   про   который  ранее   слышал   совсем   чуть-чуть   и
отдаленно. Быстренько глянул,  как работать с этим  менеджером проектов.  Создал
тестовый проект, но производительность  &lt;code&gt;malabar-mode&lt;/code&gt; вообще не порадовала.  Он
как  я понял  использует &lt;em&gt;Groovy&lt;/em&gt;  console  для формирования  дополнений. И  это
похоже   порой  не   быстрый  процесс.    В   общем  от   этого  варианта   тоже
отказался.   Кроме  того   проект  также   загибается.  Хотя   в  знакомстве   с
&lt;code&gt;malabar-mode&lt;/code&gt; есть свой плюс: я узнал что такое &lt;em&gt;Maven&lt;/em&gt; и как с ним работать.&lt;/p&gt;
&lt;h2&gt;Eclime&lt;/h2&gt;
&lt;p&gt;Вот это вообще монстр.  Идея затащить в &lt;em&gt;Emacs&lt;/em&gt; (изначально в &lt;em&gt;Vim&lt;/em&gt;) функционал &lt;em&gt;Eclipse&lt;/em&gt; через некий
интерфейс тоже  на деле  оказывается не шибко  производительна. В  данном случае
&lt;em&gt;eclime&lt;/em&gt;  запускает &lt;em&gt;Eclipse&lt;/em&gt;  на  заднем плане  и общается  с  ним, чтобы  получить
автодополнения  и еще  некоторый функционал  (рефакторинг, навигация  по коду  и
т.п.). Скорость отзывчивости данной системы еще меньше, чем у &lt;em&gt;Malabar&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Auto Java Complete&lt;/h2&gt;
&lt;p&gt;Смысл данного расширения прост:  сгенерировать теги необходимых &lt;em&gt;Java&lt;/em&gt; библиотек
и предоставить интерфейс для  &lt;code&gt;auto-complete&lt;/code&gt;. Я попробовал использовать готовые
теги  и это  работает достаточно  быстро  и удобно.  Но тут  мы получаем  только
информацию  системных библиотек  и того  что сами  укажем ручками  при генерации
тегов.  В  принципе в связке со  стандартным &lt;em&gt;Cedet&lt;/em&gt; идущим с  &lt;em&gt;Emacs&lt;/em&gt;'ом должно
всего этого хватить.&lt;/p&gt;
&lt;h2&gt;Cedet Dev&lt;/h2&gt;
&lt;p&gt;Самый  удобный,  как мне  кажется,  вариант  это использовать  последнюю  версию
&lt;em&gt;Cedet&lt;/em&gt;  из  &lt;em&gt;Bazaar&lt;/em&gt; репозитория.   Тут  сейчас  &lt;em&gt;Java&lt;/em&gt; хорошо  поддерживается.
&lt;em&gt;Maven&lt;/em&gt;  проекты кстати  тоже  отлично воспринимаются.   По  работе и  настройке
&lt;em&gt;Cedet&lt;/em&gt; лучше обращаться к &lt;a href=&quot;http://alexott.net/ru/writings/emacs-devenv/EmacsCedet.html&quot;&gt;статье Alex Ott'а&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;На  данный   момент  я  остановился   на  последнем  варианте:  &lt;em&gt;Cedet&lt;/em&gt;   Dev  +
&lt;code&gt;auto-complete&lt;/code&gt;. Есть  у кого  еще предложения  как улучшить  жизнь в  Emacs при
работе с &lt;em&gt;Java&lt;/em&gt;?  Или все таки &lt;em&gt;Cedet&lt;/em&gt;  это наше все и смотреть в другие стороны
лучше не стоит?&lt;/p&gt;</content>
		<author>
			<name>Ilya Zonov</name>
			<uri>http://puzan.info/</uri>
		</author>
		<source>
			<title type="html">Puzan's Pages</title>
			<link rel="self" href="http://feeds.feedburner.com/puzan-emacs"/>
			<id>http://puzan.info/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Oleksandr Gavenko: Сортируем без повторений в Emacs.</title>
		<link href="http://brain-break-ru.blogspot.com/2009/10/emacs.html"/>
		<id>tag:blogger.com,1999:blog-6734527039160439299.post-5572304680393033712</id>
		<updated>2013-01-31T18:18:27+00:00</updated>
		<content type="html">Только для сортировки строк в Emacs имеется встроенная функция: &lt;code&gt;M-x sort-lines&lt;/code&gt;.
&lt;p&gt;
Для сортировки без повторений выполняем:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;выделить область
&lt;/li&gt;&lt;li&gt;&lt;code&gt;C-u M-| sort -u RET&lt;/code&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
С включенными режимами &lt;code&gt;transient-mark-mode&lt;/code&gt; и &lt;code&gt;delete-selection-mode&lt;/code&gt;  можно сразу заменить выделенную область отсортированными без повторения строками:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;выделить область
&lt;/li&gt;&lt;li&gt;&lt;code&gt;M-| sort -u RET&lt;/code&gt;
&lt;/li&gt;&lt;/ul&gt;</content>
		<author>
			<name>Oleksandr Gavenko</name>
			<email>noreply@blogger.com</email>
			<uri>http://brain-break-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Brain Break (ru).</title>
			<subtitle type="html">it/security/free/math/sci/music
&lt;p&gt;
Русская версия &lt;a href=&quot;http://brain-break.blogspot.com&quot;&gt;brain-break.blogspot.com&lt;/a&gt;. Присоединяйтесь!&lt;/p&gt;</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/6734527039160439299/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-6734527039160439299</id>
		</source>
	</entry>

	<entry>
		<title type="html">Eugene Burmako: сублайм =&amp;amp;gt; емакс</title>
		<link href="https://xeno-by.livejournal.com/80420.html"/>
		<id>urn:lj:livejournal.com:atom1:xeno_by:80420</id>
		<updated>2012-12-11T10:24:36+00:00</updated>
		<content type="html">После недавнего дискашена у metaclass и tonsky (&lt;a href=&quot;http://metaclass.livejournal.com/751965.html&quot; rel=&quot;nofollow&quot;&gt;клик&lt;/a&gt; &lt;a href=&quot;http://tonsky.livejournal.com/271470.html&quot; rel=&quot;nofollow&quot;&gt;клик&lt;/a&gt;) решил снова попробовать емакс. Особенно с учетом того, что сублайм closed source и развитие его, еще три-четыре месяца назад весьма бодрое, полностью остановилось.&lt;br /&gt;&lt;br /&gt;Подумал и с удивлением заметил, что в сублайме для меня киллер фич не так уж и много. Первое это очень быстрый поиск по файлам в проекте (find + grep гораздо медленнее, к сожалению). Второе это возможность сохранять стейт проекта (открытые файлы, позиции в них) между запусками. Третье и четвертое это сниппеты и дефинишены синтаксиса (использующиеся для подсветки, комментирования и выщемливания определений - классов, методов, и т.п.). Вроде бы, все. Какой в этом плане state of the art в емаксе?&lt;br /&gt;&lt;br /&gt;Еще доставляет go to symbol, который показывает список всех определений в файле и предоставляет для них fuzzy matching. Особенно удобно то, что по мере набора имени определения положение вьюпорта меняется, прокручивая файл к текущему в данный момент айтему. Вдвойне удобно, что по нажатию Escape вьюпорт откатывается обратно на позицию до начала поиска. Интересно, есть ли что-то такое уже существующее для емакса?&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://xeno-by.livejournal.com/pics/catalog/271/13911&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Screen Shot 2012-12-11 at 11.03.38 &quot; height=&quot;656&quot; src=&quot;https://ic.pics.livejournal.com/xeno_by/12047580/13911/13911_original.png&quot; title=&quot;Screen Shot 2012-12-11 at 11.03.38 &quot; width=&quot;825&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;С нетерпением жду релиза и свободного времени, чтобы продолжить &lt;a href=&quot;http://xeno-by.livejournal.com/67487.html&quot; rel=&quot;nofollow&quot;&gt;эксперименты с емаксом&lt;/a&gt;.</content>
		<author>
			<name>xeno_by</name>
			<uri>https://xeno-by.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Excelsior</title>
			<subtitle type="html">xeno_by</subtitle>
			<link rel="self" href="https://xeno-by.livejournal.com/data/atom?tag=emacs-ru"/>
			<id>urn:lj:livejournal.com:atom1:xeno_by</id>
		</source>
	</entry>

	<entry>
		<title type="html">Alex Ott: Новая версия статьи про CEDET</title>
		<link href="http://alexott-ru.blogspot.com/2012/10/cedet.html"/>
		<id>tag:blogger.com,1999:blog-2145365503775784580.post-495851551468565049</id>
		<updated>2012-10-30T18:39:42+00:00</updated>
		<content type="html">Только что залил на сайт новую версию своей &lt;a href=&quot;http://alexott.net/ru/writings/emacs-devenv/EmacsCedet.html&quot;&gt;статьи про настройку CEDET&lt;/a&gt;. Я также оставил доступной &lt;a href=&quot;http://alexott.net/ru/writings/emacs-devenv/EmacsCedetOld.html&quot;&gt;старую версию статьи&lt;/a&gt;, но в виде отдельной страницы.&lt;br /&gt;Новая версия описывает новую схему расположения исходного кода, а также новый способ активации под-режимов, так что статья теперь применима и к версии из bzr, и к версии идущей в составе GNU Emacs (после того как выпустят новую его версию).&lt;br /&gt;Кроме того, я добавил небольшое описание того, как настроить связку CEDET + Java, а также небольшое описание настройки дополнений через auto-complete.&lt;br /&gt;&lt;br /&gt;Вместо моего конфига, который очень уж сильно замусорен, теперь лучше воспользоваться &lt;a href=&quot;https://gist.github.com/3930120&quot;&gt;отдельным конфигом&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.S. кстати, в последних снапшотах, CEDET умеет находить проекты Maven, и получать информацию о classpath прямо из них, так что теперь работает и дополнение имен для классов из сторонних библиотек.  Например, вот так (Это дополнение при работе с кодом Apache Tika):&lt;br /&gt;&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://picasaweb.google.com/lh/photo/tFFmyk0aLM8ApIUjHRoBptMTjNZETYmyPJy0liipFm0?feat=embedwebsite&quot;&gt;&lt;img height=&quot;268&quot; src=&quot;https://lh5.googleusercontent.com/-lAuMwu9biXk/UIaGuAY2MeI/AAAAAAAAJ80/i3NUpqC3x4U/s400/OutlookExtractor.java_002.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;P.P.S. If you found error, or typo - please write comment on page, or fork &lt;a href=&quot;https://github.com/alexott/alexott.github.com&quot;&gt;source code on github&lt;/a&gt; (it's enough to fix only .muse file), and create pull request :-)</content>
		<author>
			<name>Alex Ott</name>
			<email>noreply@blogger.com</email>
			<uri>http://alexott-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Alex Ott's Russian blog about IT-related things</title>
			<subtitle type="html">This blog dedicated to IT, Software development and information security.  Main language - Russian.</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/2145365503775784580/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-2145365503775784580</id>
		</source>
	</entry>

	<entry>
		<title type="html">Jason McBrayer: Running Emacs on an Android tablet</title>
		<link href="http://www.carcosa.net/jason/blog/computing/emacs/2012-07-19-21-31-emacs-on-android"/>
		<id>http://www.carcosa.net/jason/blog/computing/computing/emacs/2012-07-19-21-31-emacs-on-android</id>
		<updated>2012-07-20T01:50:55+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.carcosa.net/jason/images/shot_000002.png&quot;&gt;
&lt;img src=&quot;http://www.carcosa.net/jason/images/shot_000002_t.png&quot; style=&quot;float: left; margin: 1em;&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the things I've always wanted in a portable computer is the
ability to run &lt;a href=&quot;http://www.gnu.org/emacs/&quot;&gt;Emacs&lt;/a&gt;. The main reason is that since 2005 or so,
my whole life has been run in &lt;a href=&quot;http://www.orgmode.org/&quot;&gt;org-mode&lt;/a&gt;, and, slightly before
that, in &lt;a href=&quot;http://howm.sourceforge.jp/&quot;&gt;howm&lt;/a&gt;. So, of course, when I got a low-end &lt;a href=&quot;https://developer.android.com/index.html&quot;&gt;Android&lt;/a&gt;
tablet, an &lt;a href=&quot;https://www.archos.com/products/ta/archos_70it/index.html?lang=en&quot;&gt;Archos 70&lt;/a&gt;, of course, I...didn't install Emacs on
it. As &lt;a href=&quot;http://www.emacswiki.org/emacs/EmacsOnAndroid&quot;&gt;EmacsWiki&lt;/a&gt; implies, there's no perfectly obvious way to do
so. And, there's &lt;a href=&quot;https://github.com/matburt/mobileorg-android/&quot;&gt;MobileOrg-Android&lt;/a&gt;. When I first got my tablet,
MobileOrg-Android was pretty bad. But it got better. Today, it's got a
great user interface, syncing is fast and generally reliable, and
there's an active core group of developers who are constantly adding
features and contributing back to org-mode itself.&lt;/p&gt;

&lt;p&gt;But...after quite a bit of trying, I still haven't made the MobileOrg
workflow work for me. I keep my org files in a &lt;a href=&quot;http://mercurial.selenic.com/&quot;&gt;Mercurial&lt;/a&gt;
repository on my home machine, and carry a clone with me. I run
&lt;a href=&quot;http://orgmode.org/manual/MobileOrg.html#MobileOrg&quot;&gt;org-mobile-push and org-mobile-pull&lt;/a&gt; from the home repository,
which requires it to be up to date, which &lt;em&gt;usually&lt;/em&gt; can be done
without manual intervention, but not always. And both pushing and
pulling can make changes, which have to be committed. And you really
have to sync on the mobile device twice: once before you push/pull,
and once after, if you want the desired effect of pushing all your
changes and captures to the repository, and having them all reflected
on your device. The MobileOrg workflow is based on the idea that your
mobile device doesn't have the horsepower to compute agendas on the
fly. But is that true these days? I'll return to that issue later.&lt;/p&gt;

&lt;p&gt;After seeing that some people had successfully run an &lt;a href=&quot;http://ubuntu.com/ubuntu/&quot;&gt;Ubuntu&lt;/a&gt;
user environment &lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=1533037&quot;&gt;in a chrooted loopback filesystem&lt;/a&gt; on a similar
tablet, I decided to try to get my Emacs that way. It didn't exactly
work out right a way, and it took me quite a while to make time for
the &lt;a href=&quot;http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html&quot;&gt;yak-shaving&lt;/a&gt; involved. Finally, I did, but with my preferred
&lt;a href=&quot;https://www.gnu.org/gnu/linux-and-gnu&quot;&gt;GNU/Linux&lt;/a&gt; distribution, &lt;a href=&quot;https://fedoraproject.org/&quot;&gt;Fedora&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Overview (the short version, aka tl;dr)&lt;/h4&gt;

&lt;p&gt;My sdcard is formatted ext3, and has the &lt;a href=&quot;https://fedoraproject.org/wiki/Architectures/ARM/Archive/Releases&quot;&gt;Fedora 13 rootfs&lt;/a&gt;
unpacked into it. From a root prompt in &lt;a href=&quot;https://code.google.com/p/connectbot/&quot;&gt;ConnectBot&lt;/a&gt;, I bind-mount
some required special filesystems under Fedora's root, then chroot
into it, and start sshd. Then I can ssh into localhost with ConnectBot
and run Emacs (and other things).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.carcosa.net/jason/images/shot_000003.png&quot;&gt;
&lt;img src=&quot;http://www.carcosa.net/jason/images/shot_000003_t.png&quot; style=&quot;float: right; margin: 1em;&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Longer version&lt;/h4&gt;

&lt;p&gt;Don't take this as a step-by-step instruction guide. What works and
doesn't work on my device is likely to be quite different from what
works and doesn't work on yours (unless yours is an Archos Gen8). This
is really more to give you an idea of the kind of yak-shaving involved
in getting this working.&lt;/p&gt;

&lt;p&gt;First I &lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=930197&quot;&gt;rooted my tablet&lt;/a&gt;. I would have done this even if I
weren't planning on running Emacs. For reference, the tablet is an
Archos 70, running the latest version of the stock (&lt;a href=&quot;https://en.wikipedia.org/wiki/Android_version_history#Android_2.2.x_Froyo&quot;&gt;Froyo&lt;/a&gt;)
firmware, with a rooted initramfs.&lt;/p&gt;

&lt;p&gt;Then, I tried installing the Ubuntu loopback images mentioned
above. This didn't work for me, because the stock Archos kernel
doesn't include the loop device, and for some reason, even when I
built custom kernels with the loop device enabled, I couldn't get it
to work.&lt;/p&gt;

&lt;p&gt;Fortunately, my device has a microSD card slot, which is above and
beyond the internal storage that the Archos firmware treats as an
sdcard for the purposes of App2SD and so forth. I formatted a card as
ext3, and tried to unpack the Ubuntu image onto it. This should have
worked, but for some reason, my tablet didn't like having so much data
pushed onto it over USB, and I lost the enthusiasm I needed to work on
it.&lt;/p&gt;

&lt;p&gt;Later, I unpacked the Fedora 14 ARM root filesystem more successfully, and
tried chrooting into it, only to find that my kernel was too old for
the version of &lt;a href=&quot;http://gnu.org/s/libc/&quot;&gt;glibc&lt;/a&gt; in Fedora 14. This also tragically sapped
my motivation, causing me to stop working on it again for a while.&lt;/p&gt;

&lt;p&gt;When I got another round tuit, I started with the Fedora 13 ARM root
filesystem, and it worked pretty straightforwardly. This is what I
did:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# umount /mnt/storage/sdcard
# mount -o noatime,nodiratime /dev/block/mmcblk2p1 /mnt/storage/sdcard
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The sdcard is mounted with the options nodev,noexec,fmode=0666, and
several other options that would make running it as the root
filesystem of a normal linux slightly inconvenient. Some of the other
parameters could be reset with mount -o remount,blah,noblah, but
there doesn't seem to be a way to do that for fmode and dmode, so
unmount and remount it is.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# cd /mnt/storage/sdcard/fedora
# mount --bind /dev dev
# mount --bind /dev/pts dev/pts
# mount --bind /proc proc
# mount --bind /sys sys
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now mount the various special filesystems that Fedora is going to
need, that are provided by the kernel.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# chroot . /bin/bash -
# service sshd start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now chroot into the Fedora environment, and start sshd. I've omitted
some other stuff, like setting a (new?) password on the root account,
and so forth. Technically, even starting sshd isn't necessary. You can
just chroot into Fedora and run what you want to. Having sshd running
makes it easier to reconnect to the Fedora environment without having
to go through the process of cd'ing and chrooting to the Fedora
directory.&lt;/p&gt;

&lt;p&gt;From here on out, it's just installing stuff with &lt;a href=&quot;http://yum.baseurl.org/&quot;&gt;yum&lt;/a&gt;. I've tried to
avoid installing anything except what I particularly need.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# yum install -y emacs-nox git mercurial aspell aspell-en \
  diffutils patch man screen
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;What works&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Installing things with yum!&lt;/p&gt;

&lt;p&gt;There are things in the Fedora repositories that aren't supported
on ARM, but I haven't had cause to install them yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Emacs!&lt;/p&gt;

&lt;p&gt;Fedora 13 had Emacs 23.2.1, which is not exactly the latest and
greatest, but it's not old enough to cause serious compatibility
problems, either. I used hg to pull in my emacs startup code from
my desktop, then created a mobile branch to strip it down and
remove features I wouldn't be using, and to change paths to work
with my mobile setup. Everything works as expected.&lt;/p&gt;

&lt;p&gt;Emacs startup is surprisingly snappy. I had slower emacs startup
times on my desktop as recently as 5 or 6 years ago, and this
isn't exactly a fast tablet.&lt;/p&gt;

&lt;p&gt;You might think it would be hard to use Emacs with a mobile
keyboard, but &lt;a href=&quot;https://code.google.com/p/hackerskeyboard/&quot;&gt;Hacker's Keyboard&lt;/a&gt; takes care of that, by and
large. It's still an onscreen keyboard, but it's an onscreen
keyboard with all the keys you'd expect on a standard PC
keyboard.&lt;/p&gt;

&lt;p&gt;Color themes work, as long as they would work under
xterm-256color. Sorry for not including a nice one in the
screenshots, but those were taken right after I got emacs
running.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Org-mode!&lt;/p&gt;

&lt;p&gt;This was where I had some concerns going in. The design of
org-mobile was premised on the idea that mobile devices didn't
have enough oomph to generate agendas on the fly, so emacs pushes
pre-generated agendas. I have fairly large org-mode files. They'd
be smaller if I archived to file more often, but I don't. So, is
emacs on my tablet able to generate my agendas?&lt;/p&gt;

&lt;p&gt;The answer is yes, mostly. The first time I run org-agenda, emacs
spends a very long time reading in my org-mode files; I suspect
that the slow sdcard I'm running this from may be part of the
problem. The first time, it was 30s, but similar 'cold' agenda
startups have been around 10s since then. Subsequently, however,
the agendas are generated perfectly quickly.&lt;/p&gt;

&lt;p&gt;All in all, my orgmode workflow works perfectly on the tablet,
with the exception that hg tries to use &lt;a href=&quot;http://vimdoc.sourceforge.net/htmldoc/diff.html&quot;&gt;vimdiff&lt;/a&gt; to do
merges, for some reason!&lt;/p&gt;

&lt;p&gt;Also, one other issue is that since I am using emacs in a (local)
terminal window, I have to use the &lt;a href=&quot;http://orgmode.org/manual/TTY-keys.html#TTY-keys&quot;&gt;alternate tty keys&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;What doesn't work well&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Writing a lot.&lt;/p&gt;

&lt;p&gt;This is not exactly a surprise. Unless I go to another machine and
ssh into my tablet (and what would be the point?), I'm constrained
to use the onscreen keyboard. And not only that, it's worse trying
to write with the onscreen keyboard in a regular Android app,
because the predictive text is not active in ConnectBot.&lt;/p&gt;

&lt;p&gt;If I had a small hardware keyboard, I'd be more inclined to do
actual writing on this setup.&lt;/p&gt;

&lt;p&gt;Another alternative is to let Emacs do the text completion, using
either &lt;a href=&quot;http://www.emacswiki.org/emacs/PredictiveMode&quot;&gt;Predictive Mode&lt;/a&gt; or &lt;a href=&quot;http://emacswiki.org/emacs/AutoComplete&quot;&gt;auto-complete&lt;/a&gt;. However,
while both of those do prose completion fairly well (different
strengths), neither does autocorrection, which is just as
important with a soft keyboard.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Leaving an Emacs session running all the time&lt;/p&gt;

&lt;p&gt;I'm used to never exiting Emacs. On my desktop/home-server
machine, Emacs is started for me by &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/systemd/&quot;&gt;systemd&lt;/a&gt;, which runs it
with --daemon, and restarts it if it should ever crash. On my
tablet, I started out by running it under &lt;a href=&quot;http://www.gnu.org/software/screen/&quot;&gt;screen&lt;/a&gt;, and
switching back to it as needed. It turns out that this is fine, as
long as I want to stay in the Fedora environment, but it doesn't
leave enough memory for my usual set of Android apps to perform
normally.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Conclusion&lt;/h4&gt;

&lt;p&gt;I haven't tried the next logical step, which would be to install Xvnc
and its dependencies, and to run a local X session, to be displayed in
an Android VNC client. I may not do so, because it looks like the
keyboard situation in the main free Android VNC clients is not much
better (if at all) than in the terminal, in terms of having the full
set of keysyms available. And it is worse, in that in ConnectBot,
Emacs's screen gets resized to accommodate the soft keyboard, whereas
in VNC, the soft keyboard sits on top of part of the display area,
which is not resized.&lt;/p&gt;

&lt;p&gt;On the whole I'm happy with this experiment. I don't think it will
replace my use of &lt;a href=&quot;http://code.google.com/p/jota-text-editor/&quot;&gt;Jota&lt;/a&gt; for note taking, because of the text
auto-completion and auto-correction issue. I'm not sure whether it
will completely replace MobileOrg for me. I'm enjoying finding out.&lt;/p&gt;</content>
		<author>
			<name>Jason McBrayer</name>
			<uri></uri>
		</author>
		<source>
			<title type="html">Jason McBrayer</title>
			<link rel="self" href="http://www.carcosa.net/jason/blog/computing/index.rss2"/>
			<id>http://www.carcosa.net/jason/blog/computing/index.rss2</id>
		</source>
	</entry>

	<entry>
		<title type="html">kashnikov: Говорим и пишем правильно</title>
		<link href="https://kashnikov.livejournal.com/59643.html"/>
		<id>urn:lj:livejournal.com:atom1:kashnikov:59643</id>
		<updated>2012-01-19T15:31:29+00:00</updated>
		<content type="html">Расширение writegood-mode [1] для Emacs помогает аспирантам избежать распространенных стилистических ошибок. Это расширение основано на советах и скриптах от Мэта Майта (Matt Might) [2]. &lt;br /&gt;&lt;br /&gt;________________________&lt;br /&gt;[1] &lt;a href=&quot;https://github.com/bnbeckwith/writegood-mode&quot; rel=&quot;nofollow&quot;&gt;https://github.com/bnbeckwith/writegood-mode&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/&quot; rel=&quot;nofollow&quot;&gt;http://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/&lt;/a&gt;</content>
		<author>
			<name>Et ipsa scientia potestas est.</name>
			<uri>https://kashnikov.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Veritas vos liberabit</title>
			<subtitle type="html">Scientia est lux lucis</subtitle>
			<link rel="self" href="https://kashnikov.livejournal.com/data/atom?tag=emacs"/>
			<id>urn:lj:livejournal.com:atom1:kashnikov</id>
		</source>
	</entry>

	<entry>
		<title type="html">Eugene Burmako: емакс, часть 4: ретроспектива</title>
		<link href="https://xeno-by.livejournal.com/67487.html"/>
		<id>urn:lj:livejournal.com:atom1:xeno_by:67487</id>
		<updated>2011-12-10T14:32:42+00:00</updated>
		<content type="html">&lt;a href=&quot;http://xeno-by.livejournal.com/47744.html&quot; rel=&quot;nofollow&quot;&gt;емакс, часть 1: первый взгляд&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://xeno-by.livejournal.com/47932.html&quot; rel=&quot;nofollow&quot;&gt;емакс, часть 2: восторг&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://xeno-by.livejournal.com/48181.html&quot; rel=&quot;nofollow&quot;&gt;емакс, часть 3: windows&lt;/a&gt;&lt;br /&gt;емакс, часть 4: ретроспектива&lt;br /&gt;&lt;br /&gt;Вдохновленный &lt;a href=&quot;https://twitter.com/#!/alexott/status/145450284632653824&quot; rel=&quot;nofollow&quot;&gt;сегодняшним выступлением @alexott&lt;/a&gt; на митапе scala.by, я тоже решил поделиться наблюдениями из своего опыта. Экспы у меня не то чтобы много, но постараюсь быть максимально адекватным. Если я чего-то не догоняю, это не со зла - вы меня поправьте, ладно?&lt;br /&gt;&lt;br /&gt;1) Емакс действительно крут. Главные его плюсы, на мой взгляд - неинтрузивность, программируемость и естественная интеграция с консолью. Например, недавно я соорудил наколенную билд-систему, с помощью которой застримлайнил свою работу над абсолютно разнородными проектами в универе. Она прекрасно заинтегрировалась в фар, и не менее замечательно - в емакс. Чтобы из емакса запустить какой-нибудь процесс и вбросить аутпут в буфер, нужны буквально пару телодвижений. Повесить на это все хоткеи и сделать гиперлинки на ошибки - еще немного работы. Пару обтачиваний и вуаля: &lt;a href=&quot;https://github.com/xeno-by/dotemacs/blob/c5107d21065711d2db4f5f9089caba460ef80634/solutions/myke-backend.el&quot; rel=&quot;nofollow&quot;&gt;myke-backend.el&lt;/a&gt;. Страшно представить, как что-то похожее сделать в Эклипсе.&lt;br /&gt;&lt;br /&gt;2) Практически все можно пилить самому. Это прекрасно и очень вдохновляет (например, одним телодвижением можно посмотреть, на какой именно код забинджен тот или иной ключик), но есть и обратная сторона. Практически все &lt;i&gt;придется&lt;/i&gt; допиливать самому. Даже банальную ширину таба нужно настраивать &lt;a href=&quot;https://github.com/xeno-by/dotemacs/blob/2e6000cd52e383c3e93f87e71d66091fd53c0f5c/editor/symbols.el&quot; rel=&quot;nofollow&quot;&gt;секретным образом&lt;/a&gt; (см. отдельную настройку для tab-stop-list), что уж говорить про такие вещи как копипасту, анду или прокрутку (кстати, у меня до сих пор через раз работает &lt;a href=&quot;https://github.com/xeno-by/dotemacs/blob/b198bd3e31643fb42699fe2251fc7706741f8988/editor/copypaste.el&quot; rel=&quot;nofollow&quot;&gt;выделение мышкой&lt;/a&gt;). Это не то что бы уж очень плохо, но надо иметь ввиду, что первые пару недель емакс будет отнимать колоссальное количество времени.&lt;br /&gt;&lt;br /&gt;3) Лисп не античеловечный, но и не простой в освоении. Довольно быстро я научился колбасить говнокод (что, наверняка, уже увидели уважаемые гуру емакса, пробежавшись по моему конфигу), но что-либо сложное я предпочитаю писать на чем-нибудь другом. Например, билд-система, упоминавшаяся выше, естественным образом выросла из ад-хок сниппетов на елиспе, но попытки превратить ее в что-то более-менее стройное успехом не увенчались, поэтому я по-быструхе переписал все с нуля на сишарпе. Наверняка, проблемы с удобством стандартной библиотеки и структур данных - всего лишь следствие моего несистемного подхода к изучению елиспа, но что вижу, то и пою. В любом случае, крайне помог бложек Стива Йегги, например, вот этот пост: &lt;a href=&quot;http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html&quot; rel=&quot;nofollow&quot;&gt;Emergency Elisp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;4) Емакс - не панацея, что бы не писали в инете (по крайней мере для меня). Для разработки компилятора Скалы я юзаю Эклипс (контрол + клик на дефинишен и дебаг слишком важны, чтобы от них отказываться), для коммитов и истории я юзаю TortoiseGit (magit работает через раз + для чего-то нетривиального в VCS тупо нужен гуй). Вначале я думал, что это я такой нехардкорный, а потом увидел, что все в команде делают то же самое (только гуй к гиту другой, ибо никто не сидит на венде). Даже Мартин, который юзает емакс уже лет двадцать.&lt;br /&gt;&lt;br /&gt;5) И все же я очень доволен емаксом. За денек я интегрировал в него греп по проектам с персональными свистелками, после чего выкинул поиск эклипса. Для сложных сессий репла Скалы я тоже юзаю емакс (идея консоли в буфере просто прелестна!). Да и домашки по алгоритмам в латеке я тоже фигачу в емаксе, ибо там подсветка синтаксиса и вручную прикрученный side-by-side превью. &lt;br /&gt;&lt;br /&gt;Вот так и живем. Браузинг кода и дебаг в эклипсе, компиляция в фаре, текстовый поиск и реплы в емаксе. Use the right tools for the right job. Искренне ваш, кэп.</content>
		<author>
			<name>xeno_by</name>
			<uri>https://xeno-by.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Excelsior</title>
			<subtitle type="html">xeno_by</subtitle>
			<link rel="self" href="https://xeno-by.livejournal.com/data/atom?tag=emacs-ru"/>
			<id>urn:lj:livejournal.com:atom1:xeno_by</id>
		</source>
	</entry>

	<entry>
		<title type="html">Andy Legkiy: Организационная пичалька</title>
		<link href="http://y5ae-ru.blogspot.com/2011/10/blog-post.html"/>
		<id>tag:blogger.com,1999:blog-9201877670096329725.post-5319379931921530814</id>
		<updated>2011-10-27T22:04:40+00:00</updated>
		<content type="html">Org-mode очень хороший аутлайнер. Не являясь ярым сторонником емакса, я люблю этот mode всем сердцем.&lt;br /&gt;&lt;br /&gt;У меня тут и журнал для личного пользования, и домашние дела, и рабочие дела. Рабочие дела, на одной работе, были и в виде каких-то крупных кусков, разбитых на мелкие подзадачи, и в виде справочной информации, и как неоформленные мысли и черновые наброски. Описание проб, итд. Так как рабочий процесс там полностью устаканен, это почти не создавало проблем. Для второй работы тоже пытался его использовать, но не так успешно.&lt;br /&gt;&lt;br /&gt;А в чем же проблема? Да дело в том, что на каждой работе есть свои вики, трекеры, итд. Необходимость использовать разных средства организации дел ведет к дублированию, устареванию одной из копий (или в org-mode, или на рабочих ресурсах).&lt;br /&gt;&lt;br /&gt;Если какая-то область новая, и какую-то задачу через время уже видишь под совсем новым углом, то на подгонку своих мыслей, примечаний, добавление новой информации, только в одном &quot;органайзере&quot;, уходит определенное кол-во усилий, на которое я c радостью готов пойти. Но, кроме этого, больше усилий уходит на синхронизацию разных источников, ведь синхронизация происходит руками. А вот тут и начинается главная проблема. Отказываться от org-mode не хочется, потому что он очень удобный, быстрый, очень гибкий, и не зависит от наличия интернета. Но и дублировать информацию, перенося из одного формата в другой, разбивая по разным сущностям (страницы wiki, milestone, tickets) -- довольно таки трудно и неприятно.&lt;br /&gt;&lt;br /&gt;Попал в ситуация, когда на рабочую систему забиваешь, а в org-mode сильно много не плодишь, а пишешь или справочную информацию, или как-то аморфно, просто забивая на конкретизацию. Ведь знаешь, что когда-то все прийдется переносить руками в другую систему, с другой структурой и организацией поддокументов, и будет большое количества мартышкиного труда.&lt;br /&gt;&lt;br /&gt;И вот пришло, нужно использовать рабочую систему, и это не какая-то там бюрократия, а элементарная необходимость.&lt;br /&gt;&lt;br /&gt;А что делать? Да пока выбор не большой. Коллегам нужно не только видеть план работ и ход его выполнения, перестройки, уточнения, но еще в нем участвовать.&lt;br /&gt;&lt;br /&gt;1. Можно было бы воспользоаться имеющимся html-экспортом, на каком-нибудь рабочем ресурсе, и это было бы неплохим выходом, на начальных этапах. Но для перечисленных выше потребностей коллег оно совсем не расчитанно. Так что, увы, отпадает.&lt;br /&gt;2. Полностью валить на рабочую систему, что и будет сделано, в итоге.&lt;br /&gt;3. Использовать org-mode как буфер для небольших кусков, возможно приделав некоторое подобие простого экспорта. Но это костыль и полумера. После экспорта вся гибкость средств оrg-mode полностью теряется. Кто пользовался, тот знает о чем я. Но без средств автоматического переноса это может привести к очередному накоплению и завалу. Но как добавить дела в кучу, чтобы потом рассортировать, вполне может подойти.&lt;br /&gt;&lt;br /&gt;Вот такой небольшой фейл использования для работы замечательного средства организации дел. А жаль.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD:&lt;/b&gt; Если у кого есть мысли или опыт сопряжения org-mode с популярными средствами управления проектами, буду рад услышать.</content>
		<author>
			<name>Andy Legkiy</name>
			<email>noreply@blogger.com</email>
			<uri>http://y5ae-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Easy's blog in Russian</title>
			<link rel="self" href="http://www.blogger.com/feeds/9201877670096329725/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-9201877670096329725</id>
		</source>
	</entry>

	<entry>
		<title type="html">kashnikov: Цветовая схема для текстового редактора.</title>
		<link href="https://kashnikov.livejournal.com/50881.html"/>
		<id>urn:lj:livejournal.com:atom1:kashnikov:50881</id>
		<updated>2011-08-22T18:41:14+00:00</updated>
		<content type="html">Для Emacs я долгое время пользовался какой-то хитрой тёмной схемой составленной из кучи других схем найденных в интернетах. Некоторое время назад перешёл на схему от уважаемого мэтра емаксоведения &lt;span class=&quot;ljuser  i-ljuser  i-ljuser-type-P     &quot;&gt;&lt;a class=&quot;i-ljuser-profile&quot; href=&quot;https://alexott.livejournal.com/profile&quot; target=&quot;_self&quot;&gt;&lt;img class=&quot;i-ljuser-userhead&quot; src=&quot;https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080?v=298&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;i-ljuser-username&quot; href=&quot;https://alexott.livejournal.com/&quot; target=&quot;_self&quot;&gt;&lt;b&gt;alexott&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;. Его схема рулит.&lt;br /&gt;&lt;br /&gt;Для Vim это torte в консоли. Но в графической версии torte, что называется &quot;бьёт по глазам&quot;. Подумываю о переводе схемы &lt;span class=&quot;ljuser  i-ljuser  i-ljuser-type-P     &quot;&gt;&lt;a class=&quot;i-ljuser-profile&quot; href=&quot;https://alexott.livejournal.com/profile&quot; target=&quot;_self&quot;&gt;&lt;img class=&quot;i-ljuser-userhead&quot; src=&quot;https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080?v=298&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;i-ljuser-username&quot; href=&quot;https://alexott.livejournal.com/&quot; target=&quot;_self&quot;&gt;&lt;b&gt;alexott&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; для Vim.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Какой цветовой схемой пользуетесь вы?&lt;/b&gt;</content>
		<author>
			<name>Et ipsa scientia potestas est.</name>
			<uri>https://kashnikov.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Veritas vos liberabit</title>
			<subtitle type="html">Scientia est lux lucis</subtitle>
			<link rel="self" href="https://kashnikov.livejournal.com/data/atom?tag=emacs"/>
			<id>urn:lj:livejournal.com:atom1:kashnikov</id>
		</source>
	</entry>

	<entry>
		<title type="html">Ruslan Kosolapov: grundik @ 2011-07-04T11:16:00</title>
		<link href="https://grundik.livejournal.com/502322.html"/>
		<id>urn:lj:livejournal.com:atom1:grundik:502322</id>
		<updated>2011-07-04T04:16:42+00:00</updated>
		<content type="html">&quot;Попробуйте, к примеру, дотянитесь одной рукой одновременно до f и p. Клавиши находятся на большом расстоянии друг от друга, и точное позиционирование курсора с использованием стандартных комбинаций – жуткая морока.&quot;&lt;br /&gt;&lt;br /&gt;Блять!!1111  ЗАЧЕМ дотягиваться одной рукой до кнопок, которые надо нажимать разными руками?!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;И вот так у них всё - берут лопату, и пытаются одной рукой ей пользоваться.  Зачем блять?!  Лопате надо две руки и две ноги, и это фича, а не баг.</content>
		<author>
			<name>Ruslan Kosolapov</name>
			<uri>https://grundik.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">rk lj</title>
			<subtitle type="html">Ruslan Kosolapov</subtitle>
			<link rel="self" href="https://grundik.livejournal.com/data/atom?tag=emacs"/>
			<id>urn:lj:livejournal.com:atom1:grundik</id>
		</source>
	</entry>

	<entry>
		<title type="html">Andy Legkiy: Совсем не вовремя заглючил аутлайнер</title>
		<link href="http://y5ae-ru.blogspot.com/2011/06/blog-post_17.html"/>
		<id>tag:blogger.com,1999:blog-9201877670096329725.post-4677827061757275257</id>
		<updated>2011-06-17T11:45:33+00:00</updated>
		<content type="html">Нашел в org-mode 7.5 ошибку, которая слегка попортила нервы.&lt;br /&gt;В agenda day/week view, при определенных условиях, не отображаются хидлайны, помеченные как scheduled, если используется настройка &quot;org-enforce-todo-dependencies&quot;.&lt;br /&gt;&lt;br /&gt;Воспроизводится легко. Новый файлик, без каких-либо свойств, всего с тремя хидлайнами, у второго хидлайна есть подзадача, отмеченая состоянием TODO.&lt;br /&gt;&lt;pre&gt;* TODO task 1&lt;br /&gt;  SCHEDULED: &amp;lt;2011-06-16 Thu&amp;gt;&lt;br /&gt;* task 2&lt;br /&gt;  SCHEDULED: &amp;lt;2011-06-16 Thu&amp;gt;&lt;br /&gt;** TODO subtask 2-1&lt;br /&gt;* task 3&lt;br /&gt;  SCHEDULED: &amp;lt;2011-06-16 Thu&amp;gt;&lt;/pre&gt;В day-agenda не отображается &quot;task 2&quot; (второй хидлайн верхнего уровня).&lt;pre&gt;  NOTES:      Scheduled:  TODO task 1&lt;br /&gt;  NOTES:      Scheduled:  task 3&lt;/pre&gt;Не отображается, но если попробовать выделить и скопировать текст из Agenda (хотя бы строку с &quot;task 1&quot;), &quot;task 2&quot; в буфере будет присутствовать.&lt;br /&gt;&lt;br /&gt;Чтобы второй пункт отобразился, нужно:&lt;br /&gt;  - Убрать TODO с &quot;task 1&quot;,&lt;br /&gt;  - Или убрать TODO c &quot;subtask 2-1&quot;,&lt;br /&gt;  - Или убрать из конфига &quot;(org-enforce-todo-dependencies t)&quot;.</content>
		<author>
			<name>Andy Legkiy</name>
			<email>noreply@blogger.com</email>
			<uri>http://y5ae-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Easy's blog in Russian</title>
			<link rel="self" href="http://www.blogger.com/feeds/9201877670096329725/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-9201877670096329725</id>
		</source>
	</entry>

	<entry>
		<title type="html">Jason McBrayer: Instapaper client for Emacs</title>
		<link href="http://www.carcosa.net/jason/blog/computing/emacs/instapaper-el-2011-04-18-17-00"/>
		<id>http://www.carcosa.net/jason/blog/computing/computing/emacs/instapaper-el-2011-04-18-17-00</id>
		<updated>2011-04-18T21:00:00+00:00</updated>
		<content type="html">&lt;p&gt;I'm a serious user of &lt;a href=&quot;https://www.instapaper.com/&quot;&gt;Instapaper&lt;/a&gt;, a web site that describes
itself as &quot;a simple tool to save web pages for reading later&quot;. It's
rather more than that, though: it will also reformat pages for
distraction-free reading, much like the now-defunct Readability
bookmarklet, it works as a social bookmarking service (though I
don't really use this functionality), and it will bundle your
pending reads into an ePub or Mobipocket ebooklet. There is an
official freedom-hating iOS app, and several unofficial Android
apps; the one I use is &lt;a href=&quot;https://market.android.com/details?id=org.hijava.instapaper&amp;amp;feature=search_result&quot;&gt;iPaper&lt;/a&gt;, which is still a little
freedom-hating, but provides offline reading, which just using the
website doesn't, barring a strict ePub export/sync routine or some
futzing around with &lt;a href=&quot;http://www.gedanken.demon.co.uk/wwwoffle/&quot;&gt;wwwoffle&lt;/a&gt; or similar.&lt;/p&gt;

&lt;p&gt;I use Instapaper to push articles that would otherwise cut into my
productive time into my less productive time: adding
them from my browser, syncing with iPaper once or twice a day, and
reading mostly in the evenings. For saving articles, I mostly use
the Firefox add-on &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/instaright-social-bookmarks/&quot;&gt;Instaright&lt;/a&gt;, which is handy because I can
add links without following them. Most of the articles I save for
later come from Google Reader, which I use mainly from Firefox, so
that works well. What didn't work so well was my other main source
of linkspam: &lt;a href=&quot;https://identi.ca/&quot;&gt;identi.ca&lt;/a&gt;. I use &lt;a href=&quot;http://blog.nethazard.net/identica-mode-for-emacs/&quot;&gt;identica-mode&lt;/a&gt; for my
microblogging needs, so saving a link from identi.ca means a trip
from emacs -&amp;gt; follow link to dent or site in Firefox -&amp;gt;
Instaright. Obviously this is far too much opportunity to be
tempted to read the article now rather than later, so I wrote an
Instapaper client for Emacs.&lt;/p&gt;

&lt;p&gt;The code is on &lt;a href=&quot;https://bitbucket.org/jfm/emacs-instapaper&quot;&gt;bitbucket&lt;/a&gt;, and the instructions for using it
are in the source header. It should be fairly self-explanatory. It
saves URLs to your Instapaper account, and can get them either
manually, by url-at-point, or, if you have w3m installed, from the
current w3m page's URL or selected link. It doesn't provide any
services for &lt;em&gt;reading&lt;/em&gt; from Instapaper (offline or otherwise), and
because of the terms of service on the official API and my lack of
desire to do screen-scraping in Emacs Lisp, I don't plan on adding
any. A combination of w3m and wwwoffle or &lt;a href=&quot;http://www.pps.jussieu.fr/~jch/software/polipo/&quot;&gt;polipo&lt;/a&gt; is
probably your best bet if you need to read Instapaper in Emacs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edited to add&lt;/strong&gt;: Naturally, when I released this, it contained a
significant bug, to whit: due to changes in url.el, it only worked in
Emacs 24. This has been fixed, though if you byte-compile it under
Emacs &amp;lt;= 23, you will get a compile warning.&lt;/p&gt;</content>
		<author>
			<name>Jason McBrayer</name>
			<uri></uri>
		</author>
		<source>
			<title type="html">Jason McBrayer</title>
			<link rel="self" href="http://www.carcosa.net/jason/blog/computing/index.rss2"/>
			<id>http://www.carcosa.net/jason/blog/computing/index.rss2</id>
		</source>
	</entry>

	<entry>
		<title type="html">Alex Ott: Добавления в haskell-mode</title>
		<link href="http://alexott-ru.blogspot.com/2011/02/haskell-mode.html"/>
		<id>tag:blogger.com,1999:blog-2145365503775784580.post-716138085036106177</id>
		<updated>2011-02-02T07:44:12+00:00</updated>
		<content type="html">На новогодних каникулах сделал давно запланированное добавление к haskell-mode - добавил поддержку для &lt;a href=&quot;http://community.haskell.org/%7Endm/hlint/&quot;&gt;hlint&lt;/a&gt; (команда &lt;b&gt;hs-lint&lt;/b&gt;) и &lt;a href=&quot;http://projects.haskell.org/style-scanner/&quot;&gt;haskell style scanner&lt;/a&gt; (команда &lt;b&gt;&lt;span&gt;hs-scan&lt;/span&gt;&lt;/b&gt;). Как и в предыдущей реализации, hs-lint поддерживает замену кода на предлагаемый вариант.&lt;br /&gt;Патчи отправлены мейнтейнеру, но пока они не закоммиченны в основной репозиторий, эти изменения доступны в &lt;a href=&quot;https://patch-tag.com/r/alexott/haskell-mode/home&quot;&gt;моем форке&lt;/a&gt;. Замечания и пожелания приветствуются...</content>
		<author>
			<name>Alex Ott</name>
			<email>noreply@blogger.com</email>
			<uri>http://alexott-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Alex Ott's Russian blog about IT-related things</title>
			<subtitle type="html">This blog dedicated to IT, Software development and information security.  Main language - Russian.</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/2145365503775784580/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-2145365503775784580</id>
		</source>
	</entry>

	<entry>
		<title type="html">swizard: Emacs на nokia n900 tutorial</title>
		<link href="https://swizard.livejournal.com/164863.html"/>
		<id>urn:lj:livejournal.com:atom1:swizard:164863</id>
		<updated>2011-01-18T17:58:51+00:00</updated>
		<content type="html">Сабжу весьма благоприятствуют два факта: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;maemo является полноценным линуксом&lt;/li&gt;&lt;li&gt;n900 оснащается хардварной клавиатурой-слайдером &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Разумеется, самое главное во втором пункте -- это наличие железной кнопки &lt;b&gt;Ctrl&lt;/b&gt; =)&lt;br /&gt;&lt;br /&gt;Итак, воспользуемся следующим туториалом одного нашего японского друга: &lt;a href=&quot;http://sumoudou.org/%E7%9B%B8%E6%92%B2%E5%A4%96%EF%BC%9AGNU%20Emacs%20for%20Nokia%20N900.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Продублирую его (на всякий случай) на русском.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Скачиваем пакет на устройство &lt;a href=&quot;http://sumoudou.org/n900/emacs_23.1.1_armel.deb&quot; rel=&quot;nofollow&quot;&gt;отсюда&lt;/a&gt; или с моего &lt;a href=&quot;http://swizard.info/misc/mirror/emacs_23.1.1_armel.deb&quot; rel=&quot;nofollow&quot;&gt;зеркала&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Под рутом выполняем &lt;span style=&quot;background-color: #000000; color: #00ff00; margin: 1px;&quot;&gt;dpkg -i emacs_23.1.1_armel.deb&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Обновляем apt и доставляем недостающие пакеты: &lt;span style=&quot;background-color: #000000; color: #00ff00; margin: 1px;&quot;&gt;apt-get -f install&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Далее, нам предстоит решить такую проблему: на клавиатуре телефона отсутствуют очень полезные для емакса кнопки &lt;b&gt;Meta&lt;/b&gt; (Esc) и &lt;b&gt;Tab&lt;/b&gt;. Наш верный японский соратник &lt;a href=&quot;http://sumoudou.org/%E7%9B%B8%E6%92%B2%E5%A4%96%EF%BC%9ARemapping%20Nokia%20N900%20keyboard.html&quot; rel=&quot;nofollow&quot;&gt;предлагает&lt;/a&gt; такую клавиатурную карту для English US: &lt;a href=&quot;http://sumoudou.org/n900/rx-51.qole&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt; или &lt;a href=&quot;http://swizard.info/misc/mirror/rx-51.qole&quot; rel=&quot;nofollow&quot;&gt;mirror&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;На стандартном английском макете &lt;b&gt;Meta&lt;/b&gt; в этой карте работает через &lt;b&gt;Fn+left&lt;/b&gt;, а &lt;b&gt;Tab&lt;/b&gt; через &lt;b&gt;Fn+right&lt;/b&gt;. Лично для меня табуляция вышла очень удачной (не знаю даже, почему), а мета -- ну так, сойдет. &lt;br /&gt;&lt;br /&gt;Инсталлируем карту так:&lt;br /&gt;&lt;br /&gt;&lt;table bgcolor=&quot;#1f1f1f&quot; border=&quot;0&quot; cellpadding=&quot;1&quot; cellspacing=&quot;3&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;    &lt;pre&gt;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&lt;/pre&gt;  &lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Далее, надо решить небольшую проблему с емаксовым фуллскрином. Дело в том, что по-дефолту статусная строка внизу уезжает за пределы экрана.&lt;br /&gt;&lt;br /&gt;Японец &lt;a href=&quot;http://sumoudou.org/%E7%9B%B8%E6%92%B2%E5%A4%96%EF%BC%9AMaximize%20GNU%20Emacs%20properly%20on%20Nokia%20N900.html&quot; rel=&quot;nofollow&quot;&gt;предлагает&lt;/a&gt; поставить специальный мод &lt;a href=&quot;http://sumoudou.org/elisp/maxframe/maxframe.el&quot; rel=&quot;nofollow&quot;&gt;maxframe.el&lt;/a&gt; (здесь &lt;a href=&quot;http://swizard.info/misc/mirror/maxframe.el&quot; rel=&quot;nofollow&quot;&gt;mirror&lt;/a&gt;). С ним чето мутновато: сначала он у меня не сработал, а после порта моих &lt;b&gt;.emacs.d&lt;/b&gt; и &lt;b&gt;.emacs&lt;/b&gt; с десктопа, неожиданно заработал. Ладно, пусть его.&lt;br /&gt;&lt;br /&gt;В &lt;b&gt;.emacs&lt;/b&gt; maxframe.el активируется так:&lt;br /&gt;&lt;table bgcolor=&quot;#1f1f1f&quot; border=&quot;0&quot; cellpadding=&quot;1&quot; cellspacing=&quot;3&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;    &lt;pre&gt;(add-to-list 'load-path &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;/path/to/maxframe&quot;&lt;/b&gt;&lt;/font&gt;)
(&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; '&lt;font color=&quot;#7fffd4&quot;&gt;&lt;b&gt;maxframe&lt;/b&gt;&lt;/font&gt;)
(add-hook 'window-setup-hook 'maximize-frame t)
(maximize-frame)&lt;/pre&gt;  &lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Теоретически, можно тащить настройки и все остальное с десктопа и использовать. &lt;br /&gt;&lt;br /&gt;Но для моих нужд (у меня там схемка guile) мне потребовалось кое-что подпилить напильником.&lt;br /&gt;&lt;br /&gt;Во-первых, на десктопе я олдфажно использую &lt;b&gt;ctrl+ins&lt;/b&gt; / &lt;b&gt;shift+ins&lt;/b&gt; для копипаста. На n900 таких кнопок нет, поэтому пришлось перевесить:&lt;br /&gt;&lt;br /&gt;&lt;table bgcolor=&quot;#1f1f1f&quot; border=&quot;0&quot; cellpadding=&quot;1&quot; cellspacing=&quot;3&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;    &lt;pre&gt;(global-set-key (kbd &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;C-c c&quot;&lt;/b&gt;&lt;/font&gt;) 'clipboard-kill-ring-save)
(global-set-key (kbd &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;C-c v&quot;&lt;/b&gt;&lt;/font&gt;) 'clipboard-yank)&lt;/pre&gt;  &lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Ничего, нормально.&lt;br /&gt;&lt;br /&gt;Во-вторых, не вызывается экранная клавиатура и спец-клавиатура для символов (по &lt;b&gt;Fn+Ctrl&lt;/b&gt;). По-большому счету, мне это нафиг не надо, поэтому я даже не заморачивался. Но пары символов критически не хватает: это угловые скобки &lt;b&gt;&amp;lt;&lt;/b&gt; и &lt;b&gt;&amp;gt;&lt;/b&gt;. Пришлось их вешать на емаксовые комбинации:&lt;br /&gt;&lt;br /&gt;&lt;table bgcolor=&quot;#1f1f1f&quot; border=&quot;0&quot; cellpadding=&quot;1&quot; cellspacing=&quot;3&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;    &lt;pre&gt;(&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;defun&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#87cefa&quot;&gt;&lt;b&gt;insert-less-symbol&lt;/b&gt;&lt;/font&gt; ()
  (interactive)
  (insert &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;&amp;lt;&quot;&lt;/b&gt;&lt;/font&gt;))

(&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;defun&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#87cefa&quot;&gt;&lt;b&gt;insert-more-symbol&lt;/b&gt;&lt;/font&gt; ()
  (interactive)
  (insert &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;&amp;gt;&quot;&lt;/b&gt;&lt;/font&gt;))

(global-set-key (kbd &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;C-c C-,&quot;&lt;/b&gt;&lt;/font&gt;) 'insert-less-symbol)
(global-set-key (kbd &lt;font color=&quot;#ffa07a&quot;&gt;&lt;b&gt;&quot;C-c C-.&quot;&lt;/b&gt;&lt;/font&gt;) 'insert-more-symbol)&lt;/pre&gt;  &lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Ну и пока вроде все, IDE для scheme у меня построился отличный. Все остальное, как на десктопе: guile, quack.el и т.д.&lt;br /&gt;&lt;br /&gt;Иногда ловлю себя на мысли, что не хватает кнопок &lt;b&gt;home&lt;/b&gt;, &lt;b&gt;end&lt;/b&gt; и &lt;b&gt;page up/down&lt;/b&gt;, но пока еще нужда лень не победила.</content>
		<author>
			<name>swizard</name>
			<uri>https://swizard.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">swizard</title>
			<subtitle type="html">swizard</subtitle>
			<link rel="self" href="https://swizard.livejournal.com/data/atom?tag=emacs"/>
			<id>urn:lj:livejournal.com:atom1:swizard</id>
		</source>
	</entry>

	<entry>
		<title type="html">Jason McBrayer: Todochiku notifications in identica-mode</title>
		<link href="http://www.carcosa.net/jason/blog/computing/identica-mode-notification-2011-01-04-12-00"/>
		<id>http://www.carcosa.net/jason/blog/computing/computing/identica-mode-notification-2011-01-04-12-00</id>
		<updated>2011-01-04T17:00:00+00:00</updated>
		<content type="html">&lt;p&gt;Just a quick response to &lt;a href=&quot;http://blog.nethazard.net/emacs-identica-mode-notifications/&quot;&gt;Gabriel Saldaña's recent post&lt;/a&gt; on
identica-mode notifications: the code for using todochiku for
identica-mode notifications is as follows:&lt;/p&gt;

&lt;div class=&quot;codeblock&quot;&gt;
&lt;pre&gt;(add-hook \'identica-new-dents-hook
  (lambda nil
    (let ((n identica-new-dents-count))
      (todochiku-message \&quot;Emacs Identica-mode New dents\&quot;
                         (format \&quot;You have %d new dent%s.\&quot; n (if (&amp;gt; n 1) \&quot;s\&quot; \&quot;\&quot;))
                         (todochiku-icon \'social)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The advantage of using todochiku here is that you can let it handle
talking to different notification systems (KDE vs. Gnome vs.Growl on
MacOS vs Snarl on MS Windows), and have the same configuration
everywhere.&lt;/p&gt;</content>
		<author>
			<name>Jason McBrayer</name>
			<uri></uri>
		</author>
		<source>
			<title type="html">Jason McBrayer</title>
			<link rel="self" href="http://www.carcosa.net/jason/blog/computing/index.rss2"/>
			<id>http://www.carcosa.net/jason/blog/computing/index.rss2</id>
		</source>
	</entry>

	<entry>
		<title type="html">Oleksandr Gavenko: Определение рабочего окружения и возможностей платформы в Emacs</title>
		<link href="http://brain-break-ru.blogspot.com/2010/08/emacs.html"/>
		<id>tag:blogger.com,1999:blog-6734527039160439299.post-2234881617140746121</id>
		<updated>2010-12-21T19:57:37+00:00</updated>
		<content type="html">Для правильной работы файла настроек &lt;code&gt;.emacs&lt;/code&gt; на различных платформах и различных версиях Emacs требуется проверять множество условий.
&lt;p&gt;
Я собрал несколько из них.
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
Итак посмотрите на указанные переменные:
&lt;/p&gt;&lt;div id=&quot;code&quot;&gt;  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
&lt;/div&gt;

а также указанные функции:

&lt;div id=&quot;code&quot;&gt;  (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
&lt;/div&gt;

Виполняйте проверки наподобии того как делается ниже:
&lt;div id=&quot;code&quot;&gt;  (when window-system ...)
  (when (eq window-system 'x) ...)
  (when (&amp;gt;= emacs-major-version 22) ...)
  (when (fboundp '...) ...)
  (when (featurep '...) ...)
&lt;/div&gt;</content>
		<author>
			<name>Oleksandr Gavenko</name>
			<email>noreply@blogger.com</email>
			<uri>http://brain-break-ru.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Brain Break (ru).</title>
			<subtitle type="html">it/security/free/math/sci/music
&lt;p&gt;
Русская версия &lt;a href=&quot;http://brain-break.blogspot.com&quot;&gt;brain-break.blogspot.com&lt;/a&gt;. Присоединяйтесь!&lt;/p&gt;</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/6734527039160439299/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-6734527039160439299</id>
		</source>
	</entry>

	<entry>
		<title type="html">Voins: Untitled</title>
		<link href="https://voins.livejournal.com/115095.html"/>
		<id>urn:lj:livejournal.com:atom1:voins:115095</id>
		<updated>2010-10-22T13:41:08+00:00</updated>
		<content type="html">&lt;div class=&quot;&quot;&gt;&lt;p&gt;Обновив coreutils до версии 8.6, обнаружил случайно, что &lt;a href=&quot;http://www.emacswiki.org/emacs/TrampMode&quot; rel=&quot;nofollow&quot;&gt;tramp&lt;/a&gt; больше не хочет открывать файлы через sudo. То есть это я потом уже понял, что причиной такого поведения стало обновление coreutils, а сначала это было довольно неприятно. Пришлось отвлечься от того, чем занимался, и посвятить вечер разбирательствам с поломкой. Как выяснилось в процессе, кто-то зачем-то поменял формат вывода в утилите stat. Наблюдается это вот так, например:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;lt;new&amp;gt;$ stat . -c &quot;%Y&quot;&lt;br /&gt;1287747411.000000000&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Тогда как раньше было:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;lt;old&amp;gt;$ stat . -c &quot;%Y&quot;&lt;br /&gt;1287747411&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Tramp пользуется stat'ом для получения атрибутов файлов. Если находит. Можно было, конечно, обмануть его, и заставить думать что stat, который он нашёл, несовместим  с тем, что он привык считать stat'ом, но это не наш путь. Наш путь привёл к появлению маленького автомата, определяющего в каком формате нам были выданы циферки, и выдающего правильные и ожидаемые циферки на выходе. Делать полноценный патч мне было лениво. Так что есть только &lt;a href=&quot;http://gist.github.com/640538&quot; rel=&quot;nofollow&quot;&gt;это&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>Voins</name>
			<uri>https://voins.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Voins</title>
			<subtitle type="html">Voins</subtitle>
			<link rel="self" href="https://voins.livejournal.com/data/atom?tag=emacs"/>
			<id>urn:lj:livejournal.com:atom1:voins</id>
		</source>
	</entry>

</feed>
