Видео ролики бесплатно онлайн

Смотреть 365 видео

Официальный сайт welinux 24/7/365

Смотреть видео бесплатно

h0rr0rr_drag0n 09.08.2011 15:20

EmacsПростой и быстрый способ начать использовать SLIME и Emacs для разработки приложений на Clojure

В качестве IDE для Clojure я, в свое время, пытался использовать NetBeans и Eclipse. Но к сожалению (а может и к счастью), отношения у меня не сложились ни с той, ни с другой IDE. NetBeans, по моим меркам, слишком долго запускался. Для не столь уж и редких для меня ситуаций, когда хочется/нужно подправить лишь пару строчек в коде, он не подходил. Конечно, можно было использовать какой-нибудь Notepad++ для подобных целей, но мне хотелось работать в единой среде, а не прыгать между текстовыми редакторами и IDE. Помимо всего прочего, к этому прибавлялся еще и не слишком быстрый интерфейс, что выводило меня из себя. Кроме того в новый NetBeans не устанавливался плагин, обеспечивающий работу с Clojure, из-за несовместимости версий.
У Eclipse были те же проблемы со скоростью работы, к которым еще и прибавлялся интерфейс, не блещущий минималистичностью из коробки.
Из-за вышеперечисленных недостатков я вернулся к Emacs'у - как никак у него была и минималистичность, и не тормозящий интерфейс, и новые нескучные обои и прочие радости жизни.
На настройку редактора под Clojure я затратил увы немалое количество времени, в основном из-за этапа по прикручиванию SLIME к Emacs'у - в мануалах рекомендовалось ставить кучу какого-то софта, в большинстве случаев устаревшего, поскольку авторы руководств предлагали использовать ELPA.
В конце концов, не без помощи @Ryukzak'а, у меня получилось узреть работающий SLIME для Clojure, процесс получения которого я и собираюсь описать - вдруг кому-нибудь понадобится.

Вначале, я опишу процесс установки и настройки нескольких расширений, которые облегчают редактирование исходного кода на Clojure. Если вам нужен лишь только SLIME - переходите к соответствующей части поста.


