OK, un peu de fond: j'utilise un Mac, et j'en fais autant que possible dans la CLI.
En particulier, j'introduis fréquemment une clé USB cp
ou mv
un fichier, puis je souhaite immédiatement l'éjecter (démonter et déconnecter). Cela peut généralement être accompli en une poignée de touches, sauf pour le démonter, ce qui nécessite (en 10.7) d'aller sur un espace de bureau vide (généralement deux espaces au moins), de sélectionner le disque et d'appuyer sur "commande-e". Franchement, cette procédure de démontage est, par plusieurs ordres de grandeur, la partie la plus longue et la plus fastidieuse du processus.
Il serait beaucoup plus naturel et efficace de pouvoir simplement taper, par exemple:
ej<tab> J<tab>
Dites que ma clé USB se monte sur / Volumes / Jefferson. Ce que je m'attendrais à obtenir de mes 6 touches est le suivant:
eject /Volumes/Jefferson
Cela devrait exécuter la commande:
diskutil unmount /Volumes/Jefferson
J'ai donc écrit une jolie petite fonction:
eject() {
diskutil unmount /Volumes/$1
}
Et une fonction d'achèvement pour l'accompagner:
compdef '_files -g "/Volumes/*"' eject
Il y a cependant un problème avec cela. La _files
fonction génère des chemins complets. Maintenant, je pourrais changer la ligne de ma fonction "éjecter" en diskutil unmount $1
, et les choses fonctionneraient, mais je n'ai plus la possibilité de taper la première lettre du nom du point de montage, car le chemin commence par / Volumes /. Par exemple, si je tape J<tab
, j'obtiendra la saisie semi-automatique pour les fichiers dans le PWD. Je devrais taper /Volumes/J<tab>
pour obtenir l'achèvement souhaité.
Alors, existe-t-il une fonction d'achèvement qui récupère les noms de fichiers à partir d'un emplacement prédéfini et spécifique, plutôt que de générer des chemins complets?
J'aimerais vraiment ramener cela à 6 frappes.