Каков рекомендуемый способ выполнить автономный clojure REPL?

Я использую rlwrap, но у меня нет заполнения клавишей Tab, и символы с диакритическими знаками искажаются. Это находится на OSX 10.6 в Terminal.app.

5
задан Michiel de Mare 23 February 2010 в 19:04
поделиться

2 ответа

Используйте флаг -f для rlwrap, чтобы включить завершение табуляции. Однако это будет статическое завершение, основанное на статическом списке символов в указанном вами файле. Если вы хотите динамическое завершение (на основе любого символа, который в настоящее время определен в вашем запущенном 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
2
ответ дан 14 December 2019 в 19:11
поделиться

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

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

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

java -cp $CLASSPATH jline.ConsoleRunner clojure.main

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

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

3
ответ дан 14 December 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: