我在 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-open
evince
setsid
答案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
经过几个小时的调试后,它破坏了集成。所以我强烈反对这样做。