configurando slime no emacs

2

Estou no processo de configurar o slime para o emacs. Até agora, eu li sobre a funcionalidade básica do lisp comum, como C-c C-q , que invoca o comando slime-close-parens-at-point , que coloca o número adequado de parênteses onde seu mouse está. Outro comando que parecia legal foi invocado por C-c C-c e passaria o código que você está editando em um buffer para o REPL, e "compilaria".

Por que esses comandos não funcionam para mim?

De qualquer forma, eu baixei slime via M-x list-packages e não pareço ter essa funcionalidade ( C-h w e então qualquer um desses comandos me diz que esses comandos não existem). Então, eu vi um monte de outras extensões de slime como slime-repl', 'slime-fuzzy' and 'hippie-expand-slime'. So I again used M-x list-packages e baixei-as.

Ainda não tenho esses comandos. Aqui está o conteúdo do meu arquivo emacs relevante para slime:

;;;Common Lisp and Slime                                                                                                                                
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-20130626.1151")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-repl-201000404")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/hippie-expand-slime-20130226.1656")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-fuzzy-20100404")

(require 'slime)
(setq slime-lisp-implementations
     '((sbcl ("/usr/bin/sbcl"))
       (ecl ("/usr/bin/ecl"))
       (clisp ("/usr/bin/clisp" "-q -I"))))

(require 'slime-repl)
(require 'slime-fuzzy)
(require 'hippie-expand-slime)

Quando executo M-x slime , recebo a seguinte mensagem no buffer inferior-lisp , onde posso executar o código comum de lisp (no entanto, não deveria ser o slime-repl desde que eu precisei?):

STYLE-WARNING: redefining EMACS-INSPECT (#<BUILT-IN-CLASS T>) in DEFMETHOD
STYLE-WARNING:
   Implicitly creating new generic function STREAM-READ-CHAR-WILL-HANG-P.
WARNING: These Swank interfaces are unimplemented:
 (DISASSEMBLE-FRAME SLDB-BREAK-AT-START SLDB-BREAK-ON-RETURN)
;; Swank started at port: 46533.

Em seguida, um buffer slime-error é criado com o conteúdo:

Invalid protocol message:
Symbol "CREATE-REPL" not found in the SWANK package.

  Line: 1, Column: 28, File-Position: 28

  Stream: #<SB-IMPL::STRING-INPUT-STREAM {10056B9C33}>

(:emacs-rex (swank:create-repl nil) "COMMON-LISP-USER" t 5)
  1. Como devo modificar meu arquivo emacs para me dar a funcionalidade desses comandos? No meu arquivo emacs não estou carregando os arquivos necessários? Preciso instalar um pacote adicional?

Se você precisar de mais informações, me avise! Toda ajuda é muito apreciada!

    
por CodeKingPlusPlus 30.06.2013 / 22:34

1 resposta

0

Primeiro: Não é realmente recomendado adicionar os diretórios ELPA ao seu caminho de carga manualmente, da maneira que você fez; Se você atualizar esses pacotes através do ELPA, as novas versões estarão em diretórios diferentes, e você terá que revisitar essa parte do código do init para carregar essas versões. Com base no princípio de que é melhor automatizar o máximo possível, é melhor inicializar explicitamente o gerenciador de pacotes, que adicionará automaticamente todos os pacotes instalados ao caminho de carregamento, em vez de esperar que ele inicialize após o init, como é o padrão ; veja esta resposta para saber como isso é feito.

Agora, então: Não tenho certeza de onde obtive esta estrofe de código de inicialização do Slime, mas isso nunca falhou comigo ainda:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/slime"))
(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(setq inferior-lisp-program "sbcl")
(slime-setup '(slime-fancy slime-asdf))

Dito isso, só uso o SBCL e vejo várias implementações. Provavelmente, a melhor maneira de modificar esse código de inicialização para o seu caso seria algo assim:

(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(setq slime-lisp-implementations
  '((sbcl ("/usr/bin/sbcl"))
   (ecl ("/usr/bin/ecl"))
   (clisp ("/usr/bin/clisp" "-q -I"))))
(slime-setup '(slime-fancy slime-asdf hippie-expand-slime))

Como você já inicializou o gerenciador de pacotes de acordo com meus comentários anteriores, não é necessário adicionar nada explicitamente ao caminho de carregamento; já que você usa vários Lisps, também substituímos o (setq inferior-lisp-program "...") .

Com isso, M-x slime chamará o SBCL e fornecerá um REPL, & c, enquanto M-- M-x slime solicitará a implementação do Lisp para invocar.

    
por 22.08.2013 / 16:51