Ajoutez les éléments suivants à votre .bash_profile
ou .bashrc
et 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 bash
hors de la boîte.
Il n'effectuera la saisie semi-automatique des noms de programme que si l'option précédente l'est -a
et 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 .app
suffixe)
Utilisation: Tapez open -a
, suivi d'un espace, puis appuyez sur Tab
ou 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 CharacterPalette
ou de KeyboardViewer
cette façon. * Configurez les mdfind
appels de manière appropriée avec l' -onlyin
argument.
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 mdfind
pour 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 "P
soit 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
.