Domanda

Sono attualmente in fase di aggiunta di funzionalità a un webapp J2EE esistente, in un contenitore Tomcat, e sto scrivendo le mie aggiunte utilizzando Clojure. La mia configurazione è semplice: basta aggiungere le chiamate ai metodi statici generati da clojure e codice di tutto il duro lavoro dal lato clojure. Il processo di generazione consiste nella compilazione di codice clojure (lein uberjar) e quindi compilare il codice Java con quel vaso sul classpath.

Nel init webapp, ho una chiamata a una classe generata che gli incendi di un server Swank con un (swank/start-repl). Mi piacerebbe essere in grado di collegare il mio melma Aquamacs' a quel server, e il lavoro in modo interattivo da lì (fino a un certo punto, non voglio provare nulla che richiede una ricompilazione java-side). Ma ho una situazione che io non capisco. Se faccio un \M-x slime-connect, ottengo un REPL prompt (dopo essere stato notificato che non c'è nessun processo lisp inferiore, che penso che sia ok, dal momento che il processo di Lisp inferiore è in esecuzione di fuori del controllo emacs). Posso valutare forme perfettamente, e posso anche controllare le cose come my.own.namespace/my-var. Tuttavia, se visito un file con un codice clojure già compilato, non posso sembrare fare melma riconoscere come sua fonte. Consideriamo un file clojure semplice:

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

(def *secret* "shhhh")

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

Supponendo che questo è stato compilato e incluso nel uberjar caricato dal webapp, posso eval / ispezionare my.namespace/*secret*. Ma se provo a eval all'interno del buffer di codice, Slime pensa che io sia nello spazio dei nomi user (che può anche avere senso!). Ma ora sto lasciato con una sola opzione di lavoro - devo valutare - una per una, tutte le forme del file! \C-c \C-l (caricamento del file di origine) non farà nulla - a quanto pare solo restituisce nil e niente uscite altro. Compilazione tutto sembra fare proprio questo - si compila, mostra gli errori se li trova, ma non cambierà il mio spazio dei nomi. E la più strana è la \C-~ (pacchetto di sincronizzazione e directory), che utilizzando Common Lisp lo fa solo quello che voglio, ma qui si blocca il REPL clojure per il bene.

C'è sempre la possibilità di passare al REPL, battitura (in-ns 'my.namespace), e poi tutto funzioni correttamente. Ma questo semplicemente non è abbastanza pratico quando i file Clojure stanno crescendo in numero (come lo spazio dei nomi del buffer di codice non cambierà automaticamente!)

La mia domanda è, allora, se mi manca una base di comando / configurazione - o se c'è una ragione ovvia per questo comportamento accada in quanto tale.

È stato utile?

Soluzione 3

Ho appena scoperto che rimuovendo il colpevole per questo problema: slime-redirect-inferior-output, dalla melma-repl.el, veniva chiamato da un gancio che ho avuto di installazione. Si scopre che non gioca bene senza un inferiore-lisp-processo (lettura, un server Swank avviato dall'interno di emacs).

Quindi, una soluzione alternativa trucco veloce è solo per rimuovere il modulo error da quella funzione, come questo . Ora il gancio procede, e sopra lo spazio vengono calcolati automaticamente. Come inteso. Grazie per i suggerimenti, comunque - mi hanno portato a questa soluzione

!

Altri suggerimenti

I può essere equivoco il tuo problema, ma non si può (durante la visita questo buffer ipotetica in emacs), colpo C-c C-k per compilare il buffer in l'istanza Clojure corrente (quello Slime è collegato a)?

Poi, nel Slime tampone, passare a questo spazio con un (in-ns 'my.namespace). Allora si dovrebbe avere accesso a ciò che si è compilato in quel namespace.

Accensione automatica spazi dei nomi sulla compilazione non è mai stato il default per Swank-clojure, anche se potrebbe essere una caratteristica melma opzionale che è successo a lavoro con Clojure. Ma C-c M-p per commutare il repl al namespace del buffer corrente ha sempre lavorato per me, e non ho mai sentito di nessuno avendo problemi con esso.

sono in esecuzione sulle ultime versioni stabili di clojure-mode e melma-repl? Hai Swank-clojure.el installato? (Si consiglia di non averne bisogno.) Sembra che questo potrebbe essere dovuto a versioni non corrispondenti delle librerie elisp. Se questo non è il problema potrebbe essere un bug Aquamacs; Swank-clojure è progettato per funzionare con GNU Emacs. Potrebbe anche essere un bug nella melma se si esegue dal tronco, piuttosto che l'ultima release ELPA.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top