2
스칼라 REPL에서 탭 완성 결과는 행을 가로 질러 읽고, 새로운 행을 시작하기 전에 항목을 왼쪽에서 오른쪽으로 정렬합니다. 이것은 나에게 어색함을 느낀다. 나는 새로운 열을 시작하기 전에 위에서 아래로 정렬 된 목록을 읽는 데 익숙합니다. 출력을 변경하여 열을 읽도록하는 방법이 있습니까?스칼라의 REPL 탭 완성으로 행 전체가 아닌 열이 읽히는가?
스칼라 REPL에서 탭 완성 결과는 행을 가로 질러 읽고, 새로운 행을 시작하기 전에 항목을 왼쪽에서 오른쪽으로 정렬합니다. 이것은 나에게 어색함을 느낀다. 나는 새로운 열을 시작하기 전에 위에서 아래로 정렬 된 목록을 읽는 데 익숙합니다. 출력을 변경하여 열을 읽도록하는 방법이 있습니까?스칼라의 REPL 탭 완성으로 행 전체가 아닌 열이 읽히는가?
스칼라 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);
}
}
개선 티켓을 제출할 수 있습니까? 그것은 구성 할 수 있다면 좋을 것 ... – soc