#compdef links links2

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

(( $#words > 2 )) && ign='!'
_arguments -C \
  "${ign}-help[prints the help screen]" \
  "${ign}(- :)-version[prints the links version number and exit]" \
  "${ign}(- 1)-lookup[do hostname lookup]:hostname:_hosts" \
  '-g[run in graphics mode rather than plain text mode]' '!-no-g' \
  '-driver[graphics driver to use]:graphics driver:->graphics_drivers' \
  '-mode[specify graphics mode]:graphics mode' \
  '-display[specify X display]:display:_x_display' \
  '-force-html[treat files with unknown type as html rather than text]' \
  '-source[dump the source page]' \
  '-dump[dump the page as pure text]' \
  '-width[specify screen width for formatting with -dump]:width' \
  '-codepage[convert output to specified character set with -dump]:codepage' \
  '-anonymous[restrict links so that it can run on an anonymous account]' \
  '-no-connect[runs links as a separate instance]' \
  '-download-dir[default download directory]:_files -/' \
  '-language[set user interface language]:language' \
  '-max-connections[specify maximum number of concurrent connections]:connections [10]' \
  '-max-connections-to-host[maximum number of concurrent connection to a given host]:connections [2]' \
  '-retries[number of retries]:retries [3]' \
  '-receive-timeout[timeout on receive]:timeout (seconds) [120]' \
  '-unrestartable-receive-timeout[timeout on non-restartable connections]:timeout (seconds) [600]' \
  '-timeout-when-trying-multiple-addresses[specify timeout for connection when trying multiple addresses]:timeout (seconds)' \
  '-bind-address[use a specific local IP address]:IP address' \
  '-bind-address-ipv6[use a specific local IPv6 address]:IPv6 address' \
  "-no-libevent[don't use libevent library]" \
  "-no-openmp[don't use OpenMP]" \
  '-async-dns[asynchronous DNS resolver]:enable:((1\:on 0\:off))' \
  '-download-utime[set time of downloaded files to last modification time reported by server]:enable:((1\:on 0\:off))' \
  '-format-cache-size[number of formatted document pages cached]:pages [5]' \
  '-memory-cache-size[cache memory]:size (bytes) [1048576]' \
  '-image-cache-size[image cache memory]:size (bytes) [1048576]' \
  '-font-cache-size[specify font cache size]:size (bytes) [2097152]' \
  "-aggressive-cache[cache everything regardless of server's caching recommendations]:enable [1]:((1\\:on 0\\:off))" \
  '-address-preference[specify IP version preference]:preference:((
    0\:system\ default
    1\:prefer\ IPv4
    2\:prefer\ IPv6
    3\:use\ only\ IPv4
    4\:use\ only\ IPv6
  ))' \
  '-http-proxy[specify web proxy server]:proxy:->proxies' \
  '-ftp-proxy[specify ftp proxy server]:proxy:->proxies' \
  '-https-proxy[specify https web proxy server]:proxy:->proxies' \
  '-socks-proxy[specify socks4a proxy server]:proxy:->sproxies' \
  '-append-text-to-dns-lookups[append text to dns lookups; useful for specifying fixed tor exit node]:text' \
  '-no-proxy-domains[use no proxy for specified domains]:domain list' \
  '-only-proxies[only initiate connections via proxy]:enable:((0\:off 1\:on))' \
  '-ssl.certificates[specify handling of invalid signatures]:handling:((0\:ignore 1\:warn 2\:reject))' \
  '-ssl.builtin-certificates[specify certificates to use]:certificates:((0\:system 1\:builtin))' \
  '-ssl.client-cert-key[specify user private key for client certificate authentication]:PEM file:_files' \
  '-ssl.client-cert-crt[specify user certificate for client certificate authentication]:PEM file:_files' \
  '-ssl.client-cert-password[specify password for the user private key]:password' \
  '-http-bugs.http10[specify HTTP version]:protocol [0]:((1\:force\ only\ HTTP\ 1.0 0\:use\ both\ HTTP\ 1.0\ and\ 1.1))' \
  '-http-bugs.allow-blacklist[use list of servers with broken HTTP/1.1 support]:allow [1]:(1 0)' \
  '-http-bugs.bug-no-accept-charset[specify sending of Accept-Charset field of HTTP header]:send [0]:(1 0)' \
  '-http-bugs.no-compression[advertise HTTP compression support]:advertise compression [0]:((0\:yes 1\:no))' \
  '-http-bugs.retry-internal-errors[retry on internal server errors (50x)]:retry [0]:((1\:yes 0\:no))' \
  '-http.fake-firefox[fake Firefox in the HTTP header]:enable [0]:((0\:no 1\:yes))' \
  '-http.do-not-track[send do not track request in the HTTP header]:enable [0]:(1 0)' \
  "-http.referer[control sending of referer URL in requests]:referer [4]:((
    0\:don\'t\ send 1\:'send requested URL' 2\:'fake referer' 3\:'send real'
    4\:'send real only to the same server'
  ))" \
  '-http.fake-user-agent[specify fake user agent value]:string' \
  '-http.extra-header[specify extra string added to HTTP header]:string' \
  '-ftp.anonymous-password[specify password for anonymous ftp access]:password' \
  '-ftp.use-passive[use ftp PASV command to bypass firewalls]:enable;(0 1)' \
  '-ftp.use-eprt-epsv[use EPRT and EPSV commands instead of PORT and PASV]:enable:(0 1)' \
  '-ftp.set-iptos[set IP type-of-service to high throughput on ftp connections]:enable:(0 1)' \
  '-smb.allow-hyperlinks-to-smb[allow hyperlinks to SMB protocol]:enable:(0 1)' \
  '-menu-font-size[specify size of font in menu]:size' \
  '-menu-background-color[specify menu background color in graphics mode]:color (0xRRGGBB)' \
  '-menu-foreground-color[specify menu foreground color in graphics mode]:color (0xRRGGBB)' \
  '-scroll-bar-area-color[set colour of scroll bar area]:colour (0xRRGGBB)' \
  '-scroll-bar-bar-color[set colour of scroll bar]:colour (0xRRGGBB)' \
  '-scroll-bar-frame-color[set colour of scroll bar frame]:colour (0xRRGGBB)' \
  '-bookmarks-file[specify file to store bookmarks]:file:_files' \
  '-bookmarks-codepage[specify character set of bookmarks file]:character set' \
  '-save-url-history[save URL history on exit]:enable:(0 1)' \
  '-display-red-gamma[specify red gamma of display]:gamma [2.2]' \
  '-display-green-gamma[specify green gamma of display]:gamma [2.2]' \
  '-display-blue-gamma[specify blue gamma of display]:gamma [2.2]' \
  '-user-gamma[specify additional gamma]:gamma [1]' \
  '-bfu-aspect[display aspect ration]' \
  '-dither-letters[do letter dithering]:enable:(0 1)' \
  '-display-optimize[optimize for display type]:display:((0\:CRT 1\:LCD\ RGB 2\:LCD\ BGR))' \
  '-gamma-correction[specify type of gamma correction]:gamma correction:((0\:8-bit 1\:16-bit 2\:auto\ detect))' \
  '-overwrite-instead-of-scroll[overwrite the screen instead of scrolling it]:enable:(0 1)' \
  '-html-assume-codepage[specify codepage to use if unspecified by server]:codepage' \
  '-html-hard-assume[always use character set from -html-assume-codepage]:enable:(0 1)' \
  '-html-tables[render tables]:enable:(0 1)' \
  '-html-frames[render frames]:enable:(0 1)' \
  '-html-images[display links to unnamed images as \[IMG\]]:enable:(0 1)' \
  '-html-image-names[display filename of an image]:enable:(0 1)' \
  '-html-display-images[display images in graphics mode]:enable:(0 1)' \
  '-html-image-scale[sScale images in graphics mode]:scaling (percent)' \
  '-html-bare-image-autoscale[autoscale images displayed on full screen]:enable:(0 1)' \
  '-html-numbered-links[number links in text mode allowing quick selection]:enable:(0 1)' \
  '-html-table-order[set ordering to walk tables]:ordering:((0\:rows 1\:columns))' \
  '-html-auto-refresh[process refresh or display link]:refresh:(1 0)' \
  '-html-target-in-new-window[allow opening new windows from html]' \
  '-html-margin[specify margin]:margin (spaces)' \
  '-html-user-font-size[specify font size in graphics mode]:size' \
  '-html-text-color[specify text color in text mode]:color (0..15)' \
  '-html-link-color[specify link color in text mode]:color (0..15)' \
  '-html-background-color[specify background color in text mode]:color (0..15)' \
  '-html-ignore-document-color[ignore colors from HTML in text mode]:ignore:(0 1)' \
  '-html-g-text-color[specify text color in graphics mode]:color (0xRRGGBB)' \
  '-html-g-link-color[specify link color in graphics mode]:color (0xRRGGBB)' \
  '-html-g-background-color[specify background color in graphics mode]:color (0xRRGGBB)' \
  '-html-g-ignore-document-color[ignore colors from HTML in graphics mode]:ignore:(0 1)' \
  ':URL:->html' && ret=0

case $state in
  html)
    _alternative 'files:file:_files -g "*.x#html(-.)"' 'urls:URL:_urls' && ret=0
  ;;
  graphics_drivers)
    local -a vals
    vals=( ${=${${${(f)"$(_call_program links-graphics-drivers $words[1] -driver help 2>&1)"}[-1]}//','/''}} )
    _describe -t links-graphics-drivers 'graphics driver' vals && ret=0
  ;;
  sproxies)
    if ! compset -P '*@'; then
      _message -e users 'user id'
      return
    fi
  ;&
  proxies)
    local suf=-S:
    if compset -P '*:'; then
      _message -e ports 'port number'
    else
      compset -S ':*' && suf= 
      _hosts $suf && ret=0
    fi
  ;;  
esac

return ret
