Scala REPL中制表符完成的输出读取行,在开始新行之前从左到右排序。这对我来说很尴尬;我习惯于在开始新列之前阅读从上到下排序的列表。有没有办法改变输出,以便它读取列,而不是?
答案 0 :(得分:2)
Scala REPL使用jline以便正确完成。
查看jline的代码,您可以看到CandidateListCompletionHandler.printCandidates(...)
调用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);
}
}