if tail --version >/dev/null 2>/dev/null
    complete -c tail -s c -l bytes -x -d 'output the last K bytes; alternatively, use -c +K to output bytes starting with the Kth of each file'
    complete -c tail -s f -l follow -a 'name descriptor' -d 'output appended data as the file grows; -f -l follow, and --follow=descriptor are equivalent'
    complete -c tail -s F -d 'same as --follow=name --retry'
    complete -c tail -s n -l lines -x -d 'output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth'
    complete -c tail -l max-unchanged-stats -x -d 'with --follow=name, reopen a FILE which has not changed size after N iterations'
    complete -c tail -l pid -d 'with -f, terminate after process ID, PID dies' -xa '(__fish_complete_pids)'
    complete -c tail -s q -l quiet -l silent -d 'never output headers giving file names'
    complete -c tail -l retry -d 'keep trying to open a file even when it is or becomes inaccessible; useful when following by name, i.e., with --follow=name'
    complete -c tail -s s -l sleep-interval -x -d 'with -f, sleep for approximately N seconds (default 1.0) between iterations'
    complete -c tail -s v -l verbose -d 'always output headers giving file names'
    complete -c tail -x -l help -d 'display this help and exit'
    complete -c tail -x -l version -d 'output version information and exit'
else # OSX and similar - no longopts (and fewer shortopts)
    complete -c tail -s b -x -d 'output last K 512 byte blocks'
    complete -c tail -s c -x -d 'output the last K bytes or only K bytes with -r'
    complete -c tail -s f -d 'output appended data as the file grows'
    complete -c tail -s F -d 'Like -f, but also follow renamed or rotated files'
    complete -c tail -s n -x -d 'output the last K lines, instead of the last 10 - or only K lines with -r'
    complete -c tail -s q -d 'never output headers giving file names'
    complete -c tail -s r -d 'Display input in reverse order' # Only in OSX
end
