在带有Emacs24的Win7上,当Emacs程序想要打开(pdf)文件时遇到问题。当我激活或取消激活openwith-mode时,问题仍然存在。我在Emacs或Acrobat Reader中获得了'错误类型参数arrayp nil'消息,但是会出现错误消息“无法打开/找到该文件”。
我尝试调试它并且总是在files.el中结束。 似乎要打开的pdf文件的名称是通过连接绝对文件名和文件扩展名.pdf来构造的。但是,给AcroRd32的文件名字符串看起来像这样:
AcroRd32 "c:\\absolute\file\name".pdf
这在命令行上也不起作用。我必须将其(手动)更改为
AcroRd32 "c:\\absolute\file\name.pdf"
或
AcroRd32 c:\\absolute\file\name.pdf
让它发挥作用。
我不知道这是否被视为错误,或者只是对我来说是一个问题。我试图将elisp代码更改为
(format "%s" (concat absolute-filename file-extension))
摆脱那些双引号,但无济于事。无论如何,我觉得在像files.el这样的基本库中乱七八糟,并且因为永久地调用它所以很难对该库进行edebug。
也许有人遇到同样的问题并找到了解决方案?
[我在2011-11-22使用了关于MARVIN的GNU Emacs 24.0.91.1(i386-mingw-nt6.1.7601)。]
PS 1测试案例1
当我执行M-x toggle-debug-on-error然后尝试在dired中打开pdf文件时出现以下错误消息:
Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
file-truename(nil)
find-file-noselect-1(#<buffer test.pdf<4>> "~/.emacs.d/org/projects/sandbox/test.pdf" nil nil "~/.emacs.d/org/projects/sandbox/test.pdf" ((2816 7 . 27468) (16087 . 35227)))
find-file-noselect("c:/Users/tj2/.emacs.d/org/projects/sandbox/test.pdf" nil nil nil)
find-file("c:/Users/tj2/.emacs.d/org/projects/sandbox/test.pdf")
dired-find-file()
call-interactively(dired-find-file nil nil)
以及以下消息:
Openwith mode enabled
find-file-noselect-1: Wrong type argument: arrayp, nil
我的.emacs.d真的是Dropbox文件夹的windows符号链接(mklink)吗?
PS 2测试案例2
这是我在maven-compile缓冲区中获得的消息,当在缓冲区中执行C-c C-s(LilyPond-command-view)时:
-*- mode: compilation; default-directory: "~/.emacs.d/org/projects/sandbox/" -*-
Compilation started at Tue Dec 20 09:16:28
AcroRd32 "c:/Users/tj2/.emacs.d/org/projects/sandbox/2test".pdf
Compilation exited abnormally with code 1 at Tue Dec 20 09:16:35
在消息缓冲区中找到
Compilation exited abnormally with code 1
Error during redisplay: (invalid-regexp "Unmatched ( or \\(")
虽然我做了M-x toggle-debug-on-error,但是这个错误并没有触发调试器。
答案 0 :(得分:2)
听起来像个臭虫,对我来说。考虑报告:M-x report-emacs-bug
。
Dunno为什么Michael H.将您发送到Sunrise Commander页面,其中提示OpenWith。也许我在你的问题中遗漏了一些你表明你使用其中一个包的东西?
我建议报告一个Emacs错误。如果您想了解有关打开与文件类型等相关的Windows应用程序的更多信息,那么我建议您咨询this page。
答案 1 :(得分:0)
这似乎是openwith.el的一个问题,所以我认为你不会得到很多关于Emacs错误报告的帮助,因为openwith.el不是Emacs的一部分。
我发现了一个类似的错误(我在Linux上),并决定使用一个不会调整find-file-noselect
的“更干净”的替代方案会更好(请参阅emacs.sxe上的那个页面)为什么)。 OpenWith wiki page向我指出了一个不那么流行的胶水代码,
默认情况下,此程序包的run-associated-program
与常用的Emacs工作流程没有很好地集成,但以下是如何将其与helm-find-files
集成(也在上面的链接中记录)。
(require 'run-assoc)
(setq associated-program-alist
'(("evince" "\\.pdf$")
("play" "\\.mp3$")))
(defun helm-find-files-maybe-run-assoc (orig-fun &rest args)
(let ((sel (helm-get-selection)))
(if (string-match (mapconcat
(lambda (x) (second x))
associated-program-alist "\\|")
(helm-get-selection))
(run-associated-program sel)
(apply orig-fun args))))
(advice-add 'helm-execute-selection-action
:around #'helm-find-files-maybe-run-assoc)