代码之家  ›  专栏  ›  技术社区  ›  krishnab

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

  •  1
  • krishnab  · 技术社区  · 7 年前

    我不用 dired 模式太频繁了,但试着用它来练习一下。所以我创建了一些空的练习文本文件,并用常用的dired快捷键标记它们。然后我尝试使用“R”命令重命名文件,以便将文件移动到新文件夹。我犯了个奇怪的错误,手术没有成功。

    apply: Wrong number of arguments: (8 . 8), 10 [3 times]
    

    当我试图使用“C”命令进行复制时,也遇到了同样的错误。但有趣的是,当我试图用“D”删除时,问题并没有出现。删除确实有效。所以好像在某个地方 apply 函数使用不正确。

    肮脏的 是emacs核心的一部分,我想可能与其他包或其他东西有冲突。我查看了spacemacs github repo问题列表,但没有看到任何提到的问题。任何帮助都将不胜感激。

    更新

    根据菲尔的建议,这里是stacktrace:

    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

    舵手 维基。

    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 回复  |  直到 7 年前
        1
  •  2
  •   phils    7 年前

    乍一看,在我看来,这就像是当前版本的helm中的一个bug。

    安装MELPA的头盔,我看到了 helm-read-file-name-handler-1

    (helm-read-file-name-handler-1 PROMPT DIR DEFAULT-FILENAME必须匹配初始谓词名称缓冲区)

    helm--completing-read-default 根据堆栈跟踪,保证用10调用它。

    抬起头来 dired-do-rename 在里面 helm-completing-read-handlers-alist 发现它被映射到 helm-read-file-name-handler-1型

    默认情况下, 完成读取处理程序列表 包括:

    (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))
    

    所以这个问题会影响到所有的命令。

    你可以通过移除所有这些来解决这个问题。

    customize-option 雷特