使用 Helm 重命名文件时出现 Emacs `dired` 错误:`apply` 参数数量错误
Emacs `dired` error when renaming file using Helm: `apply` wrong number of arguments
我不经常使用 dired
模式,但我试着用它来练习一下。所以我创建了一些空的练习文本文件,并用通常的 dired 快捷键标记它们。然后我尝试使用 "R" 命令重命名文件——以便将文件移动到新文件夹。我收到这个奇怪的错误并且操作没有成功。
apply: Wrong number of arguments: (8 . 8), 10 [3 times]
当我尝试使用 "C" 命令进行复制时,我 运行 遇到了同样的错误。但有趣的是,当我尝试使用 "D" 进行删除时,问题并没有发生。删除确实有效。所以似乎 apply
函数在某处使用不正确。
我在 ubuntu linux 16.04 LTS 上使用 emacs 25.3 版和 Spacemacs 0.200 版。13.x。
有人知道为什么会出现此错误吗?由于 dired
是 emacs 核心的一部分,我想可能与不同的包或其他东西有一些冲突。我检查了 spacemacs github 回购问题列表,但没有看到提到的任何问题。任何帮助将不胜感激。
已更新
根据 Phil 的建议,堆栈跟踪如下:
Debugger entered--Lisp error: (wrong-number-of-arguments (8 . 8) 10)
helm-read-file-name-handler-1("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil "dired-do-rename" "*helm-mode-dired-do-rename*")
apply(helm-read-file-name-handler-1 ("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil "dired-do-rename" "*helm-mode-dired-do-rename*"))
helm--completing-read-default("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil)
apply(helm--completing-read-default ("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil))
#f(advice-wrapper :override completing-read-default helm--completing-read-default)("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil)
completing-read("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil)
read-file-name-default("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
ido-read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
apply(ido-read-file-name ("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil))
#f(advice-wrapper :override #f(advice-wrapper :override read-file-name-default helm--generic-read-file-name) ido-read-file-name)("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil)
apply(read-file-name ("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil))
dired-mark-pop-up(nil move ("jarrett-iccv-09.pdf") read-file-name "Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil)
dired-mark-read-file-name("Rename %s to: " "/home/krishnab/Downloads/" move nil ("jarrett-iccv-09.pdf") nil)
dired-do-create-files(move dired-rename-file "Move" nil t "Rename")
dired-do-rename(nil)
funcall-interactively(dired-do-rename nil)
call-interactively(dired-do-rename nil nil)
command-execute(dired-do-rename)
已更新 2
helm
github 存储库中似乎报告了类似的问题。似乎 helm 和 ido 模式不兼容。
https://github.com/emacs-helm/helm/issues/1819
helm
wiki 中也有对此的引用。
https://github.com/emacs-helm/helm/wiki#use-helm-mode-and-ido-mode
我尝试了他们的一些建议,比如添加
'(helm-completing-read-handlers-alist
(quote
((find-file-read-only . ido)
(find-alternate-file . nil))
但仍然出现同样的错误。
乍一看,这在我看来像是当前版本的 helm 中的一个错误。
从 MELPA 安装 helm,我看到 helm-read-file-name-handler-1
接受 8 个参数:
(helm-read-file-name-handler-1 PROMPT DIR DEFAULT-FILENAME MUSTMATCH INITIAL PREDICATE NAME BUFFER)
虽然根据堆栈跟踪,helm--completing-read-default
保证用 10 调用它。
helm--completing-read-default
在helm-completing-read-handlers-alist
中查找dired-do-rename
,发现映射到helm-read-file-name-handler-1
。然后它将处理程序识别为一个 helm 函数的名称空间,并在此基础上使用 2 个额外的 helm 特定参数调用它。
默认情况下,helm-completing-read-handlers-alist
包括:
(dired-do-rename . helm-read-file-name-handler-1)
(dired-do-copy . helm-read-file-name-handler-1)
(dired-do-symlink . helm-read-file-name-handler-1)
(dired-do-relsymlink . helm-read-file-name-handler-1)
(dired-do-hardlink . helm-read-file-name-handler-1))
所以这个问题会影响所有这些 dired 命令。
你可以通过删除所有这些来解决这个问题。
例如M-x customize-option
RET helm-completing-read-handlers-alist
我不经常使用 dired
模式,但我试着用它来练习一下。所以我创建了一些空的练习文本文件,并用通常的 dired 快捷键标记它们。然后我尝试使用 "R" 命令重命名文件——以便将文件移动到新文件夹。我收到这个奇怪的错误并且操作没有成功。
apply: Wrong number of arguments: (8 . 8), 10 [3 times]
当我尝试使用 "C" 命令进行复制时,我 运行 遇到了同样的错误。但有趣的是,当我尝试使用 "D" 进行删除时,问题并没有发生。删除确实有效。所以似乎 apply
函数在某处使用不正确。
我在 ubuntu linux 16.04 LTS 上使用 emacs 25.3 版和 Spacemacs 0.200 版。13.x。
有人知道为什么会出现此错误吗?由于 dired
是 emacs 核心的一部分,我想可能与不同的包或其他东西有一些冲突。我检查了 spacemacs github 回购问题列表,但没有看到提到的任何问题。任何帮助将不胜感激。
已更新
根据 Phil 的建议,堆栈跟踪如下:
Debugger entered--Lisp error: (wrong-number-of-arguments (8 . 8) 10)
helm-read-file-name-handler-1("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil "dired-do-rename" "*helm-mode-dired-do-rename*")
apply(helm-read-file-name-handler-1 ("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil "dired-do-rename" "*helm-mode-dired-do-rename*"))
helm--completing-read-default("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil)
apply(helm--completing-read-default ("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil))
#f(advice-wrapper :override completing-read-default helm--completing-read-default)("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil nil)
completing-read("Rename jarrett-iccv-09.pdf to: " read-file-name-internal file-exists-p nil "~/Downloads/" file-name-history nil)
read-file-name-default("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
ido-read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
apply(ido-read-file-name ("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil))
#f(advice-wrapper :override #f(advice-wrapper :override read-file-name-default helm--generic-read-file-name) ido-read-file-name)("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil nil nil nil)
read-file-name("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil)
apply(read-file-name ("Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil))
dired-mark-pop-up(nil move ("jarrett-iccv-09.pdf") read-file-name "Rename jarrett-iccv-09.pdf to: " "/home/krishnab/Downloads/" nil)
dired-mark-read-file-name("Rename %s to: " "/home/krishnab/Downloads/" move nil ("jarrett-iccv-09.pdf") nil)
dired-do-create-files(move dired-rename-file "Move" nil t "Rename")
dired-do-rename(nil)
funcall-interactively(dired-do-rename nil)
call-interactively(dired-do-rename nil nil)
command-execute(dired-do-rename)
已更新 2
helm
github 存储库中似乎报告了类似的问题。似乎 helm 和 ido 模式不兼容。
https://github.com/emacs-helm/helm/issues/1819
helm
wiki 中也有对此的引用。
https://github.com/emacs-helm/helm/wiki#use-helm-mode-and-ido-mode
我尝试了他们的一些建议,比如添加
'(helm-completing-read-handlers-alist
(quote
((find-file-read-only . ido)
(find-alternate-file . nil))
但仍然出现同样的错误。
乍一看,这在我看来像是当前版本的 helm 中的一个错误。
从 MELPA 安装 helm,我看到 helm-read-file-name-handler-1
接受 8 个参数:
(helm-read-file-name-handler-1 PROMPT DIR DEFAULT-FILENAME MUSTMATCH INITIAL PREDICATE NAME BUFFER)
虽然根据堆栈跟踪,helm--completing-read-default
保证用 10 调用它。
helm--completing-read-default
在helm-completing-read-handlers-alist
中查找dired-do-rename
,发现映射到helm-read-file-name-handler-1
。然后它将处理程序识别为一个 helm 函数的名称空间,并在此基础上使用 2 个额外的 helm 特定参数调用它。
默认情况下,helm-completing-read-handlers-alist
包括:
(dired-do-rename . helm-read-file-name-handler-1)
(dired-do-copy . helm-read-file-name-handler-1)
(dired-do-symlink . helm-read-file-name-handler-1)
(dired-do-relsymlink . helm-read-file-name-handler-1)
(dired-do-hardlink . helm-read-file-name-handler-1))
所以这个问题会影响所有这些 dired 命令。
你可以通过删除所有这些来解决这个问题。
例如M-x customize-option
RET helm-completing-read-handlers-alist