터미널의 커서 이동

터미널의 커서 이동

쉘이 화면 커서를 이동하는 방법(입력 화살표 키 이동 등)을 이해하려고 합니다.

많은 테스트를 수행했지만 터미널에서 화면 커서를 이동할 수 있는 시스템 호출을 찾지 못했습니다. 특정 터미널 확장을 사용하여 이 작업을 수행합니까? 그렇다면 이를 달성하는 방법에 대한 문서가 있습니까(예: xterm)?

이것은 이미 나를 미치게 만들고 있습니다. 이에 대해 나에게 줄 수 있는 단서를 주시면 감사하겠습니다.

답변1

그러한 시스템 호출이나 시스템 호출 세트는 존재하지 않습니다. 이 모든 작업은 루틴에 따라 수행됩니다.

옛날에는 "터미널"이 케이블을 통해 컴퓨터에 연결된 크고 투박한 장치였을 때 "스마트 터미널"은 커서 이동, 선 그리기, 다각형을 색상으로 채우는 등의 작업을 수행할 수 있었습니다. 스마트 터미널은 일반적으로 "이스케이프 시퀀스"를 통해 이를 수행합니다. 프로그램은 대개 ASCII 0x1b, "ESC"로 시작하는 특수한 바이트 값 시퀀스를 내보냅니다. 이는 커서 이동, 색상 단어 또는 텔레타이프 기계 이외의 기타 특수 작업을 에뮬레이트하는 데 사용됩니다.

이것이 "합의"입니다. 오늘날 "터미널"은 거의 항상 비트맵 화면, xterm, rxvt 등과 같은 많은 창 중 하나입니다. 실행 중인 "프로그램"에서 바이트를 읽고 해당 바이트를 주어진 규칙에 따라 해석하는 것은 xterm(또는 rxvt 등)에 달려 있습니다. 방금 xterm 창 중 하나에 다음을 입력했습니다.

6 % echo $TERM 
xterm

하지만 나는 이 경우 "vt100"이라고 말했던 오래된 xterm을 알고 있습니다. "커서를 이동"하는 모든 프로그램은 xterm 인스턴스 내에서 커서를 이동하기 위해 "xterm" 규칙에 대한 이스케이프 시퀀스를 출력해야 합니다.

man curses이렇게 하면 man terminfo더 많은 정보를 얻을 수 있습니다.

폴리스티렌

사람들은 이스케이프 시퀀스를 사용하여 전체 윈도우 시스템을 완성했습니다. 보다자기저항예를 들어.

답변2

확인하다 tput. 거의 모든 터미널 에뮬레이터에서 지원되는 ANSI 이스케이프 시퀀스를 둘러싼 래퍼입니다(지원 정도는 다양함).

tput터미널이 지원하는 경우에만 시퀀스가 ​​출력되므로 지원에 대해 걱정할 필요가 없습니다. 아니면 적어도 터미널에 이상한 문자가 인쇄되는 것에 대해 걱정할 필요가 없습니다. :-)

답변3

이것이 귀하의 질문에 대한 정확한 답변이 아니라는 것을 알고 있지만저주라이브러리는 Tui 개발을 수행하는 데 필요한 것입니다. 프로그래머라면 해당 소스 코드(모든 오픈 소스 유닉스 배포판에서 사용 가능)를 살펴보면 이것이 어떻게 수행되는지 알 수 있습니다.

관련 정보