Ajoutez les éléments suivants à votre .bash_profile
o .bashrc
et lancer 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
Il n'est pas nécessaire d'installer quoi que ce soit. Cela fonctionne avec bash
hors de la boîte.
Il ne complétera automatiquement les noms des programmes que si l'option précédente est -a
et autrement montrer le comportement par défaut, par exemple retourner une liste de tous les fichiers dans le répertoire courant ou compléter le préfixe du chemin courant.
Les résultats sont générés à partir de system_profiler SPApplicationsDataType
qui est le moyen le plus facile d'obtenir toutes les applications qui peut être lancé de cette façon sur votre système comme ça. La liste est traitée pour ne retourner que les noms des programmes, qui peuvent contenir des espaces et peuvent être différents des noms des paquets (même en ignorant .app
suffixe)
Utilisation : Type open -a
suivi d'un espace, puis d'un appui sur Tab
o Esc
(deux fois sur mon système, je ne sais pas si c'est le cas partout).
Exemple montrant toutes les applications d'aide 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 dont vous n'êtes peut-être pas conscient, comme tout ce qui est en /System/Library/CoreServices
. Vous n'avez peut-être pas envie de les énumérer tous. Par contre, il est très facile de voir et de lancer par exemple CharacterPalette
o KeyboardViewer
de cette façon. *Configurer le mdfind
l'appel ou les appels de manière appropriée avec le -onlyin
argument.
-
C'est un peu lent, à cause de system_profiler SPApplicationsDataType
. Il se peut que vous deviez attendre une seconde ou deux avant que l'achèvement n'apparaisse. Utilise maintenant mdfind
pour obtenir rapidement les programmes. Merci @Lri
-
Il peut gérer les espaces dans les noms d'applications et les noms de programmes entre guillemets, mais c'est assez compliqué. Il faut que le guillemet soit le premier caractère : Alors que Scan" to "P
est valable dans bash
ce programme ne le détectera pas. La complétion ne fonctionne pas non plus après un espace échappé (ex. Scan\ to
), utilisez des guillemets dans ce cas ( "Scan to
). La prise en charge des espaces échappés est seulement bonne pour compléter DVD
à DVD\ Player
.
0 votes
Quel shell utilisez-vous ?
2 votes
Je pense qu'un moyen un peu plus rapide serait de taper le chemin complet (suivez-moi un peu ! !), par ex.
open -a /Applications/Textedit.app foo.txt
(Je suppose que c'est ce que vous essayez de faire). Si vous appuyez sur la touche Tab après le/A
de/Applications
puis Tab à nouveau après le/Te
de/Textedit.app
alors cela devrait remplir automatiquement les deux parties pour vous au fur et à mesure. Pas idéal, je l'admets, mais peut-être un peu mieux. C'était en utilisant Bash.0 votes
Vous pouvez également essayer de suivre les instructions figurant à la fin de cet article : brettterpstra.com/grabbing-a-mac-apps-icon-advanced-bash-usage-2
0 votes
@DanielBeck Bash.