Ajoutez les éléments suivants à votre .bash_profileou .bashrcet lancez une nouvelle session:
function _complete_open {
cur=$2
COMPREPLY=( );
[[ "$COMP_WORDS" = "open" ]] || return
[[ "${COMP_WORDS[ $(( $COMP_CWORD - 1 )) ]}" = "-a" ]] || return
OLDIFS="$IFS"
IFS=$'\n'
local _part="${COMP_WORDS[$COMP_CWORD]}"
if [[ "${_part:0:1}" = '"' || "${_part:0:1}" = "'" ]] ; then
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' | sort -u )" -- $cur ) )
else
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' -e 's| |\\\\ |g' | sort -u )" -- $cur ) )
fi
IFS="$OLDIFS"
}
complete -o default -F _complete_open open
Pas besoin d'installer quoi que ce soit. Cela fonctionne avec bashhors de la boîte.
Il n'effectuera la saisie semi-automatique des noms de programme que si l'option précédente l'est -aet affiche le comportement par défaut, par exemple, retourne une liste de tous les fichiers du répertoire en cours ou complète le préfixe du chemin en cours.
Les résultats sont générés à partir de system_profiler SPApplicationsDataType, ce qui est le moyen le plus simple d'obtenir toutes les applications qui peuvent être lancées de cette façon sur votre système comme ça. La liste est traitée pour renvoyer uniquement les noms de programme, qui peuvent contenir des espaces et peuvent être différents des noms de bundle (même en ignorant le .appsuffixe)
Utilisation: Tapez open -a, suivi d'un espace, puis appuyez sur Tabou Esc(deux fois sur mon système, je ne sais pas s'il est partout).
Exemple montrant toutes les applications d'assistance pour mon scanner:
$ open -a Scan
Scan to E-mail Scan to Excel Scan to Folder Scan to Print Scan to Searchable PDF Scan to Word ScanSnap Manager
Inconvénients et problèmes de cette solution:
Il y a des tonnes de programmes sur votre système que vous ne connaissez peut-être pas, comme tout le reste /System/Library/CoreServices. Vous ne voudrez peut-être pas tous les énumérer. OTOH, c'est vraiment facile à voir et à lancer par exemple CharacterPaletteou de KeyboardViewercette façon. * Configurez les mdfindappels de manière appropriée avec l' -onlyinargument.
C'est un peu lent, à cause de system_profiler SPApplicationsDataType. Vous devrez peut-être attendre une ou deux secondes avant que la fin ne s'affiche. Utilise maintenant mdfindpour obtenir rapidement les programmes. Merci @Lri
Il peut gérer les espaces dans les noms des applications et les guillemets inclus dans les programmes, mais c'est plutôt hacky. Il requiert que la citation soit le premier caractère: Bien qu'il Scan" to "Psoit valide dans bash, ce programme ne le détectera pas. La complétion ne fonctionne pas non plus après un espace échappé (par exemple Scan\ to), utilisez des guillemets dans de tels cas ( "Scan to). Prise en charge des espaces évadés est seulement bon pour terminer DVDà DVD\ Player.