clojure-mode
Данное расширения для Emacs'а, добавляет автодополнение, подсветку синтаксиса и еще некоторые плюшки для файлов с кодом на Clojure (расширение *.clj).
Данное расширение можно скачать отсюда или забрать отсюда: git://github.com/technomancy/clojure-mode.git .
Все файлы расширения должны быть помещены в каталог ~/.emacs.d/elisp/clojure-mode или аналогичный ему, а в ~/.emacs должны быть добавлены следующие строки:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
(add-to-list 'load-path "~/.emacs.d/elisp/clojure-mode")
(require 'clojure-mode)

(defun my-clojure-mode-hook ()
(hs-minor-mode 1)
(local-set-key (kbd "C-c p") 'slime-eval-print-last-expression)
(custom-set-faces '(highlight-symbol-face ((((class color) (background dark)) (:background "OliveDrab")))))
(font-lock-add-keywords
'clojure-mode `(("(\\(fn\\>\\)"
(0 (progn (compose-region (match-beginning 1)
(match-end 1) "ƒ")
nil))))))
(add-hook 'clojure-mode-hook 'my-clojure-mode-hook)
(set-language-environment "UTF-8")


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




На самом деле, просто нужно использовать правильные текстовые редакторы с правильными расширениями, которые позволяют не заботиться о скобочках. Одно из таких расширений - paredit. Оно просто вставляет на каждую открывающую скобку еще одну закрывающую скобку, а если количество открывающих и закрывающих скобок не совпадает - показывает это пользователю, выделяя лишнюю скобку.
Скачать расширение можно здесь, установка и настройка происходят так же, как и у предыдущего расширения. Нужно лишь добавить (paredit-mode 1) в my-clojure-mode-hook сверху и вот этот код в ~/.emacs:
1
2
3
 
(add-to-list 'load-path "~/.emacs.d/elisp/paredit")
(require 'paredit)


Если нужно просто добавить скобку, без автодобавления закрывающей скобки или перехода на соответствующую закрывающую скобку, то следует использовать комбинацию клавиш C-q скобка. Если нужно удалить ненужную скобку - используйте комбинацию клавиш C-u DEL.

Highlight symbol
Данное расширение подсвечивает совпадающие слова в программном коде. Бывает удобно, чтобы проверить совпадает ли имя функции или переменной с уже написанным и так далее... Выглядит примерно так:





Установка и настройка расширения такие же, как и для уже описанных расширений. Скачать плагин можно тут. Пример настроек для плагина приведен на этом же сайте. Но поскольку я использую данный плагин лишь вместе с clojure, то я совместил его настройки с настройками clojure-mode. Конфиг для clojure-mode вместе с highlight-symbol выглядит так:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
(add-to-list 'load-path "~/.emacs.d/elisp/clojure-mode")
(add-to-list 'load-path "~/.emacs.d/elisp/highlight-symbol")
(require 'clojure-mode)
(require 'highlight-symbol)
(setq highlight-symbol-idle-delay 1)

(defun my-clojure-mode-hook ()
(hs-minor-mode 1)
(paredit-mode 1)
(highlight-symbol-mode)
(setq highlight-symbol-face '((:underline t)))
(local-set-key (kbd "C-c p") 'slime-eval-print-last-expression)
(local-set-key (kbd "C-c d") 'highlight-symbol-at-point)
(custom-set-faces '(highlight-symbol-face ((((class color) (background dark)) (:background "OliveDrab")))))
(font-lock-add-keywords
'clojure-mode `(("(\\(fn\\>\\)"
(0 (progn (compose-region (match-beginning 1)
(match-end 1) "ƒ")
nil))))))
(add-hook 'clojure-mode-hook 'my-clojure-mode-hook)
(set-language-environment "UTF-8")



Перейдем теперь непосредственно к теме данного поста.


SLIME
Вначале следует установить все необходимое для работы SLIME с Clojure, а именно swank-clojure, который позволяет использовать SLIME для проектов на Clojure. К счастью, компилировать исходные и писать конфигурационные файлы на этом этапе не нужно - достаточно скачать скрипт lein отсюда:

https://github.com/technomancy/leiningen/raw/stable/bin/lein

выполнить его с параметром self-install и добавить путь к скрипту в $PATH. Теперь у нас есть система сборки для проектов на Clojure, которая умеет сама разрешать различные зависимости, в том числе она может загрузить и установить вышеупомянутый swank-clojure. Достаточно лишь оформить проектный файл project.clj так, как описано здесь (внимание! версии зависимостей несколько устарели). Теперь, для каждого нового проекта достаточно выполнить lein deps и swank-clojure будет сам загружен куда-надо.

Установка же самого SLIME проста как-никогда:

  1. Скачиваем последнюю версию SLIME отсюда
  2. Копируем все полученные файлы в ~/.emacs.d/elisp/slime
  3. Добавляем следующие строки в ~/.emacs:
    1
    2
    3
    4
    5
    6
    (add-to-list 'load-path "~/.emacs.d/elisp/slime/")
    (require 'slime)
    (slime-setup '(slime-repl))

    (setq slime-net-coding-system 'utf-8-unix)
    (setq slime-protocol-version 'ignore)




Теперь мы можем использовать SLIME для программ на Clojure, которые используют lein в качестве системы сборки. Всего-то нужно перейти в каталог проекта и запустить swank командой lein swank, а затем подключиться к нему при помощи M-x slime-connect. Все - у нас есть работающий REPL!

Для большего удобства можно использовать плагин elein.el, который по команде M-x elein-swank сам запускает swank, подключает к нему SLIME и открывает REPL в отдельном буфере. Что самое приятное - этот плагин умеет также делать M-x elein-reswank и M-x elein-kill-swank.


Take this REPL, brother, and may it serve you well.

По материалам из блога "Дракон-линуксоид"


Тэги: clojure emacs slime
+ 4 -
Похожие Поделиться

tn1 09.08.2011 15:23 #
+ 0 -
Копипаста же.

> zenburn
Годная тема, жаль не для терминала.
h0rr0rr_drag0n 09.08.2011 16:08 #
+ 1 -
> Копипаста же.
У самого себя же :-)

> Годная тема, жаль не для терминала.
Есть конфиг под urxvt.


Uploaded with ImageShack.us
tn1 09.08.2011 17:34 #
+ 0 -
> У самого себя же :-)
Продублировал же, лучше краткое описание и ссылка на полную версию.
> Есть конфиг под urxvt.
imho, в эмуляторе терминала/консоли смотрится паршиво.


//Это xmonad и xmobar?
h0rr0rr_drag0n 09.08.2011 18:07 #
+ 0 -
Это xmonad и xmobar?


Они самые =)
mironov_orig 09.08.2011 19:21 #
+ 0 -
Вот такая темка помоему лучше
tn1 09.08.2011 19:34 #
+ 0 -
awesome?
c.size_hints_honor = false в rc.lua
mironov_orig 09.08.2011 19:37 #
+ 0 -
В курсе, меня не парят гапы.
h0rr0rr_drag0n 09.08.2011 20:38 #
+ 0 -
По ссылке 500 Error =(
mironov_orig 09.08.2011 21:07 #
+ 0 -
Парсер запорол ссылку. Вот plain-text http://dl.dropbox.com/u/3235930/pics/ScreenShots/zenburn_urxvt_colors.png%3Cbr%20%20/%3E
tn1 09.08.2011 21:17 #
+ 0 -
zenburn
ner_uto 09.08.2011 19:00 #
+ 0 -
Вот ты мне скажи, умеет ли Emacs, допустим, выполнять код на каком-нибудь пайтоне, чтоб отлавливать ошибки прямо там?
h0rr0rr_drag0n 09.08.2011 20:39 #
+ 0 -
Не знаю, никогда подобным не пользовался. Попробуй загуглить по ключевому слову flymake.
stasikos 11.08.2011 10:30 #
+ 0 -
Насколько я знаю, кроме Emacs для lisp-деток вообще нету вменяемых IDE, так что Netbeans и Eclipse не только "слишком медленно запускались" явно. :)

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн