#compdef feh
## completion for feh 1.8, based on feh(1)
## Copyright (C) 2008-2010 by Daniel Friesel <derf@derf.homelinux.org>
## License: WTFPL <http://sam.zoy.org/wtfpl>:
##   0. You just DO WHAT THE FUCK YOU WANT TO.
##
## http://derf.homelinux.org/git/zsh/plain/etc/completions/_feh

typeset -a arguments
typeset -A argument_pairs argument_postfix
typeset arg

argument_pairs=(
	'help'        'h'
	'version'     'v'
	'verbose'     'V'
	'quiet'       'q'
	'theme'       'T+'
	'recursive'   'r'
	'randomize'   'z'
	'filelist'    'f+'
	'preload'     'p'
	'full-screen' 'F'
	'geometry'    'g+'
	'auto-zoom'   'Z'
	'multiwindow' 'w'
	'borderless'  'x'
	'draw-filename' 'd'
	'slideshow-delay' 'D+'
	'reload'      'R+'
	'keep-http'   'k'
	'builtin'     'Q'
	'list'        'l'
	'customlist'  'L+'
	'loadable'    'U'
	'unloadable'  'u'
	'sort'        'S+'
	'reverse'     'n'
	'action'      'A+'
	'montage'     'm'
	'collage'     'c'
	'index'       'i'
	'fullindex'   'I'
	'thumbnails'  't'
	'menu-font'   'M+'
	'no-menus'    'N'
	'reload-button' '0'
	'pan-button'  '1+'
	'zoom-button' '2+'
	'menu-button' '3+'
	'prev-button' '4+'
	'next-button' '5+'
	'rotate-button' '8+'
	'blur-button' '9+'
	'ignore-aspect' 'X'
	'stretch'     's'
	'thumb-width' 'y+'
	'thumb-height' 'E+'
	'limit-width' 'W+'
	'limit-height' 'H+'
	'bg'          'b+'
	'alpha'       'a+'
	'font'        'e+'
	'scale-down'  '.'
	'output-dir'  'j+'
	'fontpath'    'C+'
	'image-bg'    'B+'
	'output'      'o'
	'output-only' 'O'
	'rcfile'      '_'
	'thumb-title' '~'
	'title'       '^'
	'start-at'    '|'
	'title-font'  '@'
	'cache-thumbnails' 'P'
	'caption-path' 'K+'
	'draw-actions' 'G'
	'thumb-redraw' 'J+'
)

argument_postfix=(
	'help'        '[Show help]'
	'version'     '[Show version information]'
	'verbose'     '[Be verbose]'
	'quiet'       '[Suppress non-fatal errors]'
	'theme'       '[Load named options from config]:theme:_feh_theme'
	'recursive'   '[Recurse into subdirectories]'
	'randomize'   '[Randomize file list before displaying]'
	'filelist'    '[Read file list from this file]:file:_files'
	'preload'     '[Eliminate unlaodable images before displaying]'
	'full-screen' '[Make the window fullscreen]'
	'geometry'    '[Limit window size]:geometry: '
	'auto-zoom'   '[Zoom picture to screen size]'
	'multiwindow' '[Multiple windows, one image per window]'
	'borderless'  '[Borderless windows]'
	'draw-filename' '[Show filename in images]'
	'reload'      '[Time delay for reloading]:time: '
	'keep-http'   "[Don't delete cached files]"
	'builtin'     '[Use builtin http client]'
	'list'        '[List images, their size, etc.]'
	'customlist'  '[Format list output]:format: '
	'loadable'    '[Print loadable images]'
	'unloadable'  '[Print unloadable images]'
	'sort'        '[Sort images]:sort type:(name filename width height pixels size format)'
	'reverse'     '[Reverse sort order]'
	'action'      '[Action to perform on each image]:shell: '
	'montage'     '[Enable montage mode]'
	'collage'     '[Enable collage mode]'
	'index'       '[Enable index mode]'
	'fullindex'   '[Enable verbose index mode]'
	'thumbnails'  '[Enable interactive index mode]'
	'menu-font'   '[Set font in menus]:font: '
	'no-menus'    "[Don't load or show any menus]"
	'reload-button' '[Button to reload image]:button:_feh_button'
	'pan-button'  '[Button to pan image]:button:_feh_button'
	'zoom-button' '[Button to zoom image]:button:_feh_button'
	'menu-button' '[Button to activate menu]:button:_feh_button'
	'prev-button' '[Button to go to previous image]:button:_feh_button'
	'next-button' '[Button to go to next image]:button:_feh_button'
	'rotate-button' '[Ctrl+Button to rotate image]:button:_feh_button'
	'blur-button' '[Ctrl+Button tu blur image]:button:_feh_button'
	'ignore-aspect' "[montage mode: Don't preserve aspect ratio]"
	'stretch'     '[montage mode: Enlarge images to fit thumbnail size]'
	'thumb-width' '[montage mode: Thumbnail width]:pixels: '
	'thumb-height' '[montage mode: Thumbnail height]:pixels: '
	'limit-width' '[montage mode: Limit montage width]:pixels: '
	'limit-height' '[montage mode: Limit montage heihgt]:pixels: '
	'bg'          '[montage mode: Background image]:file:_files'
	'alpha'       '[montage mode: Thumbnail transparency level]:integer: '
	'font'        '[index mode: Thumbnail info font]:font: '
	'slideshow-delay' '[slide change delay]:seconds'
	'scale-down'  '[Scale down images which are too big]'
	'output-dir'  '[Save files to DIR (with -k)]:directory:_files -/'
	'fontpath'    '[Add paths to font path]:font path:_files -/'
	'image-bg'    '[Set transparent image background]:background:(white black default)'
	'output'      '[montage mode: Output file]:file:_files'
	'output-only' "[montage mode: Output file, don't display montage]:file:_files"
	'rcfile'      '[Specify config file]:file:_files'
	'thumb-title' '[Window title in thumbnail mode]:format string'
	'title'       '[Window title in slideshow mode]:format string'
	'start-at'    '[Start slideshow at]:file:_files'
	'title-font'  '[Title font for index mode]:font'
	'cache-thumbnails' '[Enable thumbnail caching]'
	'caption-path' '[Where to look for image captions]:relative directory: '
	'draw-actions' '[Draw defined actions]'
	'thumb-redraw' '[Set thumbnail image redraw frequency]:digit'
)

