使用Helm重命名文件时,Emacs`dired`错误:`apply`参数数目错误

时间:2018-08-28 07:36:40

标签: emacs spacemacs dired emacs-helm

我不经常使用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存储库下似乎也报告了类似的问题。似乎头盔和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))

但是仍然出现相同的错误。

1 个答案:

答案 0 :(得分:2)

乍一看,在我看来,这就像当前版本的头盔中的错误。

从MELPA安装头盔后,我看到helm-read-file-name-handler-1接受8个参数:

  

((helm-read-file-name-handler-1提示DIR DEFAULT-FILENAME必须初始化初始名称缓冲)

根据堆栈跟踪,helm--completing-read-default可以用10来调用它。

helm--completing-read-defaultdired-do-rename中查找helm-completing-read-handlers-alist,发现它已映射到helm-read-file-name-handler-1。然后,它会将处理程序识别为以Helm函数命名的名称空间,并在此基础上使用另外两个特定于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))

因此,此问题会影响所有这些烦人的命令。

您可以通过删除所有这些来解决此问题。

例如 M-x customize-option RET helm-completing-read-handlers-alist