2010-02-23 15 views

Répondre

2

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 
3

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.