1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-10-02 08:51:18 +02:00
zsh/Completion/Unix/Command/_iconv
Oliver Kiddle 1b50dff802 20921: using UCS-4BE instead of ISO-10646 to identify character encoding
is more portable, find more encodings in iconv completion on Solaris
20924: make error message more specific
2005-03-03 14:13:03 +00:00

56 lines
2.0 KiB
Plaintext

#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