일반적으로 다음과 같은 명령을 사용하여 CLI를 시작하려고합니다 (올바르게 정의하지 않을 수 있음).
(make-comint-in-buffer "PUTTY" nil "./plink.exe" nil "dbserver")
(make-comint-in-buffer "Python" nil "c:/Python26/python.exe" nil "-i")
(make-comint-in-buffer "Python" nil "c:/Python27/python.exe" nil "-i")
(make-comint-in-buffer "git" nil "C:/Program Files (x86)/Git/bin/sh.exe" nil "--login" "-i")
특히 명령 프롬프트의 첫 번째와 마지막을 위의 시작은 tab완료 기능을 제공합니다 . 그러나 comint-mode
나는이 기능을 얻지 못하는 것 같습니다.
입력 tab하면 프로세스에 전달하고 완료 후보를 다시 가져 오는 대신 포인트 아래에 간단한 탭 문자가 추가됩니다. comint-dynamic-complete
그리고 C-qtab원하는 결과를 생성하지 않습니다.
위의 기능을 comint-mode
다른 프로세스 를 실행할 때 어떻게 활용할 수 있습니까?
Emacs에서 자신 만의 완성 함수를 작성해야합니다. 이들은 외부 프로그램에서 정보를 가져올 수 있지만 python 또는 git 등에서 제공하는 탭 완성에 직접 액세스 할 수는 없습니다.
를 실행 make-comint-in-buffer
하면 외부 프로세스에서 데이터를 대화식으로 보내고 받기위한 가장 기본적인 설정을 설정하는 것입니다. 를 누를 때마다 enter
Emacs는 현재 행을 기본 프로세스로 보낸 다음 프로세스의 출력을 다시 인쇄합니다. 외부 프로세스는 Emacs가 전체 행을 보낼 때까지 수행중인 작업을 알지 못합니다. 단일 문자가 직접 전달되지 않습니다.
이것은 터미널에서 직접 외부 프로그램을 실행하는 것과 다릅니다. 터미널에서 파이썬을 실행하면 입력하는대로 모든 문자를 해석합니다 (또는 최소한 할 수 있음). 그래서 탭을 눌렀을 때 무언가를 완료하려고하는 것을 압니다. Emacs에서 파이썬을 실행하면 Emacs는 Enter 키를 누를 때까지 모든 입력을 처리합니다. 즉, 탭을 눌렀을 때 Emacs는 탭 문자를 삽입하고 파이썬은 무언가를 시도하고 완료하는 것을 알지 못합니다.
Emacs는 comint 모드에 대해 탭 완성 기능을 제공 할 수 있지만 Emacs 측에서 완성 대상을 구축해야합니다. 외부 프로그램의 기본 완성에 의존 할 수 없습니다. 이것이 어떻게 작동하는지에 대한 아이디어를 얻으려면 shell.el의 완성 함수를 살펴보십시오 M-x find-library shell
.
이것은 한두 줄의 elisp로 할 수있는 일이 아닙니다. 외부 프로세스와 상호 작용하도록 작성된 주요 모드의 중요한 부분입니다-R 용 ESS http://ess.r-project.org/
즉, shell.el의 핵심을 파헤쳐 보면 시작할 수 있도록 수정할 수있는 충분한 코드를 찾을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다