mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#compdef osc
 | 
						|
#
 | 
						|
# Copyright (C) 2009,2010 Holger Macht <holger@homac.de>
 | 
						|
#
 | 
						|
# This file is released under the GPLv2.
 | 
						|
#
 | 
						|
# Based on 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_11.2 openSUSE_11.3 openSUSE_11.4 openSUSE_12.1 openSUSE_Tumbleweed openSUSE_Factory SLE_11_SP1"
 | 
						|
OSC_PROJECTS="openSUSE:Factory openSUSE:Tumbleweed openSUSE:12.1 openSUSE:11.4 openSUSE:11.2 openSUSE:11.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 "$@"
 | 
						|
 | 
						|
 |