ฉันจะลงทะเบียนโปรโตคอลที่กำหนดเองด้วย xdg ได้อย่างไร


22

ฉันได้รับการดิ้นรนในเช้าวันนี้พยายามที่จะเชื่อมโยงการประยุกต์ใช้กับโปรโตคอลที่กำหนดเองคือemacsclient และองค์กรโปรโตคอล

ฉันกำลังเรียกโปรโตคอลนี้จากเว็บเบราว์เซอร์ bookmarklet และฉันได้รับพฤติกรรมดังต่อไปนี้:

ในโครเมียม
กล่องโต้ตอบ "เรียกใช้แอปพลิเคชัน" จะปรากฏขึ้นและเรียก xdg-open org-protocol: // ... ซึ่งจบลงด้วยการยิงเฟรมโครเมียมใหม่

ใน firefox
ฉันได้ลองตั้งค่า network.protocol-handler.app.org-protocol เป็นสตริงว่างหรือเส้นทาง emacsclient ของฉัน แต่ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
"Firefox ไม่ทราบวิธีเปิดที่อยู่นี้เนื่องจาก โปรโตคอล (org-protocol) ไม่ได้เชื่อมโยงกับโปรแกรมใด ๆ "โดยไม่ต้องแสดงกล่องโต้ตอบการเลือกแอปพลิเคชันภายนอก

ฉันไม่ได้ใช้สภาพแวดล้อมบนเดสก์ท็อปใด ๆ ดังนั้นฉันจึงจำเป็นต้องใช้งานกับ xdg อย่างเคร่งครัดอย่างไรก็ตามแม้จะอ่านข้อกำหนดข้อมูล mime ที่ใช้ร่วมกัน ฯลฯ ฉันก็ยังไม่สามารถเข้าใจการกำหนดค่าการทำงานได้


คำตอบ:


18

วิธี XDG:สร้างemacsclient.desktopไฟล์ที่จัดการx-scheme-handler/org-protocolประเภท MIME:

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

(โปรดสังเกตMimeType=บรรทัดด้านบนซึ่งใช้สำหรับorg-protocol:URIs)

ใส่แฟ้มในหรือ~/.local/share/applications/usr/local/share/applications

คุณอาจต้องเปิดไฟล์~/.local/share/applications/mimeapps.listและเพิ่มบรรทัดดังนี้:

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

เพิ่มที่อยู่ภายใต้[Default Applications]ส่วน


มันยังเปิดหน้าต่างโครเมี่ยมสำหรับฉัน มีอะไรอีกไหม (ฉันเกิดขึ้นที่จะใช้ Fluxbox w / out เดสก์ทอป env คล้ายกับ orig ผู้เขียน.)
assem

8
คุณสามารถบรรลุขั้นตอนสุดท้ายผ่านทางxdg-mime default emacsclient.desktop x-scheme-handler/org-protocolซึ่งอาจเป็นวิธีที่เป็นทางการมากกว่าที่จะทำ
Adam Spires

มีตัวแปรอื่น ๆ ที่มีประโยชน์นอกเหนือจากนี้%uหรือไม่ ตัวอย่างเช่นตัวแปรที่แสดงเฉพาะโดเมนหรือส่วนเส้นทางของ URI หรือไม่
Jonathan Neufeld

11

@ grawityเกือบจะถูกต้อง แต่เขามองข้ามสองรายละเอียด:

  1. หลังจากติดตั้ง.desktopไฟล์, sudo update-desktop-databaseคุณอาจจะต้องทำงานด้วยตนเอง (สิ่งนี้อาจทำได้หากคุณติดตั้ง.desktopไฟล์โดยใช้xdg-desktop-menu install emacsclient.desktop)

    นั่นคือสิ่งที่จำเป็นในการทำให้ Firefox ของฉันแสดง "สิ่งที่ควรจัดการกับโปรโตคอลนี้" โต้ตอบแทนที่จะแสดงเพียงหน้าข้อผิดพลาด

  2. ในช่วงเวลาที่ถามคำถามนี้มีข้อผิดพลาดxdg-openที่ทำให้ URL เหล่านั้นส่งไปยัง$BROWSERเดสก์ท็อป "ทั่วไป" (ไม่ใช่ KDE, ไม่ใช่ GNOME, ไม่ใช่ Xfce และอื่น ๆ ) และทำให้เกิดพฤติกรรม@ จูเลียนกำลังประสบ

    มันควรได้รับการแก้ไขในรุ่น xdg-open ที่ทันสมัย ​​แต่ถ้าเดสก์ท็อปของคุณไม่ได้ใช้รุ่นที่ทันสมัยด้วยเหตุผลบางอย่างนี่คือรุ่นของ xdg-open ที่ฉันใช้/usr/local/binเพื่อแก้ไขปัญหา


1
อัปเดต xdg-open ใช้งานได้สำหรับฉันขอบคุณ!
George Marques

0

อย่างน้อยใน Fedora 13 และxdg-open distros แบบอิงเดเบียนต่างๆจะเปิด URL ทั้งหมดที่ไม่มีไฟล์: // scheme ในเบราว์เซอร์หากไม่ได้ทำงานในสภาพแวดล้อมเดสก์ท็อปที่รองรับ วิธีที่จะพยายามตรวจสอบว่าเบราว์เซอร์ใดที่ใช้ขึ้นอยู่กับการแจกจ่าย

เมื่อxdg-openเป็นเพียงเชลล์สคริปต์คุณสามารถปรับให้เข้ากับความต้องการของคุณได้อย่างง่ายดาย


แน่นอน แต่มันคือการกำหนดค่าที่จำเป็นระหว่าง xdg-open และ xdg-mime ซึ่งทึบมากสำหรับฉันแม้จะอ่าน docs ...
julien

หากเปิดไฟล์: // URI Ubuntu จะไม่เรียก xdg-mime เลย แต่ใช้ run-mailcap หากไม่ทำงานภายใต้ DE ที่ได้รับการสนับสนุน Fedora 13 จะพยายามค้นหาแอปเริ่มต้นโดยใช้ xdg-mime ก่อน งานกลับไปที่ mimeopen xdg-mime ใช้ฐานข้อมูล Shared MIME Info freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.