load file 的一个小问题

渣渣请问一下:

(defun lyf/load-file (name)
  (interactive (let ((read-file-name-completion-ignore-case t)) 
                    (read-file-name "Choose a file: " "~/.emacs.d/")))
  (load-file name))

M-x 运行的时候提示:

Wrong type argument: listp, “~/.emacs.d/init.el”

这是什么原因啊,如何改正啊?

你能不能把完整的 debug 信息贴上来?

(defun lyf/load-file ()
  (interactive )
  (let ((read-file-name-completion-ignore-case t)) 
(load-file (read-file-name "Choose a file: " "~/.emacs.d/")))
)

函数没问题, 估计你的init.el 有问题

改成这样确实可用,大神有时间指点一下原因吗?

这是经修改过后的函数,我原来的函数有问题。

(defun lyf/load-file (name)
  (interactive (let ((read-file-name-completion-ignore-case t)) 
                    (read-file-name "Choose a file: " "~/.emacs.d/")))
  (load-file name))

这种情况name 参数依然为空

 (defun lyf/load-file (name)
  (interactive "f Choose file:")
  (load-file name))

这样也可以 使用 “f” 参数,但是没法控制ignore-case

明白了!

(defun lyf/load-file (name)
  (interactive (list (let ((read-file-name-completion-ignore-case t)) 
                    (read-file-name "Choose a file: " "~/.emacs.d/"))))
  (load-file name))

也是可以的