Конфигурация emacs c distel+flycheck(rebar)+company* для debian(можно win)

223 views
Skip to first unread message

leg...@gmail.com

unread,
Jun 28, 2016, 3:39:31 AM6/28/16
to erlang-...@googlegroups.com
Коллеги, кто-нибудь может поделиться рабочей конфигурацией emacs c настроенными distel+flycheck(rebar)+company*, wrangkel (опционально)?

emacs - 24.4 или 25.1

Я новичек в emacs и нужна помощь, так как моя конфигурация живет своей жизнью :-(
Я привожу ее ниже - там указаны версии дополнений явно (они должны быть последними стабильными)

;; distribs list
(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/")
                         ("gnu" . "http://elpa.gnu.org/packages/")
                         ("marmalade" . "https://marmalade-repo.org/packages/")
                         ("melpa" . "https://melpa.org/packages/")))
(package-initialize)

;; erlang
(setq load-path (cons  "/usr/lib/erlang/lib/tools-2.8.3/emacs" load-path))
(setq erlang-root-dir "/usr/lib/erlang/lib/tools-2.8.3")
(setq exec-path (cons "/usr/lib/erlang/lib/tools-2.8.3/bin" exec-path))
(setq erlang-man-root-dir "/usr/lib/erlang/lib/tools-2.8.3/man")
(load "erlang_appwiz" t nil)
(require 'erlang-start)
(require 'erlang-eunit)

(add-to-list 'load-path "~/.emacs.d/flycheck-20160622.952/")
(require 'flycheck)
(flycheck-define-checker erlang-otp
                         "An Erlang syntax checker using the Erlang interpreter."
                         :command ("erlc" "-o" temporary-directory "-Wall"
                                   "-I" "../include" "-I" "../../include"
                                   "-I" "../../../include" source)
                         :error-patterns
                         ((warning line-start (file-name) ":" line ": Warning:" (message) line-end)
                          (error line-start (file-name) ":" line ": " (message) line-end)))
(add-hook 'erlang-mode-hook
          (lambda ()
            (flycheck-select-checker 'erlang-otp)
                        (flycheck-mode)))

(add-to-list 'load-path "~/.emacs.d/flycheck-tip-20160622.1906/")
(require 'flycheck-tip)
(flycheck-tip-use-timer 'verbose)

;; distel
(add-to-list 'load-path "~/.emacs.d/distel/elisp/")
(require 'distel)
(distel-setup)
(setq derl-cookie "emacs")
;; prevent annoying hang-on-compile
;(defvar inferior-erlang-prompt-timeout t)
;; default node name to emacs@localhost
(setq inferior-erlang-machine-options '("-sname" "emacs@s2"))
;; tell distel to default to that node
(setq erl-nodename-cache
      (make-symbol
       (concat
        "emacs@"
        (car (split-string (shell-command-to-string "hostname"))))))



(add-to-list 'load-path "~/.emacs.d/company-distel/")
(require 'company-distel)
(with-eval-after-load 'company
  (add-to-list 'company-backends 'company-distel))

;(add-hook 'erlang-mode-hook
;          (lambda ()
;            (setq company-backends '(company-distel))))

Yuri Zhloba

unread,
Jun 28, 2016, 4:00:08 AM6/28/16
to erlang-...@googlegroups.com
Не хотелось бы скатываться в холивар, но я рекомендую попробовать Intellij IDEA. Сам 3 года писал эрланг в емаксе, и имею сказать, что делать это в IDEA удобнее.

28 июня 2016 г., 10:39 пользователь <leg...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russia...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
Yuri Zhloba

skype: yzh44yzh
phone: +375 44 793 33 73

leg...@gmail.com

unread,
Jun 28, 2016, 4:15:08 AM6/28/16
to erlang-...@googlegroups.com
Юра, описанные требования к функциональности реализованы в Idea или с помощью плагинов к ней?

вторник, 28 июня 2016 г. пользователь Yuri Zhloba написал:

Yuri Zhloba

unread,
Jun 28, 2016, 5:32:11 AM6/28/16
to erlang-...@googlegroups.com

Поддержка эрланг хорошая. Navigate Class/File/Symbol, Go to declaration, Find usages и прочие IDEA-фичи  -- это все работает.

Форматирует код не так, как емакс. Это иногда раздражает.

Вот я не знаю как из IDEA подключиться к ноде, подебажить там, или что. Я просто этим не пользуюсь. Вроде бы как-то можно.

Главный минус -- пока что не понимает структуру проекта rebar3, не видит зависимостей. Их приходится вручную подключать. Проект rebar 2 понимает.

28 июня 2016 г., 11:15 пользователь <leg...@gmail.com> написал:

Yuri Zhloba

unread,
Jun 28, 2016, 5:33:12 AM6/28/16
to erlang-...@googlegroups.com
https://plugins.jetbrains.com/plugin/7083?pr=idea эрланг плагин к IDEA. Работает и на community edition, и на ultimate edition, и в PyCharm.

28 июня 2016 г., 12:32 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

leg...@gmail.com

unread,
Jun 28, 2016, 5:51:18 AM6/28/16
to erlang-...@googlegroups.com
В моем случае у меня в зависимостях проект на rebar 3, поэтому я хотел бы сразу смотреть на ребар3.
Возможно, помучашись, я все таки вернусь к IDEA, но я бы хотел емакс "дожать".
Юра, раз бы работал 3, можешь выложить свой конфиг, если он distel или flycheck или другие расширения?

28 июня 2016 г., 12:33 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Yuri Zhloba

unread,
Jun 28, 2016, 6:01:00 AM6/28/16
to erlang-...@googlegroups.com
distel у меня нет, не вписывается в мой workflow. Это надо постоянно держать запущенную ноду и обновлять в ней код каким-нибудь sync. Я же предпочитаю ноду останавливать, компилировать и запускать заново.

Есть erlang-mode, flycheck, самописные функции (erl-utils.el) и шаблоны для создания модулей, ген-серверов и т.д.

У меня тоже проект на rebar3. С IDEA тут не глобальная проблема, а некоторое неудобство -- нужно в настройках проекта вручную указать все зависимые библиотеки, т.к. IDEA сама не тянет их из rebar.config. Если не подключить, или подключить не все, то это тож небольшая беда -- просто не будут работать goto definition, show parameters и т.д. для неподключенных модулей.


28 июня 2016 г., 12:51 пользователь <leg...@gmail.com> написал:

Grigory Fateyev

unread,
Jun 28, 2016, 6:20:46 AM6/28/16
to Erlang в России
А что edts вообще уже никто не использует? Хорошая вещь!

28 июня 2016 г., 13:00 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Yuri Zhloba

unread,
Jun 28, 2016, 6:32:17 AM6/28/16
to erlang-...@googlegroups.com
Ну кто-нибудь использует.

Но принцип тот же, что и у distel: Emacs должен иметь постоянный коннект к ноде, чтобы черпать оттуда инфу для автокомплитов и goto. Из-за этого ноду нужно держать постоянно работающей. Или после рестарта ноды заново переподключаться к ней из emacs. В distel, насколько я помню, переподключаться можно вручную. edts может делать это автоматически, не знаю.

28 июня 2016 г., 13:20 пользователь Grigory Fateyev <gfb...@gmail.com> написал:

leg...@gmail.com

unread,
Jun 28, 2016, 6:39:19 AM6/28/16
to erlang-...@googlegroups.com
Про edts - видел посты, что он не собирает из коробки самостоятельно - отложил в дальний угол.
Посмотрел дальше - использует flymake, а не flycheck - поэтому больше минус, чем плюс. Статей о том как подружить старый flymake с rebar3 много, а вот flycheck- на порядок меньше. Поэтому решил пойти "наискорейшим путем" как мне показалось :-(.
Distel под виндоус у меня не захотел собриться из коробки - ошибка компиляции, поэтому я как-то больше на линуксе решил сосредоточиться.

В целом, если ты работаешь с инструментом давно, то дописать какой-то фунционал для emacs-а мне кажется на порядок проще, чем меняь что-то в плагине idea. Именно по этому я и трачу время на emacs.
C Intellij Idea я работаю на работе и мне этого более чем достаточно )

28 июня 2016 г., 13:32 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Yuri Zhloba

unread,
Jun 28, 2016, 6:49:07 AM6/28/16
to erlang-...@googlegroups.com
Да, я тож когда-то думал, что правильно -- выпиливать идеальное окружение под себя. Потом наелся поддержки такого окружения, и решил не париться, а тупо использовать то, что есть, в том виде, в каком оно есть. И только в крайних случаях приделывать что-то свое :)

28 июня 2016 г., 13:39 пользователь <leg...@gmail.com> написал:

Dmitry Belyaev

unread,
Jun 28, 2016, 6:43:59 PM6/28/16
to erlang-...@googlegroups.com, leg...@gmail.com
Когда я последний раз смотрел на distel, его поддержка прекратилась на тот момент уже как года два. Это было 2 года назад.

А вот edts как раз развивается и даже находится в списке эмакс пекеджей и без проблем ставится со всеми зависимости и компиляцией из list-packages. Все что ему нужно запускает сам автоматически, и поиск определения есть, и поиск мест использования. Насчет отладчика только не знаю - не пользуюсь.

Компиляцией проекта для запуска вручную из шелла, насколько я знаю, он не занимается. Это вроде как не совсем задача тестового редактора. Не пользуюсь.
--
Best wishes,
Dmitry Belyaev

Dmitry Dmitriy

unread,
Jun 28, 2016, 11:28:54 PM6/28/16
to Erlang по-русски, leg...@gmail.com
Пользовался раньше Emacs + EDTS, пока не пересел на Идею. Инфа про EDTS двухлетней давности: дебаггер работает - текущая строка выделяется красным в окне редактора. Правда были проблемы с актуализацией сорцов после hot code reloading. То есть сорцы то актуальные, а вот эрланговскому дебаггеру их скормить тот ещё геморрой был. В общем точно не упомню - были нюансы.
Юнит тесты гонять тоже можно было прямо из текущего буффера емакса. Успешные тестовые кейсы подчеркиваются зелёным, сфейленые красным. Вот это прям мегафича была. Правда тоже не всегда работала)
И да, вот в тот момент когда я Erlang тулзы для Емакса выбирал, было ощущение что Distel - сухое говно мамонта, а EDTS активно пилился. Но опять же инфа могла устареть..

среда, 29 июня 2016 г., 4:43:59 UTC+6 пользователь Dmitry Belyaev написал:
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russian+unsubscribe@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-russian@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
Yuri Zhloba

skype: yzh44yzh
phone: +375 44 793 33 73

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russian+unsubscribe@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-russian@googlegroups.com.

ark...@gmail.com

unread,
Jun 29, 2016, 9:24:01 AM6/29/16
to Erlang по-русски
emacs + distel. И всё.
Сделал давно, до сих пор работает. Уже тогда народ советовал переходить на edts.
Wrangler попробовал и отключил. flymake тогда попробовал и не заработало. Не стал разбираться.

Dovod Dovodov

unread,
Jun 30, 2016, 5:10:51 PM6/30/16
to Erlang по-русски
вторник, 28 июня 2016 г., 10:39:31 UTC+3 пользователь legven написал:
Собственно использую emacs + distel + company + flucheck + rebar3, горя не знаю. Работающая нода для distel - не проблема же, зато rebar3 и его плагин live подгружают новый код после сохранения файла за несколько секунд. В общем лично мне очень удобно
https://github.com/ddovod/.emacs.d

Смотреть на distel, company-distel, user_elisp/erlang_config.el
Будут вопросы, пишите, может смогу подробнее что-то показать/обяснить
Reply all
Reply to author
Forward
0 new messages