특정 프로그램이 어떻게 배경 및 글꼴 색상을 설정하고 화면의 동일한 위치(예: 세 번째 행, 다섯 번째 열)에 문자를 두 번 이상 쓸 수 있습니까?
몇 가지 예로는 에서 표시되는 진행률 표시줄 curl google.com > a
, 일부 설치 화면 및 거의 모든 텍스트 편집기가 있습니다.
답변1
당신이 요구하는 것은 실제로 그래픽 API가 아니라 단지 터미널 제어 문자일 뿐입니다.
그 뒤에는 많은 역사가 있지만 그 당시의 터미널은텔레타이프기계. 기본적으로 직렬 연결을 통해 컴퓨터에 연결된 트랙 공급 용지가 있는 타자기입니다. 문자를 입력하면 해당 이진 값이 컴퓨터로 전송됩니다(페이지에도 입력함). 컴퓨터는 요청한 내용의 출력으로 문자를 다시 인쇄합니다.
터미널을 제어하기 위해 특수 문자가 사용되었습니다(컨트롤 키의 출처는 해당 문자를 생성하기 위한 것입니다). 예를 들어, ^H
또는 ^?
백스페이스 ^M
는 캐리지 리턴(커서를 줄의 시작 부분으로 이동) 및 ^J
줄 바꿈(페이지를 한 줄 위로 이동)입니다. 일부 제어 코드에는 제어 문자를 생성하기 위한 C의 이스케이프 시퀀스(거의 모든 프로그래밍 언어에서 공유됨)가 있습니다. 이전에 나열된 컨트롤은 각각 \b
, 입니다 .\r
\n
그만큼터미널 에뮬레이터오늘날 여러분이 사용하는 것은 말 그대로 오래된 텔레타이프 기계인 척하는 소프트웨어입니다. 어떤 면에서는 유닉스가 여전히 타자기를 사용하여 통신한다고 생각하는 것과 거의 같습니다.
의 경우 curl
한 줄 전체를 쓴 다음 \r
커서를 줄의 시작 부분으로 이동하여 전송(캐리지 리턴)한 다음 다른 줄을 씁니다. 줄바꿈이 전송되지 않기 때문에 화면의 같은 줄에 계속해서 쓰여집니다.
이를 입증할 수 있는 방법은 다음과 같습니다.
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")입니다.
추가 자료: