Comment puis-je connecter un fichier source clojure à un rempl de Clojure en cours d'exécution sur Emacs?

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

  •  28-09-2019
  •  | 
  •  

Question

Je suis en train d'ajouter des fonctionnalités à une application Web J2EE existante, dans un conteneur Tomcat, et je vous écris mes ajouts en utilisant Clojure. Ma configuration est simple: je viens d'ajouter les appels aux méthodes statiques générés par Clojure, et le code tout le travail dur du côté clojure. Le processus de construction consiste à compiler un code clojure (de lein uberjar) puis compiler le code java avec ce pot sur le chemin de classe.

Dans le init webapp, j'ai un appel à une classe générée que les incendies d'un serveur Swank avec un (swank/start-repl). Je voudrais pouvoir connecter mon Aquamacs' slime à ce serveur, et travailler de manière interactive à partir de là (jusqu'à un certain point, je ne vais pas essayer rien qui nécessite une recompilation côté java). Mais j'ai une situation que je ne comprends pas tout à fait. Si je fais un \M-x slime-connect, je reçois un message REPL (après avoir été informé qu'il n'y a pas de processus de Lisp inférieur, ce qui je pense qu'il est ok, puisque le processus de Lisp inférieur est en cours d'exécution en dehors de contrôle emacs). Je peux évaluer parfaitement les formes, et je peux même inspecter des choses comme my.own.namespace/my-var. Cependant, si je visite un fichier avec un code clojure déjà compilé, je ne peux pas sembler slime faire reconnaître comme sa source. Considérons un simple fichier clojure:

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

(def *secret* "shhhh")

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

En supposant que cela a été compilé et inclus dans le uberjar chargé par le webapp, je peux eval / inspecter my.namespace/*secret*. Mais si je tente de eval dans la mémoire tampon de code, Slime pense que je suis sur l'espace de noms user (qui peut même donner un sens!). Mais maintenant, je suis parti avec une seule option de travail - je dois évaluer - une par une, toutes les formes dans le fichier! \C-c \C-l (chargement du fichier source) ne rien faire - apparemment juste retour nul et rien d'autre sortie. Tout semble Compiler faire juste que - il compile, affiche les erreurs si elle les trouve, mais ne changera pas mon espace de noms. Et le plus étrange est le \C-~ (paquet de synchronisation et le répertoire), qui en utilisant Common Lisp, il fait exactement ce que je veux, mais ici il gèle le Clojure REPL pour le bien.

Il y a toujours la possibilité de passer à la REMP, en tapant (in-ns 'my.namespace), et tout fonctionne correctement. Mais cela est tout simplement pas assez pratique lorsque les fichiers Clojure sont en nombre croissant (comme l'espace de noms de la mémoire tampon de code ne changera pas automatiquement!)

Ma question est donc, si je manque une commande / configuration de base - ou s'il y a une raison évidente pour ce comportement se produise en tant que tel.

Était-ce utile?

La solution 3

Je viens de découvrir que la suppression du coupable pour cette question: slime-redirect-inferior-output, de boue-repl.el, a appelé à un crochet que j'avais configuration. Il se trouve qu'il ne joue pas bien sans-Lisp processus inférieur (lecture, un serveur Swank commence à partir emacs).

Alors un hack solution rapide est juste pour supprimer le formulaire de error de cette fonction, comme cette . Maintenant, le crochet se déroule, et les espaces de noms sont automatiquement calculés. Comme prévu. Merci pour les suggestions, cependant - ils me conduit à cette solution

Autres conseils

Je peut être tout malentendu, votre problème, mais ne peut pas vous (en visitant ce tampon hypothétique emacs), appuyez sur C-c C-k pour compiler le tampon dans votre instance en cours de Clojure (ce Slime est connecté à)?

Ensuite, dans le tampon Slime, passer à cet espace de noms avec un (in-ns 'my.namespace). Ensuite, vous devriez avoir accès à ce que vous compilez dans cet espace.

Mise en namespaces automatiquement la compilation n'a jamais été la valeur par défaut Swank-Clojure, mais il est peut-être une caractéristique de boue en option qui est arrivé à travailler avec Clojure. Mais C-c M-p pour changer le rempl à l'espace nom du tampon courant a toujours travaillé pour moi, et je ne l'ai jamais entendu parler de quelqu'un ayant du mal avec elle.

Êtes-vous en cours d'exécution sur les dernières versions stables de clojure mode et boue-rempl? Avez-vous Swank-clojure.el installé? (Vous ne devriez pas en avoir besoin.) On dirait que cela pourrait être dû à des versions incompatibles des libs elisp. Si ce n'est pas le problème, il pourrait être un bug Aquamacs; Swank-Clojure est conçu pour fonctionner avec GNU Emacs. Il pourrait aussi être un bogue dans la boue si vous utilisez du tronc plutôt que la dernière version de l'ELPA.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top