2012-09-25 3 views
11

명령, 이맥스 내가 실행할 수 있습니다 명령 같은 (그런데 내가 execute-extended-command 스탠드를 믿고) M-X. 이 명령 M-x 자체는 customize_face과 같은 것을 실행하는 데 사용됩니다. minibuffer에 M-x customize-face을 입력하십시오.관계가 내가 이해에서

내 질문은 :

Q.1.customize-face입니다.? 또는 함수입니까? 그리고 customize-faceM-x인수으로 전달된다고 말합니까?

Q.2 모든 이맥스 명령에는 관련된 이맥스 이 있습니까?? (즉, M-x customize-face을 입력하면 정의 된 함수 인이 호출됩니다.) 그렇다면 어떻게 명령 이름에서 함수 이름을 찾을 수 있습니까?

+0

M-x는 함수가 아니며 함수에 바인딩 된 키 시퀀스입니다. 이런 일이 발생하면 명령을 매개 변수로 사용하는 함수에 바인딩됩니다. 대화 형으로 호출 될 때, 그것의'interactive' 형식은 명령 이름을 요구하도록합니다. – tripleee

답변

19

예, 모든 이맥스 명령은 기능이지만 모든 기능이 이맥스 명령이 아닙니다. 당신은 임의의 elisp 기능 (interactive)를 사용 M-x를 통해 액세스 할 수있는 명령 할 수있다 : 이제

(defun my-command() 
"This is the docstring" 
(interactive) 
(do-foo) 
(do-bar)) 

당신이 같은 대화 형 my-command을 정의한 것으로, 즉시 M-x my-command에 액세스 할 수 있습니다. Emacs는 자동으로 이름을 가진 부기를 자동으로 처리합니다.

이것은 입니다. 새 명령을 추가하려면해야합니다! 다음과 같이 키에 바인딩 할 수 있습니다.

(global-set-key (kbd "C-c f") 'my-command) 

더욱이 모든 키 바인딩은 이와 같은 대화 형 함수와 관련되어 있습니다. C-h k을 사용하여 어떤 기능이 어떤 키로 호출되는지를 발견하고 키 순서를 입력하십시오. 그러면 해당 키 시퀀스에서 호출 될 함수에 대한 문서가 제공됩니다. 그래서

C-c f runs the command my-command, which is an interactive Lisp 
function. 

It is bound to C-c f. 

(my-command) 

This is the docstring 

: 코드를 실행 한 경우 내가 (다른 것들 사이) 당신이 포함 된 버퍼를 줄 것이다 C-h k C-c f을하고, 당신의 문서 문자열을 준 모든 이맥스 명령 (interactive) 정의 단지 기능입니다. (사실, 이맥스의 C 코어의 원시 함수도 있지만, 그다지 중요하지는 않습니다.)

명령과 함수 사이의 간단하고 우아한 관계 - 어느 방향으로나 따라하기 쉽습니다 - 부분적입니다 Emacs를 쉽게 커스터마이징 할 수있게 해주는 이유 중 정상 동작이 호출 한 기능이 무엇인지 궁금해지면 쉽게 찾아 볼 수 있으며 더 많은 명령을 추가하려면 함수에 한 개의 추가 행이 있어야합니다.

+2

http://www.gnu.org/software/emacs/manual/html_node/elisp/Command-Overview.html이 더 읽을 거리가 될 수 있습니다. – tripleee

+1

@Tikhon Jelvis에 감사드립니다. 또 하나의 질문으로'C-h k'를 사용하여 각 키에 의해 호출되는 함수를 찾는 방법을 설명했지만 명령에 의해 호출 된 함수를 어떻게 찾을 수 있습니까? (예 : ** Dired + **를 사용하는 경우 'M-x dired') –

+3

'C-h F'를 실행하고 명령 이름을 입력 할 수 있습니다. 반드시 커맨드가 아닌 * 함수를 찾으려면 범위 내의 모든 함수에 대해 작동하는'C-h f '를 사용할 수 있습니다. –

6

한 가지 더 자세하게 설명합니다. 함수를 명령으로 레이블 지정하기 위해 (interactive)을 추가해야하는 이유가 궁금한 사람들은 함수에 인수를 제공하는 방법을 설명하기 위해 interactive이라는 것이 있습니다.따라서 (interactive)은 "이것은 또한 명령이고 대화식으로 실행될 때 인수없이 호출합니다."(interactive (list 2))은 "이것은 또한 명령이며 대화식으로 실행될 때 표현식을 평가하면 (list 2)은 전달할 인수 목록을 작성합니다 명령에 ".

interactive을 확장 그래서 대신의 RETURN-FORM 대화 형으로 불리는 반환 값, 수행 할 작업을 지정합니다 그것은 또한 형태 (interactive ARGS-FORM RETURN-FORM)을 취할 수있는 형태 (interactive ARGs-FORM)을 복용에 대한 논의가있었습니다. 전형적인 예 : current-column 기능 A와 아무것도 인쇄 그러나 단지 숫자를 반환하지만, 대화 형으로 실행하는 경우 (즉, 명령으로 사용) 그것이 쓸모하게 아무것도 인쇄되지 않을 경우, 그래서 RETURN-FORM하지 않습니다 반환 된 번호를 받아 인쇄하십시오.

관련 문제