Bagaimana saya bisa mendaftarkan protokol khusus dengan xdg?


22

Saya telah berjuang keras pagi ini untuk mengaitkan aplikasi dengan protokol khusus, yaitu emacsclient dan org-protokol .

Saya memanggil protokol ini dari bookmarklet webbrowser, dan saya mendapatkan perilaku berikut:

Dalam chromium,
dialog "Launch Application" muncul, dan memanggil xdg-open org-protocol: // ... yang berakhir dengan menembakkan frame chromium baru.

Di firefox,
saya telah mencoba mengatur protokol network.protocol-handler.app.org ke string kosong atau jalur emacsclient saya, bagaimanapun saya mendapatkan pesan kesalahan berikut:
"Firefox tidak tahu cara membuka alamat ini, karena protokol (org-protokol) tidak terkait dengan program apa pun "tanpa menunjukkan dialog pemilihan aplikasi eksternal.

Saya tidak menggunakan lingkungan desktop apa pun, jadi saya harus membuat pekerjaan ini ketat dengan xdg, namun, meskipun membaca spec info mime bersama dll, saya masih tidak dapat memahami konfigurasi yang berfungsi.


Jawaban:


18

Metode XDG: Buat emacsclient.desktopfile yang menangani x-scheme-handler/org-protocoltipe MIME:

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

(Perhatikan MimeType=baris di atas, yang untuk org-protocol:URI.)

Masukkan file ke dalam ~/.local/share/applicationsatau /usr/local/share/applications.

Anda mungkin harus membuka file ~/.local/share/applications/mimeapps.listdan menambahkan baris seperti ini:

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

Tambahkan itu di bawah [Default Applications]bagian.


itu masih membuka jendela chrome untuk saya; ada yang lain? (Saya kebetulan menggunakan fluxbox tanpa desktop yang mirip dengan penulis asli)
assem

8
Anda juga dapat mencapai langkah terakhir melalui xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, yang mungkin merupakan cara yang lebih resmi untuk melakukannya.
Adam Spires

Apakah ada variabel lain yang berguna selain %u? Misalnya variabel yang hanya mengekspresikan domain atau jalur bagian dari URI?
Jonathan Neufeld

11

@grawity hampir benar, tetapi ia mengabaikan dua detail:

  1. Setelah menginstal .desktopfile, Anda mungkin perlu menjalankannya secara manual sudo update-desktop-database. (Ini dapat dilakukan untuk Anda jika Anda menginstal .desktopfile menggunakan xdg-desktop-menu install emacsclient.desktop)

    Itulah yang diperlukan agar Firefox saya menampilkan "Apa yang harus menangani protokol ini?" dialog daripada hanya menampilkan halaman kesalahan.

  2. Pada saat pertanyaan ini ditanyakan, ada bug xdg-openyang menyebabkannya menyerahkan secara membuta URL ke $BROWSERdesktop "generik" (non-KDE, non-GNOME, non-Xfce, dll.) Dan yang menghasilkan perilaku persis @ julien mengalami.

    Itu harus diperbaiki dalam versi modern dari xdg-open tetapi, jika desktop Anda tidak menggunakan versi modern untuk beberapa alasan, inilah versi xdg-open yang saya masukkan /usr/local/binuntuk menyelesaikan masalah.


1
memperbarui xdg-open bekerja untuk saya, terima kasih!
George Marques

0

Paling tidak di Fedora 13 dan berbagai distro berbasis Debian xdg-open membuka semua URL yang tidak memiliki file: // skema di browser jika tidak berjalan di lingkungan desktop yang didukung. Cara mencoba mendeteksi browser mana yang akan digunakan tergantung pada distribusinya.

Karena xdg-open hanyalah skrip shell, Anda dapat dengan mudah menyesuaikannya dengan kebutuhan Anda.


Memang, tetapi konfigurasi yang diperlukan antara xdg-open dan xdg-mime yang sangat buram bagi saya, meskipun membaca dokumen ...
julien

Jika membuka file: // URI Ubuntu sama sekali tidak memanggil xdg-mime tetapi menggunakan run-mailcap jika tidak berjalan di bawah DE yang didukung, Fedora 13 pertama-tama mencoba menemukan aplikasi default menggunakan xdg-mime dan jika itu tidak pekerjaan jatuh kembali ke mimeopen. xdg-mime menggunakan database Info MIME yang Dibagikan freedesktop.org/wiki/Software/share-mime-info
Florian Diesch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.