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. +
+