Comment puis-je enregistrer un protocole personnalisé avec xdg?


22

J'ai eu du mal ce matin à essayer d'associer une application à un protocole personnalisé, à savoir emacsclient et org-protocol .

J'appelle ce protocole à partir d'un bookmarklet webbrowser et j'obtiens le comportement suivant:

Dans le chrome,
la boîte de dialogue "Lancer l'application" s'affiche et appelle xdg-open org-protocol: // ... qui finit par déclencher une nouvelle trame en chrome.

Dans Firefox,
j'ai essayé de définir le protocole network.protocol-handler.app.org sur une chaîne vide ou mon chemin emacsclient, de toute façon j'obtiens le message d'erreur suivant:
"Firefox ne sait pas comment ouvrir cette adresse, car le protocol (org-protocol) n'est associé à aucun programme "sans même afficher de boîte de dialogue de sélection d'application externe.

Je n'utilise aucun environnement de bureau, donc je dois faire fonctionner cela strictement avec xdg, cependant, malgré la lecture des spécifications d'informations sur le mime partagé, etc., je ne peux toujours pas imaginer une configuration de travail.


Réponses:


18

La méthode XDG: créez un emacsclient.desktopfichier qui gère le x-scheme-handler/org-protocoltype MIME:

[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;

(Notez la MimeType=ligne ci-dessus, qui concerne les org-protocol:URI.)

Mettez le fichier dans ~/.local/share/applicationsou /usr/local/share/applications.

Vous devrez peut-être ouvrir le fichier ~/.local/share/applications/mimeapps.listet ajouter une ligne comme celle-ci:

x-scheme-handler/org-protocol=emacsclient.desktop

Ajoutez cela sous la [Default Applications]section.


il ouvre toujours une fenêtre chromée pour moi; rien d'autre? (Il se trouve que j'utilise Fluxbox sans environnement de bureau similaire à l'auteur d'origine)
Assem

8
Vous pouvez également réaliser la dernière étape via xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, ce qui est probablement la manière la plus officielle de le faire.
Adam Spires

Y a-t-il d'autres variables utiles en plus %u? Par exemple, une variable qui exprime uniquement la partie domaine ou chemin de l'URI?
Jonathan Neufeld

11

@grawity est presque correct, mais il a négligé deux détails:

  1. Après avoir installé le .desktopfichier, vous devrez peut-être exécuter manuellement sudo update-desktop-database. (Cela peut être fait pour vous si vous avez installé le .desktopfichier en utilisant xdg-desktop-menu install emacsclient.desktop)

    C'est ce qui était nécessaire pour que mon Firefox affiche le message "Que doit gérer ce protocole?" plutôt que de simplement afficher une page d'erreur.

  2. Au moment où cette question a été posée, il y avait un bogue xdg-openqui provoquait la transmission aveugle des URL à des $BROWSERbureaux "génériques" (non-KDE, non-GNOME, non-Xfce, etc.) et qui produisait exactement le comportement @ julien connaissait.

    Il devrait être corrigé dans les versions modernes de xdg-open mais, si votre bureau n'utilise pas de version moderne pour une raison quelconque, voici la version de xdg-open dans laquelle je tombe /usr/local/binpour résoudre le problème.


1
la mise à jour de xdg-open a fonctionné pour moi, merci!
George Marques

0

Au moins dans Fedora 13 et diverses distributions basées sur Debian, xdg-open ouvre toutes les URL qui n'ont pas de schéma file: // dans un navigateur s'il ne fonctionne pas dans un environnement de bureau pris en charge. La façon dont il essaie de détecter le navigateur à utiliser dépend de la distribution.

Comme xdg-open n'est qu'un script shell, vous pouvez facilement l'adapter à vos besoins.


En effet, mais c'est la configuration qui est nécessaire entre xdg-open et xdg-mime qui est très opaque pour moi, malgré la lecture de la documentation ...
julien

Si vous ouvrez un fichier: // URI Ubuntu n'appelle pas du tout xdg-mime mais utilise run-mailcap s'il ne fonctionne pas sous un DE pris en charge, Fedora 13 essaie d'abord de trouver l'application par défaut en utilisant xdg-mime et si cela ne fonctionne pas le travail revient à mimeopen. xdg-mime utilise la base de données Shared MIME Info freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.