Каков рекомендуемый способ запуска автономного clojure REPL? - PullRequest
5 голосов
/ 23 февраля 2010

Я использую rlwrap, но у меня нет табуляции, и персонажи с акцентами искажаются. Это на OSX 10.6 в Terminal.app.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

ClojureX пытается быть именно тем, что вы хотите для пользователей OS X. Я сам не имел опыта в этом (я пользователь Linux), но у меня сложилось впечатление, что люди из ClojureX будут готовы помочь вам, если вы столкнетесь со странными проблемами (искажение характера? Я не понимаю что, с или без rlwrap ...).

Обновление: вот ссылка на объявление о группе Clojure re: некоторые последние изменения в ClojureX ...

В консольных приложениях, основанных на JVM, есть вторая опция, похожая на readline - jline . Используйте что-то вроде

java -cp $CLASSPATH jline.ConsoleRunner clojure.main

(с включенным в $CLASSPATH jline.jar, конечно), если вы хотите попробовать.

Кроме того, я не думаю, что когда-либо слышал о завершении вкладок в автономных реплоях Clojure. Большинство людей используют Emacs / Aquamacs + SLIME, Vimclojure или какую-то Java IDE с плагином Clojure для подобных вещей. Ну, некоторые другие хорошо слышали об этом (см. Ответ Брайана). И с тех пор я нашел это описание того, как настроить завершение табуляции с помощью jline. И С тех пор я проверил источники для ClojureX - он настраивает завершение вкладки для вас. Это делает эту часть моего первоначального ответа немного ошибкой, я думаю ... Но факт остается фактом, что ClojureX - очень надежная ставка, которая может избавить вас от необходимости настраивать вещи самостоятельно.

2 голосов
/ 24 февраля 2010

Используйте флаг -f, чтобы включить завершение табуляции. Это будет статическое завершение, основанное на статическом списке символов в указанном вами файле. Если вы хотите динамическое завершение (на основе любого символа, который в настоящее время определен в вашем текущем REPL), вы должны попробовать Emacs + SLIME или эквивалентный.

В любом случае, вот один из способов сгенерировать список символов для табуляции. Вам придется время от времени восстанавливать этот файл, потому что новые символы добавляются в ядро ​​Clojure в каждой версии. (Этот код работает с передним краем clojure-contrib; clojure.contrib.io в предыдущих версиях назывался duck-streams.)

user> (use 'clojure.contrib.io)
nil
user> (with-out-writer "/home/user/.clj-tabcompletion"
        (doseq [[sym _] (ns-publics 'clojure.core)]
          (println sym)))
nil

Тогда:

$ 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

Если ваш терминал искажает символы с ударением, у вас, вероятно, есть проблема с кодировкой или локалью. Он отлично работает для меня. Я не использую OS X и не знаю, какой терминал вы используете, поэтому я не могу помочь. В Konsole в Linux, внутри rlwrap:

user=> (println "àèìòùáéíóúäëïöüâêîôûãõñ")
àèìòùáéíóúäëïöüâêîôûãõñ
nil
user=> (println "牛が牧場で草を食べている。")
牛が牧場で草を食べている。
nil
...