J'ai l'habitude d'ouvrir un PDF sous Linux à partir du terminal. C'est-à-dire, via par exemple evince sample.pdf
. La complétion de commande rend cette opération assez rapide. En particulier lorsqu'il y a beaucoup de fichiers avec le même nom mais des terminaisons différentes (comme après les compilations de pdflatex). Depuis macports, j'ai la complétion de commande bash, mais elle est inefficace pour la commande open
dans le sens où je dois parcourir tous les fichiers jusqu'à ce que j'obtienne le fichier PDF. Existe-t-il un autre moyen d'ouvrir un PDF qui permette d'utiliser la complétion bash ? Ou un moyen de faire open
ignorer certains types de fichiers ?
Réponse
Trop de publicités?open
est un outil générique d'ouverture de fichiers, de sorte qu'une complétion générique pour open
doit correspondre à n'importe quoi open
peut s'ouvrir. Une solution de contournement consiste à inventer un nouveau nom de commande, alias
il à open
puis spécifiez que la nouvelle commande doit compléter les fichiers PDF.
bash-4.4$ alias viewpdf=open
bash-4.4$ complete -f -X '!*.@(pdf|PDF)' viewpdf
Vous pourriez alors utiliser viewpdf
pour ouvrir les fichiers PDF par tabulation. Cependant, cette méthode est plutôt incomplète car elle ne correspond qu'aux noms de fichiers non qualifiés par un chemin de répertoire. Avec plus de complexité :
alias viewpdf=open
function _viewpdf()
{
local word=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -f -X "!*.@(pdf|PDF)" -- "${word}"))
}
complete -d -X '.[^./]*' -F _viewpdf viewpdf
Qui doit être sauvegardé dans a bash
fichier rc .
Si vous utilisez plutôt le Z-Shell zsh
l'achèvement pourrait ressembler à
REVERT=$options[COMPLETE_ALIASES]
setopt COMPLETE_ALIASES
alias viewpdf=open
compdef '_files -g "*.(pdf|PDF)"' viewpdf
options[COMPLETE_ALIASES]=$REVERT
unset REVERT