2012-09-04 5 views
6

JLine(またはJLine2)のいずれかを使用すると、ConsoleReaderreadlineへの呼び出しが可能で、標準プロンプトに加えて、選択した文字列?jlineを使用したラインの事前入力

私は、やることを試みた例えば:

reader.getCursorBuffer().write("Default"); 
reader.readLine("Prompt> "); 

これは確かに、バッファに書き込むようだが、ラインが唯一のプロンプトが表示されます。私がenterを押すと、readLine"Default"を返します。画面をクリアすると、バッファが再描画され、正しく表示されます。

readLineの呼び出しの直後に、どういうわけかreader.redrawLine()を呼び出す必要があります。しかし、この最後のものはブロックしています(不可能ではありませんが、第2のスレッドを使用するのは間違いです)。

答えて

0

プロンプトが既に表示されている場合は、resetPromptLineまたはputStreamのいずれかを入力します。

あなたの質問をハイジャックするのではなく、単にプロンプ​​トを置き換える行を印刷する方法(表面上または視覚的に上のメッセージでプロンプトを押す)を理解することはできません。

1

今日、私はこのユースケースを正確に突き詰めました。

それはハッキングのビットだが、私はこれを行うことにより、JLineバッファにテキストをプリロードし、ユーザーの編集、それを聞かせすることができました:

String preloadReadLine(ConsoleReader reader, String prompt, String preload) 
    throws IOException 
{ 
    reader.resetPromptLine(prompt, preload, 0); 
    reader.print("\r"); 
    return reader.readLine(prompt); 
} 

うんは、\rの印刷がハックされ、それは事を機能させるようです。

私はJLine-2.13を使用しています。

1

私はスレッドを使ってそれを行うことができました(はい、それは間違っていますが、他の方法は見つかりませんでした)。

私は同じ目的のためにスレッドを使用するin JLine itselfというコードからインスピレーションを受けました。 Scalaで

 val thr = new Thread() { 
     override def run() = { 
      reader.putString("Default") 
      reader.flush() 
      // Another way is: 
      // reader.getCursorBuffer.write("Default") // writes into the buffer without displaying 
      // out.print("D*f*ult") // here you can choose to display something different 
      // reader.flush() 
     } 
     } 
     thr.setPriority(Thread.MAX_PRIORITY) 
     thr.setDaemon(true) 
     thr.start() 
関連する問題