2015-02-25 1 views
0

Я использую apache.commons.net jar для моего клиента telnet в java. Я пробовал ESC[{ROW};{COLUMN}H и ESC[{ROW};{COLUMN}f для прямой адресации курсора, но он не работал, есть ли другой способ сделать это, я что-то упустил? Примечание: Я тестирую this примерКак отправить адрес прямого адреса курсора в Jave Telnet Client?

ответ

0

В java вы можете использовать буквенный символ 27. Таким образом, это будет выглядеть следующим образом (потенциально - по крайней мере, это лучший способ, которым я могу думать):

class test { 
    public static void main(String[] args) { 
     System.out.print((char)27 + "c"); // clear the screen 
     System.out.print((char)27 + "[H at top"); 
     System.out.flush(); // I would call this just to be safe (esp. if in a loop) 
     System.out.print((char)27 + "[3;4H row 3; col 4"); 
     System.out.flush(); // I would call this just to be safe (esp. if in a loop) 
     System.out.println(); // just so that the shell prompt is on the next line 
    } 
} 

В основном, (char)27 преобразуется в экранирующий символ (27, очевидно), но есть еще один способ сделать это. Если вы находитесь в Unix и может работать vi или vim (или emacs или ed: D, или на самом деле любой редактор в терминале, я думаю), вы можете редактировать файл и в режиме insert, вы можете нажать CtrlVctrl[. Это будет отображаться как ^[, но персонаж, символ эвакуации 27. Это по сути заставляет java интерпретировать это как один символ, и, таким образом, он работает так же, как (char)27.

Это особенно полезно для оболочек (например, sh), которые не интерпретируют несколько байтовых символов («я думаю»). В sh, вы можете использовать эту же процедуру, чтобы заставить AnSi управляющие последовательности (делая printf "CtrlvCtrl[[3;4H bla"; - это показывает, как printf "^[[3;4 bla";, например, потому что printf "\e[3;4 bla"; или printf "\033[3;4 bla"; или printf "\x1b[3;4 bla"; только что выиграл 't работает в sh, потому что \ - символ, а затем один или несколько символов).

+0

несколько несущественное примечание: оболочка 'rc' (оболочка AT & T Plan 9) даже не интерпретирует' ctrl' + 'v',' ctrl' + '[' '^ ['. – dylnmc