Vim이 터미널에서 실행되는 프로그램인 경우 GUI는 어떻게 구현됩니까?

Vim이 터미널에서 실행되는 프로그램인 경우 GUI는 어떻게 구현됩니까?

터미널 내부에서 실행되고 GUI가 있는 Vim(또는 top 등)과 같은 프로그램을 구현하는 방법을 이해하지 못합니다. 터미널이 문자만 표시할 수 있다고 가정하면 Vim은 여러 창을 표시할 수 있을 뿐만 아니라 커서의 모든 방향 이동도 처리할 수 있습니다.

또 다른 예는 리눅스이다.맨 위정보를 표시하는 유틸리티실시간업데이트되었습니다. 프로그램이 정보를 업데이트하는 대신 어떻게 정보를 업데이트할 수 있습니까?아래로 스크롤새로운 인쇄된 문자를 표시하시겠습니까?

답변1

터미널에서 실행되는 애플리케이션은 다음을 가질 수 있습니다.텍스트사용자 인터페이스는 대부분의 터미널이 단순한 것 이상이므로멍청한 터미널문자만 인쇄하고 다음 줄로 이동할 수 있지만 "스마트" 터미널에서는 지원됩니다.제어 문자그리고이스케이프 시퀀스그 의미에는 "현재 줄을 지우고 다음 줄을 위로 스크롤", "(53,7) 위치로 이동", "지금부터 밝은 빨간색으로 인쇄" 등이 포함됩니다.

대부분의 터미널 에뮬레이터는 대부분을 구현합니다.xterm의 이스케이프 시퀀스, 그 자체는 대부분의 제품과 호환됩니다.VT100하드웨어 터미널 및 후속 제품. 애플리케이션은 통과하기 위해 어떤 이스케이프 시퀀스를 보낼지 알고 있습니다.용어 모자또는용어 정보데이터 베이스. 바라보다키보드 입력과 텍스트 출력은 어떻게 작동합니까?("텍스트 모드 응용 프로그램, 터미널에서 실행" 섹션) 및$TERM은 어떻게, 어디서 해석되나요?자세한 내용은.

Vim에는 텍스트 사용자 인터페이스 외에도 GVim이라는 그래픽 사용자 인터페이스도 있습니다. 인터페이스는 다음을 구현하는 그래픽 터미널에서 실행됩니다.X11 프로토콜, 텍스트 터미널이 아닌 (물론방사텍스트 터미널 내에서 애플리케이션을 실행하면 해당 터미널에 표시되지 않습니다.

답변2

vim그리고 gvim아마도 다른 라이브러리와 연결된 별도의 실행 파일일 수도 있습니다. 실행 파일이 두 인터페이스 중 하나를 실행하도록 할 수 있습니다(예: elvis 및 emacs가 이를 수행함). 1996년 Vim 4.0에는 -gGUI 버전을 사용하라는 옵션이 추가되었습니다(이 경우 동일한 실행 파일의 일부였습니다).

나는 4.0에 대한 발표의 사본을 찾지 못했습니다(이 옵션에 대한 동기에 대한 단서를 제공할 수 있습니다 -g(vim의 발표 메일링 목록은 다음으로 시작합니다).1997년), 이전 FAQ에서 Laurent Duperval이 언급한 내용을 참조하세요.

7.3 How can I make Vim faster on a Unix station?

   The GUI support in Vim 4.0 can slow down the startup time noticeably.
   Until Vim supports dynamic loading, you can speed up the startup time
   by compiling two different versions of Vim: one with the GUI and one
   without the GUI and install both. Make sure you remove the link from
   $bindir/gvim to $bindir/vim when installing the GUI version, though.

   If screen updating is your problem, you can run Vim in screen. screen
   is an ascii terminal multiplexer. The latest version can be found at
   <URL:ftp://ftp.uni-erlangen.de:/pub/utilities/screen>.

내 기억으로는 오랫동안 두 개의 실행 파일이 있었다는 것입니다.저것변경 사항을 적용하려면 실제 사용되는 패키지에 대한 많은 연구가 필요합니다. 하지만 이 기능은 1996년부터 존재해 왔습니다.

모든 유형의 인터페이스에 대해 디스플레이를 업데이트하는 방법은 여러 가지가 있습니다. gvim의 경우 X 라이브러리를 사용하는 반면 top(또는vim) 이스케이프 시퀀스를 사용합니다. 시스템에 따라 이 두 가지 모두용어 모자애플리케이션, ncurses의 termcap 인터페이스 등을 사용하여 이스케이프 시퀀스를 얻습니다( top실제로 일부 버전은사용표시용 ncurses(예 htop: ). vim은 이 기능을 향상시키기 위해 내장된 테이블(종종 중복)을 사용합니다.

흥미롭게도 데비안 procps버전 top은 (비교적 드물다)용어 정보이는 응용프로그램을 검토하면 알 수 있습니다.소스 코드.

답변3

원래 TTY에 이어 터미널을 사용할 수 있게 되면서 프린터를 VDU로 대체했습니다.

VDU는 종이 문서와 특성이 약간 다릅니다. 단순히 겹쳐 인쇄하는 대신 디스플레이의 문자를 지우고 교체할 수 있습니다.

ASCII는 기본 라인 프린터에 충분한 제어 문자를 제공하지만 VDU를 예상하지는 않습니다. 기타 터미널별 컨트롤은 "이스케이프 문자"를 사용하여 ASCII로 인코딩됩니다. 이스케이프 시퀀스는 ASCII 이스케이프 문자로 시작됩니다. 시퀀스의 다음 문자는 터미널별 컨트롤로 해석됩니다.

시각적 편집기는 vi이 새로운 기술을 사용하는 응용 프로그램의 좋은 예입니다.

이스케이프 코드 세트가 표준화되고 있습니다. 최신 문서가 충분하다면 "ANSI 이스케이프"가 포함될 수 있습니다.색인.

관련 정보