Vim과 같은 명령줄 애플리케이션은 어떻게 작동하나요? 구체적으로, 그들은 터미널을 어떻게 제어합니까? 그리고 나중에 참고할 수 있도록 Vim처럼 터미널을 제어하는 애플리케이션을 지칭하는 특정 용어가 있나요?
답변1
vim 및 기타 반 그래픽(각도, 완전한 십자형...과 같은 반 그래픽 문자를 표시할 수 있음) 응용 프로그램은 특수 이스케이프 시퀀스를 전송하여 터미널을 제어합니다(커서 위치, 표시 가능한 문자 위치, 색상 설정 등 관리). 제어 코드를 사용하면 터미널은 이를 수행할 특정 작업으로 변환합니다.
표준 출력에 이스케이프 시퀀스를 에코하는 것은 모든 프로그래머에게 악몽이기 때문에, 항상 다른 기능과 다른 이스케이프 시퀀스를 가진 다양한 터미널이 있기 때문에 이식 불가능한 코드를 의미하는 것은 말할 것도 없습니다.
모든 작업을 추상화하는 라이브러리를 만들었습니다.저주. 이제 이름이 지정되었습니다.저주또한 창 관리와 같은 더 높은 수준의 기능도 제공합니다.
ncurses는 다음에 따라 달라집니다.용어 정보적절한 터미널 기능 설명을 얻는 데 사용되는 데이터베이스입니다.
바로 이 함수 라이브러리 때문입니다.vim, itraf-ng, alsa amixer, less, gdb,기본 커널 구성 유틸리티와 터미널을 제어하는 기타 여러 유틸리티입니다.
이러한 응용 프로그램은 일반적으로 "명령줄"유틸리티는 일반적으로 기본 커서 관리 및 편집 기능을 사용하여 한 줄 입력을 처리합니다.독서선도서관.
대신 ncurses
위에 링크된 매뉴얼 페이지에서 읽을 수 있듯이 다음 프로그램을 호출할 수 있습니다.대화형, 화면 지향적입니다. vim
일반적으로 명명화면 지향ed
비교 수정행 지향편집하다.
댓글에서 다음 제안사항을 참고하세요.
시작 시 응용 프로그램은 실행된 셸에서 tty 드라이버 설정을 상속하며 이러한 설정은 원래 Agetty에서 원래 설정한 설정과 매우 유사할 수 있습니다.
여기에는 개행 문자가 캡처될 때까지 입력 버퍼링, 순간 커서 위치에서 Enter 키를 에코하는 등 화면 지향 응용 프로그램에 필요하지 않은 모든 기능이 포함됩니다.
초기화 시 프로그램은 현재 tty 드라이버 설정을 저장하고 프로그래머의 희망에 따라 이를 적용합니다.
종료하기 전에... 프로그래머는 초기 설정을 복원하는 것이 좋습니다... 예측할 수 없지만 확실히 혼란스러운 상황에서 호출 쉘로 돌아갈 위험에 직면하지 않는 한...
답변2
한 번에 한 문자씩 버퍼를 입력하십시오.
캐리지 리턴이 입력되면 버퍼는 한 번에 한 문자씩 검사("구문 분석")되어 주어진 구문으로 배열된 토큰을 찾습니다.
그런 다음 가능하다면 이에 따라 일부 명령을 실행하십시오. 입력을 구문 분석할 수 없는 경우 명령 해석기가 입력 내용을 처리할 수 없음을 나타내는 오류 메시지가 표시됩니다.
명령 셸이 중지되거나 컴퓨터가 종료될 때까지 헹구고 반복합니다.
기본적으로는 다른 컴퓨터 프로그램과 같습니다. 입력, IF 및 ELSE 문, 데이터 조작(계산 수행 및 메모리에서 데이터 이동) 및 출력.