mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef pv
 | |
| 
 | |
| local curcontext="$curcontext" ign Edesc ret=1
 | |
| local -a state state_descr line expl suf args fmts
 | |
| local -A opt_args
 | |
| 
 | |
| (( $#words > 2 )) && ign='!'
 | |
| (( $+words[(r)-[^-]#E*] )) && Edesc=' and only report a read error once per file'
 | |
| [[ $OSTYPE = linux* ]] && args=(
 | |
|   '(-d --watchfd)'{-d+,--watchfd=}'[watch file descriptor opened by process]:process\:fd:->pid-fds' \
 | |
| )
 | |
| 
 | |
| _arguments -s -S $args \
 | |
|   '(-p --progress -F --format)'{-p,--progress}'[show progress bar]' \
 | |
|   '(-t --timer -F --format)'{-t,--timer}'[show elapsed time]' \
 | |
|   '(-e --eta -F --format)'{-e,--eta}'[show estimated time of arrival]' \
 | |
|   '(-I --fineta -F --format)'{-I,--fineta}'[show absolute estimated time of arrival]' \
 | |
|   '(-r --rate -F --format)'{-r,--rate}'[show data transfer rate counter]' \
 | |
|   '(-a --average-rate -F --format)'{-a,--average-rate}'[show data transfer average rate counter]' \
 | |
|   '(-b --bytes -F --format)'{-b,--bytes}'[show number of bytes transferred]' \
 | |
|   '(-T --buffer-percent -F --format)'{-T,--buffer-percent}'[show percentage of transfer buffer in use]' \
 | |
|   '(-A --last-written -F --format)'{-A+,--last-written=}'[show number of bytes last written]:number (bytes)' \
 | |
|   '(-F --format -p --progress -t --timer -e --eta -I --fineta -r --rate -a --average-rate -b --bytes -T --buffer-percent -A --last-written -F --format)'{-F+,--format=}'[set output format]:format:->formats' \
 | |
|   '(-n --numeric -f --force)'{-n,--numeric}'[output percentages, not visual information]' \
 | |
|   '(-q --quiet)'{-q,--quiet}"[don't output any transfer information at all, useful with -L]" \
 | |
|   '(-W --wait)'{-W,--wait}'[display nothing until first byte transferred]' \
 | |
|   '(-D --delay-start -R --remote)'{-D+,--delay-start=}'[display nothing until delay has passed]:delay (seconds)' \
 | |
|   '(-s --size)'{-s+,--size=}'[set estimated data size]:size (bytes):->size-unit' \
 | |
|   '(-l --line-mode -R --remote)'{-l,--line-mode}'[count lines instead of bytes]' \
 | |
|   '(-0 --null -l --line-mode)'{-0,--null}'[lines are null-terminated]' \
 | |
|   '(-i --interval)'{-i+,--interval=}'[update every after specified interval]:interval (seconds) [1]' \
 | |
|   '(-w --width)'{-w+,--width}'[assume terminal is specified characters wide]:width' \
 | |
|   '(-H --height)'{-H+,--height=}'[assume terminal is specified rows high]:height' \
 | |
|   '(-N --name)'{-N+,--name=}'[prefix visual information with given name]:name' \
 | |
|   '(-f --force -R --remote)'{-f,--force}'[output even if standard error is not a terminal]' \
 | |
|   '(-c --cursor -R --remote)'{-c,--cursor}'[use cursor positioning escape sequences]' \
 | |
|   '(-L --rate-limit)'{-L+,--rate-limit=}'[limit transfer rate]:rate (bytes per second):->size-unit' \
 | |
|   '(-B --buffer-size)'{-B+,--buffer-size=}'[use a buffer size of given size]:size (bytes):->size-unit' \
 | |
|   '(-C --no-splice)'{-C,--no-splice}'[never use splice(), always use read/write]' \
 | |
|   '(-R --remote)*'{-E,--skip-errors}"[skip read errors in input${Edesc}]" \
 | |
|   '(-S --stop-at-size -R --remote)'{-S,--stop-at-size}'[stop after --size bytes have been transferred]' \
 | |
|   '(-R --remote -c --cursor -l --line-mode -f --force -D --delay-start -E --skip-errors -S --stop-at-size)'{-R+,--remote=}'[update settings of specified process]:process:_pids -m pv' \
 | |
|   '(-P --pidfile)'{-P+,--pidfile=}'[save process id in a file]:file:_files' \
 | |
|   "${ign}(- *)"{-h,--help}'[display usage information]' \
 | |
|   "${ign}(- *)"{-V,--version}'[display version information]' \
 | |
|   '*:file:_files' && ret=0
 | |
| 
 | |
| case $state in
 | |
|   formats)
 | |
|     compset -P '(%?|%<->A|[^%])#'
 | |
|     fmts=(
 | |
|       'p:progress bar'
 | |
|       't:elapsed time'
 | |
|       'e:estimated time remaining'
 | |
|       'I:estimated time of completion'
 | |
|       'r:current data transfer rate'
 | |
|       'a:average data transfer rate'
 | |
|       'b:bytes transferred so far'
 | |
|       'T:percentage of transfer buffer in use'
 | |
|       'N:name prefix'
 | |
|       '%:literal %'
 | |
|     )
 | |
|     _describe -t format-specifiers 'format specifier' fmts -p % -S ''
 | |
|   ;;
 | |
|   pid-fds)
 | |
|     if compset -P 1 '*:'; then
 | |
|       _message -e file-descriptors 'file descriptor'
 | |
|     else
 | |
|       compset -S ':*' || suf=( -qS : )
 | |
|       _pids $suf && ret=0
 | |
|     fi
 | |
|   ;;
 | |
|   size-unit)
 | |
|     if compset -P '<->'; then
 | |
|       _tags values units
 | |
|     else
 | |
|       _tags values
 | |
|     fi
 | |
|     while _tags; do
 | |
|       _requested values && _message -e values "$state_descr" && ret=0
 | |
|       _requested units expl unit compadd -o nosort - K M G T && ret=0
 | |
|       (( ret )) || break
 | |
|     done
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| return ret
 |