W tym miejscu jest wyświetlany komunikat „Wrong type argument: commandp, (lambda nil (forward-line 5))”.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Jaki jest błąd? Jestem prawie pewien, że to proste i brakuje mi czegoś oczywistego.
W tym miejscu jest wyświetlany komunikat „Wrong type argument: commandp, (lambda nil (forward-line 5))”.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Jaki jest błąd? Jestem prawie pewien, że to proste i brakuje mi czegoś oczywistego.
Odpowiedzi:
global-set-key
oczekuje interaktywnego polecenia. (lambda () (interactive) (forward-line 5))
powinien działać.
Nawiasem mówiąc, C-h f commandp
jest to całkiem dobry punkt wyjścia dla takich błędów.
(commandp)
dokumentacją, funkcje lambda z wywołaniem najwyższego poziomu do (interactive)
działania, ale jak mogę zdefiniować funkcję z (defun)
tym, aby działała?
Prawidłowa forma powinna wyglądać następująco -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
Problem polegał na tym, że zapomniałeś (interactive)
podać (jak wspomniał Brendan).
Nawiasem mówiąc, zauważysz, że użyłem (kbd)
funkcji do określenia powiązania klawiszy. Ta funkcja jest niezmiernie użyteczna, ponieważ możesz umieścić skróty klawiszowe prawie dosłownie.
Widziałem również ten błąd na nowej maszynie, na której używam zwykłego .emacs
pliku, ale nie zainstalowałem moich pakietów, a polecenie do wykonania znajduje się w jednym z tych pakietów. (Ponieważ polecenie, którego nie można wykonać, zdecydowanie nie jest interaktywne!)