Brakuje zamykającego nawiasu. Prawdopodobnie nie w twoim kodzie, tylko w pytaniu.
Helder S Ribeiro
Na marginesie: kiedy zacytujesz anonimową funkcję w ten sposób, nie zostanie ona skompilowana. Wyobrażam sobie jednak, że w twoim przypadku to nic wielkiego.
Myślę, że nie ma wad. Z dokumentacji: >> „Wywołanie” „interaktywnego” jest w rzeczywistości deklaracją, a nie funkcją; mówi „call-interactively”, jak czytać argumenty przekazywane do funkcji. Właściwie wywołany „interaktywny” zwraca po prostu zero.
Dangelov
Więc zgodnie z (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?
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 .emacspliku, 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!)
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.źródło
(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.źródło
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!)źródło