Commits

Javier Aravena committed c41bf97

Updated for xz archives

Comments (0)

Files changed (2)

+# Contributor: Jakub Ruzicka <yaccobb@centrum.cz>
+# Contributor: Javier ‘Phrodo_00’ Aravena <phrodo.00@gmail.com>
+
+pkgname=zsh-yaourt
+pkgver=0.2.2
+pkgrel=1
+pkgdesc="ZSH functions to tab-complete repo package names for yaourt"
+url="http://www.zsh.org/"
+depends=(zsh)
+source=(_yaourt)
+arch=('i686' 'x86_64')
+license=('GPL')
+md5sums=('88c51a5461c1253b6a45d4c2a75e9daf')
+
+build() {
+  mkdir -p $startdir/pkg/usr/share/zsh/site-functions/
+  install -m644 _yaourt $startdir/pkg/usr/share/zsh/site-functions/_yaourt
+}
+#compdef yaourt
+
+# copy this file to /usr/share/zsh/site-functions/_yaourt
+
+typeset -A opt_args
+
+# options for passing to _arguments: main pacman commands
+_yaourt_opts_commands=(
+	'-A[Add a package to the system]'
+	'-Q[Query the package database]'
+	'-R[Remove a package from the system]'
+	'-S[Synchronize packages]'
+	'-U[Upgrade a package]'
+	'-V[Display version and exit]'
+	'-h[Display usage]'
+    '-B[backup pacman database]'
+    '-G[Get PKGBUILD]'
+)
+
+# options for passing to _arguments: options common to all commands
+_yaourt_opts_common=(
+	'-b[Alternate database location]:database_location:_files -/'
+	'-h[Display syntax for the given operation]'
+	'-r[Set alternate installation root]:installation root:_files -/'
+	'-v[Be more verbose]'
+	'--cachedir[Alternate package cache location]:cache_location:_files -/'
+	'--config[An alternate configuration file]:config file:_files'
+	'--logfile[An alternate log file]:config file:_files'
+	'--noconfirm[Do not ask for confirmation]'
+	'--noprogressbar[Do not show a progress bar when downloading files]'
+	'--noscriptlet[Do not execute the install scriptlet if one exists]'
+)
+
+# options for passing to _arguments: options for --add and --update commands
+_yaourt_opts_pkgfile=(
+	'-d[Skip dependency checks]'
+	'-f[Overwrite conflicting files]'
+	'*:package file:_files -g "*.pkg.tar.*"'
+)
+
+# options for passing to _arguments: subactions for --query command
+_yaourt_opts_query_actions=(
+	'-g[View all members of a package group]:*:package groups:->query_group'
+	'-o[Query the package that owns a file]:file:_files'
+	'-p[Package file to query]:*:package file:->query_file'
+	'-s[Search package names and descriptions]:*:search text:->query_search'
+)
+
+# options for passing to _arguments: options for --query and subcommands
+_yaourt_opts_query_modifiers=(
+	'-c[List package changelog]'
+	'-d[List packages installed as dependencies]'
+	'-e[List packages explicitly installed]'
+	'-i[View package information]'
+	'-ii[View package information including backup files]'
+	'-l[List package contents]'
+	'-m[List installed packages not found in sync db(s)]'
+	'-t[List packages not required by any package]'
+	'-u[List packages that can be upgraded]'
+)
+
+# options for passing to _arguments: options for --remove command
+_yaourt_opts_remove=(
+	'-c[Remove all dependent packages]'
+	'-d[Skip dependency checks]'
+	'-k[Only remove database entry, do not remove files]'
+	'-n[Remove protected configuration files]'
+	'-s[Remove dependencies not required by other packages]'
+	'*:installed package:_yaourt_completions_installed_packages'
+)
+
+# options for passing to _arguments: options for --sync command
+_yaourt_opts_sync_actions=(
+	'*-c[Remove old packages from cache]:*:clean:->sync_clean'
+	'*-cc[Remove all packages from cache]:*:clean:->sync_clean'
+	'-g[View all members of a package group]:*:package groups:->sync_group'
+	'-s[Search package names and descriptions]:*:search text:->sync_search'
+)
+
+# options for passing to _arguments: options for --sync command
+_yaourt_opts_sync_modifiers=(
+	'-d[Skip dependency checks]'
+	'-e[Install dependencies only]'
+	'-f[Overwrite conflicting files]'
+	'-i[View package information]'
+	'-l[List all packages in a repository]'
+	'-p[Print download URIs for each package to be installed]'
+	'-u[Upgrade all out-of-date packages]'
+	'-w[Download packages only]'
+	'-y[Download fresh package databases]'
+	'*--ignore[Ignore a package upgrade]:package:
+		_yaourt_completions_all_packages'
+	'*--ignoregroup[Ignore a group upgrade]:package group:
+		_yaourt_completions_all_groups'
+	'--asdeps[Install packages as non-explicitly installed]'
+	'--aur[Install packages from aur, even if they are in community, or, with the -u option, update packages installed from aur]'
+	'--devel[Used with -u updates all cvs/svn/git/hg/bzr packages]'
+)
+
+# handles --action subcommand
+_yaourt_action_add() {
+	_arguments -s : \
+		"$_yaourt_opts_common[@]" \
+		"$_yaourt_opts_pkgfile[@]"
+}
+
+# handles --help subcommand
+_yaourt_action_help() {
+	_arguments -s : \
+		"$_yaourt_opts_commands[@]"
+}
+
+# handles cases where no subcommand has yet been given
+_yaourt_action_none() {
+	_arguments -s : \
+		"$_yaourt_opts_commands[@]"
+}
+
+# handles --query subcommand
+_yaourt_action_query() {
+	local context state line
+	typeset -A opt_args
+	
+#	_arguments -s : \
+#		"$_yaourt_opts_common[@]" \
+#		"$_yaourt_opts_query_actions[@]" \
+#		"$_yaourt_opts_query_modifiers[@]"
+		
+	case $state in
+		query_file)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:package file:_files -g "*.pkg.*.gz"'
+				;;
+		query_group)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:groups:_yaourt_completions_installed_groups'
+				;;
+		query_owner)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:file:_files'
+				;;
+		query_search)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:search text: '
+				;;
+		*)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_actions[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:package:_yaourt_completions_installed_packages'
+				;;
+	esac
+}
+
+# handles --remove subcommand
+_yaourt_action_remove() {
+	_arguments -s : \
+		"$_yaourt_opts_common[@]" \
+		"$_yaourt_opts_remove[@]"
+}
+
+# handles --sync subcommand
+_yaourt_action_sync() {
+	local context state line
+	typeset -A opt_args
+	
+#	_arguments -s : \
+#		"$_yaourt_opts_common[@]" \
+#		"$_yaourt_opts_sync_actions[@]" #\
+#		#"$_yaourt_opts_sync_modifiers[@]"
+		
+	case $state in
+		sync_clean)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*-c[Remove old packages from cache]' \
+				;;
+		sync_group)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*:package group:_yaourt_completions_all_groups'
+				;;
+		sync_search)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*:search text: '
+				;;
+		*)
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*:package:_yaourt_completions_all_packages'
+				;;
+		esac
+}
+
+# handles --upgrade subcommand
+_yaourt_action_upgrade() {
+	_arguments -s : \
+		"$_yaourt_opts_common[@]" \
+		"$_yaourt_opts_pkgfile[@]"
+}
+
+# handles --version subcommand
+_yaourt_action_version() {
+	# no further arguments
+	return 0
+}
+
+# provides completions for package groups
+_yaourt_completions_all_groups() {
+	local -a cmd groups
+	_yaourt_get_command
+	groups=( $(_call_program groups $cmd[@] -Sg) )
+	compadd "$@" -a groups
+}
+
+# provides completions for packages available from repositories
+# these can be specified as either 'package' or 'repository/package'
+_yaourt_completions_all_packages() {
+	local -a cmd packages repositories packages_long
+
+	repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
+	typeset -U repositories
+	packages_long=(/var/lib/pacman/sync/${^repositories}/*(/))
+	packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} )
+	typeset -U packages
+	_wanted packages expl "packages" compadd - "${(@)packages}"
+	if [[ $PREFIX != */* ]] ; then
+		repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
+		typeset -U repositories
+		_wanted repo_packages expl "repository/package" compadd -S "/" $repositories
+	else
+		compset -P '*/'
+		packages_long=(/var/lib/pacman/sync/$IPREFIX*(/))
+		packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} )
+		typeset -U packages
+		_wanted repo_packages expl "repository/package" compadd ${(@)packages}
+	fi
+}
+
+# provides completions for package groups
+_yaourt_completions_installed_groups() {
+	local -a cmd groups
+	_yaourt_get_command
+	groups=(${(o)${(f)"$(pacman -Qg)"}% *})
+	typeset -U groups
+	compadd "$@" -a groups
+}
+
+# provides completions for installed packages
+_yaourt_completions_installed_packages() {
+	local -a cmd packages packages_long
+	packages_long=(/var/lib/pacman/local/*(/))
+	packages=( ${${packages_long/\/var\/lib\/pacman\/local\//}%-*-*} )
+	compadd "$@" -a packages
+}
+
+# provides completions for repository names
+_yaourt_completions_repositories() {
+	local -a cmd repositories
+	repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
+	# Uniq the array
+	typeset -U repositories
+	compadd "$@" -a repositories
+}
+
+# builds command for invoking pacman in a _call_program command - extracts
+# relevant options already specified (config file, etc)
+# $cmd must be declared by calling function
+_yaourt_get_command() {
+	# this is mostly nicked from _perforce
+	cmd=( "pacman" )
+	integer i
+	for (( i = 2; i < CURRENT - 1; i++ )); do
+		if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then
+			cmd+=( ${words[i,i+1]} )
+		fi
+	done
+}
+
+# main dispatcher
+_yaourt() {
+	case $words[2] in
+		-A*)  _yaourt_action_add      ;;
+		-Q*g*) # ipkg groups
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:groups:_yaourt_completions_installed_groups'
+				;;
+		-Q*o*) # file
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:package file:_files'
+				;;
+		-Q*p*) # file *.pkg.tar.*
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_query_modifiers[@]" \
+				'*:package file:_files -g "*.pkg.tar.*"'
+				;;
+		-Q*)  _yaourt_action_query    ;;
+		-R*)  _yaourt_action_remove   ;;
+		-S*c*) # no completion
+			return 0
+			;;
+		-S*l*) # repos
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*:package repo:_yaourt_completions_repositories' \
+				;;
+		-S*g*) # pkg groups
+			_arguments -s : \
+				"$_yaourt_opts_common[@]" \
+				"$_yaourt_opts_sync_modifiers[@]" \
+				'*:package group:_yaourt_completions_all_groups'
+				;;
+		-S*)  _yaourt_action_sync     ;;
+		-U*)  _yaourt_action_upgrade  ;;
+		-V*)  _yaourt_action_version  ;;
+		-h*)  _yaourt_action_help     ;;
+		-  )  _yaourt_action_none     ;;
+		*  )  return 1                ;;
+	esac
+}
+
+# run the main dispatcher
+_yaourt "$@"
+