Ottenere un ambiente Emacs/Clojure attivo e funzionante, ora sto imbattendo in un comportamento che non sono sicuro sia normale. In particolare, quando avvio un nREPL e compilo (C-c C-k) il mio buffer, mi ritrovo in qualcosa di diverso dallo spazio dei nomi definito nella parte superiore del mio file core.clj. Dovrei aggiungere la dichiarazione di non responsabilità che sono un po 'nuovo per Clojure e namespace, e quindi la mia comprensione di tutto ciò potrebbe essere torbida. Sono aperto a risposte convinte che mi mostrano un modo migliore ™.nrepl.el e leiningen 2 namespace predefinito?
In primo luogo, per la mia messa a punto:
Il mio ambiente emacs è Cocoa Emacs 24, costituito per lo più con il kit d'avviamento emacs dal repository Melpa, con i Clojure e nrepl pacchetti aggiunti tramite il gestore di pacchetti.
Il mio progetto leiningen 2 è stato impostato utilizzando lein new test-clj
.
mio project.clj:
(defproject test-clj "0.1.0-SNAPSHOT"
:description "A geospatial test app example mostly ripped off from http://datamangling.com/blog/2010/05/26/geotools-quickstart-in-clojure/"
:repositories {"osgeo-geotools" "http://download.osgeo.org/webdav/geotools"}
:url "FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[org.geotools/gt-main "8.2"]
[org.geotools/gt-shapefile "8.2"]
[org.geotools/gt-epsg-hsql "8.2"]
[org.geotools/gt-swing "8.2"]])
mio core.clj:
(ns test-clj.core
(:import [org.geotools.data CachingFeatureSource FeatureSource FileDataStore FileDataStoreFinder])
(:import [org.geotools.map DefaultMapContext MapContext])
(:import [org.geotools.swing JMapFrame])
(:import [org.geotools.swing.data JFileDataStoreChooser]))
(defn show-shapefile
"Prompts the user for a shapefile and displays its content"
[]
(if-let [shapefile (JFileDataStoreChooser/showOpenFile "shp" nil)]
(let [fs (.getFeatureSource (FileDataStoreFinder/getDataStore shapefile))]
(doto (DefaultMapContext.)
(.setTitle "Quickstart")
(.addLayer fs nil)
(JMapFrame/showMap)))))
Io penso dovrei essere in grado di
- carico il mio core.clj e jack-in (
M-x nrepl-jack-in
) C-c C-k
per caricare il buffer nel- tipo REPL (mostra-shapefile) ed essere impressionato la mia intelligenza
In realtà, ottengo un errore che assomiglia clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: show-shapefile in this context, compiling:(NO_SOURCE_PATH:1)
Se, dal REPL I prima digito (in-ns `test-clj.core), sono d'oro. Inoltre, se digito (test-clj.core/show-shapefile) sono impostato.
Quando carico un REPL in senso antiorario, vengono automaticamente rilasciati nello spazio dei nomi clj.core, che sembra molto comodo.
La mia domanda quindi è duplice:
- È questo il comportamento corretto che sto vedendo? (io sono solo pigro?)
- C'è un modo per essere lasciato cadere in questo spazio dei nomi (o al contrario, dimmi che questa è un'idea stupida)?
Ah, eccellente! Sembra che possa continuare a caricare anche il mio buffer corrente con 'C-c C-k'. Il 'C-c M-n' sembra essere la magia. A parte: come si ottengono le scorciatoie da tastiera emacs ben formattate nei commenti StackOverflow? – Peter
CtrlAltDel –
Danke! Il mio google-fu apparentemente mancava nel trovarli. – Peter