mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef osc
 | |
| #
 | |
| # Copyright (C) 2009,2010 Holger Macht <holger@homac.de>
 | |
| #
 | |
| # This file is released under the GPLv2.
 | |
| #
 | |
| # Based on the the zsh guide from http://zsh.dotsrc.org/Guide/zshguide06.html
 | |
| #
 | |
| # Toggle verbose completions: zstyle ':completion:*:osc:*' verbose no
 | |
| #                             zstyle ':completion:*:osc-subcommand:*' verbose no
 | |
| # 
 | |
| # Use the variables $ZSH_OSC_BUILD_TARGETS_EXTRA and $ZSH_OSC_PROJECTS_EXTRA to
 | |
| # extend the list of possible completions in your ~/.zshrc like that:
 | |
| #  export OSC_PROJECTS_EXTRA="Base:System Base:shells"
 | |
| #
 | |
| # version 0.2
 | |
| #
 | |
| 
 | |
| OSC_BUILD_TARGETS="openSUSE_10.2 openSUSE_10.3 openSUSE_11.0 openSUSE_11.1 openSUSE_11.2 openSUSE_11.3 openSUSE_Factory"
 | |
| OSC_PROJECTS="openSUSE:Factory openSUSE:11.2 openSUSE:11.3 openSUSE:11.1 openSUSE:11.0 openSUSE:10.3"
 | |
| 
 | |
| # user defined variables $OSC_BUILD_TARGETS_EXTRA and
 | |
| # $OSC_PROJECTS_EXTRA can add to the project/build target list
 | |
| OSC_BUILD_TARGETS="$OSC_BUILD_TARGETS $ZSH_OSC_BUILD_TARGETS_EXTRA"
 | |
| OSC_PROJECTS="$OSC_PROJECTS $ZSH_OSC_PROJECTS_EXTRA"
 | |
| 
 | |
| # Main dispatcher
 | |
| 
 | |
| _osc() {
 | |
|     if (( CURRENT > 2 )) && [[ ${words[2]} != "help" ]]; then
 | |
|         # Remember the subcommand name
 | |
| 	local cmd=${words[2]}
 | |
|         # Set the context for the subcommand.
 | |
| 	curcontext="${curcontext%:*:*}:osc-subcommand"
 | |
|         # Narrow the range of words we are looking at to exclude `osc'
 | |
| 	(( CURRENT-- ))
 | |
| 	shift words
 | |
|         # Run the completion for the subcommand
 | |
| 	if [ "$cmd" = "submitreq" -o "$cmd" = "sr" ]; then
 | |
| 	    _osc_cmd_submitreq
 | |
| 	elif [ "$cmd" = "getbinaries" ]; then
 | |
| 	    _osc_cmd_getbinaries
 | |
| 	elif [ "$cmd" = "checkout" -o "$cmd" = "co" -o "$cmd" = "branch" ]; then
 | |
| 	    _osc_cmd_checkout
 | |
| 	elif [ "$cmd" = "buildlog" -o "$cmd" = "buildinfo" -o "$cmd" = "bl" ]; then
 | |
| 	    _osc_cmd_buildlog
 | |
| 	else
 | |
| 	    _osc_cmd_do $cmd
 | |
| 	fi
 | |
|     else
 | |
| 	local hline
 | |
| 	local -a cmdlist
 | |
| 	local tag=0
 | |
| 	_call_program help-commands osc help | while read -A hline; do
 | |
| 	    # start parsing with "commands:"
 | |
| 	    [[ $hline[1] = "commands:" ]] && tag=1
 | |
| 	    # stop parsing at the line starting with "For"
 | |
| 	    [[ $hline[1] = "For" ]] && tag=0
 | |
| 	    [[ $tag = 0 ]] && continue
 | |
| 	    # all commands have to start with lower case letters
 | |
| 	    [[ $hline[1] =~ ^[A-Z] ]] && continue
 | |
| 	    (( ${#hline} < 2 )) && continue
 | |
| 
 | |
|     	    # ${hline[1]%,} truncates the last ','
 | |
| 	    cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
 | |
| 	done
 | |
| 	_describe -t osc-commands 'osc command' cmdlist
 | |
|     fi
 | |
| }
 | |
| 
 | |
| _osc_cmd_getbinaries() {
 | |
|     _arguments \
 | |
| 	'1:PROJECT:( `echo $OSC_PROJECTS` )' \
 | |
| 	'2:PACKAGE:(PACKAGE)' \
 | |
| 	'3:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
 | |
| 	'4:ARCHITECTURE:(i586 x86_64)'
 | |
| }
 | |
| 
 | |
| _osc_cmd_checkout() {
 | |
|     _arguments \
 | |
| 	'1:PROJECT:( `echo $OSC_PROJECTS` )' \
 | |
| 	'2:PACKAGE:(PACKAGE)'
 | |
| }
 | |
| 
 | |
| _osc_cmd_buildlog() {
 | |
|     _arguments \
 | |
| 	'1:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
 | |
| 	'2:ARCHITECTURE:(i586 x86_64)'
 | |
| }
 | |
| 
 | |
| _osc_cmd_submitreq() {
 | |
|     local hline
 | |
|     local -a cmdlist
 | |
|     local tag=0
 | |
|     _call_program help-commands osc help $cmd | while read -A hline; do
 | |
|         # start parsing from "usage:"
 | |
| 	[[ $hline[1] = "usage:" ]] && tag=1
 | |
| 	[[ $tag = 0 ]] && continue
 | |
| 
 | |
| 	if [[ $hline[1] =~ ^osc ]]; then
 | |
| 	    shift hline; shift hline
 | |
| 	elif ! [[ $hline[1] =~ ^- ]]; then
 | |
|             # Option has to start with a '-' or 'osc submitrequest'
 | |
| 	    continue
 | |
| 	fi
 | |
| 
 | |
| 	(( ${#hline} < 2 )) && continue
 | |
| 
 | |
| 	cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
 | |
| 
 | |
|     done
 | |
|     
 | |
|     _describe -t osc-commands 'osc command' cmdlist
 | |
| }
 | |
| 
 | |
| 
 | |
| _osc_cmd_do() {
 | |
|     local hline
 | |
|     local -a cmdlist
 | |
|     local tag=0
 | |
|     
 | |
|     # only start completion if theres some '-' on the line
 | |
|     if ! [ "$words[2]" = "-" ]; then
 | |
| 	_complete
 | |
| 	return
 | |
|     fi
 | |
| 
 | |
|     _call_program help-commands osc help $cmd | while read -A hline; do
 | |
| 	# start parsing from "Options:"
 | |
| 	[[ $hline[1] = "Options:" ]] && tag=1
 | |
| 	[[ $tag = 0 ]] && continue
 | |
| 	# Option has to start with a '-'
 | |
| 	[[ $hline[1] =~ ^- ]] || continue
 | |
| 	(( ${#hline} < 2 )) && continue
 | |
| 
 | |
| 	cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
 | |
|     done
 | |
| 
 | |
|     if [ -n "$cmdlist" ]; then
 | |
| 	_describe -t osc-commands 'osc command' cmdlist
 | |
|     else
 | |
| 	_complete
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Code to make sure _osc is run when we load it
 | |
| _osc "$@"
 | |
| 
 | |
| 
 |