parent
9373d16a9f
commit
f5c761c278
@ -1,6 +1,5 @@
|
|||||||
# commands to control local apache2 server installation
|
# Aliases
|
||||||
# paths are for osx installation via macports
|
|
||||||
|
|
||||||
alias apache2start='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper start'
|
alias apache2start='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper start'
|
||||||
alias apache2stop='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper stop'
|
alias apache2stop='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper stop'
|
||||||
alias apache2restart='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper restart'
|
alias apache2restart='sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper restart'
|
||||||
|
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
# Archlinux zsh aliases and functions
|
|
||||||
# Usage is also described at https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins
|
|
||||||
|
|
||||||
# Look for yaourt, and add some useful functions if we have it.
|
|
||||||
if [[ -x `which yaourt` ]]; then
|
|
||||||
upgrade () {
|
|
||||||
yaourt -Syu
|
|
||||||
}
|
|
||||||
alias yaconf='yaourt -C' # Fix all configuration files with vimdiff
|
|
||||||
# Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips
|
|
||||||
alias yaupg='yaourt -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
|
|
||||||
alias yain='yaourt -S' # Install specific package(s) from the repositories
|
|
||||||
alias yains='yaourt -U' # Install specific package not from the repositories but from a file
|
|
||||||
alias yare='yaourt -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies
|
|
||||||
alias yarem='yaourt -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies
|
|
||||||
alias yarep='yaourt -Si' # Display information about a given package in the repositories
|
|
||||||
alias yareps='yaourt -Ss' # Search for package(s) in the repositories
|
|
||||||
alias yaloc='yaourt -Qi' # Display information about a given package in the local database
|
|
||||||
alias yalocs='yaourt -Qs' # Search for package(s) in the local database
|
|
||||||
# Additional yaourt alias examples
|
|
||||||
if [[ -x `which abs` ]]; then
|
|
||||||
alias yaupd='yaourt -Sy && sudo abs' # Update and refresh the local package and ABS databases against repositories
|
|
||||||
else
|
|
||||||
alias yaupd='yaourt -Sy' # Update and refresh the local package and ABS databases against repositories
|
|
||||||
fi
|
|
||||||
alias yainsd='yaourt -S --asdeps' # Install given package(s) as dependencies of another package
|
|
||||||
alias yamir='yaourt -Syy' # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist
|
|
||||||
else
|
|
||||||
upgrade() {
|
|
||||||
sudo pacman -Syu
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips
|
|
||||||
alias pacupg='sudo pacman -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
|
|
||||||
alias pacin='sudo pacman -S' # Install specific package(s) from the repositories
|
|
||||||
alias pacins='sudo pacman -U' # Install specific package not from the repositories but from a file
|
|
||||||
alias pacre='sudo pacman -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies
|
|
||||||
alias pacrem='sudo pacman -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies
|
|
||||||
alias pacrep='pacman -Si' # Display information about a given package in the repositories
|
|
||||||
alias pacreps='pacman -Ss' # Search for package(s) in the repositories
|
|
||||||
alias pacloc='pacman -Qi' # Display information about a given package in the local database
|
|
||||||
alias paclocs='pacman -Qs' # Search for package(s) in the local database
|
|
||||||
# Additional pacman alias examples
|
|
||||||
if [[ -x `which abs` ]]; then
|
|
||||||
alias pacupd='sudo pacman -Sy && sudo abs' # Update and refresh the local package and ABS databases against repositories
|
|
||||||
else
|
|
||||||
alias pacupd='sudo pacman -Sy' # Update and refresh the local package and ABS databases against repositories
|
|
||||||
fi
|
|
||||||
alias pacinsd='sudo pacman -S --asdeps' # Install given package(s) as dependencies of another package
|
|
||||||
alias pacmir='sudo pacman -Syy' # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist
|
|
||||||
|
|
||||||
# https://bbs.archlinux.org/viewtopic.php?id=93683
|
|
||||||
paclist() {
|
|
||||||
sudo pacman -Qei $(pacman -Qu|cut -d" " -f 1)|awk ' BEGIN {FS=":"}/^Name/{printf("\033[1;36m%s\033[1;37m", $2)}/^Description/{print $2}'
|
|
||||||
}
|
|
||||||
|
|
||||||
alias paclsorphans='sudo pacman -Qdt'
|
|
||||||
alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)'
|
|
||||||
|
|
||||||
pacdisowned() {
|
|
||||||
tmp=${TMPDIR-/tmp}/pacman-disowned-$UID-$$
|
|
||||||
db=$tmp/db
|
|
||||||
fs=$tmp/fs
|
|
||||||
|
|
||||||
mkdir "$tmp"
|
|
||||||
trap 'rm -rf "$tmp"' EXIT
|
|
||||||
|
|
||||||
pacman -Qlq | sort -u > "$db"
|
|
||||||
|
|
||||||
find /bin /etc /lib /sbin /usr \
|
|
||||||
! -name lost+found \
|
|
||||||
\( -type d -printf '%p/\n' -o -print \) | sort > "$fs"
|
|
||||||
|
|
||||||
comm -23 "$fs" "$db"
|
|
||||||
}
|
|
@ -1,3 +1,8 @@
|
|||||||
if [ -f `brew --prefix`/etc/autojump ]; then
|
if [[ -f /etc/profile.d/autojump.zsh ]]; then
|
||||||
. `brew --prefix`/etc/autojump
|
source /etc/profile.d/autojump.zsh
|
||||||
|
elif [[ -f /opt/local/etc/profile.d/autojump.zsh ]]; then
|
||||||
|
source /opt/local/etc/profile.d/autojump.zsh
|
||||||
|
elif [[ -f "$(brew --prefix 2> /dev/null)/etc/autojump.zsh" ]]; then
|
||||||
|
source "$(brew --prefix)/etc/autojump.zsh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
_brew
|
@ -1,80 +0,0 @@
|
|||||||
#compdef brew
|
|
||||||
#autoload
|
|
||||||
|
|
||||||
# imported from the latest homebrew contributions
|
|
||||||
|
|
||||||
_brew_all_formulae() {
|
|
||||||
formulae=(`brew search`)
|
|
||||||
}
|
|
||||||
|
|
||||||
_brew_installed_formulae() {
|
|
||||||
installed_formulae=(`brew list`)
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a _1st_arguments
|
|
||||||
_1st_arguments=(
|
|
||||||
'cat:display formula file for a formula'
|
|
||||||
'cleanup:uninstall unused and old versions of packages'
|
|
||||||
'create:create a new formula'
|
|
||||||
'deps:list dependencies and dependants of a formula'
|
|
||||||
'doctor:audits your installation for common issues'
|
|
||||||
'edit:edit a formula'
|
|
||||||
'home:visit the homepage of a formula or the brew project'
|
|
||||||
'info:information about a formula'
|
|
||||||
'install:install a formula'
|
|
||||||
'link:link a formula'
|
|
||||||
'list:list files in a formula or not-installed formulae'
|
|
||||||
'log:git commit log for a formula'
|
|
||||||
'missing:check all installed formuale for missing dependencies.'
|
|
||||||
'outdated:list formulas for which a newer version is available'
|
|
||||||
'prune:remove dead links'
|
|
||||||
'remove:remove a formula'
|
|
||||||
'search:search for a formula (/regex/ or string)'
|
|
||||||
'server:start a local web app that lets you browse formulae (requires Sinatra)'
|
|
||||||
'unlink:unlink a formula'
|
|
||||||
'update:freshen up links'
|
|
||||||
'upgrade:upgrade outdated formulae'
|
|
||||||
'uses:show formulas which depend on a formula'
|
|
||||||
)
|
|
||||||
|
|
||||||
local expl
|
|
||||||
local -a formulae installed_formulae
|
|
||||||
|
|
||||||
_arguments \
|
|
||||||
'(-v)-v[verbose]' \
|
|
||||||
'(--cellar)--cellar[brew cellar]' \
|
|
||||||
'(--config)--config[brew configuration]' \
|
|
||||||
'(--env)--env[brew environment]' \
|
|
||||||
'(--repository)--repository[brew repository]' \
|
|
||||||
'(--version)--version[version information]' \
|
|
||||||
'(--prefix)--prefix[where brew lives on this system]' \
|
|
||||||
'(--cache)--cache[brew cache]' \
|
|
||||||
'*:: :->subcmds' && return 0
|
|
||||||
|
|
||||||
if (( CURRENT == 1 )); then
|
|
||||||
_describe -t commands "brew subcommand" _1st_arguments
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$words[1]" in
|
|
||||||
search|-S)
|
|
||||||
_arguments \
|
|
||||||
'(--macports)--macports[search the macports repository]' \
|
|
||||||
'(--fink)--fink[search the fink repository]' ;;
|
|
||||||
list|ls)
|
|
||||||
_arguments \
|
|
||||||
'(--unbrewed)--unbrewed[files in brew --prefix not controlled by brew]' \
|
|
||||||
'(--versions)--versions[list all installed versions of a formula]' \
|
|
||||||
'1: :->forms' && return 0
|
|
||||||
|
|
||||||
if [[ "$state" == forms ]]; then
|
|
||||||
_brew_installed_formulae
|
|
||||||
_wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae
|
|
||||||
fi ;;
|
|
||||||
install|home|homepage|log|info|abv|uses|cat|deps|edit|options)
|
|
||||||
_brew_all_formulae
|
|
||||||
_wanted formulae expl 'all formulae' compadd -a formulae ;;
|
|
||||||
remove|rm|uninstall|unlink|cleanup|link|ln)
|
|
||||||
_brew_installed_formulae
|
|
||||||
_wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae ;;
|
|
||||||
esac
|
|
@ -1 +1,14 @@
|
|||||||
|
# Complete brew.
|
||||||
|
completion_file="${0:h}/_brew"
|
||||||
|
if [[ ! -e "$completion_file" ]] && (( $+commands[brew] )); then
|
||||||
|
ln -f -s "$(brew --prefix)/Library/Contributions/brew_zsh_completion.zsh" "$completion_file" 2> /dev/null
|
||||||
|
else
|
||||||
|
if [[ -L "$completion_file" ]]; then
|
||||||
|
unlink "$completion_file" 2> /dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
unset completion_file
|
||||||
|
|
||||||
|
# Aliases
|
||||||
alias brews='brew list -1'
|
alias brews='brew list -1'
|
||||||
|
|
||||||
|
@ -1,37 +1,56 @@
|
|||||||
|
# Aliases
|
||||||
alias be="bundle exec"
|
alias be="bundle exec"
|
||||||
alias bi="bundle install"
|
alias bi="bundle install"
|
||||||
alias bl="bundle list"
|
alias bl="bundle list"
|
||||||
alias bu="bundle update"
|
alias bo="bundle open"
|
||||||
alias bp="bundle package"
|
alias bp="bundle package"
|
||||||
|
alias bu="bundle update"
|
||||||
|
|
||||||
# The following is based on https://github.com/gma/bundler-exec
|
# The following is based on https://github.com/gma/bundler-exec
|
||||||
|
bundled_commands=(
|
||||||
|
cap
|
||||||
|
capify
|
||||||
|
cucumber
|
||||||
|
guard
|
||||||
|
heroku
|
||||||
|
rackup
|
||||||
|
rails
|
||||||
|
rake
|
||||||
|
rspec
|
||||||
|
ruby
|
||||||
|
shotgun
|
||||||
|
spec
|
||||||
|
spork
|
||||||
|
thin
|
||||||
|
unicorn
|
||||||
|
unicorn_rails
|
||||||
|
)
|
||||||
|
|
||||||
bundled_commands=(cap capify cucumber guard heroku rackup rails rake rspec ruby shotgun spec spork thin unicorn unicorn_rails)
|
# Functions
|
||||||
|
function _bundler-installed() {
|
||||||
## Functions
|
|
||||||
|
|
||||||
_bundler-installed() {
|
|
||||||
which bundle > /dev/null 2>&1
|
which bundle > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
_within-bundled-project() {
|
function _bundler-within-bundled-project() {
|
||||||
local check_dir=$PWD
|
local check_dir=$PWD
|
||||||
while [ "$(dirname $check_dir)" != "/" ]; do
|
while [[ "$(dirname $check_dir)" != "/" ]]; do
|
||||||
[ -f "$check_dir/Gemfile" ] && return
|
[[ -f "$check_dir/Gemfile" ]] && return
|
||||||
check_dir="$(dirname $check_dir)"
|
check_dir="$(dirname $check_dir)"
|
||||||
done
|
done
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
_run-with-bundler() {
|
function _bundler-run() {
|
||||||
if _bundler-installed && _within-bundled-project; then
|
if _bundler-installed && __bundler-within-bundled-project; then
|
||||||
bundle exec $@
|
bundle exec $@
|
||||||
else
|
else
|
||||||
$@
|
$@
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
## Main program
|
|
||||||
for cmd in $bundled_commands; do
|
for cmd in $bundled_commands; do
|
||||||
alias $cmd="_run-with-bundler $cmd"
|
alias $cmd="_bundler-run $cmd"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
unset bundled_commands
|
||||||
|
|
||||||
|
@ -0,0 +1,191 @@
|
|||||||
|
#compdef knife
|
||||||
|
|
||||||
|
# These flags should be available everywhere according to the knife man page.
|
||||||
|
knife_general_flags=(
|
||||||
|
--help
|
||||||
|
--server-url
|
||||||
|
--key
|
||||||
|
--config
|
||||||
|
--editor
|
||||||
|
--format
|
||||||
|
--log_level
|
||||||
|
--logfile
|
||||||
|
--no-editor
|
||||||
|
--user
|
||||||
|
--print-after
|
||||||
|
--version
|
||||||
|
--yes
|
||||||
|
)
|
||||||
|
|
||||||
|
# Knife has a very special syntax, some example calls are:
|
||||||
|
# knife status
|
||||||
|
# knife cookbook list
|
||||||
|
# knife role show ROLENAME
|
||||||
|
# knife data bag show DATABAGNAME
|
||||||
|
# knife role show ROLENAME --attribute ATTRIBUTENAME
|
||||||
|
# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes
|
||||||
|
|
||||||
|
# The -Q switch in compadd allows for completion of things like "data bag" without
|
||||||
|
# having to go through two rounds of completion and avoids ZSH inserting a '\' for
|
||||||
|
# escaping spaces.
|
||||||
|
function _knife() {
|
||||||
|
local curcontext="$curcontext" state line
|
||||||
|
typeset -A opt_args
|
||||||
|
cloudproviders=(bluebox ec2 rackspace slicehost terremark)
|
||||||
|
_arguments \
|
||||||
|
'1: :->knifecmd'\
|
||||||
|
'2: :->knifesubcmd'\
|
||||||
|
'3: :->knifesubcmd2' \
|
||||||
|
'4: :->knifesubcmd3' \
|
||||||
|
'5: :->knifesubcmd4' \
|
||||||
|
'6: :->knifesubcmd5'
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(knifecmd)
|
||||||
|
compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders
|
||||||
|
;;
|
||||||
|
(knifesubcmd)
|
||||||
|
case $words[2] in
|
||||||
|
(bluebox|ec2|rackspace|slicehost|terremark)
|
||||||
|
compadd "$@" server images
|
||||||
|
;;
|
||||||
|
(client)
|
||||||
|
compadd -Q "$@" "bulk delete" list create show delete edit reregister
|
||||||
|
;;
|
||||||
|
(configure)
|
||||||
|
compadd "$@" client
|
||||||
|
;;
|
||||||
|
(cookbook)
|
||||||
|
compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
|
||||||
|
;;
|
||||||
|
(node)
|
||||||
|
compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
|
||||||
|
;;
|
||||||
|
(recipe)
|
||||||
|
compadd "$@" list
|
||||||
|
;;
|
||||||
|
(role)
|
||||||
|
compadd -Q "$@" "bulk delete" create delete edit "from file" list show
|
||||||
|
;;
|
||||||
|
(windows)
|
||||||
|
compadd "$@" bootstrap
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
_arguments '2:Subsubcommands:($(_knife_options1))'
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(knifesubcmd2)
|
||||||
|
case $words[3] in
|
||||||
|
(server)
|
||||||
|
compadd "$@" list create delete
|
||||||
|
;;
|
||||||
|
(images)
|
||||||
|
compadd "$@" list
|
||||||
|
;;
|
||||||
|
(site)
|
||||||
|
compadd "$@" vendor show share search download list unshare
|
||||||
|
;;
|
||||||
|
(show|delete|edit)
|
||||||
|
_arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
|
||||||
|
;;
|
||||||
|
(upload|test)
|
||||||
|
_arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
|
||||||
|
;;
|
||||||
|
(list)
|
||||||
|
compadd -a "$@" knife_general_flags
|
||||||
|
;;
|
||||||
|
(bag)
|
||||||
|
compadd -Q "$@" show edit list "from file" create delete
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
_arguments '3:Subsubcommands:($(_knife_options2))'
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(knifesubcmd3)
|
||||||
|
case $words[3] in
|
||||||
|
(show)
|
||||||
|
case $words[2] in
|
||||||
|
(cookbook)
|
||||||
|
versioncomp=1
|
||||||
|
_arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
|
||||||
|
;;
|
||||||
|
(node|client|role)
|
||||||
|
compadd "$@" --attribute
|
||||||
|
esac
|
||||||
|
esac
|
||||||
|
case $words[4] in
|
||||||
|
(show|edit)
|
||||||
|
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
|
||||||
|
;;
|
||||||
|
(file)
|
||||||
|
_arguments '*:file or directory:_files -g "*.(rb|json)"'
|
||||||
|
;;
|
||||||
|
(list)
|
||||||
|
compadd -a "$@" knife_general_flags
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
_arguments '*:Subsubcommands:($(_knife_options3))'
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(knifesubcmd4)
|
||||||
|
if (( versioncomp > 0 )); then
|
||||||
|
compadd "$@" attributes definitions files libraries providers recipes resources templates
|
||||||
|
else
|
||||||
|
_arguments '*:Subsubcommands:($(_knife_options2))'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(knifesubcmd5)
|
||||||
|
_arguments '*:Subsubcommands:($(_knife_options3))'
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper functions to provide the argument completion for several depths of commands
|
||||||
|
function _knife_options1() {
|
||||||
|
( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
||||||
|
}
|
||||||
|
|
||||||
|
function _knife_options2() {
|
||||||
|
( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
||||||
|
}
|
||||||
|
|
||||||
|
function _knife_options3() {
|
||||||
|
( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
||||||
|
}
|
||||||
|
|
||||||
|
# The chef_x_remote functions use knife to get a list of objects of type x on the server
|
||||||
|
function _chef_roles_remote() {
|
||||||
|
(knife role list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _chef_clients_remote() {
|
||||||
|
(knife client list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _chef_nodes_remote() {
|
||||||
|
(knife node list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _chef_cookbooks_remote() {
|
||||||
|
(knife cookbook list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _chef_sitecookbooks_remote() {
|
||||||
|
(knife cookbook site list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _chef_data_bags_remote() {
|
||||||
|
(knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
||||||
|
}
|
||||||
|
|
||||||
|
# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server
|
||||||
|
function _chef_cookbooks_local() {
|
||||||
|
(for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done)
|
||||||
|
}
|
||||||
|
|
||||||
|
# This function extracts the available cookbook versions on the chef server
|
||||||
|
function _cookbook_versions() {
|
||||||
|
(knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g')
|
||||||
|
}
|
||||||
|
|
||||||
|
function _knife "$@"
|
||||||
|
|
@ -1,5 +1,8 @@
|
|||||||
# Uses the command-not-found package zsh support
|
# Uses the command-not-found package ZSH support as seen in
|
||||||
# as seen in http://www.porcheron.info/command-not-found-for-zsh/
|
# http://www.porcheron.info/command-not-found-for-zsh/ and
|
||||||
# this is installed in Ubuntu
|
# installed in Ubuntu.
|
||||||
|
|
||||||
|
if [[ -f /etc/zsh_command_not_found ]]; then
|
||||||
source /etc/zsh_command_not_found
|
source /etc/zsh_command_not_found
|
||||||
|
fi
|
||||||
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
# Aliases
|
|
||||||
alias as="aptitude -F \"* %p -> %d \n(%v/%V)\" \
|
|
||||||
--no-gui --disable-columns search" # search package
|
|
||||||
alias ad="sudo apt-get update" # update packages lists
|
|
||||||
alias au="sudo apt-get update && \
|
|
||||||
sudo apt-get dselect-upgrade" # upgrade packages
|
|
||||||
alias ai="sudo apt-get install" # install package
|
|
||||||
alias ar="sudo apt-get remove --purge && \
|
|
||||||
sudo apt-get autoremove --purge" # remove package
|
|
||||||
alias ap="apt-cache policy" # apt policy
|
|
||||||
alias av="apt-cache show" # show package info
|
|
||||||
alias acs="apt-cache search" # search package
|
|
||||||
alias ac="sudo apt-get clean && sudo apt-get autoclean" # clean apt cache
|
|
@ -1,60 +0,0 @@
|
|||||||
# https://github.com/dbbolton/
|
|
||||||
#
|
|
||||||
# Debian-related zsh aliases and functions for zsh
|
|
||||||
|
|
||||||
|
|
||||||
# Aliases ###################################################################
|
|
||||||
|
|
||||||
# Some self-explanatory aliases
|
|
||||||
alias afs='apt-file search --regexp'
|
|
||||||
alias aps='aptitude search'
|
|
||||||
alias apsrc='apt-get source'
|
|
||||||
alias apv='apt-cache policy'
|
|
||||||
|
|
||||||
alias apdg='su -c "aptitude update && aptitude safe-upgrade"'
|
|
||||||
alias apud='su -c "aptitude update"'
|
|
||||||
alias apug='su -c "aptitude safe-upgrade"'
|
|
||||||
|
|
||||||
# print all installed packages
|
|
||||||
alias allpkgs='aptitude search -F "%p" --disable-columns ~i'
|
|
||||||
|
|
||||||
# Install all .deb files in the current directory.
|
|
||||||
# Warning: you will need to put the glob in single quotes if you use:
|
|
||||||
# glob_subst
|
|
||||||
alias di='su -c "dpkg -i ./*.deb"'
|
|
||||||
|
|
||||||
# Create a basic .deb package
|
|
||||||
alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc'
|
|
||||||
|
|
||||||
# Remove ALL kernel images and headers EXCEPT the one in use
|
|
||||||
alias kclean='su -c '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) ?not(~n`uname -r`))'\'' root'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Functions #################################################################
|
|
||||||
|
|
||||||
# create a simple script that can be used to 'duplicate' a system
|
|
||||||
apt-copy() {
|
|
||||||
print '#!/bin/sh'"\n" > apt-copy.sh
|
|
||||||
|
|
||||||
list=$(perl -m'AptPkg::Cache' -e '$c=AptPkg::Cache->new; for (keys %$c){ push @a, $_ if $c->{$_}->{'CurrentState'} eq 'Installed';} print "$_ " for sort @a;')
|
|
||||||
|
|
||||||
print 'aptitude install '"$list\n" >> apt-copy.sh
|
|
||||||
|
|
||||||
chmod +x apt-copy.sh
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Kernel-package building shortcut
|
|
||||||
dbb-build () {
|
|
||||||
MAKEFLAGS='' # temporarily unset MAKEFLAGS ( '-j3' will fail )
|
|
||||||
appendage='-custom' # this shows up in $ (uname -r )
|
|
||||||
revision=$(date +"%Y%m%d") # this shows up in the .deb file name
|
|
||||||
|
|
||||||
make-kpkg clean
|
|
||||||
|
|
||||||
time fakeroot make-kpkg --append-to-version "$appendage" --revision \
|
|
||||||
"$revision" kernel_image kernel_headers
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,39 +1,36 @@
|
|||||||
#!/bin/zsh
|
#!/bin/zsh
|
||||||
#
|
|
||||||
# Make the dirstack more persistant
|
|
||||||
#
|
|
||||||
# Add dirpersist to $plugins in ~/.zshrc to load
|
|
||||||
#
|
|
||||||
|
|
||||||
# $zdirstore is the file used to persist the stack
|
# Makes the dirstack more persistant.
|
||||||
zdirstore=~/.zdirstore
|
|
||||||
|
|
||||||
dirpersistinstall () {
|
# $zdirstore is the file used to persist the stack.
|
||||||
if grep 'dirpersiststore' ~/.zlogout > /dev/null; then
|
zdirstore="$HOME/.zdirstore"
|
||||||
else
|
|
||||||
|
function dirpersist-install() {
|
||||||
|
if ! grep 'dirpersist-store' "$HOME/.zlogout" 2> /dev/null; then
|
||||||
if read -q \?"Would you like to set up your .zlogout file for use with dirspersist? (y/n) "; then
|
if read -q \?"Would you like to set up your .zlogout file for use with dirspersist? (y/n) "; then
|
||||||
echo "# Store dirs stack\n# See ~/.oh-my-zsh/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout
|
echo "# Store dirs stack\n# See ~/.oh-my-zsh/plugins/dirspersist.plugin.zsh\ndirpersist-store" >>! "$HOME/.zlogout"
|
||||||
else
|
else
|
||||||
echo "If you don't want this message to appear, remove dirspersist from \$plugins"
|
echo "\nIf you don't want this message to appear, remove dirspersist from \$plugins."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
dirpersiststore () {
|
function dirpersist-store() {
|
||||||
dirs -p | perl -e 'foreach (reverse <STDIN>) {chomp;s/([& ])/\\$1/g ;print "if [ -d $_ ]; then pushd -q $_; fi\n"}' > $zdirstore
|
dirs -p | perl -e 'foreach (reverse <STDIN>) {chomp;s/([& ])/\\$1/g ;print "if [ -d $_ ]; then pushd -q $_; fi\n"}' > "$zdirstore"
|
||||||
}
|
}
|
||||||
|
|
||||||
dirpersistrestore () {
|
function dirpersist-restore() {
|
||||||
if [ -f $zdirstore ]; then
|
if [[ -f "$zdirstore" ]]; then
|
||||||
source $zdirstore
|
source "$zdirstore"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
DIRSTACKSIZE=10
|
DIRSTACKSIZE=10
|
||||||
setopt autopushd pushdminus pushdsilent pushdtohome pushdignoredups
|
setopt autopushd pushdminus pushdsilent pushdtohome pushdignoredups
|
||||||
|
|
||||||
dirpersistinstall
|
dirpersist-install
|
||||||
dirpersistrestore
|
dirpersist-restore
|
||||||
|
|
||||||
# Make popd changes permanent without having to wait for logout
|
# Make popd changes permanent without having to wait for logout
|
||||||
alias popd="popd;dirpersiststore"
|
alias popd="popd;dirpersist-store"
|
||||||
|
|
||||||
|
@ -1,222 +0,0 @@
|
|||||||
#compdef manage.py
|
|
||||||
|
|
||||||
typeset -ga nul_args
|
|
||||||
nul_args=(
|
|
||||||
'--settings=-[the Python path to a settings module.]:file:_files'
|
|
||||||
'--pythonpath=-[a directory to add to the Python path.]::directory:_directories'
|
|
||||||
'--traceback[print traceback on exception.]'
|
|
||||||
"--version[show program's version number and exit.]"
|
|
||||||
{-h,--help}'[show this help message and exit.]'
|
|
||||||
)
|
|
||||||
|
|
||||||
_managepy-adminindex(){
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args \
|
|
||||||
'*::directory:_directories' && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-createcachetable(){
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-dbshell(){
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-diffsettings(){
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-dumpdata(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--format=-[specifies the output serialization format for fixtures.]:format:(json yaml xml)' \
|
|
||||||
'--indent=-[specifies the indent level to use when pretty-printing output.]:' \
|
|
||||||
$nul_args \
|
|
||||||
'*::appname:_applist' && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-flush(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \
|
|
||||||
'--noinput[tells Django to NOT prompt the user for input of any kind.]' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-help(){
|
|
||||||
_arguments -s : \
|
|
||||||
'*:command:_managepy_cmds' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy_cmds(){
|
|
||||||
local line
|
|
||||||
local -a cmd
|
|
||||||
_call_program help-command ./manage.py help \
|
|
||||||
|& sed -n '/^ /s/[(), ]/ /gp' \
|
|
||||||
| while read -A line; do cmd=($line $cmd) done
|
|
||||||
_describe -t managepy-command 'manage.py command' cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-inspectdb(){
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-loaddata(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \
|
|
||||||
'*::file:_files' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-reset(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--noinput[tells Django to NOT prompt the user for input of any kind.]' \
|
|
||||||
'*::appname:_applist' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-runfcgi(){
|
|
||||||
local state
|
|
||||||
|
|
||||||
local fcgi_opts
|
|
||||||
fcgi_opts=(
|
|
||||||
'protocol[fcgi, scgi, ajp, ... (default fcgi)]:protocol:(fcgi scgi ajp)'
|
|
||||||
'host[hostname to listen on..]:'
|
|
||||||
'port[port to listen on.]:'
|
|
||||||
'socket[UNIX socket to listen on.]::file:_files'
|
|
||||||
'method[prefork or threaded (default prefork)]:method:(prefork threaded)'
|
|
||||||
'maxrequests[number of requests a child handles before it is killed and a new child is forked (0 = no limit).]:'
|
|
||||||
'maxspare[max number of spare processes / threads.]:'
|
|
||||||
'minspare[min number of spare processes / threads.]:'
|
|
||||||
'maxchildren[hard limit number of processes / threads.]:'
|
|
||||||
'daemonize[whether to detach from terminal.]:boolean:(False True)'
|
|
||||||
'pidfile[write the spawned process-id to this file.]:file:_files'
|
|
||||||
'workdir[change to this directory when daemonizing.]:directory:_files'
|
|
||||||
'outlog[write stdout to this file.]:file:_files'
|
|
||||||
'errlog[write stderr to this file.]:file:_files'
|
|
||||||
)
|
|
||||||
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args \
|
|
||||||
'*: :_values "FCGI Setting" $fcgi_opts' && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-runserver(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--noreload[tells Django to NOT use the auto-reloader.]' \
|
|
||||||
'--adminmedia[specifies the directory from which to serve admin media.]:directory:_files' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-shell(){
|
|
||||||
_arguments -s : \
|
|
||||||
'--plain[tells Django to use plain Python, not IPython.]' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-sql(){}
|
|
||||||
_managepy-sqlall(){}
|
|
||||||
_managepy-sqlclear(){}
|
|
||||||
_managepy-sqlcustom(){}
|
|
||||||
_managepy-sqlflush(){}
|
|
||||||
_managepy-sqlindexes(){}
|
|
||||||
_managepy-sqlinitialdata(){}
|
|
||||||
_managepy-sqlreset(){}
|
|
||||||
_managepy-sqlsequencereset(){}
|
|
||||||
_managepy-startapp(){}
|
|
||||||
|
|
||||||
_managepy-syncdb() {
|
|
||||||
_arguments -s : \
|
|
||||||
'--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \
|
|
||||||
'--noinput[tells Django to NOT prompt the user for input of any kind.]' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-test() {
|
|
||||||
_arguments -s : \
|
|
||||||
'--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \
|
|
||||||
'--noinput[tells Django to NOT prompt the user for input of any kind.]' \
|
|
||||||
'*::appname:_applist' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-testserver() {
|
|
||||||
_arguments -s : \
|
|
||||||
'--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \
|
|
||||||
'--addrport=-[port number or ipaddr:port to run the server on.]' \
|
|
||||||
'*::fixture:_files' \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-validate() {
|
|
||||||
_arguments -s : \
|
|
||||||
$nul_args && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy-commands() {
|
|
||||||
local -a commands
|
|
||||||
|
|
||||||
commands=(
|
|
||||||
'adminindex:prints the admin-index template snippet for the given app name(s).'
|
|
||||||
'createcachetable:creates the table needed to use the SQL cache backend.'
|
|
||||||
'dbshell:runs the command-line client for the current DATABASE_ENGINE.'
|
|
||||||
"diffsettings:displays differences between the current settings.py and Django's default settings."
|
|
||||||
'dumpdata:Output the contents of the database as a fixture of the given format.'
|
|
||||||
'flush:Executes ``sqlflush`` on the current database.'
|
|
||||||
'help:manage.py help.'
|
|
||||||
'inspectdb:Introspects the database tables in the given database and outputs a Django model module.'
|
|
||||||
'loaddata:Installs the named fixture(s) in the database.'
|
|
||||||
'reset:Executes ``sqlreset`` for the given app(s) in the current database.'
|
|
||||||
'runfcgi:Run this project as a fastcgi (or some other protocol supported by flup) application,'
|
|
||||||
'runserver:Starts a lightweight Web server for development.'
|
|
||||||
'shell:Runs a Python interactive interpreter.'
|
|
||||||
'sql:Prints the CREATE TABLE SQL statements for the given app name(s).'
|
|
||||||
'sqlall:Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s).'
|
|
||||||
'sqlclear:Prints the DROP TABLE SQL statements for the given app name(s).'
|
|
||||||
'sqlcustom:Prints the custom table modifying SQL statements for the given app name(s).'
|
|
||||||
'sqlflush:Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed.'
|
|
||||||
'sqlindexes:Prints the CREATE INDEX SQL statements for the given model module name(s).'
|
|
||||||
"sqlinitialdata:RENAMED: see 'sqlcustom'"
|
|
||||||
'sqlreset:Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).'
|
|
||||||
'sqlsequencereset:Prints the SQL statements for resetting sequences for the given app name(s).'
|
|
||||||
"startapp:Creates a Django app directory structure for the given app name in this project's directory."
|
|
||||||
"syncdb:Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
|
|
||||||
'test:Runs the test suite for the specified applications, or the entire site if no apps are specified.'
|
|
||||||
'testserver:Runs a development server with data from the given fixture(s).'
|
|
||||||
'validate:Validates all installed models.'
|
|
||||||
)
|
|
||||||
|
|
||||||
_describe -t commands 'manage.py command' commands && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_applist() {
|
|
||||||
local line
|
|
||||||
local -a apps
|
|
||||||
_call_program help-command "python -c \"import os.path as op, re, django.conf, sys;\\
|
|
||||||
bn=op.basename(op.abspath(op.curdir));[sys\\
|
|
||||||
.stdout.write(str(re.sub(r'^%s\.(.*?)$' %
|
|
||||||
bn, r'\1', i)) + '\n') for i in django.conf.settings.\\
|
|
||||||
INSTALLED_APPS if re.match(r'^%s' % bn, i)]\"" \
|
|
||||||
| while read -A line; do apps=($line $apps) done
|
|
||||||
_values 'Application' $apps && ret=0
|
|
||||||
}
|
|
||||||
|
|
||||||
_managepy() {
|
|
||||||
local curcontext=$curcontext ret=1
|
|
||||||
|
|
||||||
if ((CURRENT == 2)); then
|
|
||||||
_managepy-commands
|
|
||||||
else
|
|
||||||
shift words
|
|
||||||
(( CURRENT -- ))
|
|
||||||
curcontext="${curcontext%:*:*}:managepy-$words[1]:"
|
|
||||||
_call_function ret _managepy-$words[1]
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
compdef _managepy manage.py
|
|
||||||
compdef _managepy django
|
|
@ -0,0 +1,49 @@
|
|||||||
|
# Debian ZSH Aliases and Functions
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias as="aptitude -F \"* %p -> %d \n(%v/%V)\" --no-gui --disable-columns search" # Search package.
|
||||||
|
alias ad="sudo apt-get update" # Update packages lists.
|
||||||
|
alias au="sudo apt-get update && sudo apt-get dselect-upgrade" # Upgrade packages.
|
||||||
|
alias ai="sudo apt-get install" # Install package.
|
||||||
|
alias ar="sudo apt-get remove --purge && sudo apt-get autoremove --purge" # Remove package.
|
||||||
|
alias ap="apt-cache policy" # Apt policy.
|
||||||
|
alias av="apt-cache show" # Show package info.
|
||||||
|
alias acs="apt-cache search" # Search package.
|
||||||
|
alias ac="sudo apt-get clean && sudo apt-get autoclean" # Clean apt cache.
|
||||||
|
alias afs='apt-file search --regexp' # Find file's packake.
|
||||||
|
|
||||||
|
# Install all .deb files in the current directory.
|
||||||
|
# WARNING: you will need to put the glob in single quotes if you use glob_subst.
|
||||||
|
alias debi='su -c "dpkg -i ./*.deb"'
|
||||||
|
|
||||||
|
# Create a basic .deb package.
|
||||||
|
alias debc='time dpkg-buildpackage -rfakeroot -us -uc'
|
||||||
|
|
||||||
|
# Remove ALL kernel images and headers EXCEPT the one in use.
|
||||||
|
alias kclean='su -c '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) ?not(~n`uname -r`))'\'' root'
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
|
||||||
|
# Create a simple script that can be used to 'duplicate' a system.
|
||||||
|
function apt-copy() {
|
||||||
|
print '#!/bin/sh'"\n" > apt-copy.sh
|
||||||
|
|
||||||
|
list=$(perl -m'AptPkg::Cache' -e '$c=AptPkg::Cache->new; for (keys %$c){ push @a, $_ if $c->{$_}->{'CurrentState'} eq 'Installed';} print "$_ " for sort @a;')
|
||||||
|
|
||||||
|
print 'aptitude install '"$list\n" >> apt-copy.sh
|
||||||
|
|
||||||
|
chmod +x apt-copy.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kernel-package building shortcut.
|
||||||
|
function dbb-build() {
|
||||||
|
MAKEFLAGS='' # Temporarily unset MAKEFLAGS ( '-j3' will fail ).
|
||||||
|
appendage='-custom' # This shows up in $ (uname -r ).
|
||||||
|
revision=$(date +"%Y%m%d") # This shows up in the .deb file name.
|
||||||
|
|
||||||
|
make-kpkg clean
|
||||||
|
|
||||||
|
time fakeroot make-kpkg --append-to-version "$appendage" --revision \
|
||||||
|
"$revision" kernel_image kernel_headers
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,10 @@
|
|||||||
# hub alias from defunkt
|
# Aliases
|
||||||
|
|
||||||
|
# Hub by defunkt
|
||||||
# https://github.com/defunkt/hub
|
# https://github.com/defunkt/hub
|
||||||
if [ "$commands[(I)hub]" ]; then
|
if (( $+commands[hub] )); then
|
||||||
# eval `hub alias -s zsh`
|
function git() {
|
||||||
function git(){hub "$@"}
|
hub "$@"
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
|
# Aliases
|
||||||
|
alias kate='kate >/dev/null 2>&1' # Silent start.
|
||||||
|
|
||||||
# Kate
|
# Functions
|
||||||
# Start kate always silent
|
|
||||||
alias kate='kate >/dev/null 2>&1'
|
|
||||||
|
|
||||||
function kt() {
|
function kt() {
|
||||||
cd $1
|
cd "$1"
|
||||||
kate $1
|
kate "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,174 +0,0 @@
|
|||||||
#compdef knife
|
|
||||||
|
|
||||||
# These flags should be available everywhere according to man knife
|
|
||||||
knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes )
|
|
||||||
|
|
||||||
# knife has a very special syntax, some example calls are:
|
|
||||||
# knife status
|
|
||||||
# knife cookbook list
|
|
||||||
# knife role show ROLENAME
|
|
||||||
# knife data bag show DATABAGNAME
|
|
||||||
# knife role show ROLENAME --attribute ATTRIBUTENAME
|
|
||||||
# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes
|
|
||||||
|
|
||||||
# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces
|
|
||||||
_knife() {
|
|
||||||
local curcontext="$curcontext" state line
|
|
||||||
typeset -A opt_args
|
|
||||||
cloudproviders=(bluebox ec2 rackspace slicehost terremark)
|
|
||||||
_arguments \
|
|
||||||
'1: :->knifecmd'\
|
|
||||||
'2: :->knifesubcmd'\
|
|
||||||
'3: :->knifesubcmd2' \
|
|
||||||
'4: :->knifesubcmd3' \
|
|
||||||
'5: :->knifesubcmd4' \
|
|
||||||
'6: :->knifesubcmd5'
|
|
||||||
|
|
||||||
case $state in
|
|
||||||
knifecmd)
|
|
||||||
compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders
|
|
||||||
;;
|
|
||||||
knifesubcmd)
|
|
||||||
case $words[2] in
|
|
||||||
(bluebox|ec2|rackspace|slicehost|terremark)
|
|
||||||
compadd "$@" server images
|
|
||||||
;;
|
|
||||||
client)
|
|
||||||
compadd -Q "$@" "bulk delete" list create show delete edit reregister
|
|
||||||
;;
|
|
||||||
configure)
|
|
||||||
compadd "$@" client
|
|
||||||
;;
|
|
||||||
cookbook)
|
|
||||||
compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
|
|
||||||
;;
|
|
||||||
node)
|
|
||||||
compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
|
|
||||||
;;
|
|
||||||
recipe)
|
|
||||||
compadd "$@" list
|
|
||||||
;;
|
|
||||||
role)
|
|
||||||
compadd -Q "$@" "bulk delete" create delete edit "from file" list show
|
|
||||||
;;
|
|
||||||
windows)
|
|
||||||
compadd "$@" bootstrap
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_arguments '2:Subsubcommands:($(_knife_options1))'
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
knifesubcmd2)
|
|
||||||
case $words[3] in
|
|
||||||
server)
|
|
||||||
compadd "$@" list create delete
|
|
||||||
;;
|
|
||||||
images)
|
|
||||||
compadd "$@" list
|
|
||||||
;;
|
|
||||||
site)
|
|
||||||
compadd "$@" vendor show share search download list unshare
|
|
||||||
;;
|
|
||||||
(show|delete|edit)
|
|
||||||
_arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
|
|
||||||
;;
|
|
||||||
(upload|test)
|
|
||||||
_arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
|
|
||||||
;;
|
|
||||||
list)
|
|
||||||
compadd -a "$@" knife_general_flags
|
|
||||||
;;
|
|
||||||
bag)
|
|
||||||
compadd -Q "$@" show edit list "from file" create delete
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_arguments '3:Subsubcommands:($(_knife_options2))'
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
knifesubcmd3)
|
|
||||||
case $words[3] in
|
|
||||||
show)
|
|
||||||
case $words[2] in
|
|
||||||
cookbook)
|
|
||||||
versioncomp=1
|
|
||||||
_arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
|
|
||||||
;;
|
|
||||||
(node|client|role)
|
|
||||||
compadd "$@" --attribute
|
|
||||||
esac
|
|
||||||
esac
|
|
||||||
case $words[4] in
|
|
||||||
(show|edit)
|
|
||||||
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
|
|
||||||
;;
|
|
||||||
file)
|
|
||||||
_arguments '*:file or directory:_files -g "*.(rb|json)"'
|
|
||||||
;;
|
|
||||||
list)
|
|
||||||
compadd -a "$@" knife_general_flags
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_arguments '*:Subsubcommands:($(_knife_options3))'
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
knifesubcmd4)
|
|
||||||
if (( versioncomp > 0 )); then
|
|
||||||
compadd "$@" attributes definitions files libraries providers recipes resources templates
|
|
||||||
else
|
|
||||||
_arguments '*:Subsubcommands:($(_knife_options2))'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
knifesubcmd5)
|
|
||||||
_arguments '*:Subsubcommands:($(_knife_options3))'
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Helper functions to provide the argument completion for several depths of commands
|
|
||||||
_knife_options1() {
|
|
||||||
( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
|
||||||
}
|
|
||||||
|
|
||||||
_knife_options2() {
|
|
||||||
( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
|
||||||
}
|
|
||||||
|
|
||||||
_knife_options3() {
|
|
||||||
( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
|
|
||||||
}
|
|
||||||
|
|
||||||
# The chef_x_remote functions use knife to get a list of objects of type x on the server
|
|
||||||
_chef_roles_remote() {
|
|
||||||
(knife role list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
_chef_clients_remote() {
|
|
||||||
(knife client list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
_chef_nodes_remote() {
|
|
||||||
(knife node list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
_chef_cookbooks_remote() {
|
|
||||||
(knife cookbook list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
_chef_sitecookbooks_remote() {
|
|
||||||
(knife cookbook site list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
_chef_data_bags_remote() {
|
|
||||||
(knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
|
|
||||||
}
|
|
||||||
|
|
||||||
# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server
|
|
||||||
_chef_cookbooks_local() {
|
|
||||||
(for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done)
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function extracts the available cookbook versions on the chef server
|
|
||||||
_cookbook_versions() {
|
|
||||||
(knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g')
|
|
||||||
}
|
|
||||||
|
|
||||||
_knife "$@"
|
|
@ -1,27 +0,0 @@
|
|||||||
function _lein_commands() {
|
|
||||||
local ret=1 state
|
|
||||||
_arguments ':subcommand:->subcommand' && ret=0
|
|
||||||
|
|
||||||
case $state in
|
|
||||||
subcommand)
|
|
||||||
subcommands=(
|
|
||||||
"clean:remove compiled files and dependencies from project"
|
|
||||||
"compile:ahead-of-time compile the project"
|
|
||||||
"deps:download and install all dependencies"
|
|
||||||
"help:display a list of tasks or help for a given task"
|
|
||||||
"install:install the project and its dependencies in your local repository"
|
|
||||||
"jar:create a jar file containing the compiled .class files"
|
|
||||||
"new:create a new project skeleton"
|
|
||||||
"pom:write a pom.xml file to disk for maven interop"
|
|
||||||
"test:run the project's tests"
|
|
||||||
"uberjar:Create a jar including the contents of each of deps"
|
|
||||||
"upgrade:upgrade leiningen to the latest stable release"
|
|
||||||
"version:print leiningen's version"
|
|
||||||
)
|
|
||||||
_describe -t subcommands 'leiningen subcommands' subcommands && ret=0
|
|
||||||
esac
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
compdef _lein_commands lein
|
|
@ -0,0 +1,28 @@
|
|||||||
|
function _lein_commands() {
|
||||||
|
local ret=1 state
|
||||||
|
_arguments ':subcommand:->subcommand' && ret=0
|
||||||
|
|
||||||
|
case "$state" in
|
||||||
|
subcommand)
|
||||||
|
subcommands=(
|
||||||
|
"clean:remove compiled files and dependencies from project"
|
||||||
|
"compile:ahead-of-time compile the project"
|
||||||
|
"deps:download and install all dependencies"
|
||||||
|
"help:display a list of tasks or help for a given task"
|
||||||
|
"install:install the project and its dependencies in your local repository"
|
||||||
|
"jar:create a jar file containing the compiled .class files"
|
||||||
|
"new:create a new project skeleton"
|
||||||
|
"pom:write a pom.xml file to disk for maven interop"
|
||||||
|
"test:run the project's tests"
|
||||||
|
"uberjar:Create a jar including the contents of each of deps"
|
||||||
|
"upgrade:upgrade leiningen to the latest stable release"
|
||||||
|
"version:print leiningen's version"
|
||||||
|
)
|
||||||
|
_describe -t subcommands 'leiningen subcommands' subcommands && ret=0
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
compdef _lein_commands lein
|
||||||
|
|
@ -1,16 +1,22 @@
|
|||||||
# To use: add a .lighthouse file into your directory with the URL to the
|
# Add a .lighthouse file into your directory with the URL to the
|
||||||
# individual project. For example:
|
# individual project.
|
||||||
|
#
|
||||||
|
# For example:
|
||||||
# https://rails.lighthouseapp.com/projects/8994
|
# https://rails.lighthouseapp.com/projects/8994
|
||||||
# Example usage: http://screencast.com/t/ZDgwNDUwNT
|
#
|
||||||
open_lighthouse_ticket () {
|
# Screencast:
|
||||||
if [ ! -f .lighthouse-url ]; then
|
# http://screencast.com/t/ZDgwNDUwNT
|
||||||
|
|
||||||
|
function open-lighthouse-ticket() {
|
||||||
|
if [[ ! -f .lighthouse-url ]]; then
|
||||||
echo "There is no .lighthouse-url file in the current directory..."
|
echo "There is no .lighthouse-url file in the current directory..."
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
lighthouse_url=$(cat .lighthouse-url);
|
local lighthouse_url=$(cat .lighthouse-url);
|
||||||
echo "Opening ticket #$1";
|
echo "Opening ticket #$1";
|
||||||
`open $lighthouse_url/tickets/$1`;
|
open "${lighthouse_url}/tickets/$1";
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
alias lho='open_lighthouse_ticket'
|
alias olt='open-lighthouse-ticket'
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
# commands to control local mysql-server installation
|
# Aliases
|
||||||
# paths are for osx installation via macports
|
|
||||||
|
|
||||||
alias mysqlstart='sudo /opt/local/share/mysql5/mysql/mysql.server start'
|
alias mysqlstart='sudo /opt/local/share/mysql5/mysql/mysql.server start'
|
||||||
alias mysqlstop='sudo /opt/local/share/mysql5/mysql/mysql.server stop'
|
alias mysqlstop='sudo /opt/local/share/mysql5/mysql/mysql.server stop'
|
||||||
alias mysqlrestart='sudo /opt/local/share/mysql5/mysql/mysql.server restart'
|
alias mysqlrestart='sudo /opt/local/share/mysql5/mysql/mysql.server restart'
|
||||||
|
|
||||||
alias mysqlstatus='mysqladmin5 -u root -p ping'
|
alias mysqlstatus='mysqladmin5 -u root -p ping'
|
||||||
|
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
# Archlinux ZSH Aliases and Functions
|
||||||
|
#
|
||||||
|
# Pacman Tips:
|
||||||
|
# https://wiki.archlinux.org/index.php/Pacman_Tips
|
||||||
|
|
||||||
|
# Yaourt Aliases
|
||||||
|
if (( $+commands[yaourt] )); then
|
||||||
|
function arch-upgrade() {
|
||||||
|
yaourt -Syu
|
||||||
|
}
|
||||||
|
|
||||||
|
alias yaconf='yaourt -C' # Fix all configuration files with vimdiff.
|
||||||
|
alias yaupg='yaourt -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
|
||||||
|
alias yain='yaourt -S' # Install specific package(s) from the repositories.
|
||||||
|
alias yains='yaourt -U' # Install specific package(s) not from the repositories but from a file .
|
||||||
|
alias yare='yaourt -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies.
|
||||||
|
alias yarem='yaourt -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies.
|
||||||
|
alias yarep='yaourt -Si' # Display information about a given package in the repositories.
|
||||||
|
alias yareps='yaourt -Ss' # Search for package(s) in the repositories.
|
||||||
|
alias yaloc='yaourt -Qi' # Display information about a given package in the local database.
|
||||||
|
alias yalocs='yaourt -Qs' # Search for package(s) in the local database.
|
||||||
|
alias yamir='yaourt -Syy' # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist
|
||||||
|
alias yainsd='yaourt -S --asdeps' # Install given package(s) as dependencies of another package
|
||||||
|
|
||||||
|
# Update and refresh the local package and ABS databases against repositories.
|
||||||
|
if (( $+commands[abs] )); then
|
||||||
|
alias yaupd='yaourt -Sy && sudo abs'
|
||||||
|
else
|
||||||
|
alias yaupd='yaourt -Sy'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
function arch-upgrade() {
|
||||||
|
sudo pacman -Syu
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Pacman Aliaases
|
||||||
|
alias pacupg='sudo pacman -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
|
||||||
|
alias pacin='sudo pacman -S' # Install specific package(s) from the repositories.
|
||||||
|
alias pacins='sudo pacman -U' # Install specific package not from the repositories but from a file.
|
||||||
|
alias pacre='sudo pacman -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies.
|
||||||
|
alias pacrem='sudo pacman -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies.
|
||||||
|
alias pacrep='pacman -Si' # Display information about a given package in the repositories.
|
||||||
|
alias pacreps='pacman -Ss' # Search for package(s) in the repositories.
|
||||||
|
alias pacloc='pacman -Qi' # Display information about a given package in the local database.
|
||||||
|
alias paclocs='pacman -Qs' # Search for package(s) in the local database.
|
||||||
|
alias pacinsd='sudo pacman -S --asdeps' # Install given package(s) as dependencies of another package.
|
||||||
|
alias pacmir='sudo pacman -Syy' # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist.
|
||||||
|
alias paclsorphans='sudo pacman -Qdt' # List orphan packages(s).
|
||||||
|
alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)' # Remove orphan package(s).
|
||||||
|
|
||||||
|
# Update and refresh the local package and ABS databases against repositories.
|
||||||
|
if (( $+commands[abs] )); then
|
||||||
|
alias pacupd='sudo pacman -Sy && sudo abs'
|
||||||
|
else
|
||||||
|
alias pacupd='sudo pacman -Sy'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List explicitly installed packages.
|
||||||
|
function paclist() {
|
||||||
|
sudo pacman -Qei $(pacman -Qu|cut -d" " -f 1) \
|
||||||
|
| awk ' BEGIN {FS=":"}/^Name/{printf("\033[1;36m%s\033[1;37m", $2)}/^Description/{print $2}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# List disowned files.
|
||||||
|
function pacdisowned() {
|
||||||
|
tmp="${TMPDIR-/tmp}/pacman-disowned-$UID-$$"
|
||||||
|
db="$tmp/db"
|
||||||
|
fs="$tmp/fs"
|
||||||
|
|
||||||
|
mkdir "$tmp"
|
||||||
|
trap 'rm -rf "$tmp"' EXIT
|
||||||
|
|
||||||
|
pacman -Qlq | sort -u > "$db"
|
||||||
|
|
||||||
|
find /bin /etc /lib /sbin /usr \
|
||||||
|
! -name lost+found \
|
||||||
|
\( -type d -printf '%p/\n' -o -print \) | sort > "$fs"
|
||||||
|
|
||||||
|
comm -23 "$fs" "$db"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
_rvm
|
@ -1,147 +0,0 @@
|
|||||||
#compdef rvm
|
|
||||||
|
|
||||||
local curcontext="$curcontext" state line cmds ret=1
|
|
||||||
|
|
||||||
_arguments -C \
|
|
||||||
'(- 1 *)'{-v,--version}'[display version information]' \
|
|
||||||
'(-l|--level)'{-l,--level}'+[patch level to use with rvm use / install]:number' \
|
|
||||||
'(--prefix)--prefix[path for all rvm files (~/.rvm/), with trailing slash!]:path:_files' \
|
|
||||||
'(--bin)--bin[path for binaries to be placed (~/.rvm/bin/)]:path:_files' \
|
|
||||||
'(--source)--source[src directory to use (~/.rvm/src/)]:path:_files' \
|
|
||||||
'(--archives)--archives[directory for downladed files (~/.rvm/archives/)]:path:_files' \
|
|
||||||
'-S[Specify a script file to attempt to load and run (rubydo)]:file:_files' \
|
|
||||||
'-e[Execute code from the command line]:code' \
|
|
||||||
'(-G)-G[root gem path to use]:path:_files' \
|
|
||||||
'(--gems)--gems[Used to set the gems_flag, use with remove to remove gems]' \
|
|
||||||
'(--archive)--archive[Used to set the archive_flag, use with remove to remove archive]' \
|
|
||||||
'(--patch)--patch[With MRI Rubies you may specify one or more full paths to patches]' \
|
|
||||||
'(-C|--configure)'{-C,--configure}'=[custom configure options]' \
|
|
||||||
'(--nice)--nice[process niceness (for slow computers, default 0)]:number' \
|
|
||||||
'(--ree)--ree-options[Options passed directly to ree ./installer on the command line]:options' \
|
|
||||||
'(--head)--head[with update, updates rvm to git head version]' \
|
|
||||||
'(--rubygems)--rubygems[with update, updates rubygems for selected ruby]' \
|
|
||||||
'(--default)--default[with ruby select, sets a default ruby for new shells]' \
|
|
||||||
'(--debug)--debug[Toggle debug mode on for very verbose output]' \
|
|
||||||
'(--trace)--trace[Toggle trace mode on to see EVERYTHING rvm is doing]' \
|
|
||||||
'(--force)--force[Force install, removes old install & source before install]' \
|
|
||||||
'(--summary)--summary[Used with rubydo to print out a summary of the commands run]' \
|
|
||||||
'(--latest)--latest[with gemset --dump skips version strings for latest gem]' \
|
|
||||||
'(--gems)--gems[with uninstall/remove removes gems with the interpreter]' \
|
|
||||||
'(--docs)--docs[with install, attempt to generate ri after installation]' \
|
|
||||||
'(--reconfigure)--reconfigure[Force ./configure on install even if Makefile already exists]' \
|
|
||||||
'1: :->cmds' \
|
|
||||||
'*: :->args' && ret=0
|
|
||||||
|
|
||||||
case $state in
|
|
||||||
cmds)
|
|
||||||
cmds=(
|
|
||||||
"version:show the rvm version installed in rvm_path"
|
|
||||||
"use:setup current shell to use a specific ruby version"
|
|
||||||
"reload:reload rvm source itself (useful after changing rvm source)"
|
|
||||||
"implode:(seppuku) removes the rvm installation completely. This means everything in $rvm_path (~/.rvm)."
|
|
||||||
"update:upgrades rvm to the latest version."
|
|
||||||
"reset:remove current and stored default & system settings."
|
|
||||||
"info :show the *current* environment information for current ruby"
|
|
||||||
"current:print the *current* ruby version and the name of any gemset being used."
|
|
||||||
"debug:show info plus additional information for common issues"
|
|
||||||
"install:install one or many ruby versions"
|
|
||||||
"uninstall:uninstall one or many ruby versions, leaves their sources"
|
|
||||||
"remove:uninstall one or many ruby versions and remove their sources"
|
|
||||||
"migrate:Lets you migrate all gemsets from one ruby to another."
|
|
||||||
"upgrade:Lets you upgrade from one version of a ruby to another, including migrating your gemsets semi-automatically."
|
|
||||||
"wrapper:generates a set of wrapper executables for a given ruby with the specified ruby and gemset combination. Used under the hood for passenger support and the like."
|
|
||||||
"cleanup:Lets you remove stale source folders / archives and other miscellaneous data associated with rvm."
|
|
||||||
"repair:Lets you repair parts of your environment e.g. wrappers, env files and and similar files (e.g. general maintenance)."
|
|
||||||
"snapshot:Lets your backup / restore an rvm installation in a lightweight manner."
|
|
||||||
"disk-usage:Tells you how much disk space rvm install is using."
|
|
||||||
"tools:Provides general information about the ruby environment, primarily useful when scripting rvm."
|
|
||||||
"docs:Tools to make installing ri and rdoc documentation easier."
|
|
||||||
"rvmrc:Tools related to managing rvmrc trust and loading."
|
|
||||||
"exec:runs an arbitrary command as a set operation."
|
|
||||||
"ruby:runs a named ruby file against specified and/or all rubies"
|
|
||||||
"gem:runs a gem command using selected ruby's 'gem'"
|
|
||||||
"rake:runs a rake task against specified and/or all rubies"
|
|
||||||
"tests:runs 'rake test' across selected ruby versions"
|
|
||||||
"specs:runs 'rake spec' across selected ruby versions"
|
|
||||||
"monitor:Monitor cwd for testing, run rake {spec,test} on changes."
|
|
||||||
"gemset:gemsets: http://rvm.beginrescueend.com/gemsets/"
|
|
||||||
"rubygems:Switches the installed version of rubygems for the current ruby."
|
|
||||||
"gemdir:display the path to the current gem directory (GEM_HOME)."
|
|
||||||
"srcdir:display the path to rvm source directory (may be yanked)"
|
|
||||||
"fetch:Performs an archive / src fetch only of the selected ruby."
|
|
||||||
"list:show currently installed rubies, interactive output."
|
|
||||||
"package:Install a dependency package {readline,iconv,zlib,openssl}"
|
|
||||||
"notes:Display notes, with operating system specifics."
|
|
||||||
"export:Temporarily set an environment variable in the current shell."
|
|
||||||
"unexport:Undo changes made to the environment by 'rvm export'."
|
|
||||||
)
|
|
||||||
_describe -t commands 'rvm command' cmds && ret=0
|
|
||||||
;;
|
|
||||||
args)
|
|
||||||
case $line[1] in
|
|
||||||
(use|uninstall|remove|list)
|
|
||||||
_values -S , 'rubies' $(rvm list strings | sed -e 's/ruby-\([^) ]*\)-\([^) ]*\)/ruby-\1-\2 \1-\2 \1/g') default system && ret=0
|
|
||||||
;;
|
|
||||||
(install|fetch)
|
|
||||||
_values -S , 'rubies' $(rvm list known_strings) && ret=0
|
|
||||||
;;
|
|
||||||
gemset)
|
|
||||||
if (( CURRENT == 3 )); then
|
|
||||||
_values 'gemset_commands' \
|
|
||||||
'import' \
|
|
||||||
'export' \
|
|
||||||
'create' \
|
|
||||||
'copy' \
|
|
||||||
'rename' \
|
|
||||||
'empty' \
|
|
||||||
'delete' \
|
|
||||||
'name' \
|
|
||||||
'dir' \
|
|
||||||
'list' \
|
|
||||||
'list_all' \
|
|
||||||
'gemdir' \
|
|
||||||
'install' \
|
|
||||||
'pristine' \
|
|
||||||
'clear' \
|
|
||||||
'use' \
|
|
||||||
'update' \
|
|
||||||
'unpack' \
|
|
||||||
'globalcache'
|
|
||||||
else
|
|
||||||
_values -S , 'gemsets' $(rvm gemset list | grep -v gemset 2>/dev/null)
|
|
||||||
fi
|
|
||||||
ret=0
|
|
||||||
;;
|
|
||||||
package)
|
|
||||||
if (( CURRENT == 3 )); then
|
|
||||||
_values 'package_commands' \
|
|
||||||
'install' \
|
|
||||||
'uninstall'
|
|
||||||
else
|
|
||||||
_values 'packages' \
|
|
||||||
'readline' \
|
|
||||||
'iconv' \
|
|
||||||
'curl' \
|
|
||||||
'openssl' \
|
|
||||||
'zlib' \
|
|
||||||
'autoconf' \
|
|
||||||
'ncurses' \
|
|
||||||
'pkgconfig' \
|
|
||||||
'gettext' \
|
|
||||||
'glib' \
|
|
||||||
'mono' \
|
|
||||||
'llvm' \
|
|
||||||
'libxml2' \
|
|
||||||
'libxslt' \
|
|
||||||
'libyaml'
|
|
||||||
fi
|
|
||||||
ret=0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
(( ret )) && _message 'no more arguments'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
return ret
|
|
@ -1,53 +0,0 @@
|
|||||||
# Get the name of the current branch.
|
|
||||||
function rvm_prompt_info() {
|
|
||||||
local ruby_version=$(~/.rvm/bin/rvm-prompt 2> /dev/null)
|
|
||||||
if [[ -n "$ruby_version" ]]; then
|
|
||||||
echo "($ruby_version)"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
alias rubies='rvm list rubies'
|
|
||||||
alias gemsets='rvm gemset list'
|
|
||||||
|
|
||||||
local ruby18='ruby-1.8.7-p334'
|
|
||||||
local ruby19='ruby-1.9.2-p180'
|
|
||||||
|
|
||||||
function rb18 {
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
rvm use "$ruby18"
|
|
||||||
else
|
|
||||||
rvm use "$ruby18@$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_rb18() {compadd `ls -1 $rvm_path/gems | grep "^$ruby18@" | sed -e "s/^$ruby18@//" | awk '{print $1}'`}
|
|
||||||
compdef _rb18 rb18
|
|
||||||
|
|
||||||
function rb19 {
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
rvm use "$ruby19"
|
|
||||||
else
|
|
||||||
rvm use "$ruby19@$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_rb19() {compadd `ls -1 $rvm_path/gems | grep "^$ruby19@" | sed -e "s/^$ruby19@//" | awk '{print $1}'`}
|
|
||||||
compdef _rb19 rb19
|
|
||||||
|
|
||||||
function rvm-update {
|
|
||||||
rvm get head
|
|
||||||
rvm reload # TODO: Reload rvm completion?
|
|
||||||
}
|
|
||||||
|
|
||||||
# TODO: Make this usable w/o rvm.
|
|
||||||
function gems {
|
|
||||||
local current_ruby=`rvm-prompt i v p`
|
|
||||||
local current_gemset=`rvm-prompt g`
|
|
||||||
|
|
||||||
gem list $@ | sed \
|
|
||||||
-Ee "s/\([0-9\.]+( .+)?\)/$fg[blue]&$reset_color/g" \
|
|
||||||
-Ee "s|$(echo $rvm_path)|$fg[magenta]\$rvm_path$reset_color|g" \
|
|
||||||
-Ee "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
|
|
||||||
-Ee "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
function svn_prompt_info {
|
|
||||||
if [ in_svn ]; then
|
|
||||||
echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\
|
|
||||||
$ZSH_THEME_REPO_NAME_COLOR$(svn_get_repo_name)$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function in_svn() {
|
|
||||||
if [[ -d .svn ]]; then
|
|
||||||
echo 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function svn_get_repo_name {
|
|
||||||
if [ in_svn ]; then
|
|
||||||
svn info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT
|
|
||||||
|
|
||||||
svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p" | sed "s/\/.*$//"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function svn_get_rev_nr {
|
|
||||||
if [ in_svn ]; then
|
|
||||||
svn info 2> /dev/null | sed -n s/Revision:\ //p
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function svn_dirty_choose {
|
|
||||||
if [ in_svn ]; then
|
|
||||||
s=$(svn status|grep -E '^\s*[ACDIM!?L]' 2>/dev/null)
|
|
||||||
if [ $s ]; then
|
|
||||||
echo $1
|
|
||||||
else
|
|
||||||
echo $2
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function svn_dirty {
|
|
||||||
svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN
|
|
||||||
}
|
|
@ -0,0 +1 @@
|
|||||||
|
_task
|
@ -1,280 +0,0 @@
|
|||||||
#compdef task
|
|
||||||
#
|
|
||||||
# zsh completion for taskwarrior
|
|
||||||
#
|
|
||||||
# Copyright 2010 - 2011 Johannes Schlatow
|
|
||||||
# Copyright 2009 P.C. Shyamshankar
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# This script is part of the taskwarrior project.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program; if not, write to the
|
|
||||||
#
|
|
||||||
# Free Software Foundation, Inc.,
|
|
||||||
# 51 Franklin Street, Fifth Floor,
|
|
||||||
# Boston, MA
|
|
||||||
# 02110-1301
|
|
||||||
# USA
|
|
||||||
#
|
|
||||||
typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers
|
|
||||||
_task_projects=($(task _projects))
|
|
||||||
_task_tags=($(task _tags))
|
|
||||||
_task_ids=($(task _ids))
|
|
||||||
_task_config=($(task _config))
|
|
||||||
_task_modifiers=(
|
|
||||||
'before' \
|
|
||||||
'after' \
|
|
||||||
'none' \
|
|
||||||
'any' \
|
|
||||||
'is' \
|
|
||||||
'isnt' \
|
|
||||||
'has' \
|
|
||||||
'hasnt' \
|
|
||||||
'startswith' \
|
|
||||||
'endswith' \
|
|
||||||
'word' \
|
|
||||||
'noword'
|
|
||||||
)
|
|
||||||
_task_cmds=($(task _commands))
|
|
||||||
_task_zshcmds=( ${(f)"$(task _zshcommands)"} )
|
|
||||||
|
|
||||||
|
|
||||||
_task_idCmds=(
|
|
||||||
'append' \
|
|
||||||
'prepend' \
|
|
||||||
'annotate' \
|
|
||||||
'denotate' \
|
|
||||||
'edit' \
|
|
||||||
'duplicate' \
|
|
||||||
'info' \
|
|
||||||
'start' \
|
|
||||||
'stop' \
|
|
||||||
'done'
|
|
||||||
)
|
|
||||||
|
|
||||||
_task_idCmdsDesc=(
|
|
||||||
'append:Appends more description to an existing task.' \
|
|
||||||
'prepend:Prepends more description to an existing task.' \
|
|
||||||
'annotate:Adds an annotation to an existing task.' \
|
|
||||||
'denotate:Deletes an annotation of an existing task.' \
|
|
||||||
'edit:Launches an editor to let you modify a task directly.' \
|
|
||||||
'duplicate:Duplicates the specified task, and allows modifications.' \
|
|
||||||
'info:Shows all data, metadata for specified task.' \
|
|
||||||
'start:Marks specified task as started.' \
|
|
||||||
'stop:Removes the start time from a task.' \
|
|
||||||
'done:Marks the specified task as completed.'
|
|
||||||
)
|
|
||||||
|
|
||||||
_task() {
|
|
||||||
_arguments -s -S \
|
|
||||||
"*::task command:_task_commands"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a reply args word
|
|
||||||
word=$'[^\0]#\0'
|
|
||||||
|
|
||||||
# priorities
|
|
||||||
local -a task_priorities
|
|
||||||
_regex_words values 'task priorities' \
|
|
||||||
'H:High' \
|
|
||||||
'M:Middle' \
|
|
||||||
'L:Low'
|
|
||||||
task_priorities=("$reply[@]")
|
|
||||||
|
|
||||||
# projects
|
|
||||||
local -a task_projects
|
|
||||||
task_projects=(
|
|
||||||
/"$word"/
|
|
||||||
":values:task projects:compadd -a _task_projects"
|
|
||||||
)
|
|
||||||
|
|
||||||
local -a _task_dates
|
|
||||||
_regex_words values 'task dates' \
|
|
||||||
'tod*ay:Today' \
|
|
||||||
'yes*terday:Yesterday' \
|
|
||||||
'tom*orrow:Tomorrow' \
|
|
||||||
'sow:Start of week' \
|
|
||||||
'soww:Start of work week' \
|
|
||||||
'socw:Start of calendar week' \
|
|
||||||
'som:Start of month' \
|
|
||||||
'soy:Start of year' \
|
|
||||||
'eow:End of week' \
|
|
||||||
'eoww:End of work week' \
|
|
||||||
'eocw:End of calendar week' \
|
|
||||||
'eom:End of month' \
|
|
||||||
'eoy:End of year' \
|
|
||||||
'mon:Monday' \
|
|
||||||
'tue:Tuesday'\
|
|
||||||
'wed:Wednesday' \
|
|
||||||
'thu:Thursday' \
|
|
||||||
'fri:Friday' \
|
|
||||||
'sat:Saturday' \
|
|
||||||
'sun:Sunday'
|
|
||||||
_task_dates=("$reply[@]")
|
|
||||||
|
|
||||||
local -a _task_reldates
|
|
||||||
_regex_words values 'task reldates' \
|
|
||||||
'hrs:n hours' \
|
|
||||||
'day:n days' \
|
|
||||||
'1st:first' \
|
|
||||||
'2nd:second' \
|
|
||||||
'3rd:third' \
|
|
||||||
'th:4th, 5th, etc.' \
|
|
||||||
'wks:weeks'
|
|
||||||
_task_reldates=("$reply[@]")
|
|
||||||
|
|
||||||
task_dates=(
|
|
||||||
\( "$_task_dates[@]" \|
|
|
||||||
\( /$'[0-9][0-9]#'/- \( "$_task_reldates[@]" \) \)
|
|
||||||
\)
|
|
||||||
)
|
|
||||||
|
|
||||||
_regex_words values 'task frequencies' \
|
|
||||||
'daily:Every day' \
|
|
||||||
'day:Every day' \
|
|
||||||
'weekdays:Every day skipping weekend days' \
|
|
||||||
'weekly:Every week' \
|
|
||||||
'biweekly:Every two weeks' \
|
|
||||||
'fortnight:Every two weeks' \
|
|
||||||
'quarterly:Every three months' \
|
|
||||||
'semiannual:Every six months' \
|
|
||||||
'annual:Every year' \
|
|
||||||
'yearly:Every year' \
|
|
||||||
'biannual:Every two years' \
|
|
||||||
'biyearly:Every two years'
|
|
||||||
_task_freqs=("$reply[@]")
|
|
||||||
|
|
||||||
local -a _task_frequencies
|
|
||||||
_regex_words values 'task frequencies' \
|
|
||||||
'd:days' \
|
|
||||||
'w:weeks' \
|
|
||||||
'q:quarters' \
|
|
||||||
'y:years'
|
|
||||||
_task_frequencies=("$reply[@]")
|
|
||||||
|
|
||||||
task_freqs=(
|
|
||||||
\( "$_task_freqs[@]" \|
|
|
||||||
\( /$'[0-9][0-9]#'/- \( "$_task_frequencies[@]" \) \)
|
|
||||||
\)
|
|
||||||
)
|
|
||||||
|
|
||||||
# attributes
|
|
||||||
local -a task_attributes
|
|
||||||
_regex_words -t ':' default 'task attributes' \
|
|
||||||
'pro*ject:Project name:$task_projects' \
|
|
||||||
'du*e:Due date:$task_dates' \
|
|
||||||
'wa*it:Date until task becomes pending:$task_dates' \
|
|
||||||
're*cur:Recurrence frequency:$task_freqs' \
|
|
||||||
'pri*ority:priority:$task_priorities' \
|
|
||||||
'un*til:Recurrence end date:$task_dates' \
|
|
||||||
'fg:Foreground color' \
|
|
||||||
'bg:Background color' \
|
|
||||||
'li*mit:Desired number of rows in report'
|
|
||||||
task_attributes=("$reply[@]")
|
|
||||||
|
|
||||||
args=(
|
|
||||||
\( "$task_attributes[@]" \|
|
|
||||||
\( /'(project|due|wait|recur|priority|until|fg|bg|limit).'/- \( /$'[^:]#:'/ ":default:modifiers:compadd -S ':' -a _task_modifiers" \) \) \|
|
|
||||||
\( /'(rc).'/- \( /$'[^:]#:'/ ":arguments:config:compadd -S ':' -a _task_config" \) \) \|
|
|
||||||
\( /'(+|-)'/- \( /"$word"/ ":values:remove tag:compadd -a _task_tags" \) \) \|
|
|
||||||
\( /"$word"/ \)
|
|
||||||
\) \#
|
|
||||||
)
|
|
||||||
_regex_arguments _task_attributes "${args[@]}"
|
|
||||||
|
|
||||||
## task commands
|
|
||||||
|
|
||||||
# default completion
|
|
||||||
(( $+functions[_task_default] )) ||
|
|
||||||
_task_default() {
|
|
||||||
_task_attributes "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# commands expecting an ID
|
|
||||||
(( $+functions[_task_id] )) ||
|
|
||||||
_task_id() {
|
|
||||||
if (( CURRENT < 3 )); then
|
|
||||||
# update IDs
|
|
||||||
_task_zshids=( ${(f)"$(task _zshids)"} )
|
|
||||||
_describe -t values 'task IDs' _task_zshids
|
|
||||||
else
|
|
||||||
_task_attributes "$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# merge completion
|
|
||||||
(( $+functions[_task_merge] )) ||
|
|
||||||
_task_merge() {
|
|
||||||
# TODO match URIs in .taskrc
|
|
||||||
_files
|
|
||||||
}
|
|
||||||
|
|
||||||
# push completion
|
|
||||||
(( $+functions[_task_push] )) ||
|
|
||||||
_task_push() {
|
|
||||||
# TODO match URIs in .taskrc
|
|
||||||
_files
|
|
||||||
}
|
|
||||||
|
|
||||||
# pull completion
|
|
||||||
(( $+functions[_task_pull] )) ||
|
|
||||||
_task_pull() {
|
|
||||||
# TODO match URIs in .taskrc
|
|
||||||
_files
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# modify (task [0-9]* ...) completion
|
|
||||||
(( $+functions[_task_modify] )) ||
|
|
||||||
_task_modify() {
|
|
||||||
_describe -t commands 'task command' _task_idCmdsDesc
|
|
||||||
_task_attributes "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
## first level completion => task sub-command completion
|
|
||||||
(( $+functions[_task_commands] )) ||
|
|
||||||
_task_commands() {
|
|
||||||
local cmd ret=1
|
|
||||||
if (( CURRENT == 1 )); then
|
|
||||||
# update IDs
|
|
||||||
_task_zshids=( ${(f)"$(task _zshids)"} )
|
|
||||||
|
|
||||||
_describe -t commands 'task command' _task_zshcmds
|
|
||||||
_describe -t values 'task IDs' _task_zshids
|
|
||||||
# TODO match more than one ID
|
|
||||||
elif [[ $words[1] =~ ^[0-9]*$ ]] then
|
|
||||||
_call_function ret _task_modify
|
|
||||||
return ret
|
|
||||||
else
|
|
||||||
# local curcontext="${curcontext}"
|
|
||||||
# cmd="${_task_cmds[(r)$words[1]:*]%%:*}"
|
|
||||||
cmd="${_task_cmds[(r)$words[1]]}"
|
|
||||||
idCmd="${(M)_task_idCmds[@]:#$words[1]}"
|
|
||||||
if (( $#cmd )); then
|
|
||||||
# curcontext="${curcontext%:*:*}:task-${cmd}"
|
|
||||||
|
|
||||||
if (( $#idCmd )); then
|
|
||||||
_call_function ret _task_id
|
|
||||||
else
|
|
||||||
_call_function ret _task_${cmd} ||
|
|
||||||
_call_function ret _task_default ||
|
|
||||||
_message "No command remaining."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
_message "Unknown subcommand ${cmd}"
|
|
||||||
fi
|
|
||||||
return ret
|
|
||||||
fi
|
|
||||||
}
|
|
@ -1,21 +1,20 @@
|
|||||||
################################################################################
|
# Complete task.
|
||||||
# Author: Pete Clark
|
completion_file="${0:h}/_task"
|
||||||
# Email: pete[dot]clark[at]gmail[dot]com
|
if [[ ! -e "$completion_file" ]] && (( $+commands[taskwarrior] )); then
|
||||||
# Version: 0.1 (05/24/2011)
|
ln -f -s "${commands[taskwarrior]:h:h}/share/doc/task/scripts/zsh/_task" "$completion_file" 2> /dev/null
|
||||||
# License: WTFPL<http://sam.zoy.org/wtfpl/>
|
else
|
||||||
#
|
if [[ -L "$completion_file" ]]; then
|
||||||
# This oh-my-zsh plugin adds smart tab completion for
|
unlink "$completion_file" 2> /dev/null
|
||||||
# TaskWarrior<http://taskwarrior.org/>. It uses the zsh tab completion
|
fi
|
||||||
# script (_task) distributed with TaskWarrior for the completion definitions.
|
fi
|
||||||
#
|
unset completion_file
|
||||||
# Typing task[tabtab] will give you a list of current tasks, task 66[tabtab]
|
|
||||||
# gives a list of available modifications for that task, etc.
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
# Style
|
||||||
zstyle ':completion:*:*:task:*' verbose yes
|
zstyle ':completion:*:*:task:*' verbose yes
|
||||||
zstyle ':completion:*:*:task:*:descriptions' format '%U%B%d%b%u'
|
zstyle ':completion:*:*:task:*:descriptions' format '%U%B%d%b%u'
|
||||||
|
|
||||||
zstyle ':completion:*:*:task:*' group-name ''
|
zstyle ':completion:*:*:task:*' group-name ''
|
||||||
|
|
||||||
|
# Aliases
|
||||||
alias t=task
|
alias t=task
|
||||||
compdef _task t=task
|
compdef _task t=task
|
||||||
|
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
|
# Aliases
|
||||||
alias et='mate .'
|
alias et='mate .'
|
||||||
alias ett='mate app config lib db public spec test Rakefile Capfile Todo'
|
alias ett='mate app config lib db public spec test Rakefile Capfile Todo'
|
||||||
alias etp='mate app config lib db public spec test vendor/plugins vendor/gems Rakefile Capfile Todo'
|
alias etp='mate app config lib db public spec test vendor/plugins vendor/gems Rakefile Capfile Todo'
|
||||||
alias etts='mate app config lib db public script spec test vendor/plugins vendor/gems Rakefile Capfile Todo'
|
alias etts='mate app config lib db public script spec test vendor/plugins vendor/gems Rakefile Capfile Todo'
|
||||||
|
|
||||||
# Edit Ruby app in TextMate
|
# Edit Ruby app in TextMate.
|
||||||
alias mr='mate CHANGELOG app config db lib public script spec test'
|
alias mr='mate CHANGELOG app config db lib public script spec test'
|
||||||
|
|
||||||
|
# Functions
|
||||||
function tm() {
|
function tm() {
|
||||||
cd $1
|
cd $1
|
||||||
mate $1
|
mate $1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in new issue