# Programando em Clojure/Preparando o ambiente

Para começarmos a programar em Clojure, precisamos configurar primeiramente um ambiente de programação. Existem dezenas de formas diferentes para se instalar o Clojure, e dezenas de metodologias diferentes para se construir um ambiente de programação agradável. Neste livro, usaremos Emacs como um ambiente completo e integrado para o nosso trabalho.
Se você não tem experiência com Emacs, não se preocupe: serão dadas instruções tão exatas quanto for viável. Emacs exige um certo tempo para se acostumar, mas é, na opinião dos autores deste livro, o melhor ambiente de programação para Clojure: Através do Emacs é possível escrever, compilar e testar o código em alguns poucos comandos do teclado, sem ser necessário sequer usar o mouse.

## Introdução ao Emacs

Emacs é um editor de texto clássico, desenvolvido em sua versão original desde a década de 70, notável por sua extensibilidade e riqueza de funcionalidades. Como trade-off pelo seu grande poder, Emacs exige mais tempo e dedicação para se aprender do que, digamos, vim, mas acreditamos que a produtividade que se atinge ao longo do tempo vale o esforço.

### Instalando o Emacs

Se você usa Linux, há grandes chances de o Emacs já estar instalado. Tente rodar, no modo gráfico:
Se a saída do comando acima for algo como:
Então há grandes chances do Emacs não estar instalado na sua máquina. Neste caso, se você tiver poderes de root, execute o comando de instalação de pacotes relativo à sua distribuição:
Debian, Ubuntu e derivados:
Slackware:
Arch Linux:
Fedora:
A instalação deve estar completa quando o comando terminar de executar.

### Uma primeira visão

Abra o emacs com o comando $ emacs. Você deverá ver uma tela parecida com a seguinte:
À pequena área de texto localizada na região inferior do programa damos o nome de Área de eco. Ela é usada para mostrar pequenas amostras de texto para inúmeros propósitos. Geralmente, é por ela que o Emacs nos faz perguntas que requerem uma resposta do usuário (por exemplo, se desejamos mesmo salvar um arquivo).
A área maior, que contém as mensagens de boas-vindas, é chamada de buffer. A edição de texto no Emacs acontece sempre dentro de buffers. No screenshot acima, o buffer se chama *GNU Emacs*, como visto na área de status do buffer. *GNU Emacs* é um buffer que abre automaticamente quando você inicia o Emacs (mas obviamente este comportamento é personalizável).
À cada buffer estão associados algumas informações individuais: qual arquivo que ele está editando; se este arquivo foi modificado ou não; e que modo maior e modos menores estão atuando sobre o arquivo. Um modo maior customiza o Emacs para a edição de um tipo particular de arquivo. No nosso caso, o modo maior que usaremos é o clojure-mode, que está associado à arquivos com extensão .clj (extensão usada para códigos-fonte em Clojure). Um modo menor é um conjunto de pequenas customizações, e é independente de outros modos menores ou maiores. Por exemplo, highlight-parentheses-mode é um modo menor que casa os parênteses de um código Lisp, colorindo-os com uma determinada cor.
É possível ter inúmeros buffers rodando sob o Emacs. Experimente abrir um arquivo digitando o seguinte comando:
C-x C-f (ou seja, segure a tecla Ctrl, aperte 'x', continue segurando a tecla Ctrl, aperte 'f')
O Emacs irá lhe perguntar qual arquivo visitar. Digite ~/teste.txt e aperte enter. Note que um novo buffer será aberto para a edição do arquivo que você acabou de abrir. Os outros buffers ainda estarão abertos, porém ocultos. Experimente navegar entre os buffers com C-x C-<- ou C-x C-->, onde <- e -> são as teclas direcionais do teclado.
No buffer teste.txt, digite qualquer texto, e tente salvar o arquivo com C-x C-s. O Emacs lhe perguntará se você deseja mesmo salvar o arquivo. Diga que sim (digite y).
O Emacs suporta a visualização de vários buffers ao mesmo tempo: Digite C-x 2 para dividir a janela atual em dois. Navegue entre as janelas com C-x o ('o' vem da palavra other). Para remover uma divisão, o comando é C-x 0.
Além de comandos que começam com a tecla C (Control), são comuns também os comandos que começam com a tecla Meta (em vários computadores, essa tecla seria equivalente à tecla Alt). Quando isso ocorre, o comando é descrito como, por exemplo M-x, significando: Segure a tecla Meta (Alt), e aperte 'x'.
Isso é o suficiente para fazer um uso básico do emacs. Uma lista mais completa de comandos úteis pode ser encontrada em: http://lpn.rnbhq.org/tools/xemacs/emacs_ref.html (em inglês).

## Preparando o Emacs

Agora que estamos um pouco familiarizados com o Emacs, vamos criar nele um ambiente de programação para Clojure. Para isso, instalaremos um gerenciador de pacotes para o Emacs, um modo superior para edição de códigos em Clojure, e o próprio Clojure, com algumas bibliotecas.

### Linux
#### Instalando o ELPA

O ELPA (Emacs Lisp Package Manager) é, como o nome já diz, um gerenciador de pacotes para o Emacs. Para instalá-lo, copie o seguinte código no buffer *scratch* do Emacs:
Em seguida, execute o código com o comando C-j (Control + j). Se tudo der certo, as seguintes mensagens serão impressas no buffer *Messages*:

#### Instalando Clojure-mode

Clojure-mode é uma extensão do Emacs que funciona como um modo superior. (Falar mais sobre modo superior em Introdução ao Emacs)
Agora que já instalamos o ELPA, podemos obter o pacote Clojure-mode:
Ao executar o comando acima, lhe será exibido um novo buffer, chamado *Packages*. Procure nele pelo pacote clojure-mode, selecione com a tecla "i" e instale com a tecla "X".

#### Instalando Clojure

Agora que temos o clojure-mode, utilizaremos ele para instalar o Clojure em si, as bibliotecas extras clojure-contrib, os programas de interação SLIME e swank-clojure:
O Emacs lhe perguntará onde instalar o Clojure. Escolha o diretório que desejar, ou aperte <Enter> para instalar no diretório sugerido pelo clojure-install. A instalação pode ser um pouco demorada, então aproveite para tomar um café, ou fumar um cigarro, ou qualquer outra coisa que você goste de fazer :-)
Quando a instalação for concluída, teste abrir o REPL, um modo interativo de Clojure que nos permite digitar códigos interativamente. Digite, no Emacs: M-x slime. Depois, visite um arquivo qualquer com extensão .clj para testar o Clojure-mode: Digite C-x C-f, e quando lhe for requisitado o arquivo, digite algo como teste.clj. Se a barra de status do buffer mostrar Clojure como modo maior, tudo funcionou corretamente.

### Windows

Apesar de ser possível realizar os passos acima em um ambiente Windows, pode haver dificuldades (é necessário, por exemplo, instalar o Git para Windows, que já vem por padrão em várias distribuições Linux). Sendo assim, recomendamos a instalação do Clojure Box, um pacote extra-oficial que funciona como um instalador All-in-One: ele lhe provê Emacs, algumas extensões para Emacs que são usadas com Clojure, o próprio Clojure e Clojure-contrib.
O Clojure Box pode ser obtido em: http://clojure.bighugh.com/
Lembre-se que é necessário ter privilégios de administrador para instalar o Clojure-box. Se você não é o administrador e não possui tais privilégios, peça para que o administrador do sistema instale para você.