2016-07-15 38 views
0

我希望提示每次顯示在頁面底部。JLine 3 - 保持提示總是在底部

我有一個GIF:The prompt not displaying properly

的代碼是讀行:

@Override 
public void run() 
{ 
    while (((ElytraServer) ElytraAPI.getServer()).isRunning()) 
    { 
     String cmd; 
     ((ElytraServer) ElytraAPI.getServer()).getReader().getTerminal().writer().flush(); 
     cmd = ((ElytraServer) ElytraAPI.getServer()).getReader().readLine("> "); 
     if (!cmd.isEmpty()) 
     { 
      String[] aCMD = cmd.split(" "); 
      String[] arguments = Arrays.copyOfRange(aCMD, 1, aCMD.length); 
      ElytraAPI.getCommandRegistry().dispatch(ElytraAPI.getConsole(), aCMD[0], arguments); 
     } 
    } 
} 

它是在一個線程。

而且還有另一個版本: 用的JLine 2,代碼保持提示底部(但它是buggued!)

public void run() 
{ 
    while (((ElytraServer) ElytraAPI.getServer()).isRunning()) 
    { 
     try 
     { 
      if (useJline) 
      { 
       /* 
       JLine 2/Old: 
       reader.print(Ansi.ansi().eraseLine(Erase.ALL).toString() + '\n'); 
       reader.flush(); 
       */ 
       reader.getBuffer().down(); 
       reader.getTerminal().flush(); 
       output.write("".getBytes()); 
       output.flush(); 

       /* // For JLine2 
       try 
       { 
        reader.drawLine(); 
       } 
       catch (Throwable throwable) 
       { 
        reader.getCursorBuffer().clear(); 
       }*/ 

       reader.getTerminal().flush(); 
      } 
      else 
      { 
       output.write("".getBytes()); 
       output.flush(); 
      } 
     } 
     catch (IOException ioexception) 
     { 
      Logger.getLogger(TerminalConsoleWriterThread.class.getName()).log(Level.SEVERE, null, ioexception); 
     } 
    } 
} 

對於完整的源: Full source of the program

回答

1

I posted a workaround與當前代碼(只要用戶不使用多行輸入一樣)。

reader.getTerminal().puts(Capability.carriage_return); 
reader.getTerminal().writer().println("World!"); 
reader.callWidget(LineReader.REDRAW_LINE); 
reader.callWidget(LineReader.REDISPLAY); 
reader.getTerminal().writer().flush(); 

下一個jline版本(3.2)將包含更好的修復程序。參見:https://github.com/jline/jline3/issues/75