#compdef rdesktop

local curcontext="$curcontext" state line expl redir ret=1
typeset -A opt_args

_arguments -C -s \
  '-u[username]:username:_users' \
  '-d[domain]:domain' \
  '-s[shell]:startup shell' \
  '-c[working directory]:directory:_directories' \
  '-p[password]:password' \
  '-n[hostname]:host:_hosts' \
  '-k[keyboard map]:keyboard map' \
  '(-f)-g[geometry]:geometry (WxH)' \
  '(-g)-f[fullscreen mode]' \
  '-b[force server to use bitmaps for screen updates]' \
  '-B[use X server backing store]' \
  '-E[disable encryption]' \
  "-m[don't send mouse motion events]" \
  '-C[use private colormap]' \
  '-D[hide window decorations]' \
  '-K[do not override window manager key bindings]' \
  '-S[single application mode]' \
  '-T[set window title]:title' \
  '-N[enable numlock synchronisation]' \
  '-X[embed in another window]:window:_x_window' \
  '-a[colour depth]:depth:(8 15 16 24)' \
  '-z[enable compression]' \
  '-x[bandwidth performance behaviour]:experience:((b\:broadband l\:lan m\:modem))' \
  '-P[enable bitmap caching]' \
  '*-r[device redirection]: :->redirection' \
  '-0[attach to server console]' \
  '(-5)-4[use RDP version 4]' \
  '(-4)-5[use RDP version 5]' \
  ':server:->hostsport' && ret=0

case $state in
  hostsport)
    if compset -P '*:'; then
      _ports && ret=0
    else
      compset -S ':*'
      _hosts && ret=0
    fi
  ;;
  redirection)
    redir="${PREFIX%%:*}"
    if compset -P '*='; then
      curcontext="${curcontext%:*}:$redir"
      compset -P '*='
      case $redir in
	comport|lptport) _wanted devices expl device _files -g '*(-%)' && ret=0 ;;
	disk) _directories && ret=0 ;;
	printer) _printers && ret=0 ;;
	scard) _message -e aliases 'alias name' ;;
      esac
    else
      compset -S '=*'
      _values -S : 'redirection' \
	'comport:port' \
	'disk:sharename' \
	'lptport:lptport' \
	'printer:printername:_printers -S=' \
	'sound:sound:(local off remote)' \
	'lspci' \
	'scard:sound card name' && ret=0
    fi
  ;;
esac
 
return ret
