From 24a68220a105c70a54baa543917e1022ae3e7a8d Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 12 Nov 2004 11:47:41 +0000 Subject: improved Mac completion, from Motoi Washida --- Completion/Darwin/Type/_retrieve_mac_apps | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Completion/Darwin/Type/_retrieve_mac_apps (limited to 'Completion/Darwin/Type/_retrieve_mac_apps') diff --git a/Completion/Darwin/Type/_retrieve_mac_apps b/Completion/Darwin/Type/_retrieve_mac_apps new file mode 100644 index 000000000..cef83913f --- /dev/null +++ b/Completion/Darwin/Type/_retrieve_mac_apps @@ -0,0 +1,59 @@ +#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 "$@" -- cgit 1.4.1