Backspace esc char в консоли Clojure - PullRequest
0 голосов
/ 11 октября 2018

Я изучаю Clojure.

Чтобы попрактиковаться, я начал переписывать Java-приложение, которое я написал для сына для решения неравенств (например, 3 + 2? 7).

В Java ясделал (обратите внимание, используя экранирующие символы обратной косой черты)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class JavaTest {
    public static void main(String[] args) throws Exception {
        System.out.print("3 + 2 ? 7\b\b\b");
        System.out.flush();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        reader.readLine();
    }
}

и увидите ожидаемый результат: курсор помещается в положение знака вопроса, и когда я пишу символ, он перезаписывает знак вопроса. правильный вывод из Java

Но когда я делаю то же самое (я верю в это) в Clojure

(print "3 + 2 ? 7\b\b\b")
(flush)

(let [reader (java.io.BufferedReader. *in*)]
      (.readLine reader))

Я вижу, что курсор находится в правильном положении в течение миллисекунди затем перемещается в конце строки.И когда я помещаю символ, он помещается в самый конец строки, которую я напечатал. неверный вывод из clojure

В качестве обходного пути я мог бы использовать библиотеку clojure-lanterna, как предлагалось здесь , но я бы хотел решить такую ​​простую вещь без каких-либобиблиотеки (как на самом деле я делал в Java).

Есть идеи по этому поводу?Или, может быть, кто-то может объяснить причину поведения.Я пытался найти его в источниках Clojure, но безуспешно.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Используйте clojure вместо clj.

clj оборачивает обычный REPL Clojure в rlwrap, что обеспечивает более эргономичный опыт редактирования в командной строке;по-видимому, здесь он каким-то образом портит курсор.

0 голосов
/ 11 октября 2018

Вы можете достичь вышеуказанного поведения, вызывая собственные методы Java:

  (.println System/out "jjjabcdef 99999 777"  )
  (.println System/out "jjjabcdef 99999 \b\b\b 777"  )

=>

jjjabcdef 99999 777
jjjabcdef 999 777
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...