diff options
Diffstat (limited to 'Completion/Unix/Command/_iconv')
-rw-r--r-- | Completion/Unix/Command/_iconv | 55 |
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 |