Java-сканер с ANSI Escape-последовательностями и движением курсора отображает ^ R при перемещении курсора назад и обратно к сканеру - PullRequest
0 голосов
/ 05 октября 2019

Я работаю в CLI на основе системы тестовых сообщений SMS на базе Java и использую последовательности ANSI Escape для перемещения курсора. В настоящее время у меня открыт сканер в верхней части экрана, и я пытаюсь отобразить входящее сообщение, оставив сканер открытым, чтобы при вводе сообщения входящее сообщение все равно отображалось, и вы могли возобновить ввод с того места, где остановились. ,Единственная проблема заключается в том, что после того, как курсор переместится, чтобы отобразить сообщение и вернуться, если я попытаюсь вернуться на некоторые из тестов, уже находящихся в сканере, текст перемещается вниз и отображается «^ R». Пример:

>before cursor movement
>cursormoved^R
cursormove

Как я могу вернуть часть текста без этого? Код:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Thread t1 = new Thread() {
            public void run() {
                while (true) {
                    System.out.print(">");
                    String message = sc.nextLine();
                    SendMessages.send(message);
                }
            }
        };

        Thread t2 = new Thread() {
            public void run() {
                while (true) {
                    String message = RecMessages.recMessage();
                    if (message != null) {
                        System.out.print("\0337"); // save cursor position
                        System.out.print("\n" + message);
                        System.out.print("\0338"); // restore saved curor position
                    }
                }
            }
        };
        t1.start();
        t2.start();
    }
...