web-dev-qa-db-fra.com

Est-il possible d'étendre xdg-open?

J'espère que le titre n'est pas trompeur.

J'utilise une application de prise de notes qui me permet d'ouvrir des fichiers à partir de notes de démarques:

[read more](/path/to/file.pdf)

Je ne pouvais pas trouver un moyen de l'ouvrir à une page spécifique. Je ne peux pas créer de lien au format accepté par le PDF lecteur.

Existe-t-il un bon moyen d'ouvrir des fichiers avec un script? En gros, je veux remplacer #page=5 par -p 5 à chaque fois.

Je pensais pouvoir écrire mon propre script wrapper de manière à pouvoir taper:

[read more](/path/to/file.pdf#page=5)

et mon script analyse le chemin et le transforme en

 xdg-open /path/to/file.pdf -p 5
3
linuxUser123

Je ne suis pas sûr de l'élégance de la méthode ci-dessous. Mais cela fonctionne normalement pour moi.

J'utilise ReText en tant qu'éditeur Markdown et prévois de l'utiliser

[link-to-pdf](pdf-filename.pdf#page=2)

syntaxe pour PDF avec numéro de page.

J'ai donc défini mon script de wrapper xdg-open local:

mkdir /home/$USER/bin
echo "export PATH=/home/$USER/bin:$PATH" >> .bashrc

et placé le code suivant dans /home/$USER/bin/xdg-open:

#!/bin/sh

pdfviewer=atril
filename="$1";

case $filename in
    *.pdf#page=*) 
            file=$(echo "$filename" | cut -d "#" -f 1);
            page=$(echo "$filename" | cut -d "#" -f 2 | sed "s/page=/-p /");
            $pdfviewer "$file" $page ;;
    *)      /usr/bin/xdg-open "$@" ;;
esac

Ce script doit être exécutable (défini avec chmod +x /home/$USER/bin/xdg-open) et ne sera utilisé que si .pdf#page= sera trouvé, sinon il utilisera le système /usb/bin/xdg-open.

J'ai testé cette méthode avec le visualiseur Atril PDF sur mon Ubuntu 16.04 LTS MATE.
Vous pouvez modifier la variable pdfviewer en evince si vous le souhaitez.

En bonus gratuit, nous pouvons utiliser la syntaxe .pdf#page= dans le terminal:

xdg-open /usr/share/doc/qpdf/qpdf-manual.pdf#page=12

Remarque: après de telles manipulations, nous avons deux exécutables xdg-open - la sortie de whereis xdg-open devrait devenir xdg-open: /usr/bin/xdg-open /home/user/bin/xdg-open /usr/share/man/man1/xdg-open.1.gz.

3
N0rbert