Configurando seu Emacs com Literate Programming

Posted on March 25, 2017
Tags: emacs

Para quem ainda não ouviu falar, Org-mode é um mode para Emacs que permite que você faça uma série de tarefas em texto puro, como por exemplo: manter TODO lists, planejar projetos, criar documentos e muito mais. Além disso você pode exportar para vários formatos, como PDF, HTML, txt, tex e outros. Sério, você pode fazer QUASE tudo com isso. O suporte a tabelas é simplesmente animal, de uma olhada.

Esse post irá abordar como podemos executar código dentro de um documento .org e como usar isso para organizar as configurações do nosso Emacs.

Para começar vamos dando uma olhada em um documento .org:

* Introdução (tipo h1 no HTML)
  Esse capítulo tem como objectivo explicar como
  lançar um foguete para o *espaço*

** Contextualização (tipo h2 no HTML) Como você pode ver, é bem similar a um arquivo no formato Markdown. Assim como nesse formato, podemos introduzir um trecho de código:

   #+BEGIN_SRC ruby
	 def fac(n)
	   (1..n).inject(:*) || 1
	 end
   #+END_SRC

Veja um exemplo em execução:

Para inserir um novo bloco de código você pode digitar <s <TAB> que será completado o restante para você. Após isso é preciso informar a linguagem, por exemplo, Ruby. Uma vez com o cursor dentro do bloco de código você pode ativar C-' para ir para o modo de inserção, e novamente C-' para salvar e sair.

Isso é possível graças ao pacote babel. Com ele você pode adicionar código (várias linguagens) dentro de um documento .org. Esse tipo de capacidade torna, forneceida pelo babel, torna Org-mode uma ferramenta poderosa para Literate Programming e Reproducible Research.

O que nos leva a forma como vamos organizar a configuração do Emacs.

Literate Emacs Initialization

Babel fornece uma função chamada org-babel-load-file que recebe um arquivo .org e processa os códigos em Emacs Lisp encontrados no mesmo.

Dessa forma, tornando nossas configurações mais fáceis de entender e manter. Além disso, temos todas as funcionalidades presentes no Org-mode, como formatações, exportações, tags e muito mais.

Algumas pessoas preferem separar em vários arquivos a configuração do Emacs, eu fazia isso até semana passada. Na realidade, existem algumas coisas onde o melhor mesmo é um único arquivo.

Para começar usar isso na sua configuração, primeiro faça um backup do estado atual do seu .emacs.d (mv .emacs.d emacs.d.bkp) Feito isso, crie novamente o diretório, e adicione o arquivo init.d.

cd ~
mkdir .emacs.d
cd .emacs.d
touch init.el

Aadicione a seguninte linha de Emacs Lisp no init.el

(org-babel-load-file "~/.emacs.d/configurations.org")

Agora criei o arquivo configurations.org, dentro de .emacs.d, e adicione o seguinte:

#+TITLE: My Emacs configurations

* Basic UI Configurations
  These customizations change the way emacs looks and disable/enable
  some user interface elements.

** Turn off the menu bar at the top of each frame because it's distracting

 #+BEGIN_SRC emacs-lisp
   (menu-bar-mode -1)
 #+END_SRC

** Don't show native OS scroll bars for buffers because they're redundant

 #+BEGIN_SRC emacs-lisp
   (when (fboundp 'tool-bar-mode)
	 (tool-bar-mode -1))
 #+END_SRC
* Org-mode
** Display preferences

*** Bullets instead of a list of asterisks.

   #+BEGIN_SRC emacs-lisp
	  (add-hook 'org-mode-hook
				(lambda ()
				  (org-bullets-mode t)))
   #+END_SRC

*** A pretty arrow instead of the usual ellipsis (...)

   #+BEGIN_SRC emacs-lisp
	 (setq org-ellipsis "⤵")
   #+END_SRC

*** Babel
   Enable languages

   #+BEGIN_SRC emacs-lisp
	 (org-babel-do-load-languages
	  'org-babel-load-languages '((ruby . t)))
   #+END_SRC

Após salvar e reiniciar o emacs, você verá algo como:

OBS: Lembrando que na configuração acima usei um pacote que precisa estar instalados: org-bullets-mode.

Seguindo esse padrão você pode estruturar sua configuração de uma forma muito descritiva e organizada. O arquivo configurations.org pode crescer bastante, dependendo de o quanto você customiza e configura novas coisas dentro do Emacs. Eu não vejo problema nisso, uma fez que no Org-mode podemos esconder as seções e deixar visível somente o necessário.

Era isso, meu .emacs.d pode ser encontrado aqui, caso lhe interesse. Se você gostou desse post, ou tiver qualquer colocação a fazer, fique a vontade em deixar um comentário ou enviar uma mensagem no Twitter (@edipofederle).

= paz