0

任何人都可以帮我打开一个 *.pdf 使用 Skim 以便它有焦点。Skim 可以正确打开文件,但仍保留在后台。我在 OSX 机器上使用最新版本的 Emacs Trunk。

如果我在 Skim 的绝对路径之前插入“open -a”或“open -o”之类的内容,那么 Emacs 会抱怨没有该名称的应用程序。我尝试在文件名后放置“-o”,但这没有任何影响。

以下代码适用于 Wanderlust,但我认为这start-process是通用的。

(eval-after-load "mime-view"
  '(progn
     (ctree-set-calist-strictly
      'mime-acting-condition
      '((mode . "play")
        (type . application)(subtype . pdf)
        (method . lawlist-mime-view)))))

(defun lawlist-mime-view (&optional a b)
  (let* ((entity (get-text-property (point) 'mime-view-entity))
           (filename (mime-entity-safe-filename entity)))
  (mime-write-entity-content entity (concat "/tmp/" filename))
  (process-kill-without-query
    (start-process "hello-world" nil "/Applications/Skim.app/Contents/MacOS/Skim" filename))))

编辑——1:这是一个帮助诊断问题的简单函数。我创建了一个 *.pdf 文件并将其保存为"/tmp/test.pdf".

(defun test-start-process ()
  (interactive)
    (start-process "hello-world" nil "open" "-a Skim" "/tmp/test.pdf"))

编辑——2:感谢来自——非常感谢的帮助,这是修改后的工作代码tungd

(eval-after-load "mime-view"
  '(progn
     (ctree-set-calist-strictly
      'mime-acting-condition
      '((mode . "play")
        (type . application)(subtype . pdf)
        (method . lawlist-mime-view)))))

(defun lawlist-mime-view (&optional a b)
  (let* (
    (entity (get-text-property (point) 'mime-view-entity))
    (name (mime-entity-safe-filename entity))
    (filename (concat "/tmp/" name)) )
  (mime-write-entity-content entity filename)
  (start-process "hello-world" nil "open" "-a" "Skim" filename)))
4

1 回答 1

2

我认为open是最简单的方法。但是 的定义start-process是:

(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)

所以你必须像这样使用它:

(start-process "hello-world" nil "open" "-a" "Skim" filename)
于 2013-09-04T02:30:18.867 回答