2011-02-11 3 views
2

Scala REPLのタブ補完の出力は、新しい行を開始する前に左から右にソートされた項目を使用して行全体を読み込みます。これは私には気分が悪い。私は新しい列を始める前に上から下にソートされたリストを読むことに慣れています。代わりに列を読み込むように出力を変更する方法はありますか?ScalaのREPLタブの補完では、列全体ではなく列が読み込まれますか?

+1

拡張チケットを登録できますか?それが構成可能だったなら、それはいいだろう... – soc

答えて

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); 
    } 
} 
関連する問題