J'utilise rlwrap, mais je n'ai pas de tabulation, et les caractères accentués sont altérés. C'est sur OSX 10.6 dans Terminal.app.Quelle est la méthode recommandée pour exécuter un clojure autonome REPL?
Répondre
Utilisez l'indicateur -f
pour rlwrap afin d'activer l'exécution de l'onglet. Il s'agira cependant d'une complétion statique, basée sur une liste statique de symboles dans un fichier que vous spécifiez. Si vous voulez un achèvement dynamique (basé sur n'importe quel symbole qui est actuellement défini dans votre REPL en cours d'exécution), vous devriez essayer Emacs + SLIME ou équivalent.
Dans tous les cas, voici une façon de générer une liste de symboles à compléter. Vous devrez régénérer ce fichier de temps en temps car de nouveaux symboles sont ajoutés au noyau de Clojure dans chaque version. (Ce code fonctionne avec bleeding edge clojure-contrib, clojure.contrib.io
a été appelé duck-streams
dans les versions antérieures.)
user> (use 'clojure.contrib.io)
nil
user> (with-out-writer "/home/user/.clj-tabcompletion"
(doseq [[sym _] (ns-publics 'clojure.core)]
(println sym)))
nil
Puis:
$ rlwrap -f ~/.clj-tabcompletion java -jar clojure.jar
Clojure 1.2.0-master-SNAPSHOT
user=> def<TAB>
definline defmacro defmethod defmulti defn defonce defprotocol defstruct deftype
user=> def
Si votre terminal est des caractères cylindrage avec des accents, vous avez probablement un encodage ou un problème de paramètres régionaux. Ça fonctionne bien pour moi. Je n'utilise pas OS X et je ne sais pas quel terminal vous utilisez, donc je ne peux pas vous aider. Dans Konsole sous Linux, à l'intérieur de rlwrap:
user=> (println "àèìòùáéíóúäëïöüâêîôûãõñ")
àèìòùáéíóúäëïöüâêîôûãõñ
nil
user=> (println "牛が牧場で草を食べている。")
牛が牧場で草を食べている。
nil
ClojureX tente d'être exactement ce que vous voulez pour les utilisateurs d'OS X. Je n'ai aucune expérience avec moi-même (je suis un utilisateur de Linux), mais j'ai l'impression que les gens de ClojureX seront prêts à vous aider si vous rencontrez des problèmes étranges (mangling de caractères? Je ne comprends pas ça, avec ou sans rlwrap ...).
Mise à jour: Voici un lien vers an announcement on the Clojure group re: quelques changements récents dans ClojureX ...
Il y a une deuxième option pour la fonctionnalité comme readline dans les applications console-JVM - jline. Utilisez quelque chose comme
java -cp $CLASSPATH jline.ConsoleRunner clojure.main
(avec jline.jar inclus dans $CLASSPATH
, bien sûr) si vous souhaitez essayer.
En outre, je ne pense pas avoir jamais entendu parler de l'achèvement de tabulation dans les REPL Clojure autonomes. La plupart des gens utilisent Emacs/Aquamacs + SLIME, Vimclojure ou un IDE Java avec un plugin Clojure pour des choses comme ça.
Eh bien, d'autres personnes en ont entendu parler (voir la réponse de Brian). Et j'ai depuis trouvé this description de la façon de mettre en place l'achèvement de l'onglet avec jline. Et J'ai depuis vérifié les sources pour ClojureX - il met en place l'achèvement de l'onglet pour vous. Cela fait de cette partie de ma réponse originale un peu une erreur, je suppose ... Mais le fait demeure que ClojureX est un pari très sûr qui peut vous éviter de configurer vous-même les choses.