Jak mogę zarejestrować niestandardowy protokół w xdg?

22

Dziś rano walczę o powiązanie aplikacji z niestandardowym protokołem, a mianowicie emacsclient i protokołem org .

Dzwonię do tego protokołu z bookmarkletu przeglądarki internetowej i otrzymuję następujące zachowanie:

W chromie
pojawia się okno dialogowe „Uruchom aplikację” i wywołuje xdg-open org-protocol: // ... co kończy się odpaleniem nowej ramki chromu.

W
Firefoksie próbowałem ustawić protokół network.protocol-handler.app.org na pusty ciąg lub ścieżkę emacsclient, w każdym razie pojawia się następujący komunikat o błędzie:
„Firefox nie wie, jak otworzyć ten adres, ponieważ protokół (org-protokół) nie jest powiązany z żadnym programem ”, nawet bez pokazywania okna dialogowego wyboru aplikacji zewnętrznej.

Nie używam żadnego środowiska graficznego, więc muszę sprawić, by działało to ściśle z xdg, jednak pomimo przeczytania specyfikacji wspólnych informacji o mime itp. Nadal nie mogę pojąć działającej konfiguracji.

Julien
źródło
askubuntu.com/questions/62585/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

18

Metoda XDG: Utwórz emacsclient.desktopplik, który obsługuje x-scheme-handler/org-protocoltyp MIME:

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

(Zwróć uwagę na MimeType=powyższą linię, która dotyczy org-protocol:URI).

Umieść plik w ~/.local/share/applicationslub /usr/local/share/applications.

Być może będziesz musiał otworzyć plik ~/.local/share/applications/mimeapps.listi dodać taki wiersz:

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

Dodaj to w [Default Applications]sekcji.

grawitacja
źródło
nadal otwiera dla mnie chromowane okno; coś jeszcze? (akurat korzystam z fluxboksa bez env na pulpicie podobny do autora.)
assem
8
Ostatni krok możesz także osiągnąć xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, co jest prawdopodobnie bardziej oficjalnym sposobem na zrobienie tego.
Adam Spiers,
Czy są jeszcze jakieś inne przydatne zmienne %u? Na przykład zmienna, która wyraża tylko domenę lub część ścieżki identyfikatora URI?
Jonathan Neufeld
11

@grawity jest prawie poprawny, ale przeoczył dwa szczegóły:

  1. Po zainstalowaniu .desktoppliku może być konieczne ręczne uruchomienie sudo update-desktop-database. (Można to zrobić, jeśli .desktopplik został zainstalowany za pomocą xdg-desktop-menu install emacsclient.desktop)

    To było wymagane, aby mój Firefox wyświetlał „Co powinien obsługiwać ten protokół?” dialog zamiast wyświetlać stronę błędu.

  2. W chwili, gdy pytanie zostało zadane, wystąpił błąd, xdg-openktóry powodował, że ślepo przekazywał adresy URL na $BROWSERpulpitach „ogólnych” (nie KDE, non-GNOME, nie Xfce itp.), Co powoduje dokładnie zachowanie @ Julien przeżywał.

    Powinien on być ustalony w nowoczesnych wersjach xdg otwarte, ale jeśli na pulpicie nie jest za pomocą nowoczesnej wersji z jakiegoś powodu, oto wersja xdg otwarte wpadnę w /usr/local/bincelu rozwiązania problemu.

ssokolow
źródło
1
aktualizacja xdg-open działała dla mnie, dzięki!
George Marques,
0

Przynajmniej w Fedorze 13 i różnych dystrybucjach opartych na Debianie xdg-open otwiera wszystkie adresy URL, które nie mają schematu file: // w przeglądarce, jeśli nie działa w obsługiwanym środowisku pulpitu. Sposób, w jaki próbuje wykryć używaną przeglądarkę, zależy od dystrybucji.

Ponieważ xdg-open jest tylko skryptem powłoki, możesz go łatwo dostosować do swoich potrzeb.

Florian Diesch
źródło
Rzeczywiście, ale jest to konfiguracja, która jest potrzebna między xdg-open i xdg-mime, która jest dla mnie bardzo nieprzejrzysta, pomimo przeczytania dokumentacji ...
Julien
Jeśli otwarcie pliku: // URI Ubuntu w ogóle nie wywołuje xdg-mime, ale używa run-mailcap, jeśli nie działa pod obsługiwanym DE, Fedora 13 najpierw próbuje znaleźć domyślną aplikację przy użyciu xdg-mime, a jeśli to nie działa praca wraca do mimeopen. xdg-mime używa bazy danych Shared MIME Info freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch