emacs 无法与 xdg-open 配合使用

emacs 无法与 xdg-open 配合使用

我在 ubuntu 15.04 上使用 emacs 24.4.1。不知何故,如果我从 emacs 运行 xdg-open,它不起作用。例如,如果我在 eshell 中运行“xdg-open 1.pdf”或“gvfs-open 1.pdf”,它们就不起作用。同时,“evince 1.pdf”可以完美运行。

答案1

前两个答案对我来说不起作用:

  • (setq process-connection-type nil)打破了org-plot/gnuplot
  • setsid xdg-open ...工作了一段时间,但后来由于某种原因停止了。

现在我使用setsid -w,它应该setsid等到被调用的程序完成。

如果有人需要它,我会将它与 AUCTeX 一起使用(我在尝试修复 Arch Linux 上的 AUCTeX 行为时发现了这个问题),并且我的TeX-command-list设置为

(quote
 ( 
  ;; ...
  ("View" "setsid -w xdg-open %s.pdf" TeX-run-command t t :help "Run Text viewer")
  ;; ...
  )

目前看来运行良好...

答案2

对我来说使用setsid xdg-open 1.pdf有效。问题似乎是在它们的子进程完成工作之前gvfs-open和返回。当发生这种情况时,Emacs 可能会杀死它们的控制终端,杀死子进程,并阻止其正常打开。设置一个 emacs 不会关闭的新控制终端。xdg-openevincesetsid

答案3

这可能是使用 ptys 进行子进程通信时出现的问题。请尝试将 process-connection-type 设置为 nil 以改用管道。

在你的 .emacs 中

;; Use pipes for subprocess communication
(setq process-connection-type nil)

我使用 org 模式中的发布功能,如果没有这个更改,尽管没有错误消息,但生成的文件都不会通过 xdg-open 打开。

答案4

灵感来自https://depp.brause.cc/dotemacs/#orgd97f08c这是一个解决方案org-mode

(setq org-file-apps '((remote . emacs)
                      (auto-mode . emacs)
                      (directory . emacs)
                      (system . "setsid -w xdg-open %s")
                      (t . system)))

这将覆盖默认关联,因此如果可能的话,还会优先在 Emacs 中打开 PDF 等文件格式。或者,你可以将其附加到现有列表中,如下所示在 SO 上提到

(setq org-file-apps-gnu
      (append '((t . "setsid -w xdg-open %s")) org-file-apps-gnu))

意味着t它将处理其他程序未明确处理的所有事情。您可以附加到org-file-apps而不是org-file-apps-gnu,但由于xdg-open仅在 GNU 系统上常用,因此这应该是理想的。

(setq process-connection-type nil)愉快地使用了很长时间,但最近几天我发现ripgrep经过几个小时的调试后,它破坏了集成。所以我强烈反对这样做。

相关内容