Emacs lisp - win7上的filename-string问题

时间:2011-12-19 18:57:53

标签: file pdf windows-7 emacs elisp

在带有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,但是这个错误并没有触发调试器。

2 个答案:

答案 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)