Esse post vai para quem está estudando Clojure (ou outro Lisp qualquer) e está tendo dificuldades para configurar o Emacs. Não é, Ronaldo?!
Esteja preparado para uma enorme quantidade de gambiarras.
ELPA
A primeira coisa que faço numa nova instalação do Emacs é configurar o ELPA, ou Emacs Lisp Package Archive. Para quem não conhece, pense no ELPA como se fosse um apt-get da vida, guardadas as devidas proporções (como veremos a seguir).
As instruções para instalação podem ser vistas nesta página. Se tudo der certo, agora deve ser possível rodar o comando M-x package-list-packages <ENTER>. Leia este documento caso tenha dificuldades para usar atalhos e comandos do Emacs.
Após alguns instantes, a lista de pacotes disponíveis para instalação via ELPA deve ser exibida num buffer secundário.
Clojure-Mode
Coloque o cursor sobre a linha do pacote swank-clojure e pressione a tecla I para marcá-lo para instalação. Faça o mesmo com o pacote paredit. Se outros pacotes foram marcados acidentalmente, mova o cursor para as linhas correspondentes e pressione U para desfazer a marcação. Pressione X para prosseguir com a instalação.
Feito isso, ao rodar o comando M-x slime <ENTER>, o Emacs irá perguntar se você deseja que ele faça o download dos JARs de Clojure. Não adianta dizer que sim, pois não irá funcionar.
Para resolver isso, baixe manualmente os JARs de Clojure e os coloque no diretório ~/.clojure/. Em seguida, baixe o JAR mais recente projeto swank-clojure e o coloque no diretório ~/.swank-clojure/.
Pronto. Reinicie o Emacs e rode o comando M-x slime <ENTER> para iniciar um REPL Clojure dentro do Emacs!
Vale lembrar que o Slime fornece vários recursos para edição de código, como auto-completion, exibição de docstrings, entre outras coisas. Consulte o site do projeto para mais informações.
Outros Lisps
Rode o comando abaixo para instalar duas das principais implementações open source do ANSI Common Lisp, CLISP e SBCL:
$ sudo apt-get install clisp sbcl
Finalmente, abra o arquivo ~/.emacs e cole o código a seguir na última linha:
;; paredit + lisp modes (defvar *lisp-modes* '(clojure-mode-hook lisp-mode-hook emacs-lisp-mode-hook lisp-interaction-mode-hook slime-repl-mode-hook)) ;; config used in all lisp modes (defun lisp-config () (paredit-mode t) (show-paren-mode t)) (mapc (lambda (mode) (add-hook mode 'lisp-config)) *lisp-modes*) ;; other lisp implementations (eval-after-load "slime" '(progn (setq slime-lisp-implementations '((sbcl ("/usr/bin/sbcl")) (clisp ("/usr/bin/clisp"))))))
Swank
As últimas versões do Slime já trazem servidores Swank para diversas implementações Lisp, mas curiosamente essa parte do código não é baixada quando se instala o Slime via ELPA.
Certifique-se de que um cliente CVS esteja instalado e rode o comando abaixo para fazer o download da última versão do Slime:
$ cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co slime
Em seguida, vá até o diretório slime recém-criado e copie todos os arquivos deste diretório por cima dos arquivos instalados via ELPA em ~/.emacs.d/elpa/slime-<VERSION>. Aproveite e remova o arquivo slime.elc deste último diretório, já que tal arquivo é uma versão compilada de um arquivo que acabamos de sobrescrever.
Reinicie o Emacs. O comando M-x slime <ENTER> continua servindo para iniciar um REPL Clojure. Para iniciar um REPL SBCL, por exemplo, rode o comando M-- M-x slime <ENTER>, digite sbcl e pressione <ENTER>.
“Nunca vi tanta gambiarra num lugar só…”
Tudo seria mais fácil se o ELPA disponibilizasse versões minimamente atualizadas — e não-”capadas” — de certos pacotes, por isso creio que essa complicação deva ser temporária. Atualizarei este texto quando a coisa mudar. Para melhor, espero.


Posts em Português
Posts in English
Para as pobres almas presas ao Windows, tem o ClojureBox.