about summary refs log tree commit diff
path: root/Completion/BSD/Command/_sysrc
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/BSD/Command/_sysrc')
-rw-r--r--Completion/BSD/Command/_sysrc77
1 files changed, 77 insertions, 0 deletions
diff --git a/Completion/BSD/Command/_sysrc b/Completion/BSD/Command/_sysrc
new file mode 100644
index 000000000..d8bc4ef0e
--- /dev/null
+++ b/Completion/BSD/Command/_sysrc
@@ -0,0 +1,77 @@
+#compdef sysrc
+_sysrc_caching_policy() {
+  local -a oldp
+  oldp=( "$1"(Nm+1) )
+  (( $#oldp ))
+}
+
+
+_sysrc() {
+  _arguments -A '-*' : \
+    '-c[check only, return success if vars are set]' \
+    '-d[print variable(s) description]' \
+    '-D[print default value(s) only]' \
+    '-e[print variables as sh(1) compatible syntax]' \
+    '*-f[operate on specified file(s), not \`rc_conf_files'\'']: : _files' \
+    '-F[print only the last rc.conf(5) file each directive is in]' \
+    '-h[print short usage message]' \
+    '--help[print full usage message]' \
+    '-i[ignore unknown variables]' \
+    '-j[jail to operate within]:jails:_jails' \
+    '-n[print only variable values]' \
+    '-N[print only variable names]' \
+    '-q[quiet mode]' \
+    '-R[specify an alternative root]:alternative root:_files -/' \
+    '-v[verbose mode]' \
+    '--version[print version information]' \
+    '-x[remove specified variables from specified file(s)]' \
+    '*:configuration variable:->confvars' \
+    - set1 \
+    '-a[list all non-default configuration variables]' \
+    - set2 \
+    '-A[list all configuration variables]'
+
+  if [[ $state  == confvars ]]; then
+    local k v opt curcontext="${curcontext%:*}:values"; local -a rc_conf_vars
+    if [[ -prefix *=* ]]; then
+      # do you really want to go down this hole?
+      _message -e values value
+    else
+      if zstyle -T ":completion:${curcontext%:*}:values" verbose; then
+        opt=d
+      else
+        opt=N
+      fi
+      
+      if ! zstyle -m ":completion:${curcontext%:*}:values" cache-policy '*'; then
+        zstyle ":completion:${curcontext%:*}:values" cache-policy _sysrc_caching_policy
+      fi
+
+      if _cache_invalid sysrc/rc_conf_vars ||
+         ! _retrieve_cache sysrc/rc_conf_vars; then
+ 
+        _call_program sysrc-cmd sysrc -A$opt | while read -r k v; do
+          [[ $k = DEBUG* ]] && continue
+          if [[ -z $v ]]; then
+            rc_conf_vars+=( ${k%:} )
+          else
+            rc_conf_vars+=( "${k%:}[${${v//]/\\]}//:/\\:}]" )
+          fi
+          v=
+        done
+
+        _store_cache sysrc/rc_conf_vars rc_conf_vars
+      fi
+
+      if (( $#rc_conf_vars )); then
+        if [[ $opt == N ]]; then
+          _values -w -C variable ${^rc_conf_vars%%\[*}'::value'
+        else
+          _values -w -C variable ${^rc_conf_vars}'::value'
+        fi
+      fi
+    fi
+  fi
+}
+
+_sysrc "$@"