summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMotoi WASHIDA <wm3@users.sourceforge.net>2005-05-13 17:48:58 +0000
committerMotoi WASHIDA <wm3@users.sourceforge.net>2005-05-13 17:48:58 +0000
commit9a819df9d7bf11359ee3c264138d651e9d68b3a2 (patch)
treecdde6aa9de0fd47c10bb97754780ee67077064c6
parent8d0cddd9077c99b09f16b4771092ac52c9b6b293 (diff)
downloadzsh-9a819df9d7bf11359ee3c264138d651e9d68b3a2.tar.gz
zsh-9a819df9d7bf11359ee3c264138d651e9d68b3a2.zip
users/8826: search applications using spotlight.
-rw-r--r--ChangeLog4
-rw-r--r--Completion/Darwin/Type/_retrieve_mac_apps100
2 files changed, 77 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index 1708b4958..5fc60ca64 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-05-13 Motoi Washida <a66@h8.dion.ne.jp>
+ * users/8826: Completion/Darwin/Type/_retrieve_mac_apps: search
+ applications using spotlight.
+
2005-05-12 Felix Rosencrantz <f.rosencrantz@gmail.com>
* 21257: Completion/Unix/Command/_perforce: fix minor typo
diff --git a/Completion/Darwin/Type/_retrieve_mac_apps b/Completion/Darwin/Type/_retrieve_mac_apps
index cef83913f..c1b05e9f4 100644
--- a/Completion/Darwin/Type/_retrieve_mac_apps
+++ b/Completion/Darwin/Type/_retrieve_mac_apps
@@ -9,6 +9,55 @@ _mac_apps_caching_policy () {
(( $#oldp ))
}
+
+# _mac_apps_*_retrieve
+#
+# Get search applications from directories specified in app_dir_root.
+# Paths to applications are stored in _mac_apps.
+
+_mac_apps_spotlight_retrieve () {
+ typeset mdfind_query="kMDItemContentType == 'com.apple.application-*'"
+
+ for i in ${app_dir_root}; do
+ _mac_apps+=(${(f)"$(_call_program command \
+ mdfind -onlyin ${(q)i} ${(q)mdfind_query})"})
+ done
+}
+
+_mac_apps_old_retrieve () {
+ # Get directories which may contain applications
+ typeset -aU app_dir
+ if [[ -z "$app_dir" ]] && \
+ ! zstyle -a ":completion:${curcontext}:commands" application-dir app_dir
+ then
+ typeset -a app_dir_stop_pattern
+ app_dir_stop_pattern=( "*.app" "contents#" "*data" "*plugins#" "*plug?ins#" "fonts#" "document[[:alpha:]]#" "*help" "resources#" "images#" "*configurations#" )
+ typeset app_dir_pattern
+ app_dir_pattern="(^(#i)(${(j/|/)app_dir_stop_pattern}))"
+ app_dir=( ${^app_dir_root}/(${~app_dir_pattern}/)#(N) )
+ fi
+
+ # Get application bundles
+ local -a app_result
+
+ 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
+}
+
+
_retrieve_mac_apps() {
local cache_policy
zstyle -s ":completion:*:*:$service:*" cache-policy cache_policy
@@ -16,41 +65,38 @@ _retrieve_mac_apps() {
zstyle ":completion:*:*:$service:*" cache-policy _mac_apps_caching_policy
fi
- if ( [[ ${+_mac_apps} -eq 0 ]] || _cache_invalid Mac_applications ) \
+ if ( (( ${#_mac_apps} == 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
+ # Get application search method
+ typeset retrieve
+ if ! zstyle -s ":completion:*:*:$service:commands" search-method retrieve
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) )
+ if [[ -d /.Spotlight-V100 ]]; then
+ # / is indexed to use Spotlight
+ retrieve=_mac_apps_spotlight_retrieve
+ else
+ # Fall back to the old way
+ retrieve=_mac_apps_old_retrieve
+ fi
+ zstyle ":completion:*:*:$service:commands" search-method $retrieve
fi
- typeset -g -Ua _mac_apps
- local -a app_result
+ # Get root directories to search applications
+ typeset -a app_dir_root
+ if ! zstyle -a ":completion:${curcontext}" application-path app_dir_root
+ then
+ if [[ $retrieve = _mac_apps_old_retrieve ]]; then
+ app_dir_root=( {,/Developer,/Network,"$HOME"}/{Applications*(N),Desktop} )
+ else
+ app_dir_root=( / )
+ fi
- # 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*} )
+ zstyle ":completion:*" application-path $app_dir_root
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
+ typeset -g -Ua _mac_apps
+ $retrieve
_store_cache Mac_applications _mac_apps
fi