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

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

터미널 내부에서 실행되고 GUI가 있는 Vim(또는 예를 들어 top)과 같은 프로그램이 어떻게 구현되는지 알 수 없습니다. 터미널은 문자만 표시할 수 있고 Vim은 여러 창을 표시할 수 있을 뿐만 아니라 커서를 모든 방향으로 움직이는 것도 처리할 수 있다고 가정합니다.

또 다른 예는 리눅스이다.맨 위정보를 표시하는 유틸리티실시간업데이트되었습니다. 이 프로그램이 정보를 업데이트하는 대신 정보를 업데이트할 수 있는 방법은 무엇입니까?아래로 스크롤새로운 인쇄된 문자를 보여주나요?.

답변1

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

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

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

답변2

vimgvim다른 라이브러리와 연결된 별도의 실행 파일일 수도 있습니다 . 두 인터페이스 중 하나를 수행하는 하나의 실행 파일을 갖는 것이 가능합니다(예를 들어 elvis 및 emacs가 이를 수행함). 1996년 vim 4.0에는 -gGUI 버전을 사용하도록 지시하는 옵션이 추가되었습니다(이 경우 동일한 실행 파일의 일부임).

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

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를 예상하지 못했습니다. 추가적인 터미널별 컨트롤은 "escape"를 사용하여 ASCII로 인코딩됩니다. 이스케이프 시퀀스는 ASCII 이스케이프 문자로 시작됩니다. 시퀀스의 다음 문자는 터미널별 컨트롤로 해석됩니다.

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

이스케이프 코드 세트가 표준화되고 있습니다. 최근에 충분한 문서가 있는 경우 "ANSI 이스케이프"는 다음에서 찾아보기 좋은 용어일 수 있습니다.색인.

관련 정보