Comment employer jline-2 avec REPL

22 views
Skip to first unread message

Pierre Thibault

unread,
Aug 31, 2014, 12:31:43 AM8/31/14
to cloju...@googlegroups.com
Bonjour,

J'essaie d'employer jline-2 avec Clojure mais je n'y arrive pas.

J'ai écrit un petit script bash:

#!/bin/bash

JAVA_LIB=/opt/java/lib
if [ $1 ]
  then
    java -jar $JAVA_LIB/clojure.jar $1
  else
    # java -cp $JAVA_LIB/jline-1.0.jar:$JAVA_LIB/clojure.jar jline.ConsoleRunner clojure.main
    java -cp $JAVA_LIB/jline-2.jar:$JAVA_LIB/clojure.jar jline.console.internal.ConsoleRunner clojure.main
fi

Quand je lance le script, j"ai l'erreur suivante:

Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at jline.console.internal.ConsoleRunner.main(ConsoleRunner.java:77)

Par contre, quand j'emploie jline-1 à la place de la version 2, la ligne en commentaire dans le script bash, tout fonctionne très bien.

Est-ce qu'il y a quelque chose que j'ai oublié de faire?

Arnaud Bailly

unread,
Aug 31, 2014, 3:10:08 AM8/31/14
to cloju...@googlegroups.com
Tu cherches à faire quoi ? Nrepl te permets d'avoir un REPL directement en clojure...

--
Arnaud Bailly
FoldLabs Associate: http://foldlabs.com


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "clojure-fr".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse clojure-fr+...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Pierre Thibault

unread,
Aug 31, 2014, 12:17:29 PM8/31/14
to cloju...@googlegroups.com
Je cherche à avoir un historique. Par défaut, je ne peux même pas employer la touche vers le haut pour avoir accès à la commande précédente. Et si je peux avoir d'autres fonctionnalités, tant mieux!

Tu suggères une autres solution à la place?


--
Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "clojure-fr".
Pour vous désabonner de ce sujet, visitez le site https://groups.google.com/d/topic/clojure-fr/HNJTNTePoSQ/unsubscribe.
Pour vous désabonner de ce groupe et de tous ses sujets, envoyez un e-mail à l'adresse clojure-fr+...@googlegroups.com.

Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.



--


A+

-------------
Pierre

Arnaud Bailly

unread,
Aug 31, 2014, 12:42:18 PM8/31/14
to cloju...@googlegroups.com

Tu peux utiliser nrepl directement dans ton application, ca te donne un shell ou evaluer des expressions dans le contexte de ton appli. Mais ca depend de ton but : c'est pour implementer quoi ?

Pierre Thibault

unread,
Aug 31, 2014, 12:57:29 PM8/31/14
to cloju...@googlegroups.com
La console REPL de base de Clojure est très primitive. Je voudrais simplement, idéalement, avoir les mêmes fonctionnalités dans la console REPL Clojure que celles que je retrouve dans ma console bash.

Je ne veux pas implémenter ou intégrer quoi que ce soit en tant que tel. Je veux juste une console REPL qui soit un peu plus riche en fonctionnalités.

Est-ce plus clair?

Philippe Guillebert

unread,
Aug 31, 2014, 1:07:42 PM8/31/14
to cloju...@googlegroups.com
Bonjour

Pourquoi ne pas employer Cider et emacs ? C'est, il me semble, l'implémentation de repl la plus utilisée pour le développement. on peut directement évaluer le code, etc.

Il suffit d'installer emacs-live (pack avec tout ce qu'il faut pour coder du clojure) et c'est parti.





Philippe

Marc-Elian Bégin

unread,
Aug 31, 2014, 1:11:52 PM8/31/14
to cloju...@googlegroups.com
Le repl de counterclockwise intégré à eclipse est bien aussi.

A+

Meb

Pierre Thibault

unread,
Aug 31, 2014, 1:32:54 PM8/31/14
to cloju...@googlegroups.com
Emacs c'est une idée mais je connais pas Emacs et je ne trouve pas cela très facile à utiliser. Ça demanderait un gros investissement de temps. Ce n'est pas une solution très pragmatique pour moi.

Pierre Thibault

unread,
Aug 31, 2014, 1:34:39 PM8/31/14
to cloju...@googlegroups.com
J'aime beaucoup Eclipse. Je vais explorer cette avenue. Par contre, c'est lourd à lancer simplement pour cet usage.

Arnaud Bailly