arguments=(
	'--zoom[Zoom images]:percent: '
	--action{1..9}':shell: '
	'--bg-tile[Set tiled desktop background]:file:_files'
	'--bg-center[Set centered desktop background]:file:_files'
	'--bg-scale[Set scaled desktop background]:file:_files'
	'--bg-seamless[Set desktop background with seamless borders]:file:_files'
	'--bg-fill[Set scaled desktop background, preserving aspect ratio]:file:_files'
	'--bg-max[Set scaled desktop background, like fill with borders]:file:_files'
	'--info[Show additional information]:info command'
	'--menu-style[Style descriptor for menu text]:file:_files'
	'--menu-ctrl-mask[Use Ctrl+Button to display menu]'
	'--no-rotate-ctrl-mask[Don'\''t require Ctrl for the rotate button]'
	'--no-blur-ctrl-mask[Don'\''t require Ctrl for the blur button]'
	'--no-xinerama[Disable xinerama support]'
	'--no-screen-clip[Disable window clipping]'
	'--hide-pointer[Hide mouse pointer in fullscreen mode]'
	'*--fontpath[index mode: directory to search for fonts]:directory:_path_files -/'
	'--index-name[Show image name in index/thumbnail mode]:bool:(0 1)'
	'--index-size[Show image size in index/thumbnail mode]:bool:(0 1)'
	'--index-dim[Show image dimensions in index/thumbnail mode]:bool:(0 1)'
	'--no-jump-on-resort[Stay at current image after resorting the filelist]'
	'--cycle-once[Quit after one loop through the slideshow]'
	'--menu-bg[Background image in menus]: :_feh_background'
	'--xinerama-screen[Set xinerama screen to work on]:digit'
	'*:file:_files'
)

for arg in ${(k)argument_pairs}; {
	arguments+='(--'${arg}')-'${argument_pairs[$arg]}${argument_postfix[$arg]}
	arguments+='(-'${${argument_pairs[$arg]}[1]}')--'${arg}${argument_postfix[$arg]}
}

function _feh_theme {
	if [[ -r ~/.fehrc ]]; then
		typeset -a themes tmp
		typeset theme IFS=$'\n'
		for theme in $(grep "\w" ~/.fehrc | grep -v "^#"); do
			tmp=(${(s: :)theme})
			theme=${tmp[1]}
			shift tmp
			themes+=${theme}:${(j: :)tmp}
		done
		_describe 'theme' themes
	fi
}

function _feh_button {
	typeset expl
	_wanted button expl button \
	compadd {0..5}
}

function _feh_background {
	_alternative \
	'file:file:_files' \
	'mode:mode:(trans)'
}

_arguments -s ${arguments}