_mtr()
{
  local cur prev words cword;
  _init_completion -n : || return;

  case $prev in
    '-F'|'--filename')
      local IFS=$'\n'
      compopt -o filenames
      COMPREPLY=( $(compgen -f -- $cur) )
      return 0
      ;;
    '-a'|'--address')
      _ip_addresses
      __ltrim_colon_completions "$cur"
      return 0
      ;;
    '-f'|'--first-ttl'|'-m'|'--max-ttl'|'-m'|'--max-unknown'|'-B'|'--bitpattern'|'-Q'|'--tos'|'-c'|'--report-cycles')
      COMPREPLY=( $(compgen -W "NUMBER" -- $cur) )
      return 0
      ;;
    '-P'|'--port'|'-L'|'--localport')
      COMPREPLY=( $(compgen -W "PORT" -- $cur) )
      return 0
      ;;
    '-s'|'--psize')
      COMPREPLY=( $(compgen -W "SIZE" -- $cur) )
      return 0
      ;;
    '-i'|'--interval'|'-G'|'--gracetime'|'-Z'|'--timeout')
      COMPREPLY=( $(compgen -W "SECONDS" -- $cur) )
      return 0
      ;;
    '-M'|'--mark')
      COMPREPLY=( $(compgen -W "MARK" -- $cur) )
      return 0
      ;;
    '--displaymode')
      COMPREPLY=( $(compgen -W "{0..2}" -- $cur) )
      return 0
      ;;
    '-y'|'--ipinfo')
      COMPREPLY=( $(compgen -W "{0..4}" -- $cur) )
      return 0
      ;;
    '-o'|'--order')
      COMPREPLY=( $(compgen -W "LDRSNBAWVGJMXI" -- $cur) )
      return 0
      ;;
  esac
  case $cur in
    -*)
      OPTS='
        --filename --inet --inet6 --udp --tcp --address --first-ttl
        --max-ttl --max-unknown --port --localport --psize --bitpattern
        --interval --gracetime --tos --mpls --timeout --mark --report
        --report-wide --report-cycles --json --xml --csv --raw --split
        --curses --displaymode --gtk --no-dns --show-ips --order --ipinfo
        --aslookup --help --version
      '
      COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
      return 0
      ;;
  esac
  _known_hosts
  return 0
}
complete -F _mtr mtr