unread,
Aug 31, 2014, 1:36:02 PM8/31/14
to cloju...@googlegroups.com
Si tu souhaites interagir avec clojure dans un shell relativement sympathique, alors tu peux utiliser le repl fournit par leiningen qui est basé sur nrepl. Sinon, tu peux aussi utiliser LightTable qui est un environnement dédié à clojure et qui est relativement léger (en tout cas plus qu'Eclipse).

Si tu souhaites construire ton propre shell, tu peux toujours embarquer nrepl ; https://github.com/clojure/tools.nrepl 

--
Arnaud Bailly
FoldLabs Associate: http://foldlabs.com


Ben

unread,
Aug 31, 2014, 1:54:45 PM8/31/14
to cloju...@googlegroups.com

Je n'ai vu l'usage de configurer clojure de la manière dont tu le fais, maintenant, je rate peut-être quelque chose.

Je te suggère de peut-être regarder du côté de l'outillage standard: lein ou ton éditeur de texte / code préféré.

Avec lein (http://leiningen.org/
 
$ > lein new myproject
Generating a project called myproject based on the 'default' template.
The default template is intended for library projects, not applications.
To see other templates (app, plugin, etc), try `lein help new`.
$> lein repl
nREPL server started on port 56759 on host 127.0.0.1 - nrepl://127.0.0.1:56759
REPL-y 0.3.1
Clojure 1.6.0
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (+ 1 2) ; <== paf, un repl bien configuré en quelques secondes.
3
user=> (+ 1 3) ; <=== celui là est obtenu à grand coup de flèche haut + C-a / C-e etc. 
4

Sinon le plus rentable à mon sens c'est de travailler sur un éditeur. 
Le plus facile d'accès semble être lighttable http://www.lighttable.com/
avec des fonctions très intéressantes (comme l'évaluation à la volée) 

La plupart des éditeurs classiques (Eclipse) dispose de modules ou moyens pour intégrer Clojure et son repl.
Les éditeurs historiques, Emacs et Vim, disposent aussi de nombreux outillages et de leurs communautés.
Le *gros* intérêt est de ne pas avoir de séparation entre ton environnement d'édition et d'évaluation: tu as tout sous la main, en permanence. 

Personnellement c'est Emacs mais il est vrai que le coût d'entrée est substantiel. 

HtH

 -- Ben 


Pierre Thibault

unread,
Aug 31, 2014, 2:27:38 PM8/31/14
to cloju...@googlegroups.com
Merci mais rien de cela fonctionne sur ma machine: Debian GNU/Linux 7.6 (wheezy).

Je vais prendre leiningen master car il crache une erreur avec repl et je vais compiler LightTable moi même car il emploie une version trop récente de libc.

Mais je crois que l'idée est bonne.

Pierre Thibault

unread,
Aug 31, 2014, 2:31:49 PM8/31/14
to cloju...@googlegroups.com
Ça ne fonctionne pas pour moi avec lein.

J'ai cette erreur:

Error loading namespace; falling back to userNoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()

Comme je disais, je vais essayer master.

Ben

unread,
Aug 31, 2014, 2:46:21 PM8/31/14
to cloju...@googlegroups.com


Merci d'avoir reporté cette erreur.
Il faut faire un 'cd' dans le répertoire créé par lein 


$ cat /etc/issue
Debian GNU/Linux 7 \n \l
$ cd local/bin/ ;; c'est un exemple c'est là où je mets mes exec locaux, c'est dans mon $PATH
$ chmod u+x lein 
$ cd ~temp ; lein 
 ;; download de lein ; ça prend env. 1 min
$ lein new pwet
$ cd pwet  ;; <== la commande suspecte qui te manque
$ lein repl 

user=> (if true (println "clojure marche") (println "môrche pô"))  
clojure marche
nil

mais si tu fais lein repl dans le répertoire parent alors tu as bien: 
Error loading namespace; falling back to userNoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I  clojure.tools.nrepl.middleware.session/session-out/fn--7630 (session.clj:43)NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I  clojure.tools.nrepl.middleware.session/session-out/fn--7630 (session.clj:43)user=> 


  -- Ben 



Ben

unread,
Aug 31, 2014, 2:54:34 PM8/31/14
to cloju...@googlegroups.com


Side note: 

Je ne te recommande pas la version packagée de stable: 
$ apt-cache show leiningen
Package: leiningen
Version: 1.7.1-1

lein version 2+ est recommandée.

 -- Ben



Pierre Thibault

unread,
Aug 31, 2014, 2:56:51 PM8/31/14
to cloju...@googlegroups.com
OK, ça marche maintenant.

Merci.

Pierre Thibault

unread,
Aug 31, 2014, 2:58:41 PM8/31/14
to cloju...@googlegroups.com
J'ai le script lein pris du site web du projet. Pas de problème.

Xenocard

unread,
Sep 2, 2014, 4:35:13 AM9/2/14
to cloju...@googlegroups.com
Essaye rlwrap (paquet standard Ubuntu, très probablement dans Debian aussi). Tu peux sauvegarder l'historique dans un fichier de ton choix avec l'option --history-filename.

Pour les expérimentations rapides sans lancer d'IDE (ou pour avoir une calculatrice en ligne de commande...), je me suis créé le script suivant:
exec rlwrap --history-filename ~/.rlwrap_clojure_history -ppurple java -cp ~/path/to/clojure.jar:. clojure.main "$@"

Pierre Thibault

unread,
Sep 2, 2014, 5:01:28 AM9/2/14
to cloju...@googlegroups.com
Fonctionne très bien! Merci.


--
Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "clojure-fr".
Pour vous désabonner de ce sujet, visitez le site https://groups.google.com/d/topic/clojure-fr/HNJTNTePoSQ/unsubscribe.
Pour vous désabonner de ce groupe et de tous ses sujets, envoyez un e-mail à l'adresse clojure-fr+...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.



--


A+

-------------
Pierre

Reply all
Reply to author
Forward
0 new messages