Заставить Scala вкладку REPL читать колонки вместо строк? - PullRequest
2 голосов
/ 11 февраля 2011

Результат завершения табуляции в REPL Scala читает по строкам, элементы сортируются слева направо перед началом новой строки. Это неловко для меня; Я привык читать списки, которые сортируются сверху вниз перед началом нового столбца. Есть ли способ изменить вывод, чтобы он вместо этого считывал столбцы?

1 Ответ

2 голосов
/ 11 февраля 2011

Scala REPL используйте jline для правильного завершения.Изучив код jline, вы можете увидеть, что CandidateListCompletionHandler.printCandidates(...) call reader.printColumns(candidates), который здесь копируется / вставляется.

Как видите, нет способа сортировки кандидатов на завершение в режиме colomn вместо строкирежим, возможно, лучшее, что вы можете сделать, это исправить jline и заменить его в вашем каталоге scala / lib /.

public void printColumns(final Collection stuff) throws IOException {
    if ((stuff == null) || (stuff.size() == 0)) {
        return;
    }

    int width = getTermwidth();
    int maxwidth = 0;

    for (Iterator i = stuff.iterator(); i.hasNext(); maxwidth = Math.max(
            maxwidth, i.next().toString().length())) {
        ;
    }

    StringBuffer line = new StringBuffer();

    int showLines;

    if (usePagination)
        showLines = getTermheight() - 1; // page limit
    else
        showLines = Integer.MAX_VALUE;

    for (Iterator i = stuff.iterator(); i.hasNext();) {
        String cur = (String) i.next();

        if ((line.length() + maxwidth) > width) {
            printString(line.toString().trim());
            printNewline();
            line.setLength(0);
            if (--showLines == 0) { // Overflow
                printString(loc.getString("display-more"));
                flushConsole();
                int c = readVirtualKey();
                if (c == '\r' || c == '\n')
                    showLines = 1; // one step forward
                else if (c != 'q')
                    showLines = getTermheight() - 1; // page forward

                back(loc.getString("display-more").length());
                if (c == 'q')
                    break; // cancel
            }
        }

        pad(cur, maxwidth + 3, line);
    }

    if (line.length() > 0) {
        printString(line.toString().trim());
        printNewline();
        line.setLength(0);
    }
}
...