about summary refs log tree commit diff
path: root/Completion/Unix/Command/_iconv
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_iconv')
-rw-r--r--Completion/Unix/Command/_iconv55
1 files changed, 55 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_iconv b/Completion/Unix/Command/_iconv
new file mode 100644
index 000000000..92fa17e34
--- /dev/null
+++ b/Completion/Unix/Command/_iconv
@@ -0,0 +1,55 @@
+#compdef iconv
+
+local expl curcontext="$curcontext" state line ret=1
+local LOCPATH="${LOCPATH:-/usr/lib/nls/loc}"
+local -U codeset
+
+if _pick_variant gnu=GNU unix --version; then
+
+  local exargs="--list -? --help --usage --version -V"
+  _arguments -C -S -s \
+    "(-f --from-code $exargs)"{-f+,--from-code=}'[specify code set of input file]:code set:->codeset' \
+    "(-t --to-code $exargs)"{-t+,--to-code=}'[specify code set for output]:code set:->codeset' \
+    '(- 1)--list[list all character code sets]' \
+    "($exargs)-c[omit invalid characters from output]" \
+    "(-o --output $exargs)"{-o+,--output=}'[specify output file]:output file:_files' \
+    "(-s --silent --verbose $exargs)"{-s,--silent}'[suppress warnings]' \
+    "(-s --silent $exargs)--verbose[print progress information]" \
+    '(-)'{-\?,--help}'[display help information]' \
+    '(-)--usage[display a short usage message]' \
+    '(-)'{-V,--version}'[print program version]' \
+    '1:input file:_files' && return 0
+
+  if [[ $state = codeset ]]; then
+    if compset -P '*/'; then
+      _wanted option expl option compadd "$@" /TRANSLIT && ret=0
+    else
+      _wanted codesets expl 'code set' compadd "$@" \
+	  -M 'm:{a-zA-Z}={A-Za-z} r:|-=* r:|=*' \
+	  ${${${(f)"$(_call_program codesets iconv --list|sed -n '/^$/,$ p')"}## #}%//} && ret=0
+    fi
+  fi
+
+  return ret
+else
+
+  _arguments -C \
+    '-f[specify code set of input file]:code set:->codeset' \
+    '-t[specify code set for output]:code set:->codeset' \
+    '1:file:_files' && return 0
+
+  if [[ $state = codeset ]]; then
+    if [[ -f /usr/lib/iconv/iconv_data ]]; then  # IRIX & Solaris
+      codeset=( ${${(f)"$(</usr/lib/iconv/iconv_data)"}%%[[:blank:]]*} )
+      codeset+=( /usr/lib/iconv/*%*.so(Ne.'reply=( ${${REPLY:t}%%%*} ${${REPLY:r}#*%} )'.) )
+    elif [[ -d $LOCPATH/iconv ]]; then  # OSF
+      codeset=( $LOCPATH/iconv/*(N:t) )
+      codeset=( ${(j:_:s:_:)codeset} )
+    else
+      return 1
+    fi
+
+    _wanted codesets expl 'code set' compadd "$@" -a codeset
+  fi
+
+fi