xdg-open não processa URLs "file: ///" codificados por porcentagem com o LXDE

2

Eu notei que o xdg-open não manipula os URLs por cento codificados. Por exemplo, essas linhas terão sucesso (desde que os arquivos existam):

xdg-open "/home/sashoalm/Has Spaces.txt"
xdg-open file:///home/sashoalm/NoSpaces.txt

Mas este falhará:

xdg-open file:///home/sashoalm/Has%20Spaces.txt

Edit: Esta é a minha versão do xdg-utils

 sashoalm@aspire:~$ apt-cache policy xdg-utils
xdg-utils:
  Installed: 1.1.0~rc1+git20111210-6+deb7u1
  Candidate: 1.1.0~rc1+git20111210-6+deb7u1
  Version table:
 *** 1.1.0~rc1+git20111210-6+deb7u1 0
        500 http://ftp.bg.debian.org/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status

Editar 2: este é o traço:

sashoalm@aspire:~$ bash -x xdg-open file:///home/sashoalm/Has%20Spaces.txt 
+ check_common_commands file:///home/sashoalm/Has%20Spaces.txt
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' xfile:///home/sashoalm/Has%20Spaces.txt '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=file:///home/sashoalm/Has%20Spaces.txt
+ '[' 0 -gt 0 ']'
+ '[' -z file:///home/sashoalm/Has%20Spaces.txt ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n LXDE ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ DE=lxde
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = xgnome ']'
+ '[' xlxde = x ']'
+ DEBUG 2 'Selected DE lxde'
+ '[' -z '' ']'
+ return 0
+ '[' x = x ']'
+ BROWSER=www-browser:links2:elinks:links:lynx:w3m
+ '[' -n :0 ']'
+ BROWSER=x-www-browser:firefox:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:www-browser:links2:elinks:links:lynx:w3m
+ case "$DE" in
+ open_lxde file:///home/sashoalm/Has%20Spaces.txt
+ echo file:///home/sashoalm/Has%20Spaces.txt
+ grep -q '^file://'
++ echo file:///home/sashoalm/Has%20Spaces.txt
++ sed 's%^file://%%'
+ local file=/home/sashoalm/Has%20Spaces.txt
+ echo /home/sashoalm/Has%20Spaces.txt
+ grep -q '^/'
+ pcmanfm /home/sashoalm/Has%20Spaces.txt
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0
    
por sashoalm 21.11.2014 / 15:13

1 resposta

1

Se você estiver usando um ambiente de área de trabalho LXDE, o xdg-open abrirá file:// URLS com o programa pcmanfm . Ele remove a parte file:// da URL e chama pcmanfm com a parte restante, já que o pcmanfm suporta somente caminhos normais como argumentos, não URLs.

xdg-open não faz outras substituições, portanto, %20 não está traduzido em um espaço. Este é um bug (fique à vontade para abrir um relatório de bug para isso no Debian). Uma correção é descrita abaixo.

Para outros ambientes de área de trabalho, os programas abertos suportam corretamente URLs file: //.

Solução alternativa : Desmarque algumas variáveis de ambiente, para que o xdg-open use o manipulador aberto genérico que suporta todas as substituições necessárias:

XDG_CURRENT_DESKTOP= DESKTOP_SESSION= xdg-open "/home/sashoalm/Has Spaces.txt"

Correção de erros: Copie o script xdg-open para / usr / local / bin (para que não seja sobrescrito, atualizando seu sistema) e adicione a linha

file="$(printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\x@g')")"

para o script xdg-open acima da linha de comentários # handle relative paths .

Correção de bug 2:

Ou simplesmente substitua a substituição detectDE() por:

detectDE()
{
    DE=gnome
}
    
por 01.12.2014 / 12:18