Guia: Spacemacs como ambiente de programação para Common Lisp
Table of Contents
1 Introdução
Configurando o Spacemacs como ambiente de programação para Common Lisp.
Este tutorial utiliza Ubuntu 22.04 e Emacs (27.1) da própria distribuição. Além disto, o Spacemacs é configurado com os key bindings do Vim.
2 Instalação
2.1 Emacs e SBCL
sudo apt update && sudo apt upgrade sudo apt install emacs sudo apt install sbcl
2.2 Spacemacs
cd ~ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d emacs
O Spacemacs vai solicitar algumas opções de configuração na primeira execução.
- What is your preferred editing style?
- selecione (vim)
- What distribution of spacemacs would you like to start with?
- selecione "spacemacs"
Aguarde a instalação dos pacotes.
3 Preparando o suporte ao Common Lisp
3.1 Spacemacs/Emacs
Antes de começar, lembre-se que configuramos o Spacemacs para utilizar os key-bindings do Vim (evil-mode) e será preciso alternar para o Insert Mode para editar texto nos buffers (tecla i) e ESC para voltar ao Normal mode e poder executar as sequências de atalhos do Spacemacs (SPC …).
Abra o arquivo de configuração do Spacemacs (dot file) pressionando a combinação de teclas: SPC f e d.
Localize a variável "dotspacemacs-configuration-layers", adicione "common-lisp" e descomente "auto-completion" na lista de layers:
;; List of configuration layers to load. dotspacemacs-configuration-layers '( ;; ---------------------------------------------------------------- ;; Example of useful layers you may want to use right away. ;; Uncomment some layer names and press `SPC f e R' (Vim style) or ;; `M-m f e R' (Emacs style) to install them. ;; ---------------------------------------------------------------- auto-completion ;; better-defaults emacs-lisp common-lisp ;; git helm ;; lsp ;; markdown multiple-cursors ;; org ;; (shell :variables ;; shell-default-height 30 ;; shell-default-position 'bottom) ;; spell-checking ;; syntax-checking ;; version-control treemacs)
Pressione SPC f e R para recarregar as configurações e instalar as novas layers.
Encerre o Emacs: SPC q q.
3.2 Quicklisp
No shell (bash), baixe o arquivo de instalação e carregue-o no SBCL:
curl -O https://beta.quicklisp.org/quicklisp.lisp sbcl --load quicklisp.lisp
No REPL, execute:
(quicklisp-quickstart:install) (ql:add-to-init-file) (quit)
3.3 ASDF
Crie um diretório para seus projetos e adicione o caminho ao registro do ASDF:
cd ~ mkdir alien-secrets
Adicione o caminho para o diretório de projetos no source registry do ASDF. Exemplo: "~/.config/common-lisp/source-registry.conf.d/10-meus-projetos.conf".
Nota: talvez seja necessário criar a estrutura de diretórios.
Este arquivo deve ter o seguinte conteúdo:
(:tree "/home/{user}/alien-secrets/")
Substitua "{user}" pelo seu usuário.
4 Spacemacs e Common Lisp
Antes de voltarmos ao Emacs, vamos criar um projeto de exemplo.
Inicie o SBCL e carregue o pacote "cl-project" para criar uma estrutura básica de projeto para o Common Lisp utilizando o ASDF:
sbcl
No SBCL
(ql:quickload "cl-project") (cl-project:make-project #P"./alien-secrets/secret-1/") (quit)
Execute o Emacs e abra o arquivo "~/alien-secrets/secret-1/src/main.lisp". Utilize a seguinte sequência de teclas SPC f f para abrir o arquivo.
Uma vez aberto o arquivo "main.lisp", acione o slime para iniciar o REPL, pressionando as teclas ",'" (vírgula e aspa simples).
No REPL, carregue o projeto com o Quicklisp e entre no namespace do projeto:
(ql:quickload "secret-1") (in-package :secret-1)
No buffer¹ do arquivo "main.lisp", crie uma função de testes, posicione o cursor em qualquer parte da função e "avalie" (evaluate) a mesma utilizando a segiunte sequência de teclas: , e f
Ex.:
(defun what-secret? () (format t "Can't tell, it's a secret."))
Caso queira salvar as alterações no arquivo, SPC f s.
¹ para alternar entre os buffers, pressione SPC tab
Alterne para o REPL e "avalie" a função:
(what-secret?)
Para encerrar o REPL, é preciso retornar ao CL-USER namespace
(in-package :cl-user) (quit)
SPC b d para fechar o buffer.