Emacs Lisp:参数数量错误,用户输入在 add-hook 中调用它
Emacs Lisp: Wrong number of arguments function with user input calling it in add-hook
我基本上是在尝试让用户选择在关闭 emacs 之前使用透视图保存当前会话。
(defun save-current-session (yes-or-no-bool)
(interactive
(list
(y-or-n-p "Do you want to save this session for later? ")))
(if yes-or-no-bool
(persp-state-save "~/.emacs.d/persp-state-file")))
此函数询问用户 he/she 是否真的要保存当前会话。使用 M-x 调用此函数会给出所需的结果。我被问到是否想要,是或否,如果我输入“y”它会成功保存它,但是当我将它添加到 kill-emacs-hook 时:
(add-hook 'kill-emacs-hook 'save-current-session)
我收到这个错误:
Debugger entered--Lisp error: (wrong-number-of-arguments (lambda (yes-or-no-bool) (interactive (list (y-or-n-p "Do you want to save this session for later? "))) (if yes-or-no-bool (persp-state-save "~/.emacs.d/persp-state-file"))) 0)
save-current-session()
kill-emacs()
save-buffers-kill-emacs()
evil-quit(nil)
funcall-interactively(evil-quit nil)
call-interactively(evil-quit)
evil-ex-call-command(nil #("q" 0 1 (ex-index 1)) nil)
eval((evil-ex-call-command nil #("q" 0 1 (ex-index 1)) nil))
evil-ex-execute(#("q" 0 1 (ex-index 1)))
evil-ex(nil)
funcall-interactively(evil-ex nil)
call-interactively(evil-ex nil nil)
command-execute(evil-ex)
为什么添加 save-current-session
函数在添加到 kill-emacs-hook
时不要求用户输入,但在通过 M-x 调用它时却要求用户输入?
add-hook
用于 普通 挂钩。普通钩子是不接受任何参数的函数,也就是说,您可以不带参数调用它们(这就是它们被称为钩子函数的方式)。
但是你的函数有一个必需的参数 - 它不能在没有参数的情况下被调用。
错误消息告诉您它是用一个参数调用的,但它需要零个参数。
试试这个:
(defun save-current-session ()
(when (y-or-n-p "Do you want to save this session for later? ")
(persp-state-save "~/.emacs.d/persp-state-file")))
(add-hook 'kill-emacs-hook 'save-current-session)
我基本上是在尝试让用户选择在关闭 emacs 之前使用透视图保存当前会话。
(defun save-current-session (yes-or-no-bool)
(interactive
(list
(y-or-n-p "Do you want to save this session for later? ")))
(if yes-or-no-bool
(persp-state-save "~/.emacs.d/persp-state-file")))
此函数询问用户 he/she 是否真的要保存当前会话。使用 M-x 调用此函数会给出所需的结果。我被问到是否想要,是或否,如果我输入“y”它会成功保存它,但是当我将它添加到 kill-emacs-hook 时:
(add-hook 'kill-emacs-hook 'save-current-session)
我收到这个错误:
Debugger entered--Lisp error: (wrong-number-of-arguments (lambda (yes-or-no-bool) (interactive (list (y-or-n-p "Do you want to save this session for later? "))) (if yes-or-no-bool (persp-state-save "~/.emacs.d/persp-state-file"))) 0)
save-current-session()
kill-emacs()
save-buffers-kill-emacs()
evil-quit(nil)
funcall-interactively(evil-quit nil)
call-interactively(evil-quit)
evil-ex-call-command(nil #("q" 0 1 (ex-index 1)) nil)
eval((evil-ex-call-command nil #("q" 0 1 (ex-index 1)) nil))
evil-ex-execute(#("q" 0 1 (ex-index 1)))
evil-ex(nil)
funcall-interactively(evil-ex nil)
call-interactively(evil-ex nil nil)
command-execute(evil-ex)
为什么添加 save-current-session
函数在添加到 kill-emacs-hook
时不要求用户输入,但在通过 M-x 调用它时却要求用户输入?
add-hook
用于 普通 挂钩。普通钩子是不接受任何参数的函数,也就是说,您可以不带参数调用它们(这就是它们被称为钩子函数的方式)。
但是你的函数有一个必需的参数 - 它不能在没有参数的情况下被调用。
错误消息告诉您它是用一个参数调用的,但它需要零个参数。
试试这个:
(defun save-current-session ()
(when (y-or-n-p "Do you want to save this session for later? ")
(persp-state-save "~/.emacs.d/persp-state-file")))
(add-hook 'kill-emacs-hook 'save-current-session)