Я использую apache.commons.net jar для моего клиента telnet в java. Я пробовал ESC[{ROW};{COLUMN}H
и ESC[{ROW};{COLUMN}f
для прямой адресации курсора, но он не работал, есть ли другой способ сделать это, я что-то упустил? Примечание: Я тестирую this примерКак отправить адрес прямого адреса курсора в Jave Telnet Client?
ответ
В 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
, потому что \
- символ, а затем один или несколько символов).
несколько несущественное примечание: оболочка 'rc' (оболочка AT & T Plan 9) даже не интерпретирует' ctrl' + 'v',' ctrl' + '[' '^ ['. – dylnmc