今天早上我一直在努力尝试将应用程序与自定义协议关联起来,即emacsclient 和 org-protocol。
我从网络浏览器书签小程序调用此协议,并得到以下行为:
在 Chromium 中,
会出现“启动应用程序”对话框,并调用 xdg-open org-protocol://... 最终启动一个新的 Chromium 框架。
在 Firefox 中,
我尝试将 network.protocol-handler.app.org-protocol 设置为空字符串或我的 emacsclient 路径,但我仍然收到以下错误消息:
“Firefox 不知道如何打开此地址,因为该协议(org-protocol)未与任何程序关联”,甚至没有显示任何外部应用程序选择对话框。
我没有使用任何桌面环境,所以我需要严格使用 xdg 来完成这项工作,但是,尽管阅读了共享的 mime 信息规范等,我仍然无法理解有效的配置。
答案1
XDG 方法:创建一个emacsclient.desktop
处理 MIME 类型的文件x-scheme-handler/org-protocol
:
[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;
(注意MimeType=
上面的行用于org-protocol:
URI。)
将文件放入~/.local/share/applications
或者/usr/local/share/applications
。
您可能需要打开该文件~/.local/share/applications/mimeapps.list
并添加如下行:
x-scheme-handler/org-protocol=emacsclient.desktop
将其添加到该[Default Applications]
部分下。
答案2
@grawity几乎是正确的,但他忽略了两个细节:
安装文件后
.desktop
,您可能需要手动运行。(如果您使用sudo update-desktop-database
安装文件,则可能会为您完成此操作).desktop
xdg-desktop-menu install emacsclient.desktop
这就是让我的 Firefox 显示“应该由谁来处理这个协议?”对话框而不是仅仅显示错误页面所需要的。
在提出这个问题的时候,有一个错误导致
xdg-open
它盲目地将 URL 移交给$BROWSER
“通用”(非 KDE、非 GNOME、非 Xfce 等)桌面,从而产生以下行为@朱利安正在经历。它应该在 xdg-open 的现代版本中得到修复,但如果您的桌面由于某种原因没有使用现代版本,那么这里是xdg-open 版本我深入研究
/usr/local/bin
以解决该问题。
答案3
至少在 Fedora 13 和各种基于 Debian 的发行版中xdg-开放打开所有没有文件://如果浏览器无法在受支持的桌面环境中运行,则该浏览器会尝试检测要使用的浏览器,具体方式取决于发行版。
作为xdg-开放只是一个 shell 脚本,您可以轻松地根据自己的需要进行调整。