#autoload # Find paths of applications and preserve them into _mac_apps. # Used by _mac_applications and _mac_files_for_application. _mac_apps_caching_policy () { # Rebuild if cache is more than a day old oldp=( "$1"(Nmw+1) ) (( $#oldp )) } _retrieve_mac_apps() { local cache_policy zstyle -s ":completion:*:*:$service:*" cache-policy cache_policy if [[ -z "$cache_policy" ]]; then zstyle ":completion:*:*:$service:*" cache-policy _mac_apps_caching_policy fi if ( [[ ${+_mac_apps} -eq 0 ]] || _cache_invalid Mac_applications ) \ && ! _retrieve_cache Mac_applications; then # Get directories which may contain applications typeset -aU app_dir if [[ -z "$app_dir" ]] && \ ! zstyle -s ":completion:${curcontext}:commands" application-dir app_dir then typeset -a app_dir_stop_pattern app_dir_root app_dir_stop_pattern=( "*.app" "contents#" "*data" "*plugins#" "*plug?ins#" "fonts#" "document[[:alpha:]]#" "*help" "resources#" "images#" "*configurations#" ) app_dir_root=( {,/Developer,/Network,"$HOME"}/{Applications*(N),Desktop} ) typeset app_dir_pattern app_dir_pattern="(^(#i)(${(j/|/)app_dir_stop_pattern}))" app_dir=( ${^app_dir_root}/(${~app_dir_pattern}/)#(N) ) fi typeset -g -Ua _mac_apps local -a app_result # Get application bundles if ! zstyle -t ":completion:${curcontext}:commands" ignore-bundle; then app_result=( ${^app_dir}*/Contents/(MacOS|MacOSClassic)(N) ) _mac_apps+=( ${app_result[@]%/Contents/MacOS*} ) fi # Get single file applications if ! zstyle -t ":completion:${curcontext}:commands" ignore-single; then autoload -U zargs local app_cand nargs envvars app_cand=( ${^app_dir}^*.[a-z]#/..namedfork/rsrc(.UrN,.RN^U) ) envvars="$(builtin typeset -x)" nargs=$(( $(command sysctl -n kern.argmax) - $#envvars - 2048 )) app_result="$(zargs --max-chars $nargs ${app_cand[@]} -- grep -l APPL)" _mac_apps+=( ${${(f)app_result}%/..namedfork/rsrc} ) fi _store_cache Mac_applications _mac_apps fi } _retrieve_mac_apps "$@"