Как установить цвет пользовательского ввода в Spring Shell 2? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть похожий вопрос к: Команды color в весенней оболочке 2 , но меня больше интересует, как я могу переопределить цвет пользовательский ввод .

Когда я открываю свое приложение Spring Shell 2 и начинаю вводить команду (до ее выполнения), ввод текста будет красным, пока я не введу правильную команду, а затем текст станет жирным белым цветом. Могу ли я переопределить ввод красного текста другим цветом?

1 Ответ

0 голосов
/ 08 ноября 2018

Мне удалось получить желаемое поведение, переопределив компонент LineReader в org.springframework.shell.jline.JLineShellAutoConfiguration

@Bean
public LineReader lineReader() {
    LineReaderBuilder lineReaderBuilder = LineReaderBuilder.builder().terminal(this.terminal()).appName("Spring Shell").completer(this.completer()).history(this.history).highlighter(new Highlighter() {
        public AttributedString highlight(LineReader reader, String buffer) {
            int l = 0;
            String best = null;
            Iterator var5 = JLineShellAutoConfiguration.this.shell.listCommands().keySet().iterator();

            while(var5.hasNext()) {
                String command = (String)var5.next();
                if (buffer.startsWith(command) && command.length() > l) {
                    l = command.length();
                    best = command;
                }
            }

            if (best != null) {
                return (new AttributedStringBuilder(buffer.length())).append(best, AttributedStyle.BOLD).append(buffer.substring(l)).toAttributedString();
            } else {
                return new AttributedString(buffer, AttributedStyle.DEFAULT.foreground(1));
            }
        }
    }).parser(this.parser());
    LineReader lineReader = lineReaderBuilder.build();
    lineReader.unsetOpt(Option.INSERT_TAB);
    return lineReader;
}

В блоке if (best! = Null) if устанавливает текст, выделенный полужирным шрифтом при подборе команды-кандидата, а блок else устанавливает красный текст.

...