VT100 이스케이프 시퀀스:커서 이동은 줄 끝으로 이동합니다.

StackOverflow https://stackoverflow.com//questions/25038426

  •  21-12-2019
  •  | 
  •  

문제

VT100 이스케이프 시퀀스로 제어되는 Telnet CLI 애플리케이션을 만들고 있습니다.예를 들어커서를 왼쪽으로 이동합니다. <ESC>[D 이스케이프 시퀀스는 Telnet 서버에서 Putty 또는 Gnome 터미널일 수 있는 클라이언트로 전송됩니다.불행하게도 Putty 줄 길이보다 긴 줄의 경우 위의 이스케이프 시퀀스는 커서를 현재 줄 위의 줄로 이동하는 것을 허용하지 않습니다.

예.커서는 '|'입니다.댓글은 '//'로 표시됩니다.

----------------
>potato| // Now I press left arrow which sends esc sequence to application
----------------
>potat|o // Works as expected. The cursor moved left
----------------

다른 예시

----------------
>potatopotatopot // This is a long command which goes over two lines
|ato             // Now I press left arrow which sends esc sequence to application
----------------
>potatopotatopot // The cursor didn't move, since the escape sequence 
|ato             // does nothing if the cursor is at the edge
----------------

가장자리에 있을 때 주위를 둘러싸는 다른 이스케이프 시퀀스를 검색했지만 아무것도 찾지 못했습니다.터미널 모드를 래핑을 허용하는 모드로 변경하는 이스케이프 시퀀스를 찾지 못했습니다.

그렇다면 이와 같은 터미널 탐색은 일반적으로 어떻게 처리됩니까?

도움이 되었습니까?

해결책

그만큼 bw termcap 터미널 설명의 기능은 화면 가장자리에서 왼쪽으로 이동하면 이전 줄로 넘어가는지 여부를 나타냅니다.내가 확인한 PuTTy 설명에 이 내용이 있었습니다(infocmp putty ncurses에서는), 그러나 다른 많은 경우에는 그렇지 않습니다(예:안에는 없어 infocmp gnome).

커서가 어느 열에 있는지 추적하고 이전 줄로 줄 바꿈하려는 경우 이동 제어 시퀀스를 사용할 수 있습니다.사용자 화면의 너비를 알아야 하며, 이는 사용자가 다음을 설정하여 수행할 수 있습니다. LINES 그리고 COLS 환경 변수.

다른 팁

언급 한 바와 같이, bw 능력은 문제의 일부를 해결할 수 있지만 드물다. 특히 VT100 호환 프로그램 (예 : XTerm)의 특징이 아닙니다. OP는 퍼티와 그놈 터미널을 모두 언급했습니다. 후자는 bw를 사용하지 않으므로 다른 용액이 선호됩니다.

다른 한편, PuTTY는 커서 위치 보고서 을 구현합니다. rel="nofollow"> 시스템 호출을 사용하여 스크린 화면을 얻을 수 없을 때 폴백으로 크기 조정. xterm의 제어 시퀀스 문서 :

CSI Ps n  Device Status Report (DSR).
            Ps = 5  -> Status Report.
          Result (``OK'') is CSI 0 n
            Ps = 6  -> Report Cursor Position (CPR) [row;column].
          Result is CSI r ; c R
.

resize 프로그램은이를 사용하여

  • 커서를 "거대한"(999 x 999) 창의 오른쪽 아래 모서리로 보내는
  • CPR 시퀀스 전송
  • 실제 커서 위치의 보고서 읽기

스크린 시드를 알고 서버는 커서를보다 유용한 위치로 보낼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top