xdg-open abre um arquivo htm especificado, mas ignora o local da tag (#) dentro da página

0

Eu tenho uma função em um script bash (openWebPage) que eu quero abrir uma página da web e navegar para uma tag de id dentro da página.

Os componentes da url são mantidos em variáveis

PIXPAGE="/home/bu5hman/pix/pixpages/media.bu5hman.2005-.video.htm"
TT="tt0078435"

A chamada para a função compõe as variáveis

openWebPage "$PIXPAGE#$TT"

Dentro da função, se eu codificar a chamada para o meu navegador padrão (seamonkey) diretamente com um arquivo url que tem uma tag especificada

/home/bu5hman/Installs/seamonkey/seamonkey "file://$1"

a página é aberta na tag obrigatória, no entanto, usando

xdg-open "file://$1"

abre a página da web na parte superior, mas não acessa a tag na página.

Quando o navegador é chamado diretamente, ele é aberto com o URL completo e marca na barra de navegação, mas quando chamado usando o xgd-open, ele abre com a URL removida da tag (# tt0078435) na barra de navegação.

Parece que o xdg-open retira a tag da URL antes de passá-la para o aplicativo.

Além de usar um script para interrogar o sistema para o navegador padrão e compor uma chamada direta, existe uma maneira de evitar que o xdg-open retire a tag ou uma chamada entre plataformas alternativa para abrir a página da Web na tag ?

    
por bu5hman 16.11.2017 / 16:09

1 resposta

1

Solução encontrada graças aos apontamentos de @Ignacio Vazquez-Abrams.

O problema estava no caminho xdg-open passa um argumento para o aplicativo padrão.

Se o aplicativo padrão estiver registrado no área de trabalho do kde , de modo a esperar uma url (% u)

/home/bu5hman/Installs/seamonkey/seamonkey %u

então todo o argumento passado para xdg-open é usado como url e o navegador navega para a tag.

se o% u for omitido, o argumento transmitido para xdg-open será testado para ver se é um arquivo e depois removido das informações do # na URL (do script xdg-open )

# If argument is a file URL, convert it to a (percent-decoded) path.
# If not, leave it as it is.
file_url_to_path()
{
    local file="$1"
    if echo "$file" | grep -q '^file:///'; then
        file=${file#file://}
        file=${file%%#*}                                #<----------
        file=$(echo "$file" | sed -r 's/\?.*$//')
        local printf=printf
        if [ -x /usr/bin/printf ]; then
            printf=/usr/bin/printf
        fi
        file=$($printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\x@g')")
    fi
    echo "$file"
}

e a página é aberta apenas no topo.

No meu caso, o firefox foi registrado com% u e seamonkey sem, e é por isso que eu tive um comportamento diferente nos dois navegadores.

    
por 18.11.2017 / 11:58