Додайте до свого .bash_profile
або .bashrc
і запустіть новий сеанс:
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
Не потрібно нічого встановлювати. Це працює з bash
поза коробкою.
Він автоматично заповнює імена програм, якщо попередній параметр є, -a
і в іншому випадку буде показано поведінку за замовчуванням, наприклад, поверне список усіх файлів у поточному каталозі або заповнить поточний префікс шляху.
Результати генеруються з system_profiler SPApplicationsDataType
, це найпростіший спосіб отримати всі програми, які можна запустити таким чином у вашій системі. Список обробляється лише для того, щоб повертати імена програм, які можуть містити пробіли і можуть відрізнятися від імен пакетів (навіть при ігноруванні .app
суфіксу)
Використання: введіть open -a
, після чого пробіл, після чого натисніть Tab
або Esc
(двічі в моїй системі, не впевнений, чи є вона скрізь).
Приклад, що показує всі допоміжні програми для мого сканера:
$ 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
Недоліки та проблеми цього рішення:
У вашій системі є багато програм, про які ви, можливо, не знаєте, як і все в /System/Library/CoreServices
. Можливо, ви не хочете перераховувати їх. OTOH, це дуже легко побачити і запустити, наприклад, CharacterPalette
або KeyboardViewer
таким чином. * Налаштуйте mdfind
виклики (дзвінки) відповідним чином за допомогою -onlyin
аргументу.
Це якось повільно, через system_profiler SPApplicationsDataType
. Можливо, вам доведеться почекати секунду чи дві, перш ніж з’явиться завершення. Тепер використовується mdfind
для швидкого отримання програм. Дякую @Lri
Він може обробляти пробіли у назвах програм та котирування доданих імен програм, але це досить хакі. Він вимагає, щоб цитата була першим символом: Хоча Scan" to "P
вона дійсна в bash
, ця програма не виявить її. Завершення не працює після пропущеного місця (наприклад Scan\ to
), використовуйте лапки в таких випадках ( "Scan to
). Підтримка втекли просторів тільки добре завершити DVD
до DVD\ Player
.