람다를 키에 바인딩 할 때 "잘못된 형식 인수 : commandp"오류


87

여기에 "잘못된 유형 인수 : commandp, (lambda nil (forward-line 5))"가 표시됩니다.

(global-set-key [?\M-n] (lambda () (forward-line 5)))

오류는 무엇입니까? 나는 그것이 간단하고 명백한 것을 놓치고 있다고 확신합니다.


닫는 괄호가 없습니다. 아마도 귀하의 코드가 아니라 질문에서만 가능합니다.
Helder S Ribeiro

참고로 익명 함수를 인용하면 컴파일되지 않습니다. 하지만 당신의 경우에는 별 문제가 아니라고 생각합니다.
Phil Jackson

답변:


129

global-set-key대화 형 명령이 필요합니다. (lambda () (interactive) (forward-line 5))작동해야합니다.

그건 그렇고, C-h f commandp그런 오류에 대한 꽤 좋은 시작점입니다.


나는 단점이 없다고 생각합니다. 문서에서 : >> '상호 작용'에 대한 "호출"은 실제로 함수가 아니라 선언입니다. 함수에 전달할 인수를 읽는 방법을 '호출 대화식'으로 알려줍니다. 실제로 호출되면 'interactive'는 nil을 반환합니다.
Dangelov

따라서 (commandp)문서 에 따르면 최상위 수준 호출이있는 람다 함수가 (interactive)작동하지만 작동하는 함수를 어떻게 정의 할 수 (defun)있습니까?
peterhil

35

올바른 형식은 다음과 같아야합니다.

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

문제는 (interactive)(brendan이 언급했듯이) 넣는 것을 잊었다는 것입니다 .

그건 그렇고, (kbd)키 바인딩을 지정하는 기능을 사용했음을 알 수 있습니다. 이 함수는 거의 문자 그대로 키 바인딩을 넣을 수 있기 때문에 매우 유용합니다.


2

또한 일반적인 .emacs파일을 사용하고 있지만 패키지를 설치하지 않은 새 컴퓨터에서이 오류가 발생했으며 실행할 명령이 해당 패키지 중 하나에 있습니다. (실행할 수없는 명령은 대화 형이 아니기 때문입니다!)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.