터미널의 그래픽 API는 무엇입니까?

터미널의 그래픽 API는 무엇입니까?

일부 프로그램에서는 화면의 동일한 위치(예: 세 번째 행, 다섯 번째 열)에 문자를 여러 번 쓰도록 배경 및 글꼴 색상을 어떻게 설정합니까?

curl google.com > a몇 가지 예는 일부 설치 화면과 거의 모든 텍스트 편집기에 표시되는 진행률 표시줄입니다.

답변1

당신이 요구하는 것은 실제로 그래픽 API가 아니라 단지 터미널 제어 문자일 뿐입니다.

그 뒤에는 많은 역사가 있지만 당시 터미널은텔레타이프라이터기계. 기본적으로 직렬 연결을 통해 컴퓨터에 연결된 트랙 용지 공급 장치가 있는 타자기입니다. 문자를 입력하면 이진 값이 컴퓨터로 전송됩니다(페이지에 입력하는 것도 포함). 컴퓨터는 요청한 내용에 대한 출력으로 문자를 다시 인쇄합니다.

특수 문자는 터미널을 제어하는 ​​데 사용됩니다(여기서 이러한 문자를 생성하는 데 사용되는 제어 키가 제공됩니다). 예를 들어 백스페이스 키 ^H, 캐리지 리턴 문자(커서를 줄의 시작 부분으로 이동) 또는 줄 바꿈 문자(페이지를 한 줄 위로 이동)입니다. 일부 제어 코드에는 제어 문자를 생성하기 위한 C의 이스케이프 시퀀스(거의 모든 프로그래밍 언어에서 공유)가 있습니다. 이전에 나열된 컨트롤은 , 입니다 .^?^M^J\b\r\n

이것터미널 에뮬레이터오늘날 여러분이 사용하는 소프트웨어는 말 그대로 오래된 텔레타이프 기계로 위장한 소프트웨어입니다. 어떤 면에서는 유닉스가 여전히 타자기를 사용하여 통신한다고 생각하는 것과 같습니다.

의 경우 curl한 줄 전체를 쓴 후 \r(Enter)를 보내 커서를 줄의 시작 부분으로 이동시킨 후 다른 한 줄을 씁니다. 개행 문자가 전송되지 않기 때문에 화면의 같은 줄에 계속해서 씁니다.

다음을 통해 이를 증명할 수 있습니다.

echo -n  "First" ; sleep 5 ; echo -en "\rSecond\n"

"First"라는 단어가 인쇄된 것을 볼 수 있습니다(그러나 새 줄은 전송되지 않습니다). 5초 후에는 "Second"라는 단어로 바뀌고 새 줄이 전송됩니다. 이 패턴을 무한정 반복할 수 있습니다. "세 번째"를 직접 추가해 보면 생각지도 못한 내용이 표시될 것입니다 ;-)

이러한 제어 문자와 기타 제어 문자에 대한 자세한 내용은 ascii(7)설명서를 참조하세요.

답변2

비슷한 것을 찾고 계십니까?저주?

답변3

이 질문은 실제로 여러 가지 질문으로 이루어져 있으며,"제어 문자"진행률 표시줄과 같은 작은 부분만 해결하세요 curl. 보다 일반적으로 이는 터미널(및 터미널 에뮬레이터)의 일반적인 특성입니다.

이러한 공통 기능의 대부분은 표준화되었습니다.ECMA-48: 인코딩된 문자 집합에 대한 제어 기능. 그러나 다른 기능은아니요. 구현이 정의되어 있습니다.

ECMA-48은 다음을 가리킨다.제어 기능. 포함하다제어 문자그리고제어 순서(종종 이스케이프 시퀀스, ANSI 시퀀스 등으로 불림)

일부 제어 문자는 다음 용도로 사용됩니다.단순한다음과 같은 운영

  • 같은 행의 이전 열로 커서를 이동합니다.
  • 같은 행의 첫 번째 열로 커서를 이동합니다.
  • 같은 줄의 다음 탭 정지로 커서를 이동합니다.
  • 커서를 다음 줄로 이동(그리고 화면 스크롤만약에이미 마지막 줄에 있습니다)

진행률 표시줄은 curl이러한 간단한 작업을 사용하여 만들어집니다. 하지만 제어 캐릭터는 딱 정해진 만큼만 할 수 있고 그 이상은 할 수 없습니다. 제어 시퀀스는 훨씬 더 많은 일을 할 수 있습니다. 예를 들어,

  • 커서를 화면의 행/열로 이동하세요.
  • 화면의 같은 열에 있는 임의의 행으로 커서를 이동합니다.
  • 화면의 같은 행에 있는 열로 커서를 이동합니다.
  • 화면의 모든 열에 대한 탭 정지 설정
  • 커서를 이전 줄로 이동
  • 커서를 움직이지 않고 화면을 위아래로 스크롤합니다.

단순/복잡함 사이의 유사점은 이 정도입니다. 제어 시퀀스는 텍스트와 배경의 색상을 변경하고, 화면에서 텍스트를 제거하고, 텍스트를 반전 비디오(또는 굵게, 밑줄 또는 깜박임)로 표시하는 데에도 사용됩니다.

역방향 비디오(또는 컬러) 진행 표시줄을 그리는 프로그램제어 순서.

제어 시퀀스는 더 많은 작업을 수행할 수 있지만 특정 작업만 수행할 수 있습니다. 텍스트 편집기, 설정 화면(그리고 색상이 지정된 진행 표시줄을 그리는 프로그램)을 만들기 위해 이 모든 것을 합치면 복잡해집니다. 이러한 것들을 이해하는 라이브러리를 사용하면 이 중 일부를 더 쉽게 만들 수 있습니다. 처음에는 termcap(및 수백 개의 터미널로 구성된 데이터베이스)이 있었고, terminfo(및 약 천 개의 터미널로 구성된 데이터베이스)로 확장되었습니다.

표준화를 하더라도 수십 개의 터미널 설명을 사용할 수 있습니다.사용. 따라서 우리는 가장 사소한 응용 프로그램을 제외한 모든 응용 프로그램에 라이브러리를 계속 사용합니다. 하나는 ncurses("new-curses")이고 다른 하나는 속어(기술적으로 "S-Lang")입니다.

추가 자료:

관련 정보