Como posso registrar um protocolo personalizado no xdg?


22

Estou lutando esta manhã tentando associar um aplicativo a um protocolo personalizado, a saber, emacsclient e org-protocol .

Estou chamando esse protocolo de um bookmarklet de navegador da web e recebo o seguinte comportamento:

No chromium,
a caixa de diálogo "Launch Application" é exibida e chama o xdg-open org-protocol: // ... que acaba disparando um novo quadro de cromo.

No firefox,
tentei configurar o protocolo network.protocol-handler.app.org-protocol como uma string vazia ou no meu caminho emacsclient, de qualquer forma, recebo a seguinte mensagem de erro:
"O Firefox não sabe como abrir esse endereço, porque o protocol (org-protocol) não está associado a nenhum programa "sem exibir nenhuma caixa de diálogo de seleção de aplicativo externa.

Não estou usando nenhum ambiente de área de trabalho, portanto, preciso fazer isso funcionar estritamente com o xdg; no entanto, apesar de ler as especificações de informações de mime compartilhadas etc., ainda não consigo entender uma configuração de trabalho.


Respostas:


18

O método XDG: Crie um emacsclient.desktoparquivo que lida com o x-scheme-handler/org-protocoltipo MIME:

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

(Observe a MimeType=linha acima, que é para org-protocol:URIs.)

Coloque o arquivo em ~/.local/share/applicationsou /usr/local/share/applications.

Pode ser necessário abrir o arquivo ~/.local/share/applications/mimeapps.liste adicionar uma linha como esta:

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

Adicione isso na [Default Applications]seção.


ainda abre uma janela cromada para mim; algo mais? (por acaso estou usando o fluxbox sem ambiente de desktop semelhante ao autor original) #
10117

8
Você também pode obter o último passo via xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, que provavelmente é a maneira mais oficial de fazê-lo.
Adam Spiers

Existem outras variáveis ​​úteis além disso %u? Por exemplo, uma variável que expressa apenas a parte do domínio ou caminho do URI?
Jonathan Neufeld

11

O @grawity está quase correto, mas ele ignorou dois detalhes:

  1. Depois de instalar o .desktoparquivo, você pode precisar executar manualmente sudo update-desktop-database. (Isso pode ser feito se você instalou o .desktoparquivo usando xdg-desktop-menu install emacsclient.desktop)

    Era isso que era necessário para que meu Firefox exibisse o "O que deve lidar com este protocolo?" caixa de diálogo em vez de apenas exibir uma página de erro.

  2. No momento em que essa pergunta foi feita, havia um bug no xdg-openqual fazia com que ela entregasse cegamente os URLs para as áreas $BROWSERde trabalho "genéricas" (não-KDE, não-GNOME, não-Xfce etc.) e que produz exatamente o comportamento @ julien estava experimentando.

    Ele deve ser corrigido nas versões modernas do xdg-open, mas, se sua área de trabalho não estiver usando uma versão moderna por algum motivo, aqui está a versão do xdg-open em que eu solto /usr/local/binpara resolver o problema.


1
atualizar o xdg-open funcionou para mim, obrigado!
George Marques

0

Pelo menos no Fedora 13 e em várias distros baseadas no Debian, o xdg-open abre todas as URLs que não possuem um arquivo: // em um navegador se ele não for executado em um ambiente de desktop suportado. A maneira como ele tenta detectar qual navegador usar depende da distribuição.

Como o xdg-open é apenas um script de shell, você pode adaptá-lo facilmente às suas necessidades.


De fato, mas é a configuração necessária entre o xdg-open e o xdg-mime que é muito opaca para mim, apesar de ler os documentos ...
Julien

Se abrir um arquivo: // URI, o Ubuntu não chama xdg-mime, mas usa run-mailcap se não estiver executando sob um DE suportado, o Fedora 13 primeiro tenta encontrar o aplicativo padrão usando xdg-mime e, se isso não acontecer o trabalho volta ao mimeopen. xdg-mime usa o MIME Shared Informações do banco de dados freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.