Agregue lo siguiente a su .bash_profile
o .bashrc
e inicie una nueva sesión:
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
No es necesario instalar nada. Esto funciona bash
fuera de la caja.
Solo completará automáticamente los nombres de los programas si la opción anterior es -a
y mostrará el comportamiento predeterminado, por ejemplo, devolverá una lista de todos los archivos en el directorio actual o completará el prefijo de ruta actual.
Los resultados se generan a partir de system_profiler SPApplicationsDataType
, que es la forma más fácil de obtener todas las aplicaciones que se pueden iniciar de esta manera en su sistema de esa manera. La lista se procesa para devolver solo los nombres de programa, que pueden contener espacios y pueden ser diferentes de los nombres de paquete (incluso si se ignora el .app
sufijo)
Uso: Escriba open -a
, seguido de un espacio, seguido de presionar Tab
o Esc
(dos veces en mi sistema, no estoy seguro si está en todas partes).
Ejemplo que muestra todas las aplicaciones auxiliares para mi escáner:
$ 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
Inconvenientes y problemas de esta solución:
Hay toneladas de programas en su sistema que quizás no conozca, como todo lo que contiene /System/Library/CoreServices
. Es posible que no desee enumerarlos a todos. OTOH, es realmente fácil de ver y ejecutar, por ejemplo, CharacterPalette
o de KeyboardViewer
esta manera. * Configure las mdfind
llamadas apropiadamente con el -onlyin
argumento.
Es un poco lento, debido a system_profiler SPApplicationsDataType
. Es posible que deba esperar uno o dos segundos antes de que aparezca la finalización. Ahora se utiliza mdfind
para obtener rápidamente los programas. Gracias @Lri
Puede manejar espacios en nombres de aplicaciones y nombres de programas entre comillas, pero es bastante hacky. Requiere que la cita sea el primer carácter: aunque Scan" to "P
es válido bash
, este programa no lo detectará. La finalización tampoco funciona después de un espacio escapado (p Scan\ to
. Ej. ), Utilice comillas en tales casos ( "Scan to
). Soporte para espacios escapado sólo es bueno para completar DVD
a DVD\ Player
.