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.

Julien
sumber
askubuntu.com/questions/62585/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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.

grawity
sumber
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.

ssokolow
sumber
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.

Florian Diesch
sumber
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