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.

Date: <2024-01-20 sáb>

Author: Alexandre Péret

Created: 2024-04-22 Mon 19:50

Emacs 25.1.1 (Org mode 8.2.10)

Validate