shell
을 코드로 호출한다고 가정 해 봅시다. Lisp에서는 모든 것이 괄호로 묶인 접두사 표기법입니다.
(shell)
가 근접 괄호 다음 줄의 끝으로 포인터를 이동하고 리스프 코드를 실행할 수
<C-x C-e>
을 입력
: 그래서 우리는 버퍼에 (예를 들어, 스크래치 버퍼)이 입력합니다. shell
함수가 호출되어야합니다.
자 이제 함수를 함수로 만들자. 다른 함수도 추가 할 수있다. 함수를 작성하는 명령은 defun
이며, 다음 함수의 본문 (괄호), 함수의 인수 목록을 이름을 소요하고 : 코드의 끝으로 커서를 이동
(defun automate-connection()
(shell))
을 ,
<C-x C-e>
을 누르면 기능이 정의됩니다. 이제 우리가 쉘 버퍼에 텍스트를 넣을 필요가
(automate-connection)
확인을 실행하여 리스프에서 호출 할 수 있습니다.
(defun automate-connection()
(shell)
(insert "TERM=xterm"))
이제 실행하면 "TERM = xterm"이 쉘 버퍼에 저장됩니다. 그러나 실제로 명령을 보내지는 않습니다. 줄 바꾸기를 시도해 봅시다.
(defun automate-connection()
(shell)
(insert "TERM=xterm\n"))
이는 개행을 실행하지만 실제로 명령을 실행하지는 않습니다. 왜 안돼? 엔터 키가 무엇을하는지 봅시다. *shell*
버퍼로 이동하여 <C-h c>
을 입력 한 다음 Enter 키를 누릅니다. (<C-h c>
은 주어진 키를 치면 호출 된 함수의 이름을 인쇄하는 describe-key-briefly
을 실행합니다). 그 말은 RET을 눌렀을 때 줄 바꿈을하지는 않지만 실제로는 comint-send-input
을 호출하는 것입니다. 그럼 그렇게하자
(defun automate-connection()
(shell)
(insert "TERM=xterm")
(comint-send-input))
을 지금, 당신은 어떤 리스프 코드에서`(자동화-연결)를 실행하면 전송 주어진 일을 얻어야한다. 다른 명령을 추가하려면 독자에게 연습 문제로 남겨 둡니다.
하지만 잠깐! 우린 정말 끝나지 않았어? 나는 당신이 Lisp 스크래치 버퍼로 이동하고, (automate-connection)
을 타이핑하고 그 코드를 평가하고 싶지 않다고 가정한다. 당신은 단지 그것을 타이핑하고 하루 만 부르면됩니다.방금 작성한 함수로는 기본적으로이 작업을 수행 할 수 없습니다. 당신이 원하는대로
(defun automate-connection()
(interactive)
(shell)
(insert "TERM=xterm")
(comint-send-input))
지금 당신이 그것을 호출 할 수 있습니다, 그것은 텍스트에 넣어 *shell*
버퍼를 열고 말할 것이다 : 당신의 기능에 (interactive)
에 호출을 추가 : 다행히도, 그 수 있도록 간단합니다 Emacs가 그 텍스트를 실행하도록 쉘에 지시합니다.
이것은 매우 도움이됩니다. 감사합니다. 지금이 :'(defun는 자동으로 접속을() (대화 형) (쉘) (삽입 "TERM = xterm 등의 \ n SSH -Y -C \ N 스크린 -RD") (COMINT 보내 입력) (RELEASE) 프로세스가 이미 실행되고 있지 않으면'(ess-remote)'가 실행되지 않는 것 같습니다. 나는'(comint-send-input)'과'(ess-remote)'사이에 무엇인가를 할 필요가 있다고 생각한다. –
Solomon