如何在xdg中注册自定义协议?


22

今天早晨,我一直在努力尝试将应用程序与自定义协议(即emacsclient和org-protocol)相关联

我从网络浏览器小书签调用此协议,并且得到以下行为:

在铬中,
出现“启动应用程序”对话框,并调用xdg-open org-protocol:// ...,最终触发新的铬框架。

在firefox中,
我尝试将network.protocol-handler.app.org-protocol设置为空字符串或emacsclient路径,无论如何,我都会收到以下错误消息:
“ Firefox不知道如何打开此地址,因为协议(组织协议)与任何程序都没有关联”,甚至没有显示任何外部应用程序选择对话框。

我没有使用任何桌面环境,因此我需要严格使用xdg进行此工作,但是,尽管阅读了共享的mime信息规范等,但我仍然无法理解工作的配置。


Answers:


18

XDG方法:创建一个emacsclient.desktop处理x-scheme-handler/org-protocol MIME类型:

[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]部分下添加。


它仍然为我打开了一个镀铬的窗口。还要别的吗?(我碰巧正在使用与原始作者类似的带有桌面环境的fluxbox)
组装

8
您也可以通过完成最后一步xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol,这可能是更正式的方法。
亚当·斯皮尔斯

除此以外,还有其他有用的变量%u吗?例如,仅表示URI的域或路径部分的变量?
乔纳森·诺伊费尔德'18

11

@grawity几乎是正确的,但他忽略了两个细节:

  1. 安装.desktop文件后,您可能需要手动运行sudo update-desktop-database。(如果您.desktop使用xdg-desktop-menu install emacsclient.desktop

    那就是使我的Firefox显示“该协议应如何处理?”的要求。对话框而不仅仅是显示错误页面。

  2. 在问这个问题时,存在一个错误xdg-open,导致该错误将URL盲目地移交给$BROWSER了“通用”(非KDE,非GNOME,非Xfce等)台式机,并产生了@朱莉安正在经历。

    它应该在xdg-open的现代版本中得到修复,但是,如果您的桌面由于某种原因未使用现代版本,这是我用来解决该问题的xdg-open版本/usr/local/bin


1
更新xdg-open对我有用,谢谢!
乔治·马克斯

0

至少在Fedora 13和各种基于Debian的发行版中xdg-open会打开所有没有file://的 URL 如果未在受支持的桌面环境中运行,则在浏览器中方案的。它尝试检测要使用的浏览器的方式取决于发行版。

由于xdg-open只是一个shell脚本,您可以轻松地使其适应您的需求。


的确,尽管阅读了文档,但xdg-open和xdg-mime之间所需的配置对我来说却非常不透明……
julien 2010年

如果打开file:// URI,Ubuntu根本不调用xdg-mime,但如果不在受支持的DE上运行,则使用run-mailcap,Fedora 13首先尝试使用xdg-mime查找默认应用程序,如果没有工作回到了mimeopen。xdg-mime使用“共享的MIME信息”数据库freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.