Como faço para conectar um clojure arquivo de origem para a execução de um clojure repl no Emacs?

StackOverflow https://stackoverflow.com/questions/3470999

  •  28-09-2019
  •  | 
  •  

Pergunta

Eu estou atualmente em processo de adição de funcionalidade para um existente J2EE webapp, em um container Tomcat, e eu estou escrevendo meu adições usando Clojure.Minha configuração é simples:Acabei de adicionar chamadas para métodos estáticos gerados por clojure, e o código de todo o trabalho duro do clojure lado.O processo de compilação consiste em compilar clojure código (lein uberjar) e, em seguida, compilar o código java com o jar no classpath.

No webapp init, eu tenho uma chamada para a classe gerada que é accionado um swank servidor com um (swank/start-repl).Eu gostaria de ser capaz de se conectar a minha Aquamacs' lodo para que o servidor, e trabalhar de forma interativa a partir de lá (até um certo ponto, eu não vou tentar nada que exige um java do lado do recompilation).Mas eu tenho uma situação que eu não entendo muito bem.Se eu fizer um \M-x slime-connect, Eu recebo um REPL de comandos (depois de ser notificado de que não há nenhuma inferior lisp processo, que eu acho que é ok, desde o inferior lisp processo está em execução fora do emacs controle).Posso avaliar formas perfeitamente, e eu mesmo posso inspecionar as coisas como my.own.namespace/my-var.No entanto, se eu visitar um arquivo com uma versão já compilada clojure código, eu não consigo fazer o lodo de reconhecê-la como sua fonte.Considere uma simples clojure arquivo:

(ns my.namespace
  (:gen-class
   :name my.namespace
   :methods [#^{:static true} [testFunc [] void]]))

(def *secret* "shhhh")

(defn -testFunc []
  (println (str "our secret is: " secret)))

Supondo-se que esta foi compilado e incluído no uberjar carregado pelo webapp, eu posso eval/inspecionar my.namespace/*secret*.Mas Se eu tentar eval dentro do código de buffer, Lodo pensa que eu estou no user espaço de nomes (que pode até fazer sentido!).Mas agora eu estou à esquerda com uma única opção de trabalho - tenho avaliar - uma por uma, todas as formas no arquivo! \C-c \C-l (o carregamento do arquivo de origem) não vai fazer nada - aparentemente, apenas retorna nil e saídas de nada mais.Compilando tudo parece fazer exatamente isso - ele compila, mostra os erros de se encontrar, mas não alterar o espaço de nomes.E o mais estranho é o \C-~ (pacote sincronização de diretório e), que usando o Common Lisp ele faz apenas o que eu quero, mas aqui ele congela o clojure REPL para o bem.

Há sempre a opção de mudar para o REPL, digitando (in-ns 'my.namespace), e , em seguida, tudo funciona corretamente.Mas isso simplesmente não é prático o suficiente quando o clojure arquivos estão crescendo em número (como o espaço de nomes do código de buffer não vai mudar automaticamente!)

A minha pergunta é, então, se eu estou desprovido de um fundo de comando/configuração - ou se há uma razão óbvia para este comportamento acontecer como tal.

Foi útil?

Solução 3

Acabei de descobrir que remover o culpado por este problema: slime-redirect-inferior-output, de Slime-repl.el, estava sendo chamado de um gancho que eu tinha configurado. Acontece que ele não joga bem sem um processo inferior-Lisp (leia-se, um servidor Swank iniciado no EMACS).

Portanto, uma solução alternativa rápida é apenas para remover o error forma dessa função, como isto. Agora o gancho prossegue e os espaços para nome são calculados automaticamente. Como pretendido. Obrigado pelas sugestões, no entanto - eles me levaram a esta solução!

Outras dicas

Eu posso estar entendendo mal o seu problema, mas você não pode (enquanto visita esse buffer hipotético em Emacs), acerte C-c C-k Para compilar o buffer em sua instância atual de clojure (a que lodo está conectado)?

Então, no buffer de lodo, mude para este espaço para nome com um (in-ns 'my.namespace). Então você deve ter acesso ao que você compilou nesse espaço de nome.

Comutação de espaços de nomes automaticamente em compilar nunca foi o padrão para swank-clojure, embora possa ser um opcional de lodo de recurso que aconteceu para trabalhar com Clojure.Mas C-c M-p para alternar o repl para o buffer atual espaço de nomes de sempre funcionou para mim, e eu nunca ouvi falar de alguém ter problemas com ele.

Você está com a mais recente versão estável do clojure-mode e lodo-repl?Você tem swank-clojure.el instalado?(Você não precisa dele.) Parece que isso pode ser devido a versões incompatíveis do diretī orio elisp libs.Se isso não é o problema que poderia ser um Aquamacs erro;swank-clojure é projetado para funcionar com o GNU Emacs.Ele também pode ser um bug no lodo se você estiver executando a partir do tronco, ao invés de incluir o mais recente elpa lançamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top