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.

julien
fonte
askubuntu.com/questions/62585/…
Ciro Santilli escreveu

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.

gravidade
fonte
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.

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

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