Làm cách nào tôi có thể đăng ký giao thức tùy chỉnh với xdg?


22

Tôi đã vật lộn sáng nay khi cố gắng liên kết một ứng dụng với một giao thức tùy chỉnh, cụ thể là giao thức emacsclient và org-giao thức .

Tôi đang gọi giao thức này từ bookmarklet webbrowser và tôi nhận được hành vi sau:

Trong crom,
hộp thoại "Khởi chạy ứng dụng" xuất hiện và gọi giao thức org mở xdg: // ... kết thúc bằng cách bắn khung crom mới.

Trong firefox,
tôi đã thử đặt giao thức network.protatio-handler.app.org-thành một chuỗi trống hoặc đường dẫn emacsclient của tôi, dù sao tôi cũng nhận được thông báo lỗi sau:
"Firefox không biết cách mở địa chỉ này, bởi vì giao thức (giao thức org) không được liên kết với bất kỳ chương trình nào "mà không hiển thị bất kỳ hộp thoại lựa chọn ứng dụng bên ngoài nào.

Tôi không sử dụng bất kỳ môi trường máy tính để bàn nào, vì vậy tôi cần phải thực hiện công việc này một cách nghiêm ngặt với xdg, tuy nhiên, mặc dù đã đọc thông số thông tin mime được chia sẻ, v.v., tôi vẫn không thể hiểu được cấu hình hoạt động.


Câu trả lời:


18

Phương thức XDG: Tạo một emacsclient.desktoptệp xử lý x-scheme-handler/org-protocolloại MIME:

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

(Lưu ý MimeType=dòng trên, dành cho org-protocol:URI.)

Đặt tệp vào ~/.local/share/applicationshoặc /usr/local/share/applications.

Bạn có thể phải mở tệp ~/.local/share/applications/mimeapps.listvà thêm một dòng như thế này:

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

Thêm vào đó dưới [Default Applications]phần.


nó vẫn mở một cửa sổ chrome cho tôi; còn gì nữa không? (tôi tình cờ sử dụng fluxbox w / out desktop env tương tự như tác giả gốc)
ráp

8
Bạn cũng có thể đạt được bước cuối cùng thông qua xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, đây có lẽ là cách chính thức hơn để làm điều đó.
Adam Spiers

Có bất kỳ biến hữu ích khác bên cạnh %u? Ví dụ: một biến chỉ thể hiện tên miền hoặc phần đường dẫn của URI?
Jonathan Neufeld

11

@grawity gần như đúng, nhưng anh bỏ qua hai chi tiết:

  1. Sau khi cài đặt .desktoptệp, bạn có thể cần phải chạy thủ công sudo update-desktop-database. (Điều này có thể được thực hiện cho bạn nếu bạn đã cài đặt .desktoptệp bằng cách sử dụng xdg-desktop-menu install emacsclient.desktop)

    Đó là những gì được yêu cầu để Firefox của tôi hiển thị "Cái gì nên xử lý giao thức này?" hộp thoại thay vì chỉ hiển thị một trang lỗi.

  2. Tại thời điểm câu hỏi này được hỏi, có một lỗi xdg-openkhiến nó bị mù một cách mù quáng với các máy tính để bàn $BROWSER"chung chung" (không phải KDE, không phải Gnome, không phải Xfce, v.v.) và điều đó tạo ra chính xác hành vi @ julien đã trải qua.

    Nó nên được sửa trong các phiên bản hiện đại của xdg-open nhưng, nếu vì lý do nào đó, máy tính để bàn của bạn không sử dụng phiên bản hiện đại, thì đây là phiên bản của xdg-open tôi thả vào /usr/local/binđể giải quyết vấn đề.


1
cập nhật xdg-open đã làm việc cho tôi, cảm ơn!
George Marques

0

Ít nhất trong Fedora 13 và các bản phân phối xdg-open dựa trên Debian khác nhau sẽ mở tất cả các URL không có tệp: // lược đồ trong trình duyệt nếu nó không chạy trong môi trường máy tính để bàn được hỗ trợ. Cách nó cố gắng phát hiện trình duyệt nào sẽ sử dụng tùy thuộc vào bản phân phối.

xdg-open chỉ là một tập lệnh shell, bạn có thể dễ dàng điều chỉnh nó theo nhu cầu của mình.


Thật vậy, nhưng đó là cấu hình cần thiết giữa xdg-open và xdg-mime rất mờ đối với tôi, mặc dù đã đọc các tài liệu ...
julien

Nếu mở tệp: // URI Ubuntu hoàn toàn không gọi xdg-mime nhưng sử dụng run-mailcap nếu không chạy dưới DE được hỗ trợ, trước tiên Fedora 13 sẽ cố gắng tìm ứng dụng mặc định bằng xdg-mime và nếu điều đó không công việc rơi trở lại mimeopen. xdg-mime sử dụng cơ sở dữ liệu Thông tin MIME được chia sẻ freedesktop.org/wiki/Software/spl-mime-info
Florian Diesch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.