From 1faf2888e9617c7bade0a45a4b09648c8da9f6e3 Mon Sep 17 00:00:00 2001 From: Jun-ichi Takimoto Date: Wed, 28 Jan 2015 23:58:23 +0900 Subject: 34415: cache list of all python modules --- Completion/Unix/Type/_python_modules | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Completion/Unix/Type/_python_modules (limited to 'Completion/Unix/Type') diff --git a/Completion/Unix/Type/_python_modules b/Completion/Unix/Type/_python_modules new file mode 100644 index 000000000..b30848d83 --- /dev/null +++ b/Completion/Unix/Type/_python_modules @@ -0,0 +1,44 @@ +#autoload + +_python_module_caching_policy () { + local -a newer + # rebuild if cache does not exist or is more than a week old + newer=( "$1"(Nmw-1) ) + return $#newer +} + +_python_modules () { + local update_policy python expl + + case $words[1] in + (python*) python=$words[1] ;; + (pydoc*) python=${words[1]/#pydoc/python} ;; + (*) python="python" ;; + esac + local cache_id=${${python//[^[:alnum:]]/_}#_}_modules + local array_name=_${cache_id} + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && \ + zstyle ":completion:${curcontext}:" \ + cache-policy _python_module_caching_policy + + if ( [[ ${(P)+array_name} -eq 0 ]] || _cache_invalid $cache_id ) && + ! _retrieve_cache $cache_id; then + + local script='import sys, pydoc +def f(p,m,d): + if m.find(".") < 0: sys.stdout.write(m+"\n") +pydoc.ModuleScanner().run(f)' + + typeset -agU $array_name + set -A $array_name \ + $(_call_program modules $python -c ${(q)script} 2>/dev/null) + + _store_cache $cache_id $array_name + fi + + _wanted modules expl module compadd "$@" -a -- $array_name +} + +_python_modules "$@" -- cgit 1.4.1