How can I register a custom protocol with xdg?
I've been struggling this morning trying to associate an application with a custom protocol, namely emacsclient and org-protocol.
I'm calling this protocol from a webbrowser bookmarklet, and I get the following behaviour :
In chromium,
the "Launch Application" dialog comes up, and calls xdg-open org-protocol://... which ends up firing a new chromium frame.
In firefox,
I've tried setting network.protocol-handler.app.org-protocol to an empty string or my emacsclient path, anyhow I get the following error message :
"Firefox doesn't know how to open this address, because the protocol (org-protocol) isn't associated with any program" without even showing any external application selection dialog.
I'm not using any desktop environment, so I need to make this work strictly with xdg, however, despite reading the shared mime info spec etc, I still can't fathom a working configuration.
The XDG method: Create an emacsclient.desktop
file that handles the x-scheme-handler/org-protocol
MIME type:
[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;
(Note the MimeType=
line above, which is for org-protocol:
URIs.)
Put the file in ~/.local/share/applications
or /usr/local/share/applications
.
You might have to open the file ~/.local/share/applications/mimeapps.list
and add a line like this:
x-scheme-handler/org-protocol=emacsclient.desktop
Add that under the [Default Applications]
section.
@grawity is almost correct, but he overlooked two details:
-
After installing the
.desktop
file, you may need to manually runsudo update-desktop-database
. (This may be done for you if you installed the.desktop
file usingxdg-desktop-menu install emacsclient.desktop
)That was what was required to get my Firefox to display the "What should handle this protocol?" dialog rather than just displaying an error page.
-
At the time this question was asked, there was a bug in
xdg-open
which caused it to blindly hand URLs over to$BROWSER
on "generic" (non-KDE, non-GNOME, non-Xfce, etc.) desktops and that produces exactly the behaviour @julien was experiencing.It should be fixed in modern versions of xdg-open but, if your desktop isn't using a modern version for some reason, here's the version of xdg-open I drop into
/usr/local/bin
to solve the problem.