Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Adil Hafeez 2016-08-19 16:30:26 -07:00
commit 4a4ecbf7d2
107 changed files with 3153 additions and 547 deletions

11
.gitignore vendored
View file

@ -1,9 +1,8 @@
locals.zsh
log/.zsh_history
projects.zsh
custom
# custom files
custom/
!custom/plugins/example
!custom/example.zsh
*.swp
!custom/example.zshcache
# temp files directories
cache/
log/

View file

@ -210,4 +210,4 @@ We have [stickers](http://shop.planetargon.com/products/ohmyzsh-stickers-set-of-
## License
Oh My Zsh is released under the [MIT license](MIT-LICENSE.txt).
Oh My Zsh is released under the [MIT license](LICENSE.txt).

4
cache/.easter-egg vendored
View file

@ -1,4 +0,0 @@
This file is only here so that Git will keep a cache directory as .gitignore is ignoring all the files within it.
Feel free to add love notes for people here.

0
cache/.gitkeep vendored Normal file
View file

View file

@ -1,5 +1,10 @@
# Add yourself some shortcuts to projects you often work on
# Example:
# You can put files here to add functionality separated per file, which
# will be ignored by git.
# Files on the custom/ directory will be automatically loaded by the init
# script, in alphabetical order.
# For example: add yourself some shortcuts to projects you often work on.
#
# brainstormr=~/Projects/development/planetargon/brainstormr
# cd $brainstormr
#
# brainstormr=/Users/robbyrussell/Projects/development/planetargon/brainstormr
#

View file

@ -3,11 +3,11 @@ function zsh_stats() {
}
function uninstall_oh_my_zsh() {
env ZSH=$ZSH /bin/sh $ZSH/tools/uninstall.sh
env ZSH=$ZSH sh $ZSH/tools/uninstall.sh
}
function upgrade_oh_my_zsh() {
env ZSH=$ZSH /bin/sh $ZSH/tools/upgrade.sh
env ZSH=$ZSH sh $ZSH/tools/upgrade.sh
}
function take() {

View file

@ -76,13 +76,19 @@ function git_current_branch() {
# Gets the number of commits ahead from remote
function git_commits_ahead() {
if $(echo "$(command git log @{upstream}..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then
local COMMITS
COMMITS=$(command git log @{upstream}..HEAD | grep '^commit' | wc -l | tr -d ' ')
if $(command git rev-parse --git-dir > /dev/null 2>&1); then
local COMMITS="$(git rev-list --count @{upstream}..HEAD)"
echo "$ZSH_THEME_GIT_COMMITS_AHEAD_PREFIX$COMMITS$ZSH_THEME_GIT_COMMITS_AHEAD_SUFFIX"
fi
}
# Gets the number of commits behind remote
function git_commits_behind() {
if $(command git rev-parse --git-dir > /dev/null 2>&1); then
echo $(git rev-list --count HEAD..@{upstream})
fi
}
# Outputs if current branch is ahead of remote
function git_prompt_ahead() {
if [[ -n "$(command git rev-list origin/$(git_current_branch)..HEAD 2> /dev/null)" ]]; then

View file

@ -1,6 +1,6 @@
# get the node.js version
function nvm_prompt_info() {
[ -f "$HOME/.nvm/nvm.sh" ] || return
[[ -f "$NVM_DIR/nvm.sh" ]] || return
local nvm_prompt
nvm_prompt=$(node -v 2>/dev/null)
[[ "${nvm_prompt}x" == "x" ]] && return

View file

@ -11,9 +11,9 @@ then
# otherwise, leave ls as is, because NetBSD's ls doesn't support -G
gls --color -d . &>/dev/null 2>&1 && alias ls='gls --color=tty'
elif [[ "$(uname -s)" == "OpenBSD" ]]; then
# On OpenBSD, "gls" (ls from GNU coreutils) and "colorls" (ls from base,
# with color and multibyte support) are available from ports. "colorls"
# will be installed on purpose and can't be pulled in by installing
# On OpenBSD, "gls" (ls from GNU coreutils) and "colorls" (ls from base,
# with color and multibyte support) are available from ports. "colorls"
# will be installed on purpose and can't be pulled in by installing
# coreutils, so prefer it to "gls".
gls --color -d . &>/dev/null 2>&1 && alias ls='gls --color=tty'
colorls -G -d . &>/dev/null 2>&1 && alias ls='colorls -G'
@ -22,10 +22,8 @@ then
fi
fi
#setopt no_beep
setopt auto_cd
setopt multios
setopt cdablevars
if [[ x$WINDOW != x ]]
then

View file

@ -1,4 +0,0 @@
This file is only here so that Git will keep a log directory as .gitignore is ignoring all the log files within it.
feel free to add love notes for people here.

0
log/.gitkeep Normal file
View file

View file

@ -0,0 +1,5 @@
## arcanist
**Maintainer:** [@emzar](https://github.com/emzar)
This plugin adds many useful aliases.

View file

@ -0,0 +1,21 @@
#
# Aliases
# (sorted alphabetically)
#
alias ara='arc amend'
alias arb='arc branch'
alias arco='arc cover'
alias arci='arc commit'
alias ard='arc diff'
alias ardnu='arc diff --nounit'
alias ardnupc='arc diff --nounit --plan-changes'
alias ardpc='arc diff --plan-changes'
alias are='arc export'
alias arh='arc help'
alias arl='arc land'
alias arli='arc lint'
alias arls='arc list'
alias arpa='arc patch'

View file

@ -72,6 +72,7 @@ _bower ()
compadd "$@" $(echo $bower_package_list)
;;
*)
_arguments \
$_no_color \
;;
esac

View file

@ -17,7 +17,12 @@ function branch_prompt_info() {
# Mercurial repository
if [[ -d "${current_dir}/.hg" ]]
then
echo '☿' $(<"$current_dir/.hg/branch")
if [[ -f "$current_dir/.hg/branch" ]]
then
echo '☿' $(<"$current_dir/.hg/branch")
else
echo '☿ default'
fi
return;
fi
# Defines path as parent directory and keeps looking for :)

View file

@ -58,7 +58,7 @@ bundle_install() {
if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
if [[ "$OSTYPE" = darwin* ]]
then
local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
local cores_num="$(sysctl -n hw.ncpu)"
else
local cores_num="$(nproc)"
fi

View file

@ -1,11 +1,31 @@
# CakePHP 3 basic command completion
_cakephp3_get_command_list () {
cakephp3commands=($(bin/cake completion commands));printf "%s\n" "${cakephp3commands[@]}"
bin/cake Completion commands
}
_cakephp3_get_sub_command_list () {
bin/cake Completion subcommands ${words[2]}
}
_cakephp3_get_3rd_argument () {
bin/cake ${words[2]} ${words[3]} | \grep '\-\ '| \awk '{print $2}'
}
_cakephp3 () {
if [ -f bin/cake ]; then
compadd `_cakephp3_get_command_list`
local -a has3rdargument
has3rdargument=("all" "controller" "fixture" "model" "template")
if [ -f bin/cake ]; then
if (( CURRENT == 2 )); then
compadd $(_cakephp3_get_command_list)
fi
if (( CURRENT == 3 )); then
compadd $(_cakephp3_get_sub_command_list)
fi
if (( CURRENT == 4 )); then
if [[ ${has3rdargument[(i)${words[3]}]} -le ${#has3rdargument} ]]; then
compadd $(_cakephp3_get_3rd_argument)
fi
fi
fi
}
@ -14,6 +34,5 @@ compdef _cakephp3 cake
#Alias
alias c3='bin/cake'
alias c3cache='bin/cake orm_cache clear'
alias c3migrate='bin/cake migrations migrate'

View file

@ -1,5 +1,4 @@
# Docker-compose plugin for oh my zsh
A copy of the completion script from the [docker-compose](1) git repo.
A copy of the completion script from the [docker-compose](https://github.com/docker/compose/blob/master/contrib/completion/zsh/_docker-compose) git repo.
[1]:[https://github.com/docker/compose/blob/master/contrib/completion/zsh/_docker-compose]

View file

@ -7,7 +7,7 @@
# -------------------------------------------------------------------------
# Version
# -------
# 0.1.0
# 1.5.0
# -------------------------------------------------------------------------
# Authors
# -------
@ -19,58 +19,69 @@
# * @felixr docker zsh completion script : https://github.com/felixr/docker-zsh-completion
# -------------------------------------------------------------------------
# For compatibility reasons, Compose and therefore its completion supports several
# stack compositon files as listed here, in descending priority.
# Support for these filenames might be dropped in some future version.
__docker-compose_compose_file() {
local file
for file in docker-compose.y{,a}ml fig.y{,a}ml ; do
[ -e $file ] && {
echo $file
return
}
done
echo docker-compose.yml
__docker-compose_q() {
docker-compose 2>/dev/null $compose_options "$@"
}
# Extracts all service names from docker-compose.yml.
___docker-compose_all_services_in_compose_file() {
# All services defined in docker-compose.yml
__docker-compose_all_services_in_compose_file() {
local already_selected
local -a services
already_selected=$(echo ${words[@]} | tr " " "|")
awk -F: '/^[a-zA-Z0-9]/{print $1}' "${compose_file:-$(__docker-compose_compose_file)}" 2>/dev/null | grep -Ev "$already_selected"
already_selected=$(echo $words | tr " " "|")
__docker-compose_q config --services \
| grep -Ev "^(${already_selected})$"
}
# All services, even those without an existing container
__docker-compose_services_all() {
services=$(___docker-compose_all_services_in_compose_file)
_alternative "args:services:($services)"
[[ $PREFIX = -* ]] && return 1
integer ret=1
services=$(__docker-compose_all_services_in_compose_file)
_alternative "args:services:($services)" && ret=0
return ret
}
# All services that have an entry with the given key in their docker-compose.yml section
___docker-compose_services_with_key() {
__docker-compose_services_with_key() {
local already_selected
local -a buildable
already_selected=$(echo ${words[@]} | tr " " "|")
already_selected=$(echo $words | tr " " "|")
# flatten sections to one line, then filter lines containing the key and return section name.
awk '/^[a-zA-Z0-9]/{printf "\n"};{printf $0;next;}' "${compose_file:-$(__docker-compose_compose_file)}" 2>/dev/null | awk -F: -v key=": +$1:" '$0 ~ key {print $1}' 2>/dev/null | grep -Ev "$already_selected"
__docker-compose_q config \
| sed -n -e '/^services:/,/^[^ ]/p' \
| sed -n 's/^ //p' \
| awk '/^[a-zA-Z0-9]/{printf "\n"};{printf $0;next;}' \
| grep " \+$1:" \
| cut -d: -f1 \
| grep -Ev "^(${already_selected})$"
}
# All services that are defined by a Dockerfile reference
__docker-compose_services_from_build() {
buildable=$(___docker-compose_services_with_key build)
_alternative "args:buildable services:($buildable)"
[[ $PREFIX = -* ]] && return 1
integer ret=1
buildable=$(__docker-compose_services_with_key build)
_alternative "args:buildable services:($buildable)" && ret=0
return ret
}
# All services that are defined by an image
__docker-compose_services_from_image() {
pullable=$(___docker-compose_services_with_key image)
_alternative "args:pullable services:($pullable)"
[[ $PREFIX = -* ]] && return 1
integer ret=1
pullable=$(__docker-compose_services_with_key image)
_alternative "args:pullable services:($pullable)" && ret=0
return ret
}
__docker-compose_get_services() {
local kind expl
declare -a running stopped lines args services
[[ $PREFIX = -* ]] && return 1
integer ret=1
local kind
declare -a running paused stopped lines args services
docker_status=$(docker ps > /dev/null 2>&1)
if [ $? -ne 0 ]; then
@ -80,64 +91,78 @@ __docker-compose_get_services() {
kind=$1
shift
[[ $kind = (stopped|all) ]] && args=($args -a)
[[ $kind =~ (stopped|all) ]] && args=($args -a)
lines=(${(f)"$(_call_program commands docker ps ${args})"})
services=(${(f)"$(_call_program commands docker-compose 2>/dev/null ${compose_file:+-f $compose_file} ${compose_project:+-p $compose_project} ps -q)"})
lines=(${(f)"$(_call_program commands docker $docker_options ps $args)"})
services=(${(f)"$(_call_program commands docker-compose 2>/dev/null $compose_options ps -q)"})
# Parse header line to find columns
local i=1 j=1 k header=${lines[1]}
declare -A begin end
while (( $j < ${#header} - 1 )) {
i=$(( $j + ${${header[$j,-1]}[(i)[^ ]]} - 1))
j=$(( $i + ${${header[$i,-1]}[(i) ]} - 1))
k=$(( $j + ${${header[$j,-1]}[(i)[^ ]]} - 2))
begin[${header[$i,$(($j-1))]}]=$i
end[${header[$i,$(($j-1))]}]=$k
}
while (( j < ${#header} - 1 )); do
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
begin[${header[$i,$((j-1))]}]=$i
end[${header[$i,$((j-1))]}]=$k
done
lines=(${lines[2,-1]})
# Container ID
local line s name
local -a names
for line in $lines; do
if [[ $services == *"${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"* ]]; then
if [[ ${services[@]} == *"${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"* ]]; then
names=(${(ps:,:)${${line[${begin[NAMES]},-1]}%% *}})
for name in $names; do
s="${${name%_*}#*_}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}"
s="$s, ${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"
s="$s, ${${${line[$begin[IMAGE],$end[IMAGE]]}/:/\\:}%% ##}"
s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}"
if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then
stopped=($stopped $s)
else
if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = *\(Paused\)* ]]; then
paused=($paused $s)
fi
running=($running $s)
fi
done
fi
done
[[ $kind = (running|all) ]] && _describe -t services-running "running services" running
[[ $kind = (stopped|all) ]] && _describe -t services-stopped "stopped services" stopped
[[ $kind =~ (running|all) ]] && _describe -t services-running "running services" running "$@" && ret=0
[[ $kind =~ (paused|all) ]] && _describe -t services-paused "paused services" paused "$@" && ret=0
[[ $kind =~ (stopped|all) ]] && _describe -t services-stopped "stopped services" stopped "$@" && ret=0
return ret
}
__docker-compose_pausedservices() {
[[ $PREFIX = -* ]] && return 1
__docker-compose_get_services paused "$@"
}
__docker-compose_stoppedservices() {
[[ $PREFIX = -* ]] && return 1
__docker-compose_get_services stopped "$@"
}
__docker-compose_runningservices() {
[[ $PREFIX = -* ]] && return 1
__docker-compose_get_services running "$@"
}
__docker-compose_services () {
__docker-compose_services() {
[[ $PREFIX = -* ]] && return 1
__docker-compose_get_services all "$@"
}
__docker-compose_caching_policy() {
oldp=( "$1"(Nmh+1) ) # 1 hour
oldp=( "$1"(Nmh+1) ) # 1 hour
(( $#oldp ))
}
__docker-compose_commands () {
__docker-compose_commands() {
local cache_policy
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
@ -151,110 +176,204 @@ __docker-compose_commands () {
local -a lines
lines=(${(f)"$(_call_program commands docker-compose 2>&1)"})
_docker_compose_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:})
_store_cache docker_compose_subcommands _docker_compose_subcommands
(( $#_docker_compose_subcommands > 0 )) && _store_cache docker_compose_subcommands _docker_compose_subcommands
fi
_describe -t docker-compose-commands "docker-compose command" _docker_compose_subcommands
}
__docker-compose_subcommand () {
local -a _command_args
__docker-compose_subcommand() {
local opts_help opts_force_recreate opts_no_recreate opts_no_build opts_remove_orphans opts_timeout opts_no_color opts_no_deps
opts_help='(: -)--help[Print usage]'
opts_force_recreate="(--no-recreate)--force-recreate[Recreate containers even if their configuration and image haven't changed. Incompatible with --no-recreate.]"
opts_no_recreate="(--force-recreate)--no-recreate[If containers already exist, don't recreate them. Incompatible with --force-recreate.]"
opts_no_build="(--build)--no-build[Don't build an image, even if it's missing.]"
opts_remove_orphans="--remove-orphans[Remove containers for services not defined in the Compose file]"
opts_timeout=('(-t --timeout)'{-t,--timeout}"[Specify a shutdown timeout in seconds. (default: 10)]:seconds: ")
opts_no_color='--no-color[Produce monochrome output.]'
opts_no_deps="--no-deps[Don't start linked services.]"
integer ret=1
case "$words[1]" in
(build)
_arguments \
'--no-cache[Do not use cache when building the image]' \
$opts_help \
'--force-rm[Always remove intermediate containers.]' \
'--no-cache[Do not use cache when building the image.]' \
'--pull[Always attempt to pull a newer version of the image.]' \
'*:services:__docker-compose_services_from_build' && ret=0
;;
(bundle)
_arguments \
$opts_help \
'(--output -o)'{--output,-o}'[Path to write the bundle file to. Defaults to "<project name>.dab".]:file:_files' && ret=0
;;
(config)
_arguments \
$opts_help \
'(--quiet -q)'{--quiet,-q}"[Only validate the configuration, don't print anything.]" \
'--services[Print the service names, one per line.]' && ret=0
;;
(create)
_arguments \
$opts_help \
$opts_force_recreate \
$opts_no_recreate \
$opts_no_build \
"(--no-build)--build[Build images before creating containers.]" \
'*:services:__docker-compose_services_all' && ret=0
;;
(down)
_arguments \
$opts_help \
"--rmi[Remove images. Type must be one of: 'all': Remove all images used by any service. 'local': Remove only images that don't have a custom tag set by the \`image\` field.]:type:(all local)" \
'(-v --volumes)'{-v,--volumes}"[Remove named volumes declared in the \`volumes\` section of the Compose file and anonymous volumes attached to containers.]" \
$opts_remove_orphans && ret=0
;;
(events)
_arguments \
$opts_help \
'--json[Output events as a stream of json objects]' \
'*:services:__docker-compose_services_all' && ret=0
;;
(exec)
_arguments \
$opts_help \
'-d[Detached mode: Run command in the background.]' \
'--privileged[Give extended privileges to the process.]' \
'--user=[Run the command as this user.]:username:_users' \
'-T[Disable pseudo-tty allocation. By default `docker-compose exec` allocates a TTY.]' \
'--index=[Index of the container if there are multiple instances of a service \[default: 1\]]:index: ' \
'(-):running services:__docker-compose_runningservices' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
;;
(help)
_arguments ':subcommand:__docker-compose_commands' && ret=0
;;
(kill)
_arguments \
$opts_help \
'-s[SIGNAL to send to the container. Default signal is SIGKILL.]:signal:_signals' \
'*:running services:__docker-compose_runningservices' && ret=0
;;
(logs)
_arguments \
'--no-color[Produce monochrome output.]' \
$opts_help \
'(-f --follow)'{-f,--follow}'[Follow log output]' \
$opts_no_color \
'--tail=[Number of lines to show from the end of the logs for each container.]:number of lines: ' \
'(-t --timestamps)'{-t,--timestamps}'[Show timestamps]' \
'*:services:__docker-compose_services_all' && ret=0
;;
(migrate-to-labels)
(pause)
_arguments \
'(-):Recreate containers to add labels' && ret=0
$opts_help \
'*:running services:__docker-compose_runningservices' && ret=0
;;
(port)
_arguments \
'--protocol=-[tcp or udap (defaults to tcp)]:protocol:(tcp udp)' \
'--index=-[index of the container if there are mutiple instances of a service (defaults to 1)]:index: ' \
$opts_help \
'--protocol=[tcp or udp \[default: tcp\]]:protocol:(tcp udp)' \
'--index=[index of the container if there are multiple instances of a service \[default: 1\]]:index: ' \
'1:running services:__docker-compose_runningservices' \
'2:port:_ports' && ret=0
;;
(ps)
_arguments \
$opts_help \
'-q[Only display IDs]' \
'*:services:__docker-compose_services_all' && ret=0
;;
(pull)
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]' \
$opts_help \
'--ignore-pull-failures[Pull what it can and ignores images with pull failures.]' \
'*:services:__docker-compose_services_from_image' && ret=0
;;
(push)
_arguments \
$opts_help \
'--ignore-push-failures[Push what it can and ignores images with push failures.]' \
'*:services:__docker-compose_services' && ret=0
;;
(rm)
_arguments \
$opts_help \
'(-f --force)'{-f,--force}"[Don't ask to confirm removal]" \
'-v[Remove volumes associated with containers]' \
'-v[Remove any anonymous volumes attached to containers]' \
'*:stopped services:__docker-compose_stoppedservices' && ret=0
;;
(run)
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]' \
$opts_help \
'-d[Detached mode: Run container in the background, print new container name.]' \
'--entrypoint[Overwrite the entrypoint of the image.]:entry point: ' \
'*-e[KEY=VAL Set an environment variable (can be used multiple times)]:environment variable KEY=VAL: ' \
'(-u --user)'{-u,--user=-}'[Run as specified username or uid]:username or uid:_users' \
"--no-deps[Don't start linked services.]" \
'--entrypoint[Overwrite the entrypoint of the image.]:entry point: ' \
'--name=[Assign a name to the container]:name: ' \
$opts_no_deps \
'(-p --publish)'{-p,--publish=}"[Publish a container's port(s) to the host]" \
'--rm[Remove container after run. Ignored in detached mode.]' \
"--service-ports[Run command with the service's ports enabled and mapped to the host.]" \
'-T[Disable pseudo-tty allocation. By default `docker-compose run` allocates a TTY.]' \
'(-u --user)'{-u,--user=}'[Run as specified username or uid]:username or uid:_users' \
'(-w --workdir)'{-w,--workdir=}'[Working directory inside the container]:workdir: ' \
'(-):services:__docker-compose_services' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
;;
(scale)
_arguments '*:running services:__docker-compose_runningservices' && ret=0
_arguments \
$opts_help \
$opts_timeout \
'*:running services:__docker-compose_runningservices' && ret=0
;;
(start)
_arguments '*:stopped services:__docker-compose_stoppedservices' && ret=0
_arguments \
$opts_help \
'*:stopped services:__docker-compose_stoppedservices' && ret=0
;;
(stop|restart)
_arguments \
'(-t --timeout)'{-t,--timeout}"[Specify a shutdown timeout in seconds. (default: 10)]:seconds: " \
$opts_help \
$opts_timeout \
'*:running services:__docker-compose_runningservices' && ret=0
;;
(unpause)
_arguments \
$opts_help \
'*:paused services:__docker-compose_pausedservices' && ret=0
;;
(up)
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]' \
'-d[Detached mode: Run containers in the background, print new container names.]' \
'--no-color[Produce monochrome output.]' \
"--no-deps[Don't start linked services.]" \
"--no-recreate[If containers already exist, don't recreate them.]" \
"--no-build[Don't build an image, even if it's missing]" \
'(-t --timeout)'{-t,--timeout}"[Specify a shutdown timeout in seconds. (default: 10)]:seconds: " \
"--x-smart-recreate[Only recreate containers whose configuration or image needs to be updated. (EXPERIMENTAL)]" \
$opts_help \
'(--abort-on-container-exit)-d[Detached mode: Run containers in the background, print new container names. Incompatible with --abort-on-container-exit.]' \
$opts_no_color \
$opts_no_deps \
$opts_force_recreate \
$opts_no_recreate \
$opts_no_build \
"(--no-build)--build[Build images before starting containers.]" \
"(-d)--abort-on-container-exit[Stops all containers if any container was stopped. Incompatible with -d.]" \
'(-t --timeout)'{-t,--timeout}"[Use this timeout in seconds for container shutdown when attached or when containers are already running. (default: 10)]:seconds: " \
$opts_remove_orphans \
'*:services:__docker-compose_services_all' && ret=0
;;
(version)
_arguments \
$opts_help \
"--short[Shows only Compose's version number.]" && ret=0
;;
(*)
_message 'Unknown sub command'
_message 'Unknown sub command' && ret=1
;;
esac
return ret
}
_docker-compose () {
_docker-compose() {
# Support for subservices, which allows for `compdef _docker docker-shell=_docker_containers`.
# Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`.
if [[ $service != docker-compose ]]; then
@ -262,34 +381,62 @@ _docker-compose () {
return
fi
local curcontext="$curcontext" state line ret=1
local curcontext="$curcontext" state line
integer ret=1
typeset -A opt_args
_arguments -C \
'(- :)'{-h,--help}'[Get help]' \
'--verbose[Show more output]' \
'(- :)'{-v,--version}'[Print version and exit]' \
'(-f --file)'{-f,--file}'[Specify an alternate docker-compose file (default: docker-compose.yml)]:file:_files -g "*.yml"' \
'(-p --project-name)'{-p,--project-name}'[Specify an alternate project name (default: directory name)]:project name:' \
'--verbose[Show more output]' \
'(- :)'{-v,--version}'[Print version and exit]' \
'(-H --host)'{-H,--host}'[Daemon socket to connect to]:host:' \
'--tls[Use TLS; implied by --tlsverify]' \
'--tlscacert=[Trust certs signed only by this CA]:ca path:' \
'--tlscert=[Path to TLS certificate file]:client cert path:' \
'--tlskey=[Path to TLS key file]:tls key path:' \
'--tlsverify[Use TLS and verify the remote]' \
"--skip-hostname-check[Don't check the daemon's hostname against the name specified in the client certificate (for example if your docker host is an IP address)]" \
'(-): :->command' \
'(-)*:: :->option-or-argument' && ret=0
local counter=1
#local compose_file compose_project
while [ $counter -lt ${#words[@]} ]; do
case "${words[$counter]}" in
-f|--file)
(( counter++ ))
compose_file="${words[$counter]}"
;;
-p|--project-name)
(( counter++ ))
compose_project="${words[$counter]}"
;;
*)
;;
esac
(( counter++ ))
local -a relevant_compose_flags relevant_docker_flags compose_options docker_options
relevant_compose_flags=(
"--file" "-f"
"--host" "-H"
"--project-name" "-p"
"--tls"
"--tlscacert"
"--tlscert"
"--tlskey"
"--tlsverify"
"--skip-hostname-check"
)
relevant_docker_flags=(
"--host" "-H"
"--tls"
"--tlscacert"
"--tlscert"
"--tlskey"
"--tlsverify"
)
for k in "${(@k)opt_args}"; do
if [[ -n "${relevant_docker_flags[(r)$k]}" ]]; then
docker_options+=$k
if [[ -n "$opt_args[$k]" ]]; then
docker_options+=$opt_args[$k]
fi
fi
if [[ -n "${relevant_compose_flags[(r)$k]}" ]]; then
compose_options+=$k
if [[ -n "$opt_args[$k]" ]]; then
compose_options+=$opt_args[$k]
fi
fi
done
case $state in

View file

@ -10,7 +10,7 @@
# - Configuration changes made at runtime are applied to all frames.
if "$ZSH/tools/require_tool.sh" emacs 23 2>/dev/null ; then
if "$ZSH/tools/require_tool.sh" emacs 24 2>/dev/null ; then
export EMACS_PLUGIN_LAUNCHER="$ZSH/plugins/emacs/emacsclient.sh"
# set EDITOR if not already defined.
@ -18,15 +18,14 @@ if "$ZSH/tools/require_tool.sh" emacs 23 2>/dev/null ; then
alias emacs="$EMACS_PLUGIN_LAUNCHER --no-wait"
alias e=emacs
# open terminal emacsclient
alias te="$EMACS_PLUGIN_LAUNCHER -nw"
# same than M-x eval but from outside Emacs.
alias eeval="$EMACS_PLUGIN_LAUNCHER --eval"
# create a new X frame
alias eframe='emacsclient --alternate-editor "" --create-frame'
# to code all night long
alias emasc=emacs
alias emcas=emacs
# Write to standard output the path to the file
# opened in the current buffer.

View file

@ -1,12 +1,28 @@
#!/bin/sh
# get list of available X windows.
x=`emacsclient --alternate-editor '' --eval '(x-display-list)' 2>/dev/null`
_emacsfun()
{
# get list of emacs frames.
frameslist=`emacsclient --alternate-editor '' --eval '(frame-list)' 2>/dev/null | egrep -o '(frame)+'`
if [ -z "$x" ] || [ "$x" = "nil" ] ;then
# Create one if there is no X window yet.
emacsclient --alternate-editor "" --create-frame "$@"
if [ "$(echo "$frameslist" | sed -n '$=')" -ge 2 ] ;then
# prevent creating another X frame if there is at least one present.
emacsclient --alternate-editor "" "$@"
else
# Create one if there is no X window yet.
emacsclient --alternate-editor "" --create-frame "$@"
fi
}
# adopted from https://github.com/davidshepherd7/emacs-read-stdin/blob/master/emacs-read-stdin.sh
# If the second argument is - then write stdin to a tempfile and open the
# tempfile. (first argument will be `--no-wait` passed in by the plugin.zsh)
if [ "$#" -ge "2" -a "$2" = "-" ]
then
tempfile="$(mktemp emacs-stdin-$USER.XXXXXXX --tmpdir)"
cat - > "$tempfile"
_emacsfun --no-wait $tempfile
else
# prevent creating another X frame if there is at least one present.
emacsclient --alternate-editor "" "$@"
_emacsfun "$@"
fi

View file

@ -6,6 +6,6 @@ if [ $commands[fasd] ]; then # check if fasd is installed
source "$fasd_cache"
unset fasd_cache
alias v='f -e vim'
alias v="f -e $EDITOR"
alias o='a -e open_command'
fi

7
plugins/fossil/README.md Normal file
View file

@ -0,0 +1,7 @@
## Fossil Plugin
This plugin adds completion support and prompt for fossil repositories.
The prompt will display the current branch and status been dirty or clean.
### CONTRIBUTOR
- Jefferson González ([jgmdev](https://github.com/jgmdev))

View file

@ -0,0 +1,89 @@
_FOSSIL_PROMPT=""
# Prefix at the very beginning of the prompt, before the branch name
ZSH_THEME_FOSSIL_PROMPT_PREFIX="%{$fg_bold[blue]%}fossil:(%{$fg_bold[red]%}"
# At the very end of the prompt
ZSH_THEME_FOSSIL_PROMPT_SUFFIX="%{$fg_bold[blue]%})"
# Text to display if the branch is dirty
ZSH_THEME_FOSSIL_PROMPT_DIRTY=" %{$fg_bold[red]%}✖"
# Text to display if the branch is clean
ZSH_THEME_FOSSIL_PROMPT_CLEAN=" %{$fg_bold[green]%}✔"
function fossil_prompt_info () {
local _OUTPUT=`fossil branch 2>&1`
local _STATUS=`echo $_OUTPUT | grep "use --repo"`
if [ "$_STATUS" = "" ]; then
local _EDITED=`fossil changes`
local _EDITED_SYM="$ZSH_THEME_FOSSIL_PROMPT_CLEAN"
local _BRANCH=`echo $_OUTPUT | grep "* " | sed 's/* //g'`
if [ "$_EDITED" != "" ]; then
_EDITED_SYM="$ZSH_THEME_FOSSIL_PROMPT_DIRTY"
fi
echo "$ZSH_THEME_FOSSIL_PROMPT_PREFIX" \
"$_BRANCH" \
"$ZSH_THEME_FOSSIL_PROMPT_SUFFIX" \
"$_EDITED_SYM"\
"%{$reset_color%}"
fi
}
function _fossil_get_command_list () {
fossil help -a | grep -v "Usage|Common|This is"
}
function _fossil () {
local context state state_descr line
typeset -A opt_args
_arguments \
'1: :->command'\
'2: :->subcommand'
case $state in
command)
local _OUTPUT=`fossil branch 2>&1 | grep "use --repo"`
if [ "$_OUTPUT" = "" ]; then
compadd `_fossil_get_command_list`
else
compadd clone init import help version
fi
;;
subcommand)
if [ "$words[2]" = "help" ]; then
compadd `_fossil_get_command_list`
else
compcall -D
fi
;;
esac
}
function _fossil_prompt () {
local current=`echo $PROMPT $RPROMPT | grep fossil`
if [ "$_FOSSIL_PROMPT" = "" -o "$current" = "" ]; then
local _prompt=${PROMPT}
local _rprompt=${RPROMPT}
local is_prompt=`echo $PROMPT | grep git`
if [ "$is_prompt" = "" ]; then
export RPROMPT="$_rprompt"'$(fossil_prompt_info)'
else
export PROMPT="$_prompt"'$(fossil_prompt_info) '
fi
_FOSSIL_PROMPT="1"
fi
}
compdef _fossil fossil
autoload -U add-zsh-hook
add-zsh-hook precmd _fossil_prompt

21
plugins/gb/README.md Normal file
View file

@ -0,0 +1,21 @@
# `gb` plugin
> A project based build tool for the Go programming language.
See https://getgb.io for the full `gb` documentation
* * * *
- Adds completion support for all `gb` commands.
- Also supports completion for the [`gb-vendor` plugin](https://godoc.org/github.com/constabulary/gb/cmd/gb-vendor).
To use it, add `gb` to your plugins array:
```sh
plugins=(... gb)
```
## Caveats
The `git` plugin defines an alias `gb` that usually conflicts with the `gb` program.
If you're having trouble with it, remove it by adding `unalias gb` at the end of your
zshrc file.

111
plugins/gb/_gb Normal file
View file

@ -0,0 +1,111 @@
#compdef gb
#autoload
_gb () {
local ret=1 state
_arguments -C ':command:->command' '*::options:->options' && ret=0
case $state in
(command)
local -a subcommands
subcommands=(
"build:build a package"
"doc:show documentation for a package or symbol"
"env:print project environment variables"
"generate:generate Go files by processing source"
"help:displays the help"
"info:info returns information about this project"
"list:list the packages named by the importpaths"
"test:test packages"
"vendor:manage your vendored dependencies"
)
_describe -t subcommands 'gb subcommands' subcommands && ret=0
;;
(options)
case $line[1] in
(build)
_arguments \
-f'[ignore cached packages]' \
-F'[do not cache packages]' \
-q'[decreases verbosity]' \
-P'[the number of build jobs to run in parallel]' \
-R'[sets the base of the project root search path]' \
-dotfile'[output a dot formatted file of the build steps]' \
-ldflags'["flag list" arguments to pass to the linker]' \
-gcflags'["arg list" arguments to pass to the compiler]' \
-race'[enable data race detection]' \
-tags'["tag list" additional build tags]'
;;
(list)
_arguments \
-f'[alternate format for the list, using the syntax of package template]' \
-s'[read format template from STDIN]' \
-json'[prints output in structured JSON format]'
;;
(test)
_arguments \
-v'[print output from test subprocess]' \
-ldflags'["flag list" arguments to pass to the linker]' \
-gcflags'["arg list" arguments to pass to the compiler]' \
-race'[enable data race detection]' \
-tags'["tag list" additional build tags]'
;;
(vendor)
_gb-vendor
esac
;;
esac
return ret
}
_gb-vendor () {
local curcontext="$curcontext" state line
_arguments -C ':command:->command' '*::options:->options'
case $state in
(command)
local -a subcommands
subcommands=(
'delete:deletes a local dependency'
'fetch:fetch a remote dependency'
'list:lists dependencies, one per line'
'purge:remove all unreferenced dependencies'
'restore:restore dependencies from the manifest'
'update:update a local dependency'
)
_describe -t subcommands 'gb vendor subcommands' subcommands && ret=0
;;
(options)
case $line[1] in
(delete)
_arguments \
-all'[remove all dependencies]'
;;
(fetch)
_arguments \
-branch'[fetch from a particular branch]' \
-no-recurse'[do not fetch recursively]' \
-tag'[fetch the specified tag]' \
-revision'[fetch the specific revision from the branch (if supplied)]' \
-precaire'[allow the use of insecure protocols]' \
;;
(list)
_arguments \
-f'[controls the template used for printing each manifest entry]'
;;
(restore)
_arguments \
-precaire'[allow the use of insecure protocols]'
;;
(update)
_arguments \
-all'[update all dependencies in the manifest or supply a given dependency]' \
-precaire'[allow the use of insecure protocols]'
;;
esac
;;
esac
}
_gb

View file

@ -0,0 +1,31 @@
# Git-Flow plugin
This plugin adds completion and aliases for the `git-flow` command. More information
at https://github.com/nvie/gitflow.
Enable git-flow plugin in your zshrc file:
```
plugins=(... git-flow)
```
## Aliases
More information about `git-flow` commands:
https://github.com/nvie/gitflow/wiki/Command-Line-Arguments
| Alias | Command | Description |
|---------|---------------------------|----------------------------------------|
| `gfl` | `git flow` | Git-Flow command |
| `gfli` | `git flow init` | Initialize git-flow repository |
| `gcd` | `git checkout develop` | Check out develop branch |
| `gch` | `git checkout hotfix` | Check out hotfix branch |
| `gcr` | `git checkout release` | Check out release branch |
| `gflf` | `git flow feature` | List existing feature branches |
| `gflh` | `git flow hotfix` | List existing hotfix branches |
| `gflr` | `git flow release` | List existing release branches |
| `gflfs` | `git flow feature start` | Start a new feature: `gflfs <name>` |
| `gflhs` | `git flow hotfix start` | Start a new hotfix: `gflhs <version>` |
| `gflrs` | `git flow release start` | Start a new release: `gflrs <version>` |
| `gflff` | `git flow feature finish` | Finish feature: `gflff <name>` |
| `gflhf` | `git flow hotfix finish` | Finish hotfix: `gflhf <version>` |
| `gflrf` | `git flow release finish` | Finish release: `gflrf <version>` |

View file

@ -22,9 +22,19 @@
#Alias
alias gfl='git flow'
alias gfli='git flow init'
alias gcd='git checkout develop'
alias gch='git checkout hotfix'
alias gcr='git checkout release'
alias gflf='git flow feature'
alias gflh='git flow hotfix'
alias gflr='git flow release'
alias gflfs='git flow feature start'
alias gflhs='git flow hotfix start'
alias gflrs='git flow release start'
alias gflff='git flow feature finish'
alias gflhf='git flow hotfix finish'
alias gflrf='git flow release finish'
_git-flow ()
{

View file

@ -46,7 +46,7 @@ alias gapa='git add --patch'
alias gb='git branch'
alias gba='git branch -a'
alias gbda='git branch --merged | command grep -vE "^(\*|\s*master\s*$)" | command xargs -n 1 git branch -d'
alias gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d'
alias gbl='git blame -b -w'
alias gbnm='git branch --no-merged'
alias gbr='git branch --remote'
@ -58,9 +58,11 @@ alias gbss='git bisect start'
alias gc='git commit -v'
alias gc!='git commit -v --amend'
alias gcn!='git commit -v --no-edit --amend'
alias gca='git commit -v -a'
alias gca!='git commit -v -a --amend'
alias gcan!='git commit -v -a -s --no-edit --amend'
alias gcan!='git commit -v -a --no-edit --amend'
alias gcans!='git commit -v -a -s --no-edit --amend'
alias gcam='git commit -a -m'
alias gcb='git checkout -b'
alias gcf='git config --list'
@ -73,68 +75,84 @@ alias gco='git checkout'
alias gcount='git shortlog -sn'
compdef gcount=git
alias gcp='git cherry-pick'
alias gcpa='git cherry-pick --abort'
alias gcpc='git cherry-pick --continue'
alias gcs='git commit -S'
alias gd='git diff'
alias gdca='git diff --cached'
alias gdct='git describe --tags `git rev-list --tags --max-count=1`'
alias gdt='git diff-tree --no-commit-id --name-only -r'
alias gdw='git diff --word-diff'
gdv() { git diff -w "$@" | view - }
compdef _git gdv=git-diff
alias gdw='git diff --word-diff'
alias gf='git fetch'
alias gfa='git fetch --all --prune'
function gfg() { git ls-files | grep $@ }
compdef gfg=grep
alias gfo='git fetch origin'
function gfg() { git ls-files | grep $@ }
compdef _grep gfg
alias gg='git gui citool'
alias gga='git gui citool --amend'
ggf() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force origin "${b:=$1}"
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force origin "${b:=$1}"
}
compdef _git ggf=git-checkout
ggl() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git pull origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git pull origin "${b:=$1}"
fi
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git pull origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git pull origin "${b:=$1}"
fi
}
compdef _git ggl=git-checkout
alias ggpull='git pull origin $(git_current_branch)'
compdef _git ggpull=git-checkout
ggp() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git push origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git push origin "${b:=$1}"
fi
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git push origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git push origin "${b:=$1}"
fi
}
compdef _git ggp=git-checkout
alias ggpush='git push origin $(git_current_branch)'
compdef _git ggpush=git-checkout
ggpnp() {
if [[ "$#" == 0 ]]; then
ggl && ggp
else
ggl "${*}" && ggp "${*}"
fi
if [[ "$#" == 0 ]]; then
ggl && ggp
else
ggl "${*}" && ggp "${*}"
fi
}
compdef _git ggpnp=git-checkout
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
ggu() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git pull --rebase origin "${b:=$1}"
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git pull --rebase origin "${b:=$1}"
}
compdef _git ggu=git-checkout
alias ggpur='ggu'
compdef _git ggpur=git-checkout
alias ggpull='git pull origin $(git_current_branch)'
compdef _git ggpull=git-checkout
alias ggpush='git push origin $(git_current_branch)'
compdef _git ggpush=git-checkout
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
alias gpsup='git push --set-upstream origin $(git_current_branch)'
alias gh='git help'
alias gignore='git update-index --assume-unchanged'
alias gignored='git ls-files -v | grep "^[[:lower:]]"'
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
@ -155,6 +173,7 @@ alias glo='git log --oneline --decorate'
alias glol="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
alias glola="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
alias glog='git log --oneline --decorate --graph'
alias gloga='git log --oneline --decorate --graph --all'
alias glp="_git_log_prettily"
compdef _git glp=git-log
@ -196,8 +215,9 @@ alias gsps='git show --pretty=short --show-signature'
alias gsr='git svn rebase'
alias gss='git status -s'
alias gst='git status'
alias gsta='git stash'
alias gsta='git stash save'
alias gstaa='git stash apply'
alias gstc='git stash clear'
alias gstd='git stash drop'
alias gstl='git stash list'
alias gstp='git stash pop'

View file

@ -104,6 +104,7 @@ __git_zsh_bash_func ()
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
words[1]=$expansion
completion_func="_git_${expansion//-/_}"
declare -f $completion_func >/dev/null && $completion_func
fi
@ -213,8 +214,10 @@ _git ()
if (( $+functions[__${service}_zsh_main] )); then
__${service}_zsh_main
else
elif (( $+functions[__${service}_main] )); then
emulate ksh -c __${service}_main
elif (( $+functions[_${service}] )); then
emulate ksh -c _${service}
fi
let _ret && _default && _ret=0

View file

@ -10,17 +10,24 @@
# *) local and remote tag names
# *) .git/remotes file names
# *) git 'subcommands'
# *) git email aliases for git-send-email
# *) tree paths within 'ref:path/to/file' expressions
# *) file paths within current working directory and index
# *) common --long-options
#
# To use these routines:
#
# 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
# 1) Copy this file to somewhere (e.g. ~/.git-completion.bash).
# 2) Add the following line to your .bashrc/.zshrc:
# source ~/.git-completion.sh
# source ~/.git-completion.bash
# 3) Consider changing your PS1 to also show the current branch,
# see git-prompt.sh for details.
#
# If you use complex aliases of form '!f() { ... }; f', you can use the null
# command ':' as the first command in the function body to declare the desired
# completion style. For example '!f() { : git commit ; ... }; f' will
# tell the completion to use commit completion. This also works with aliases
# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
case "$COMP_WORDBREAKS" in
*:*) : great ;;
@ -180,7 +187,7 @@ fi
__gitcompappend ()
{
local i=${#COMPREPLY[@]}
local x i=${#COMPREPLY[@]}
for x in $1; do
if [[ "$x" == "$3"* ]]; then
COMPREPLY[i++]="$2$x$4"
@ -275,16 +282,12 @@ __gitcomp_file ()
# argument, and using the options specified in the second argument.
__git_ls_files_helper ()
{
(
test -n "${CDPATH+set}" && unset CDPATH
cd "$1"
if [ "$2" == "--committable" ]; then
git diff-index --name-only --relative HEAD
else
# NOTE: $2 is not quoted in order to support multiple options
git ls-files --exclude-standard $2
fi
) 2>/dev/null
if [ "$2" == "--committable" ]; then
git -C "$1" diff-index --name-only --relative HEAD
else
# NOTE: $2 is not quoted in order to support multiple options
git -C "$1" ls-files --exclude-standard $2
fi 2>/dev/null
}
@ -382,7 +385,8 @@ __git_refs ()
;;
*)
echo "HEAD"
git for-each-ref --format="%(refname:short)" -- "refs/remotes/$dir/" | sed -e "s#^$dir/##"
git for-each-ref --format="%(refname:short)" -- \
"refs/remotes/$dir/" 2>/dev/null | sed -e "s#^$dir/##"
;;
esac
}
@ -408,12 +412,9 @@ __git_refs_remotes ()
__git_remotes ()
{
local i IFS=$'\n' d="$(__gitdir)"
local d="$(__gitdir)"
test -d "$d/remotes" && ls -1 "$d/remotes"
for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
i="${i#remote.}"
echo "${i/.url*/}"
done
git --git-dir="$d" remote
}
__git_list_merge_strategies ()
@ -516,7 +517,7 @@ __git_complete_index_file ()
;;
esac
__gitcomp_file "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_"
__gitcomp_file "$(__git_index_files "$1" ${pfx:+"$pfx"})" "$pfx" "$cur_"
}
__git_complete_file ()
@ -663,10 +664,11 @@ __git_list_porcelain_commands ()
check-mailmap) : plumbing;;
check-ref-format) : plumbing;;
checkout-index) : plumbing;;
column) : internal helper;;
commit-tree) : plumbing;;
count-objects) : infrequent;;
credential-cache) : credentials helper;;
credential-store) : credentials helper;;
credential) : credentials;;
credential-*) : credentials helper;;
cvsexportcommit) : export;;
cvsimport) : import;;
cvsserver) : daemon;;
@ -735,35 +737,28 @@ __git_list_porcelain_commands ()
__git_porcelain_commands=
__git_compute_porcelain_commands ()
{
__git_compute_all_commands
test -n "$__git_porcelain_commands" ||
__git_porcelain_commands=$(__git_list_porcelain_commands)
}
# Lists all set config variables starting with the given section prefix,
# with the prefix removed.
__git_get_config_variables ()
{
local section="$1" i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --name-only --get-regexp "^$section\..*" 2>/dev/null); do
echo "${i#$section.}"
done
}
__git_pretty_aliases ()
{
local i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
case "$i" in
pretty.*)
i="${i#pretty.}"
echo "${i/ */}"
;;
esac
done
__git_get_config_variables "pretty"
}
__git_aliases ()
{
local i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
case "$i" in
alias.*)
i="${i#alias.}"
echo "${i/ */}"
;;
esac
done
__git_get_config_variables "alias"
}
# __git_aliased_command requires 1 argument
@ -781,6 +776,10 @@ __git_aliased_command ()
-*) : option ;;
*=*) : setting env ;;
git) : git itself ;;
\(\)) : skip parens of shell function definition ;;
{) : skip start of shell helper function ;;
:) : skip null command ;;
\'*) : skip opening quote after sh -c ;;
*)
echo "$word"
return
@ -973,7 +972,7 @@ _git_branch ()
case "$cur" in
--set-upstream-to=*)
__gitcomp "$(__git_refs)" "" "${cur##--set-upstream-to=}"
__gitcomp_nl "$(__git_refs)" "" "${cur##--set-upstream-to=}"
;;
--*)
__gitcomp "
@ -1041,7 +1040,7 @@ _git_checkout ()
_git_cherry ()
{
__gitcomp "$(__git_refs)"
__gitcomp_nl "$(__git_refs)"
}
_git_cherry_pick ()
@ -1110,7 +1109,7 @@ _git_commit ()
case "$cur" in
--cleanup=*)
__gitcomp "default strip verbatim whitespace
__gitcomp "default scissors strip verbatim whitespace
" "" "${cur##--cleanup=}"
return
;;
@ -1165,12 +1164,12 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--full-index --binary --abbrev --diff-filter=
--find-copies-harder
--text --ignore-space-at-eol --ignore-space-change
--ignore-all-space --exit-code --quiet --ext-diff
--no-ext-diff
--ignore-all-space --ignore-blank-lines --exit-code
--quiet --ext-diff --no-ext-diff
--no-prefix --src-prefix= --dst-prefix=
--inter-hunk-context=
--patience --histogram --minimal
--raw --word-diff
--raw --word-diff --word-diff-regex=
--dirstat --dirstat= --dirstat-by-file
--dirstat-by-file= --cumulative
--diff-algorithm=
@ -1197,7 +1196,7 @@ _git_diff ()
}
__git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc codecompare
"
_git_difftool ()
@ -1221,14 +1220,20 @@ _git_difftool ()
__git_complete_revlist_file
}
__git_fetch_recurse_submodules="yes on-demand no"
__git_fetch_options="
--quiet --verbose --append --upload-pack --force --keep --depth=
--tags --no-tags --all --prune --dry-run
--tags --no-tags --all --prune --dry-run --recurse-submodules=
"
_git_fetch ()
{
case "$cur" in
--recurse-submodules=*)
__gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
return
;;
--*)
__gitcomp "$__git_fetch_options"
return
@ -1292,7 +1297,7 @@ _git_gitk ()
}
__git_match_ctag() {
awk "/^${1////\\/}/ { print \$1 }" "$2"
awk "/^${1//\//\\/}/ { print \$1 }" "$2"
}
_git_grep ()
@ -1307,6 +1312,7 @@ _git_grep ()
--full-name --line-number
--extended-regexp --basic-regexp --fixed-strings
--perl-regexp
--threads
--files-with-matches --name-only
--files-without-match
--max-depth
@ -1412,7 +1418,7 @@ __git_log_gitk_options="
# Options that go well for log and shortlog (not gitk)
__git_log_shortlog_options="
--author= --committer= --grep=
--all-match
--all-match --invert-grep
"
__git_log_pretty_formats="oneline short medium full fuller email raw format:"
@ -1438,7 +1444,7 @@ _git_log ()
return
;;
--decorate=*)
__gitcomp "long short" "" "${cur##--decorate=}"
__gitcomp "full short no" "" "${cur##--decorate=}"
return
;;
--*)
@ -1451,6 +1457,7 @@ _git_log ()
--abbrev-commit --abbrev=
--relative-date --date=
--pretty= --format= --oneline
--show-signature
--cherry-pick
--graph
--decorate --decorate=
@ -1466,9 +1473,12 @@ _git_log ()
__git_complete_revlist
}
# Common merge options shared by git-merge(1) and git-pull(1).
__git_merge_options="
--no-commit --no-stat --log --no-log --squash --strategy
--commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
--verify-signatures --no-verify-signatures --gpg-sign
--quiet --verbose --progress --no-progress
"
_git_merge ()
@ -1477,7 +1487,8 @@ _git_merge ()
case "$cur" in
--*)
__gitcomp "$__git_merge_options"
__gitcomp "$__git_merge_options
--rerere-autoupdate --no-rerere-autoupdate --abort"
return
esac
__gitcomp_nl "$(__git_refs)"
@ -1583,6 +1594,10 @@ _git_pull ()
__git_complete_strategy && return
case "$cur" in
--recurse-submodules=*)
__gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
return
;;
--*)
__gitcomp "
--rebase --no-rebase
@ -1595,22 +1610,55 @@ _git_pull ()
__git_complete_remote_or_refspec
}
__git_push_recurse_submodules="check on-demand"
__git_complete_force_with_lease ()
{
local cur_=$1
case "$cur_" in
--*=)
;;
*:*)
__gitcomp_nl "$(__git_refs)" "" "${cur_#*:}"
;;
*)
__gitcomp_nl "$(__git_refs)" "" "$cur_"
;;
esac
}
_git_push ()
{
case "$prev" in
--repo)
__gitcomp_nl "$(__git_remotes)"
return
;;
--recurse-submodules)
__gitcomp "$__git_push_recurse_submodules"
return
;;
esac
case "$cur" in
--repo=*)
__gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
return
;;
--recurse-submodules=*)
__gitcomp "$__git_push_recurse_submodules" "" "${cur##--recurse-submodules=}"
return
;;
--force-with-lease=*)
__git_complete_force_with_lease "${cur##--force-with-lease=}"
return
;;
--*)
__gitcomp "
--all --mirror --tags --dry-run --force --verbose
--quiet --prune --delete --follow-tags
--receive-pack= --repo= --set-upstream
--force-with-lease --force-with-lease= --recurse-submodules=
"
return
;;
@ -1621,7 +1669,10 @@ _git_push ()
_git_rebase ()
{
local dir="$(__gitdir)"
if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
if [ -f "$dir"/rebase-merge/interactive ]; then
__gitcomp "--continue --skip --abort --edit-todo"
return
elif [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
__gitcomp "--continue --skip --abort"
return
fi
@ -1637,7 +1688,12 @@ _git_rebase ()
--preserve-merges --stat --no-stat
--committer-date-is-author-date --ignore-date
--ignore-whitespace --whitespace=
--autosquash --fork-point --no-fork-point
--autosquash --no-autosquash
--fork-point --no-fork-point
--autostash --no-autostash
--verify --no-verify
--keep-empty --root --force-rebase --no-ff
--exec
"
return
@ -1662,6 +1718,15 @@ __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
_git_send_email ()
{
case "$prev" in
--to|--cc|--bcc|--from)
__gitcomp "
$(git --git-dir="$(__gitdir)" send-email --dump-aliases 2>/dev/null)
"
return
;;
esac
case "$cur" in
--confirm=*)
__gitcomp "
@ -1686,6 +1751,12 @@ _git_send_email ()
" "" "${cur##--thread=}"
return
;;
--to=*|--cc=*|--bcc=*|--from=*)
__gitcomp "
$(git --git-dir="$(__gitdir)" send-email --dump-aliases 2>/dev/null)
" "" "${cur#--*=}"
return
;;
--*)
__gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
--compose --confirm= --dry-run --envelope-sender
@ -1727,15 +1798,7 @@ __git_config_get_set_variables ()
c=$((--c))
done
git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
while read -r line
do
case "$line" in
*.*=*)
echo "${line/=*/}"
;;
esac
done
git --git-dir="$(__gitdir)" config $config_file --name-only --list 2>/dev/null
}
_git_config ()
@ -1750,7 +1813,7 @@ _git_config ()
return
;;
branch.*.rebase)
__gitcomp "false true"
__gitcomp "false true preserve interactive"
return
;;
remote.pushdefault)
@ -1820,6 +1883,10 @@ _git_config ()
__gitcomp "$__git_send_email_suppresscc_options"
return
;;
sendemail.transferencoding)
__gitcomp "7bit 8bit quoted-printable base64"
return
;;
--get|--get-all|--unset|--unset-all)
__gitcomp_nl "$(__git_config_get_set_variables)"
return
@ -1836,6 +1903,7 @@ _git_config ()
--get --get-all --get-regexp
--add --unset --unset-all
--remove-section --rename-section
--name-only
"
return
;;
@ -1954,6 +2022,7 @@ _git_config ()
color.status.changed
color.status.header
color.status.nobranch
color.status.unmerged
color.status.untracked
color.status.updated
color.ui
@ -1991,6 +2060,7 @@ _git_config ()
core.sparseCheckout
core.symlinks
core.trustctime
core.untrackedCache
core.warnAmbiguousRefs
core.whitespace
core.worktree
@ -2065,6 +2135,8 @@ _git_config ()
http.noEPSV
http.postBuffer
http.proxy
http.sslCipherList
http.sslVersion
http.sslCAInfo
http.sslCAPath
http.sslCert
@ -2128,6 +2200,7 @@ _git_config ()
pull.octopus
pull.twohead
push.default
push.followTags
rebase.autosquash
rebase.stat
receive.autogc
@ -2201,12 +2274,7 @@ _git_remote ()
__git_complete_remote_or_refspec
;;
update)
local i c='' IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
i="${i#remotes.}"
c="$c ${i/ */}"
done
__gitcomp "$c"
__gitcomp "$(__git_get_config_variables "remotes")"
;;
*)
;;
@ -2233,6 +2301,11 @@ _git_reset ()
_git_revert ()
{
local dir="$(__gitdir)"
if [ -f "$dir"/REVERT_HEAD ]; then
__gitcomp "--continue --quit --abort"
return
fi
case "$cur" in
--*)
__gitcomp "--edit --mainline --no-edit --no-commit --signoff"
@ -2287,6 +2360,7 @@ _git_show ()
;;
--*)
__gitcomp "--pretty= --format= --abbrev-commit --oneline
--show-signature
$__git_diff_common_options
"
return
@ -2300,7 +2374,7 @@ _git_show_branch ()
case "$cur" in
--*)
__gitcomp "
--all --remotes --topo-order --current --more=
--all --remotes --topo-order --date-order --current --more=
--list --independent --merge-base --no-name
--color --no-color
--sha1-name --sparse --topics --reflog
@ -2313,7 +2387,7 @@ _git_show_branch ()
_git_stash ()
{
local save_opts='--keep-index --no-keep-index --quiet --patch'
local save_opts='--all --keep-index --no-keep-index --quiet --patch --include-untracked'
local subcommands='save list show apply clear drop pop create branch'
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
@ -2335,9 +2409,20 @@ _git_stash ()
apply,--*|pop,--*)
__gitcomp "--index --quiet"
;;
show,--*|drop,--*|branch,--*)
drop,--*)
__gitcomp "--quiet"
;;
show,*|apply,*|drop,*|pop,*|branch,*)
show,--*|branch,--*)
;;
branch,*)
if [ $cword -eq 3 ]; then
__gitcomp_nl "$(__git_refs)";
else
__gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
| sed -n -e 's/:.*//p')"
fi
;;
show,*|apply,*|drop,*|pop,*)
__gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
| sed -n -e 's/:.*//p')"
;;
@ -2492,6 +2577,16 @@ _git_tag ()
__gitcomp_nl "$(__git_refs)"
;;
esac
case "$cur" in
--*)
__gitcomp "
--list --delete --verify --annotate --message --file
--sign --cleanup --local-user --force --column --sort
--contains --points-at
"
;;
esac
}
_git_whatchanged ()
@ -2547,6 +2642,7 @@ __git_main ()
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
words[1]=$expansion
completion_func="_git_${expansion//-/_}"
declare -f $completion_func >/dev/null && $completion_func
fi

View file

@ -66,6 +66,10 @@
# git always compare HEAD to @{upstream}
# svn always compare HEAD to your SVN upstream
#
# You can change the separator between the branch name and the above
# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
# is SP.
#
# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
# find one, or @{upstream} otherwise. Once you have set
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
@ -84,6 +88,11 @@
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd.
#
# If you would like __git_ps1 to do nothing in the case when the current
# directory is set up to be ignored by git, then set
# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
# repository level by setting bash.hideIfPwdIgnored to "false".
# check whether printf supports -v
__git_printf_supports_v=
@ -207,7 +216,16 @@ __git_ps1_show_upstream ()
p=" u+${count#* }-${count% *}" ;;
esac
if [[ -n "$count" && -n "$name" ]]; then
p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)"
__git_ps1_upstream_name=$(git rev-parse \
--abbrev-ref "$upstream" 2>/dev/null)
if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
p="$p \${__git_ps1_upstream_name}"
else
p="$p ${__git_ps1_upstream_name}"
# not needed anymore; keep user's
# environment clean
unset __git_ps1_upstream_name
fi
fi
fi
@ -259,9 +277,9 @@ __git_ps1_colorize_gitstring ()
r="$c_clear$r"
}
eread ()
__git_eread ()
{
f="$1"
local f="$1"
shift
test -r "$f" && read "$@" <"$f"
}
@ -279,6 +297,8 @@ eread ()
# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
__git_ps1 ()
{
# preserve exit status
local exit=$?
local pcmode=no
local detached=no
local ps1pc_start='\u@\h:\w '
@ -290,13 +310,54 @@ __git_ps1 ()
ps1pc_start="$1"
ps1pc_end="$2"
printf_format="${3:-$printf_format}"
# set PS1 to a plain prompt so that we can
# simply return early if the prompt should not
# be decorated
PS1="$ps1pc_start$ps1pc_end"
;;
0|1) printf_format="${1:-$printf_format}"
;;
*) return
*) return $exit
;;
esac
# ps1_expanded: This variable is set to 'yes' if the shell
# subjects the value of PS1 to parameter expansion:
#
# * bash does unless the promptvars option is disabled
# * zsh does not unless the PROMPT_SUBST option is set
# * POSIX shells always do
#
# If the shell would expand the contents of PS1 when drawing
# the prompt, a raw ref name must not be included in PS1.
# This protects the user from arbitrary code execution via
# specially crafted ref names. For example, a ref named
# 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
# shell to execute 'sudo rm -rf /' when the prompt is drawn.
#
# Instead, the ref name should be placed in a separate global
# variable (in the __git_ps1_* namespace to avoid colliding
# with the user's environment) and that variable should be
# referenced from PS1. For example:
#
# __git_ps1_foo=$(do_something_to_get_ref_name)
# PS1="...stuff...\${__git_ps1_foo}...stuff..."
#
# If the shell does not expand the contents of PS1, the raw
# ref name must be included in PS1.
#
# The value of this variable is only relevant when in pcmode.
#
# Assume that the shell follows the POSIX specification and
# expands PS1 unless determined otherwise. (This is more
# likely to be correct if the user has a non-bash, non-zsh
# shell and safer than the alternative if the assumption is
# incorrect.)
#
local ps1_expanded=yes
[ -z "$ZSH_VERSION" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
[ -z "$BASH_VERSION" ] || shopt -q promptvars || ps1_expanded=no
local repo_info rev_parse_exit_code
repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
--is-bare-repository --is-inside-work-tree \
@ -304,11 +365,7 @@ __git_ps1 ()
rev_parse_exit_code="$?"
if [ -z "$repo_info" ]; then
if [ $pcmode = yes ]; then
#In PC mode PS1 always needs to be set
PS1="$ps1pc_start$ps1pc_end"
fi
return
return $exit
fi
local short_sha
@ -323,14 +380,22 @@ __git_ps1 ()
local inside_gitdir="${repo_info##*$'\n'}"
local g="${repo_info%$'\n'*}"
if [ "true" = "$inside_worktree" ] &&
[ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
[ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
git check-ignore -q .
then
return $exit
fi
local r=""
local b=""
local step=""
local total=""
if [ -d "$g/rebase-merge" ]; then
eread "$g/rebase-merge/head-name" b
eread "$g/rebase-merge/msgnum" step
eread "$g/rebase-merge/end" total
__git_eread "$g/rebase-merge/head-name" b
__git_eread "$g/rebase-merge/msgnum" step
__git_eread "$g/rebase-merge/end" total
if [ -f "$g/rebase-merge/interactive" ]; then
r="|REBASE-i"
else
@ -338,10 +403,10 @@ __git_ps1 ()
fi
else
if [ -d "$g/rebase-apply" ]; then
eread "$g/rebase-apply/next" step
eread "$g/rebase-apply/last" total
__git_eread "$g/rebase-apply/next" step
__git_eread "$g/rebase-apply/last" total
if [ -f "$g/rebase-apply/rebasing" ]; then
eread "$g/rebase-apply/head-name" b
__git_eread "$g/rebase-apply/head-name" b
r="|REBASE"
elif [ -f "$g/rebase-apply/applying" ]; then
r="|AM"
@ -365,11 +430,8 @@ __git_ps1 ()
b="$(git symbolic-ref HEAD 2>/dev/null)"
else
local head=""
if ! eread "$g/HEAD" head; then
if [ $pcmode = yes ]; then
PS1="$ps1pc_start$ps1pc_end"
fi
return
if ! __git_eread "$g/HEAD" head; then
return $exit
fi
# is it a symbolic ref?
b="${head#ref: }"
@ -414,21 +476,21 @@ __git_ps1 ()
if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
[ "$(git config --bool bash.showDirtyState)" != "false" ]
then
git diff --no-ext-diff --quiet --exit-code || w="*"
if [ -n "$short_sha" ]; then
git diff-index --cached --quiet HEAD -- || i="+"
else
git diff --no-ext-diff --quiet || w="*"
git diff --no-ext-diff --cached --quiet || i="+"
if [ -z "$short_sha" ] && [ -z "$i" ]; then
i="#"
fi
fi
if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
[ -r "$g/refs/stash" ]; then
git rev-parse --verify --quiet refs/stash >/dev/null
then
s="$"
fi
if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
[ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
git ls-files --others --exclude-standard --error-unmatch -- '*' >/dev/null 2>/dev/null
git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
then
u="%${ZSH_VERSION+%}"
fi
@ -440,13 +502,21 @@ __git_ps1 ()
local z="${GIT_PS1_STATESEPARATOR-" "}"
# NO color option unless in PROMPT_COMMAND mode
if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
__git_ps1_colorize_gitstring
# NO color option unless in PROMPT_COMMAND mode or it's Zsh
if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
__git_ps1_colorize_gitstring
fi
fi
b=${b##refs/heads/}
if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
__git_ps1_branch_name=$b
b="\${__git_ps1_branch_name}"
fi
local f="$w$i$s$u"
local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
local gitstring="$c$b${f:+$z$f}$r$p"
if [ $pcmode = yes ]; then
if [ "${__git_printf_supports_v-}" != yes ]; then
@ -458,4 +528,6 @@ __git_ps1 ()
else
printf -- "$printf_format" "$gitstring"
fi
return $exit
}

View file

@ -71,7 +71,7 @@ exist_gh() { # [DIRECTORY]
#
git.io() {
emulate -L zsh
curl -i -s http://git.io -F "url=$1" | grep "Location" | cut -f 2 -d " "
curl -i -s https://git.io -F "url=$1" | grep "Location" | cut -f 2 -d " "
}
# End Functions #############################################################

View file

@ -38,7 +38,11 @@ function jira() {
_jira_query $@
elif [[ "$action" == "dashboard" ]]; then
echo "Opening dashboard"
open_command "${jira_url}/secure/Dashboard.jspa"
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
open_command "${jira_url}/secure/RapidBoard.jspa"
else
open_command "${jira_url}/secure/Dashboard.jspa"
fi
elif [[ "$action" == "dumpconfig" ]]; then
echo "JIRA_URL=$jira_url"
echo "JIRA_PREFIX=$jira_prefix"
@ -99,4 +103,3 @@ function _jira_query() {
query="${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${query}"
}

View file

@ -1,41 +1,85 @@
# author: Peter Eisentraut
# source: https://gist.github.com/petere/10307599
# compdef kitchen
#compdef kitchen
# ------------------------------------------------------------------------------
# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the zsh-users nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for Test Kitchen (http://kitchen.ci/).
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Peter Eisentraut (https://github.com/petere)
#
# ------------------------------------------------------------------------------
_kitchen() {
local curcontext="$curcontext" state line
typeset -A opt_args
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments '1: :->cmds'\
'2: :->args'
_arguments '1: :->cmds'\
'2: :->args'
case $state in
cmds)
_arguments "1:Commands:(console converge create destroy diagnose driver help init list login setup test verify version)"
;;
args)
case $line[1] in
converge|create|destroy|diagnose|list|setup|test|verify)
compadd "$@" all
_kitchen_instances
;;
login)
_kitchen_instances
;;
esac
;;
esac
case $state in
cmds)
_kitchen_commands
;;
args)
case $line[1] in
converge|create|destroy|diagnose|list|setup|test|verify)
compadd 'all'
_kitchen_instances
;;
login)
_kitchen_instances
;;
esac
;;
esac
}
_kitchen_commands() {
local commands
commands=("${(@f)$(_call_program commands $service help | sed -n 's/^ kitchen \([[:alpha:]]*\) [ [].*# \(.*\)$/\1:\2/p')}")
_describe -t commands 'kitchen commands' commands
}
_kitchen_instances() {
if [[ $_kitchen_instances_cache_dir != $PWD ]]; then
unset _kitchen_instances_cache
fi
if [[ ${+_kitchen_instances_cache} -eq 0 ]]; then
_kitchen_instances_cache=(${(f)"$(bundle exec kitchen list -b 2>/dev/null || kitchen list -b 2>/dev/null)"})
_kitchen_instances_cache_dir=$PWD
fi
compadd -a _kitchen_instances_cache
if [[ $_kitchen_instances_cache_dir != $PWD ]]; then
unset _kitchen_instances_cache
fi
if [[ ${+_kitchen_instances_cache} -eq 0 ]]; then
_kitchen_instances_cache=(${(f)"$(_call_program instances $service list -b 2>/dev/null)"})
_kitchen_instances_cache_dir=$PWD
fi
_wanted instances expl 'instance' compadd -a _kitchen_instances_cache
}
_kitchen "$@"

View file

@ -3,6 +3,9 @@
# You can override the path to knife.rb and your cookbooks by setting
# KNIFE_CONF_PATH=/path/to/my/.chef/knife.rb
# KNIFE_COOKBOOK_PATH=/path/to/my/chef/cookbooks
# If you want your local cookbooks path to be calculated relative to where you are then
# set the below option
# KNIFE_RELATIVE_PATH=true
# Read around where these are used for more detail.
# These flags should be available everywhere according to man knife
@ -119,7 +122,19 @@ _knife() {
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
;;
file)
_arguments '*:file or directory:_files -g "*.(rb|json)"'
case $words[2] in
environment)
_arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/environments"'
;;
node)
_arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/nodes"'
;;
role)
_arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/roles"'
;;
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
esac
;;
list)
compadd -a "$@" knife_general_flags
@ -132,11 +147,22 @@ _knife() {
if (( versioncomp > 0 )); then
compadd "$@" attributes definitions files libraries providers recipes resources templates
else
_arguments '*:Subsubcommands:($(_knife_options2))'
case $words[5] in
file)
_arguments '*:directory:_path_files -/ -W "$(_chef_root)/data_bags" -qS \ '
;;
*) _arguments '*:Subsubcommands:($(_knife_options2))'
esac
fi
;;
knifesubcmd5)
_arguments '*:Subsubcommands:($(_knife_options3))'
case $words[5] in
file)
_arguments '*:files:_path_files -g "*.json" -W "$(_chef_root)/data_bags/$words[6]"'
;;
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
esac
esac
}
@ -184,12 +210,15 @@ _chef_environments_remote() {
# 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() {
local knife_rb=${KNIFE_CONF_PATH:-${HOME}/.chef/knife.rb}
if [ -f ./.chef/knife.rb ]; then
knife_rb="./.chef/knife.rb"
if [ $KNIFE_RELATIVE_PATH ]; then
local cookbook_path="$(_chef_root)/cookbooks"
else
local knife_rb=${KNIFE_CONF_PATH:-${HOME}/.chef/knife.rb}
if [ -f ./.chef/knife.rb ]; then
knife_rb="./.chef/knife.rb"
fi
local cookbook_path=${KNIFE_COOKBOOK_PATH:-$(grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' )}
fi
local cookbook_path=${KNIFE_COOKBOOK_PATH:-$(grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' )}
(for i in $cookbook_path; do ls $i; done)
}
@ -198,4 +227,15 @@ _cookbook_versions() {
(knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g')
}
# Searches up from current directory to find the closest folder that has a .chef folder
# Useful for the knife upload/from file commands
_chef_root () {
directory="$PWD"
while [ $directory != '/' ]
do
test -e "$directory/.chef" && echo "$directory" && return
directory="${directory:h}"
done
}
_knife "$@"

View file

@ -0,0 +1,7 @@
# Autocompletion for kubectl, the command line interface for Kubernetes
#
# Author: https://github.com/pstadler
if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fi

45
plugins/meteor/README.md Normal file
View file

@ -0,0 +1,45 @@
## Introduction
The [meteor plugin](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/meteor) provides many
[useful aliases](#aliases) as well as completion for the `meteor` command.
Enable it by adding `meteor` to the plugins array in your zshrc file:
```zsh
plugins=(... meteor)
```
## Aliases
| Alias | Command | Description |
|---------|----------------------------|------------------------------------------------------------------|
| `ma` | `meteor add` | Add a package to this project |
| `map` | `meteor add-platform` | Add a platform to this project |
| `mad` | `meteor admin` | Administrative commands |
| `mau` | `meteor authorized` | View or change authorized users and organizations for a site |
| `mb` | `meteor build` | Build this project for all platforms |
| `mcl` | `meteor claim` | Claim a site deployed with an old Meteor version |
| `mca` | `meteor configure-android` | Run the Android configuration tool from Meteor's ADK environment |
| `mc` | `meteor create` | Create a new project |
| `mdb` | `meteor debug` | Run the project, but suspend the server process for debugging |
| `mde` | `meteor deploy` | Deploy this project to Meteor |
| `mis` | `meteor install-sdk` | Installs SDKs for a platform |
| `ml` | `meteor list` | List the packages explicitly used by your project |
| `mlp` | `meteor list-platforms` | List the platforms added to your project |
| `mls` | `meteor list-sites` | List sites for which you are authorized |
| `mli` | `meteor login` | Log in to your Meteor developer account |
| `mlo` | `meteor logout` | Log out of your Meteor developer account |
| `mlog` | `meteor logs` | Show logs for specified site |
| `mm` | `meteor mongo` | Connect to the Mongo database for the specified site |
| `mp` | `meteor publish` | Publish a new version of a package to the package server |
| `mpa` | `meteor publish-for-arch` | Builds an already-published package for a new platform |
| `mpr` | `meteor publish-release` | Publish a new meteor release to the package server |
| `mr` | `meteor remove` | Remove a package from this project |
| `mrp` | `meteor remove-platform` | Remove a platform from this project |
| `mre` | `meteor reset` | Reset the project state. Erases the local database |
| `m` | `meteor run` | **[default]** Run this project in local development mode |
| `ms` | `meteor search` | Search through the package server database |
| `msh` | `meteor shell` | Launch a Node REPL for interactively evaluating server-side code |
| `msw` | `meteor show` | Show detailed information about a release or package |
| `mt` | `meteor test-packages` | Test one or more packages |
| `mu` | `meteor update` | Upgrade this project's dependencies to their latest versions |
| `mw` | `meteor whoami` | Prints the username of your Meteor developer account |

View file

@ -0,0 +1,33 @@
# Aliases in alphabetical order
alias ma='meteor add' # Add a package to this project.
alias map='meteor add-platform' # Add a platform to this project.
alias mad='meteor admin' # Administrative commands.
alias mau='meteor authorized' # View or change authorized users and organizations for a site.
alias mb='meteor build' # Build this project for all platforms.
alias mcl='meteor claim' # Claim a site deployed with an old Meteor version.
alias mca='meteor configure-android' # Run the Android configuration tool from Meteor's ADK environment.
alias mc='meteor create' # Create a new project.
alias mdb='meteor debug' # Run the project, but suspend the server process for debugging.
alias mde='meteor deploy' # Deploy this project to Meteor.
alias mis='meteor install-sdk' # Installs SDKs for a platform.
alias ml='meteor list' # List the packages explicitly used by your project.
alias mlp='meteor list-platforms' # List the platforms added to your project.
alias mls='meteor list-sites' # List sites for which you are authorized.
alias mli='meteor login' # Log in to your Meteor developer account.
alias mlo='meteor logout' # Log out of your Meteor developer account.
alias mlog='meteor logs' # Show logs for specified site.
alias mm='meteor mongo' # Connect to the Mongo database for the specified site.
alias mp='meteor publish' # Publish a new version of a package to the package server.
alias mpa='meteor publish-for-arch' # Builds an already-published package for a new platform.
alias mpr='meteor publish-release' # Publish a new meteor release to the package server.
alias mr='meteor remove' # Remove a package from this project.
alias mrp='meteor remove-platform' # Remove a platform from this project.
alias mre='meteor reset' # Reset the project state. Erases the local database.
alias m='meteor run' # [default] Run this project in local development mode.
alias ms='meteor search' # Search through the package server database.
alias msh='meteor shell' # Launch a Node REPL for interactively evaluating server-side code.
alias msw='meteor show' # Show detailed information about a release or package.
alias mt='meteor test-packages' # Test one or more packages.
alias mu='meteor update' # Upgrade this project's dependencies to their latest versions.
alias mw='meteor whoami' # Prints the username of your Meteor developer account.

View file

@ -38,6 +38,15 @@ _1st_arguments=(
'local.hex:Install hex locally'
'local.rebar:Install rebar locally'
'new:Create a new Elixir project'
'phoenix.digest:Digests and compress static files'
'phoenix.gen.channel:Generates a Phoenix channel'
'phoenix.gen.html:Generates controller, model and views for an HTML based resource'
'phoenix.gen.json:Generates a controller and model for a JSON based resource'
'phoenix.gen.model:Generates an Ecto model'
'phoenix.gen.secret:Generates a secret'
'phoenix.new:Create a new Phoenix application'
'phoenix.routes:Prints all routes'
'phoenix.server:Starts applications and their servers'
'run:Run the given file or expression'
"test:Run a project's tests"
'--help:Describe available tasks'
@ -49,7 +58,7 @@ __task_list ()
local expl
declare -a tasks
tasks=(app.start archive archive.build archive.install archive.uninstall clean cmd compile compile.protocols deps deps.clean deps.compile deps.get deps.unlock deps.update do escript.build help hex hex.config hex.docs hex.info hex.key hex.outdated hex.owner hex.publish hex.search hex.user loadconfig local local.hex local.rebar new run test)
tasks=(app.start archive archive.build archive.install archive.uninstall clean cmd compile compile.protocols deps deps.clean deps.compile deps.get deps.unlock deps.update do escript.build help hex hex.config hex.docs hex.info hex.key hex.outdated hex.owner hex.publish hex.search hex.user loadconfig local local.hex local.rebar new phoenix.digest phoenix.gen.channel phoenix.gen.html phoenix.gen.json phoenix.gen.model phoenix.gen.secret phoenix.new phoenix.routes phoenix.server run test)
_wanted tasks expl 'help' compadd $tasks
}
@ -73,7 +82,10 @@ case $state in
case $line[1] in
(help)
_arguments ':feature:__task_list'
;;
(test)
_files
;;
esac
;;
esac

33
plugins/mvn/README.md Normal file
View file

@ -0,0 +1,33 @@
## Introduction
The [mvn plugin](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/mvn) provides many
[useful aliases](#aliases) as well as completion for the `mvn` command.
Enable it by adding `mvn` to the plugins array in your zshrc file:
```zsh
plugins=(... mvn)
```
## Aliases
| Alias | Command |
|:---------------------|:------------------------------------------------|
| `mvncie` | `mvn clean install eclipse:eclipse` |
| `mvnci` | `mvn clean install` |
| `mvncist` | `mvn clean install -DskipTests` |
| `mvncisto` | `mvn clean install -DskipTests --offline` |
| `mvne` | `mvn eclipse:eclipse` |
| `mvnd` | `mvn deploy` |
| `mvnp` | `mvn package` |
| `mvnc` | `mvn clean` |
| `mvncom` | `mvn compile` |
| `mvnct` | `mvn clean test` |
| `mvnt` | `mvn test` |
| `mvnag` | `mvn archetype:generate` |
| `mvn-updates` | `mvn versions:display-dependency-updates` |
| `mvntc7` | `mvn tomcat7:run` |
| `mvnjetty` | `mvn jetty:run` |
| `mvndt` | `mvn dependency:tree` |
| `mvns` | `mvn site` |
| `mvnsrc` | `mvn dependency:sources` |
| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |

View file

@ -45,6 +45,7 @@ mvn-color()
alias mvncie='mvn clean install eclipse:eclipse'
alias mvnci='mvn clean install'
alias mvncist='mvn clean install -DskipTests'
alias mvncisto='mvn clean install -DskipTests --offline'
alias mvne='mvn eclipse:eclipse'
alias mvnce='mvn clean eclipse:clean eclipse:eclipse'
alias mvnd='mvn deploy'
@ -171,7 +172,7 @@ function listMavenCompletions {
gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test
# options
-Dmaven.test.skip=true -DskipTests -Dmaven.surefire.debug -DenableCiProfile -Dpmd.skip=true -Dcheckstyle.skip=true -Dtycho.mode=maven
-Dmaven.test.skip=true -DskipTests -Dmaven.surefire.debug -DenableCiProfile -Dpmd.skip=true -Dcheckstyle.skip=true -Dtycho.mode=maven -Dmaven.test.failure.ignore=true
# arguments
-am -amd -B -C -c -cpu -D -e -emp -ep -f -fae -ff -fn -gs -h -l -N -npr -npu -nsu -o -P -pl -q -rf -s -T -t -U -up -V -v -X

View file

@ -20,3 +20,10 @@ alias npmE='PATH="$(npm bin)":"$PATH"'
# Check which npm modules are outdated
alias npmO="npm outdated"
# Run npm start
alias npmst="npm start"
# Run npm test
alias npmt="npm test"

View file

@ -1,7 +1,7 @@
#compdef nvm
#autoload
[[ -s ~/.nvm/nvm.sh ]] || return 0
[[ -f "$NVM_DIR/nvm.sh" ]] || return 0
local -a _1st_arguments
_1st_arguments=(

View file

@ -1,3 +1,5 @@
# The addition 'nvm install' attempts in ~/.profile
# Set NVM_DIR if it isn't already defined
[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm"
[[ -s ~/.nvm/nvm.sh ]] && . ~/.nvm/nvm.sh
# Load nvm if it exists
[[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"

29
plugins/osx/README.md Normal file
View file

@ -0,0 +1,29 @@
# OSX plugin
## Description
This plugin provides a few utilities to make it more enjoyable on OSX.
To start using it, add the `osx` plugin to your plugins array in `~/.zshrc`:
```zsh
plugins=(... osx)
```
Original author: [Sorin Ionescu](https://github.com/sorin-ionescu)
## Commands
| Command | Description |
| :-------------- | :----------------------------------------------- |
| `tab` | Open the current directory in a new tab |
| `ofd` | Open the current directory in a Finder window |
| `pfd` | Return the path of the frontmost Finder window |
| `pfs` | Return the current Finder selection |
| `cdf` | `cd` to the current Finder directory |
| `pushdf` | `pushd` to the current Finder directory |
| `quick-look` | Quick-Look a specified file |
| `man-preview` | Open a specified man page in Preview app |
| `showfiles` | Show hidden files |
| `hidefiles` | Hide the hidden files |

View file

@ -1,5 +0,0 @@
#compdef man-preview
#autoload
_man

View file

@ -1,9 +1,5 @@
# ------------------------------------------------------------------------------
# FILE: osx.plugin.zsh
# DESCRIPTION: oh-my-zsh plugin file.
# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
# VERSION: 1.1.0
# ------------------------------------------------------------------------------
# Open the current directory in a Finder window
alias ofd='open_command $PWD'
function _omz_osx_get_frontmost_app() {
local the_app=$(
@ -46,6 +42,16 @@ EOF
end tell
EOF
elif [[ "$the_app" == 'iTerm2' ]]; then
osascript <<EOF
tell application "iTerm"
tell current window
create tab with default profile
tell current session to write text "${command}"
end tell
end tell
EOF
else
echo "tab: unsupported terminal app: $the_app"
false
@ -73,6 +79,19 @@ function vsplit_tab() {
end tell
EOF
elif [[ "$the_app" == 'iTerm2' ]]; then
osascript <<EOF
tell application "iTerm"
tell current session of first window
set newSession to (split vertically with same profile)
tell newSession
write text "${command}"
select
end tell
end tell
end tell
EOF
else
echo "$0: unsupported terminal app: $the_app" >&2
false
@ -100,6 +119,19 @@ function split_tab() {
end tell
EOF
elif [[ "$the_app" == 'iTerm2' ]]; then
osascript <<EOF
tell application "iTerm"
tell current session of first window
set newSession to (split horizontally with same profile)
tell newSession
write text "${command}"
select
end tell
end tell
end tell
EOF
else
echo "$0: unsupported terminal app: $the_app" >&2
false
@ -143,6 +175,7 @@ function quick-look() {
function man-preview() {
man -t "$@" | open -f -a Preview
}
compdef _man man-preview
function vncviewer() {
open vnc://$@
@ -227,3 +260,7 @@ EOF
esac
osascript -e "tell application \"iTunes\" to $opt"
}
# Show/hide hidden files in the Finder
alias showfiles="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder"
alias hidefiles="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder"

View file

@ -1,15 +1,6 @@
_phing_does_target_list_need_generating () {
[ ! -f .phing_targets ] && return 0;
[ build.xml -nt .phing_targets ] && return 0;
return 1;
}
_phing () {
if [ -f build.xml ]; then
if _phing_does_target_list_need_generating; then
phing -l|grep -v "\[property\]"|grep -v "Buildfile"|sed 1d|grep -v ":$" |grep -v "^\-*$"|awk '{print $1}' > .phing_targets
fi
compadd `cat .phing_targets`
compadd $(phing -l|grep -v "\[property\]"|grep -v "Buildfile"|sed 1d|grep -v ":$" |grep -v "^\-*$"|grep -v "Warning:"|awk '{print $1}')
fi
}

45
plugins/pj/README.md Normal file
View file

@ -0,0 +1,45 @@
# pj
The `pj` plugin (short for `Project Jump`) allows you to define several
folders where you store your projects, so that you can jump there directly
by just using the name of the project directory.
Original idea and code by Jan De Poorter ([@DefV](https://github.com/DefV))
Source: https://gist.github.com/pjaspers/368394#gistcomment-1016
## Usage
1. Enable the `pj` plugin:
```zsh
plugins=(... pj)
```
2. Set `$PROJECT_PATHS` in your ~/.zshrc:
```zsh
PROJECT_PATHS=(~/src ~/work ~/"dir with spaces")
```
You can now use one of the following commands:
##### `pj my-project`:
`cd` to the directory named "my-project" found in one of the `$PROJECT_PATHS`
directories. If there are several directories named the same, the first one
to appear in `$PROJECT_PATHS` has preference.
For example:
```zsh
PROJECT_PATHS=(~/code ~/work)
$ ls ~/code # ~/code/blog ~/code/react
$ ls ~/work # ~/work/blog ~/work/project
$ pj blog # <-- will cd to ~/code/blog
```
##### `pjo my-project`
Open the project directory with your defined `$EDITOR`. This follows the same
directory rules as the `pj` command above.
Note: `pjo` is an alias of `pj open`.

View file

@ -1,49 +1,42 @@
#!/bin/zsh
alias pjo="pj open"
#
# Original idea by DefV (Jan De Poorter)
# Source: https://gist.github.com/pjaspers/368394#comment-1016
#
# Usage:
# - Set `$PROJECT_PATHS` in your ~/.zshrc
# e.g.: PROJECT_PATHS=(~/src ~/work)
# - In ZSH you now can open a project directory with the command: `pj my-project`
# the plugin will locate the `my-project` directory in one of the $PROJECT_PATHS
# Also tab completion is supported.
# - `pjo my-project` will open the directory in $EDITOR
#
pj () {
emulate -L zsh
function pj() {
cmd="cd"
file=$1
project=$1
if [[ "open" == "$file" ]] then
if [[ "open" == "$project" ]]; then
shift
file=$*
cmd=(${(s: :)EDITOR})
project=$*
cmd=${=EDITOR}
else
file=$*
project=$*
fi
for project in $PROJECT_PATHS; do
if [[ -d $project/$file ]] then
$cmd "$project/$file"
unset project # Unset project var
if [[ -z "$project" ]]; then
echo "You have to specify a project name."
return
fi
for basedir ($PROJECT_PATHS); do
if [[ -d "$basedir/$project" ]]; then
$cmd "$basedir/$project"
return
fi
done
echo "No such project $1"
echo "No such project '${project}'."
}
alias pjo="pj open"
_pj () {
emulate -L zsh
function _pj () {
# might be possible to improve this using glob, without the basename trick
typeset -a projects
projects=($PROJECT_PATHS/*)
projects=$projects:t
_arguments "*:file:($projects)"
}
for basedir ($PROJECT_PATHS); do
projects+=(${basedir}/*(/N))
done
compadd ${projects:t}
}
compdef _pj pj

View file

@ -13,6 +13,8 @@ function _rails_command () {
function _rake_command () {
if [ -e "bin/rake" ]; then
bin/rake $@
elif type bundle &> /dev/null && [ -e "Gemfile" ]; then
bundle exec rake $@
else
command rake $@
fi
@ -55,6 +57,7 @@ alias rdrs='rake db:reset'
alias rdtc='rake db:test:clone'
alias rdtp='rake db:test:prepare'
alias rdmtc='rake db:migrate db:test:clone'
alias rdsl='rake db:schema:load'
alias rlc='rake log:clear'
alias rn='rake notes'
alias rr='rake routes'

View file

@ -8,7 +8,19 @@ _rake_refresh () {
}
_rake_does_task_list_need_generating () {
[[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]]
[[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || (_is_rails_app && _tasks_changed)
}
_is_rails_app () {
[[ -e "bin/rails" ]] || [ -e "script/rails" ]
}
_tasks_changed () {
local is_changed=1
for file in lib/tasks/**/*.rake; do
if [[ $file -nt .rake_tasks ]]; then is_changed=0; fi
done
return is_changed
}
_rake_generate () {

View file

@ -0,0 +1,14 @@
# React Native
**Maintainer:** [BilalBudhani](https://github.com/BilalBudhani)
### List of Aliases
Alias | React Native command
------|---------------------
**rnand** | *react-native run-android*
**rnios** | *react-native run-ios*
**rnios4s** | *react-native run-ios --simulator "iPhone 4s"*
**rnios5** | *react-native run-ios --simulator "iPhone 5"*
**rnios5s** | *react-native run-ios --simulator "iPhone 5s"*

View file

@ -0,0 +1,23 @@
#compdef react-native
#autoload
local -a _1st_arguments
_1st_arguments=(
'start:starts the webserver'
'bundle:builds the javascript bundle for offline use'
'new-library:generates a native library bridge'
'android:generates an Android project for your app'
'run-android:builds your app and starts it on a connected Android emulator or device'
'upgrade:upgrade your apps template files to the latest version; run this after updating the react-native version in your package.json and running npm install'
)
_arguments \
'(--version)--version[show version]' \
'(--help)--help[show help]' \
'*:: :->subcmds' && return 0
if (( CURRENT == 1 )); then
_describe -t commands "react-native subcommand" _1st_arguments
return
fi

View file

@ -0,0 +1,6 @@
alias rnand='react-native run-android'
alias rnios4s='react-native run-ios --simulator "iPhone 4s"'
alias rnios5='react-native run-ios --simulator "iPhone 5"'
alias rnios5s='react-native run-ios --simulator "iPhone 5s"'
alias rnios='react-native run-ios'

191
plugins/rust/_rust Normal file
View file

@ -0,0 +1,191 @@
#compdef rustc
local -a _rustc_opts_switches _rustc_opts_lint _rustc_opts_debug
typeset -A opt_args
_rustc_debuginfo_levels=(
"0[no debug info]"
"1[line-tables only (for stacktraces and breakpoints)]"
"2[full debug info with variable and type information (same as -g)]"
)
_rustc_crate_types=(
'bin'
'lib'
'rlib'
'dylib'
'staticlib'
)
_rustc_emit_types=(
'asm'
'bc'
'ir'
'obj'
'link'
)
_rustc_pretty_types=(
'normal[un-annotated source]'
'expanded[crates expanded]'
'typed[crates expanded, with type annotations]'
'identified[fully parenthesized, AST nodes and blocks with IDs]'
'flowgraph=[graphviz formatted flowgraph for node]:NODEID:'
)
_rustc_color_types=(
'auto[colorize, if output goes to a tty (default)]'
'always[always colorize output]'
'never[never colorize output]'
)
_rustc_opts_vals=(
--crate-name='[Specify the name of the crate being built]'
--crate-type='[Comma separated list of types of crates for the compiler to emit]:TYPES:_values -s "," "Crate types" "$_rustc_crate_types[@]"'
--emit='[Comma separated list of types of output for the compiler to emit]:TYPES:_values -s "," "Emit Targets" "$_rustc_emit_types[@]"'
--debuginfo='[Emit DWARF debug info to the objects created]:LEVEL:_values "Debug Levels" "$_rustc_debuginfo_levels[@]"'
--dep-info='[Output dependency info to <filename> after compiling]::FILE:_files -/'
--sysroot='[Override the system root]:PATH:_files -/'
--cfg='[Configure the compilation environment]:SPEC:'
--out-dir='[Write output to compiler-chosen filename in <dir>. Ignored if -o is specified. (default the current directory)]:DIR:_files -/'
-o'[Write output to <filename>. Ignored if more than one --emit is specified.]:FILENAME:_files'
--opt-level='[Optimize with possible levels 0-3]:LEVEL:(0 1 2 3)'
--pretty='[Pretty-print the input instead of compiling]::TYPE:_values "TYPES" "$_rustc_pretty_types[@]"'
-L'[Add a directory to the library search path]:DIR:_files -/'
--target='[Target triple cpu-manufacturer-kernel\[-os\] to compile]:TRIPLE:'
--color='[Configure coloring of output]:CONF:_values "COLORS" "$_rustc_color_types[@]"'
{-v,--version}'[Print version info and exit]::VERBOSE:(verbose)'
--explain='[Provide a detailed explanation of an error message]:OPT:'
--extern'[Specify where an external rust library is located]:ARG:'
)
_rustc_opts_switches=(
-g'[Equivalent to --debuginfo=2]'
{-h,--help}'[Display this message]'
--no-analysis'[Parse and expand the output, but run no analysis or produce output]'
--no-trans'[Run all passes except translation; no output]'
-O'[Equivalent to --opt-level=2]'
--parse-only'[Parse only; do not compile, assemble, or link]'
--print-crate-name'[Output the crate name and exit]'
--print-file-name'[Output the file(s) that would be written if compilation continued and exit]'
--test'[Build a test harness]'
)
_rustc_opts_codegen=(
'ar=[Path to the archive utility to use when assembling archives.]:BIN:_path_files'
'linker=[Path to the linker utility to use when linking libraries, executables, and objects.]:BIN:_path_files'
'link-args=[A space-separated list of extra arguments to pass to the linker when the linker is invoked.]:ARGS:'
'target-cpu=[Selects a target processor. If the value is "help", then a list of available CPUs is printed.]:CPU:'
'target-feature=[A space-separated list of features to enable or disable for the target. A preceding "+" enables a feature while a preceding "-" disables it. Available features can be discovered through target-cpu=help.]:FEATURE:'
'passes=[A space-separated list of extra LLVM passes to run. A value of "list" will cause rustc to print all known passes and exit. The passes specified are appended at the end of the normal pass manager.]:LIST:'
'llvm-args=[A space-separated list of arguments to pass through to LLVM.]:ARGS:'
'save-temps[If specified, the compiler will save more files (.bc, .o, .no-opt.bc) generated throughout compilation in the output directory.]'
'rpath[If specified, then the rpath value for dynamic libraries will be set in either dynamic library or executable outputs.]'
'no-prepopulate-passes[Suppresses pre-population of the LLVM pass manager that is run over the module.]'
'no-vectorize-loops[Suppresses running the loop vectorization LLVM pass, regardless of optimization level.]'
'no-vectorize-slp[Suppresses running the LLVM SLP vectorization pass, regardless of optimization level.]'
'soft-float[Generates software floating point library calls instead of hardware instructions.]'
'prefer-dynamic[Prefers dynamic linking to static linking.]'
"no-integrated-as[Force usage of an external assembler rather than LLVM's integrated one.]"
'no-redzone[disable the use of the redzone]'
'relocation-model=[The relocation model to use. (default: pic)]:MODEL:(pic static dynamic-no-pic)'
'code-model=[choose the code model to use (llc -code-model for details)]:MODEL:'
'metadata=[metadata to mangle symbol names with]:VAL:'
'extra-filenames=[extra data to put in each output filename]:VAL:'
'codegen-units=[divide crate into N units to optimize in parallel]:N:'
'help[Show all codegen options]'
)
_rustc_opts_lint=(
'help[Show a list of all lints]'
'experimental[detects use of #\[experimental\] items]'
'heap-memory[use of any (Box type or @ type) heap memory]'
'managed-heap-memory[use of managed (@ type) heap memory]'
'missing-doc[detects missing documentation for public members]'
'non-uppercase-statics[static constants should have uppercase identifiers]'
'owned-heap-memory[use of owned (~ type) heap memory]'
'unnecessary-qualification[detects unnecessarily qualified names]'
'unsafe-block[usage of an `unsafe` block]'
'unstable[detects use of #\[unstable\] items (incl. items with no stability attribute)]'
'unused-result[unused result of an expression in a statement]'
'variant-size-difference[detects enums with widely varying variant sizes]'
'ctypes[proper use of libc types in foreign modules]'
'dead-assignment[detect assignments that will never be read]'
'dead-code[detect piece of code that will never be used]'
'deprecated[detects use of #\[deprecated\] items]'
'non-camel-case-types[types, variants and traits should have camel case names]'
'non-snake-case[methods, functions, lifetime parameters and modules should have snake case names]'
'path-statement[path statements with no effect]'
'raw-pointer-deriving[uses of #\[deriving\] with raw pointers are rarely correct]'
'type-limits[comparisons made useless by limits of the types involved]'
'type-overflow[literal out of range for its type]'
'unnecessary-allocation[detects unnecessary allocations that can be eliminated]'
'unnecessary-parens[`if`, `match`, `while` and `return` do not need parentheses]'
'unreachable-code[detects unreachable code]'
'unrecognized-lint[unrecognized lint attribute]'
'unsigned-negate[using an unary minus operator on unsigned type]'
'unused-attribute[detects attributes that were not used by the compiler]'
'unused-imports[imports that are never used]'
'unused-must-use[unused result of a type flagged as #\[must_use\]]'
"unused-mut[detect mut variables which don't need to be mutable]"
'unused-unsafe[unnecessary use of an `unsafe` block]'
'unused-variable[detect variables which are not used in any way]'
'visible-private-types[detect use of private types in exported type signatures]'
'warnings[mass-change the level for lints which produce warnings]'
'while-true[suggest using `loop { }` instead of `while true { }`]'
'unknown-crate-type[unknown crate type found in #\[crate_type\] directive]'
'unknown-features[unknown features found in crate-level #\[feature\] directives]'
'bad-style[group of non_camel_case_types, non_snake_case, non_uppercase_statics]'
'unused[group of unused_imports, unused_variable, dead_assignment, dead_code, unused_mut, unreachable_code]'
)
_rustc_opts_debug=(
'verbose[in general, enable more debug printouts]'
'time-passes[measure time of each rustc pass]'
'count-llvm-insns[count where LLVM instrs originate]'
'time-llvm-passes[measure time of each LLVM pass]'
'trans-stats[gather trans statistics]'
'asm-comments[generate comments into the assembly (may change behavior)]'
'no-verify[skip LLVM verification]'
'borrowck-stats[gather borrowck statistics]'
'no-landing-pads[omit landing pads for unwinding]'
'debug-llvm[enable debug output from LLVM]'
'show-span[show spans for compiler debugging]'
'count-type-sizes[count the sizes of aggregate types]'
'meta-stats[gather metadata statistics]'
'no-opt[do not optimize, even if -O is passed]'
'print-link-args[Print the arguments passed to the linker]'
'gc[Garbage collect shared data (experimental)]'
'print-llvm-passes[Prints the llvm optimization passes being run]'
'lto[Perform LLVM link-time optimizations]'
'ast-json[Print the AST as JSON and halt]'
'ast-json-noexpand[Print the pre-expansion AST as JSON and halt]'
'ls[List the symbols defined by a library crate]'
'save-analysis[Write syntax and type analysis information in addition to normal output]'
'flowgraph-print-loans[Include loan analysis data in --pretty flowgraph output]'
'flowgraph-print-moves[Include move analysis data in --pretty flowgraph output]'
'flowgraph-print-assigns[Include assignment analysis data in --pretty flowgraph output]'
'flowgraph-print-all[Include all dataflow analysis data in --pretty flowgraph output]'
)
_rustc_opts_fun_lint(){
_values -s , 'options' \
"$_rustc_opts_lint[@]"
}
_rustc_opts_fun_debug(){
_values 'options' "$_rustc_opts_debug[@]"
}
_rustc_opts_fun_codegen(){
_values 'options' "$_rustc_opts_codegen[@]"
}
_arguments -s : \
'(-W --warn)'{-W,--warn=}'[Set lint warnings]:lint options:_rustc_opts_fun_lint' \
'(-A --allow)'{-A,--allow=}'[Set lint allowed]:lint options:_rustc_opts_fun_lint' \
'(-D --deny)'{-D,--deny=}'[Set lint denied]:lint options:_rustc_opts_fun_lint' \
'(-F --forbid)'{-F,--forbid=}'[Set lint forbidden]:lint options:_rustc_opts_fun_lint' \
'*-Z[Set internal debugging options]:debug options:_rustc_opts_fun_debug' \
'*-C[Set internal Codegen options]:codegen options:_rustc_opts_fun_codegen' \
"$_rustc_opts_switches[@]" \
"$_rustc_opts_vals[@]" \
'::files:_files -g "*.rs"'

View file

@ -21,3 +21,4 @@ alias sbr='sbt run'
alias sbrm='sbt run-main'
alias sbu='sbt update'
alias sbx='sbt test'
alias sba='sbt assembly'

View file

@ -0,0 +1,68 @@
# A plugin to shrink directory paths for brevity and pretty-printing
## Examples
For this directory tree:
```
/home/
me/
foo/
bar/
quux/
biz/ # The prefix b is ambiguous between bar and biz.
```
here are the results of calling `shrink_path <option> /home/me/foo/bar/quux`:
```
Option Result
<none> /h/m/f/ba/q
-l|--last /h/m/f/ba/quux
-s|--short /h/m/f/b/q
-t|--tilde ~/f/ba/q
-f|--fish ~/f/b/quux
```
## Usage
For a fish-style working directory in your command prompt, add the following to
your theme or zshrc:
```
setopt prompt_subst
PS1='%n@%m $(shrink_path -f)>'
```
The following options are available:
```
-f, --fish fish simulation, equivalent to -l -s -t.
-l, --last Print the last directory's full name.
-s, --short Truncate directory names to the first character. Without
-s, names are truncated without making them ambiguous.
-t, --tilde Substitute ~ for the home directory.
-T, --nameddirs Substitute named directories as well.
```
The long options can also be set via zstyle, like
```
zstyle :prompt:shrink_path fish yes
```
Note: Directory names containing two or more consecutive spaces are not yet
supported.
## License
Copyright (C) 2008 by Daniel Friesel <derf@xxxxxxxxxxxxxxxxxx>
License: WTFPL <http://sam.zoy.org/wtfpl>
Ref: http://www.zsh.org/mla/workers/2009/msg00415.html
http://www.zsh.org/mla/workers/2009/msg00419.html
## Misc
Keywords: prompt directory truncate shrink collapse fish

View file

@ -0,0 +1,127 @@
# Shrink directory paths, e.g. /home/me/foo/bar/quux -> ~/f/b/quux.
#
# For a fish-style working directory in your command prompt, add the following
# to your theme or zshrc:
#
# setopt prompt_subst
# PS1='%n@%m $(shrink_path -f)>'
#
# The following options are available:
#
# -f, --fish fish simulation, equivalent to -l -s -t.
# -l, --last Print the last directory's full name.
# -s, --short Truncate directory names to the first character. Without
# -s, names are truncated without making them ambiguous.
# -t, --tilde Substitute ~ for the home directory.
# -T, --nameddirs Substitute named directories as well.
#
# The long options can also be set via zstyle, like
# zstyle :prompt:shrink_path fish yes
#
# Note: Directory names containing two or more consecutive spaces are not yet
# supported.
#
# Keywords: prompt directory truncate shrink collapse fish
#
# Copyright (C) 2008 by Daniel Friesel <derf@xxxxxxxxxxxxxxxxxx>
# License: WTFPL <http://sam.zoy.org/wtfpl>
#
# Ref: http://www.zsh.org/mla/workers/2009/msg00415.html
# http://www.zsh.org/mla/workers/2009/msg00419.html
shrink_path () {
setopt localoptions
setopt rc_quotes null_glob
typeset -i lastfull=0
typeset -i short=0
typeset -i tilde=0
typeset -i named=0
if zstyle -t ':prompt:shrink_path' fish; then
lastfull=1
short=1
tilde=1
fi
if zstyle -t ':prompt:shrink_path' nameddirs; then
tilde=1
named=1
fi
zstyle -t ':prompt:shrink_path' last && lastfull=1
zstyle -t ':prompt:shrink_path' short && short=1
zstyle -t ':prompt:shrink_path' tilde && tilde=1
while [[ $1 == -* ]]; do
case $1 in
-f|--fish)
lastfull=1
short=1
tilde=1
;;
-h|--help)
print 'Usage: shrink_path [-f -l -s -t] [directory]'
print ' -f, --fish fish-simulation, like -l -s -t'
print ' -l, --last Print the last directory''s full name'
print ' -s, --short Truncate directory names to the first character'
print ' -t, --tilde Substitute ~ for the home directory'
print ' -T, --nameddirs Substitute named directories as well'
print 'The long options can also be set via zstyle, like'
print ' zstyle :prompt:shrink_path fish yes'
return 0
;;
-l|--last) lastfull=1 ;;
-s|--short) short=1 ;;
-t|--tilde) tilde=1 ;;
-T|--nameddirs)
tilde=1
named=1
;;
esac
shift
done
typeset -a tree expn
typeset result part dir=${1-$PWD}
typeset -i i
[[ -d $dir ]] || return 0
if (( named )) {
for part in ${(k)nameddirs}; {
[[ $dir == ${nameddirs[$part]}(/*|) ]] && dir=${dir/${nameddirs[$part]}/\~$part}
}
}
(( tilde )) && dir=${dir/$HOME/\~}
tree=(${(s:/:)dir})
(
unfunction chpwd 2> /dev/null
if [[ $tree[1] == \~* ]] {
cd ${~tree[1]}
result=$tree[1]
shift tree
} else {
cd /
}
for dir in $tree; {
if (( lastfull && $#tree == 1 )) {
result+="/$tree"
break
}
expn=(a b)
part=''
i=0
until [[ (( ${#expn} == 1 )) || $dir = $expn || $i -gt 99 ]] do
(( i++ ))
part+=$dir[$i]
expn=($(echo ${part}*(-/)))
(( short )) && break
done
result+="/$part"
cd $dir
shift tree
}
echo ${result:-/}
)
}
## vim:ft=zsh

View file

@ -15,5 +15,7 @@ Plugin for Sublime Text, a cross platform text and code editor, available for Li
* If `st` is passed a file, open it in Sublime Text
* If `stt` command is called, it is equivalent to `st .`, opening the current folder in Sublime Text
* If `sst` command is called, it is like `sudo st`, opening the file or folder in Sublime Text. Useful for editing system protected files.
* If `sst` command is called, it is like `sudo st`, opening the file or folder in Sublime Text. Useful for editing system protected files.
* If `stp` command is called, it find a `.sublime-project` file by traversing up the directory structure. If there is no `.sublime-project` file, but if the current folder is a Git repo, opens up the root directory of the repo. If the current folder is not a Git repo, then opens up the current directory.

View file

@ -56,3 +56,32 @@ elif [[ "$OSTYPE" = 'cygwin' ]]; then
fi
alias stt='st .'
find_project()
{
local PROJECT_ROOT="${PWD}"
local FINAL_DEST="."
while [[ $PROJECT_ROOT != "/" && ! -d "$PROJECT_ROOT/.git" ]]; do
PROJECT_ROOT=$(dirname $PROJECT_ROOT)
done
if [[ $PROJECT_ROOT != "/" ]]; then
local PROJECT_NAME="${PROJECT_ROOT##*/}"
local SUBL_DIR=$PROJECT_ROOT
while [[ $SUBL_DIR != "/" && ! -f "$SUBL_DIR/$PROJECT_NAME.sublime-project" ]]; do
SUBL_DIR=$(dirname $SUBL_DIR)
done
if [[ $SUBL_DIR != "/" ]]; then
FINAL_DEST="$SUBL_DIR/$PROJECT_NAME.sublime-project"
else
FINAL_DEST=$PROJECT_ROOT
fi
fi
st $FINAL_DEST
}
alias stp=find_project

View file

@ -2,7 +2,7 @@
# Description
# -----------
#
# sudo will be inserted before the command
# sudo or sudoedit will be inserted before the command
#
# ------------------------------------------------------------------------------
# Authors
@ -16,6 +16,12 @@ sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
if [[ $BUFFER == sudo\ * ]]; then
LBUFFER="${LBUFFER#sudo }"
elif [[ $BUFFER == $EDITOR\ * ]]; then
LBUFFER="${LBUFFER#$EDITOR }"
LBUFFER="sudoedit $LBUFFER"
elif [[ $BUFFER == sudoedit\ * ]]; then
LBUFFER="${LBUFFER#sudoedit }"
LBUFFER="$EDITOR $LBUFFER"
else
LBUFFER="sudo $LBUFFER"
fi

View file

@ -22,8 +22,8 @@ alias sf='`_symfony_console`'
alias sfcl='sf cache:clear'
alias sfsr='sf server:run -vvv'
alias sfcw='sf cache:warmup'
alias sfroute='sf router:debug'
alias sfcontainer='sf container:debug'
alias sfroute='sf debug:router'
alias sfcontainer='sf debug:container'
alias sfgb='sf generate:bundle'
alias sfdev='sf --env=dev'
alias sfprod='sf --env=prod'

View file

@ -1,6 +1,6 @@
user_commands=(
list-units is-active status show help list-unit-files
is-enabled list-jobs show-environment cat)
is-enabled list-jobs show-environment cat list-timers)
sudo_commands=(
start stop reload restart try-restart isolate kill

View file

@ -1,6 +1,6 @@
#compdef task
#
# Copyright 2010 - 2015 Johannes Schlatow
# Copyright 2010 - 2016 Johannes Schlatow
# Copyright 2009 P.C. Shyamshankar
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
@ -26,7 +26,6 @@
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_zshids=( ${(f)"$(task _zshids)"} )
_task_config=($(task _config))
_task_columns=($(task _columns))
@ -139,8 +138,10 @@ task_dates=(
)
local -a task_zshids
_regex_words values 'task IDs' $_task_zshids
task_zshids=("$reply[@]")
if (( $#_task_zshids )); then
_regex_words values 'task IDs' $_task_zshids
task_zshids=("$reply[@]")
fi
_regex_words values 'task frequencies' \
'daily:Every day' \

View file

@ -3,6 +3,7 @@
#
alias ta='tmux attach -t'
alias tad='tmux attach -d -t'
alias ts='tmux new-session -s'
alias tl='tmux list-sessions'
alias tksv='tmux kill-server'

View file

@ -63,7 +63,7 @@ alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) \
# Misc. #####################################################################
# print all installed packages
alias allpkgs='aptitude search -F "%p" --disable-columns ~i'
alias allpkgs='dpkg --get-selections | grep -v deinstall'
# Create a basic .deb package
alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc'

View file

@ -11,9 +11,12 @@ fi
if [[ $(whence node) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xnode" ) ]]; then
alias urlencode='node -e "console.log(encodeURIComponent(process.argv[1]))"'
alias urldecode='node -e "console.log(decodeURIComponent(process.argv[1]))"'
elif [[ $(whence python) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xpython" ) ]]; then
alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1])"'
alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
elif [[ $(whence python3) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xpython" ) ]]; then
alias urlencode='python3 -c "import sys, urllib.parse as up; print(up.quote_plus(sys.argv[1]))"'
alias urldecode='python3 -c "import sys, urllib.parse as up; print(up.unquote_plus(sys.argv[1]))"'
elif [[ $(whence python2) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xpython" ) ]]; then
alias urlencode='python2 -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1])"'
alias urldecode='python2 -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
elif [[ $(whence xxd) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xshell" ) ]]; then
function urlencode() {echo $@ | tr -d "\n" | xxd -plain | sed "s/\(..\)/%\1/g"}
function urldecode() {printf $(echo -n $@ | sed 's/\\/\\\\/g;s/\(%\)\([0-9a-fA-F][0-9a-fA-F]\)/\\x\2/g')"\n"}

View file

@ -26,10 +26,12 @@ _1st_arguments=(
'rsync:Syncs rsync synced folders to remote machine'
'rsync-auto:Syncs rsync synced folders automatically when files change'
'share:Shares your Vagrant environment with anyone in the world'
'snapshot:Manage snapshots with the guest machine'
'ssh:SSH into the currently running environment'
'ssh-config:Outputs .ssh/config valid syntax for connecting to this environment via ssh'
'status:Shows the status of the current Vagrant environment'
'suspend:Suspends the currently running vagrant environment'
'snapshot:Used to manage snapshots with the guest machine'
'up:Creates the vagrant environment'
'version:Prints current and latest Vagrant version'
'--help:[TASK] Describe available tasks or one specific task'

View file

@ -10,6 +10,7 @@ function web_search() {
bing "https://www.bing.com/search?q="
yahoo "https://search.yahoo.com/search?p="
duckduckgo "https://www.duckduckgo.com/?q="
startpage "https://www.startpage.com/do/search?q="
yandex "https://yandex.ru/yandsearch?text="
github "https://github.com/search?q="
baidu "https://www.baidu.com/s?wd="
@ -41,6 +42,7 @@ alias bing='web_search bing'
alias google='web_search google'
alias yahoo='web_search yahoo'
alias ddg='web_search duckduckgo'
alias sp='web_search startpage'
alias yandex='web_search yandex'
alias github='web_search github'
alias baidu='web_search baidu'

View file

@ -4,7 +4,9 @@
WordPress Command Line Interface (http://wp-cli.org/)
WP-CLI is a set of command-line tools for managing WordPress installations. You can update plugins, set up multisite installs and much more, without using a web browser.
WP-CLI is a set of command-line tools for managing WordPress installations. You can update plugins, set up multisite installs and much more, without using a web browser.
This plugin adds [tab completion](http://wp-cli.org/#complete) for `wp-cli` as well as several aliases.
## List of Aliases

View file

@ -1,5 +1,33 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_aliases_active_text
active_text=${znt_aliases_active_text:-$active_text}
# 2. znt_aliases_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_aliases_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_aliases_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_aliases_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_aliases_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_aliases_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_aliases_keywords (array)
if (( ${+znt_aliases_keywords} )); then
keywords=( "${znt_aliases_keywords[@]}" )
fi

View file

@ -1,6 +1,6 @@
# Hotlist
# Try to use $ZSH_VERSION, e.g. /usr/share/zsh/$ZSH_VERSION/functions
local hotlist
# Can use e.g. $ZSH_VERSION, e.g. /usr/share/zsh/$ZSH_VERSION/functions
local -a hotlist
hotlist=(
~/.config/znt
/usr/share/zsh/site-functions
@ -8,6 +8,7 @@ hotlist=(
/usr/local/share/zsh/site-functions
/usr/local/share/zsh
/usr/local/bin
/usr/lib
)
# Suppress adding (to directory stack) directories visited by n-cd
@ -15,12 +16,53 @@ hotlist=(
local NCD_DONT_PUSHD=0
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
# Colorize last segments of the paths
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
local NLIST_COLORING_PATTERN="[a-zA-Z0-9 ._-]##/#(#e)"
local NLIST_COLORING_COLOR=$'\x1b[00;33m'
# Search keywords, iterated with F2 or Ctrl-X or Ctrl-/
local -a keywords
keywords=( "zsh" "local" "git" )
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_cd_hotlist (array)
if (( ${+znt_cd_hotlist} )); then
hotlist=( "${znt_cd_hotlist[@]}" )
fi
# 2. znt_cd_dont_pushd
NCD_DONT_PUSHD=${znt_cd_dont_pushd:-$NCD_DONT_PUSHD}
# 3. znt_cd_active_text
active_text=${znt_cd_active_text:-$active_text}
# 4. znt_cd_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_cd_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 5. znt_cd_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_cd_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 6. znt_cd_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_cd_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 7. znt_cd_keywords (array)
if (( ${+znt_cd_keywords} )); then
keywords=( "${znt_cd_keywords[@]}" )
fi

View file

@ -1,9 +1,38 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
local NLIST_COLORING_PATTERN="[a-zA-Z0-9_]##"
local NLIST_COLORING_MATCH_MULTIPLE=0
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_env_active_text
active_text=${znt_env_active_text:-$active_text}
# 2. znt_env_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_env_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_env_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_env_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_env_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_env_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_env_keywords (array)
if (( ${+znt_env_keywords} )); then
keywords=( "${znt_env_keywords[@]}" )
fi

View file

@ -4,7 +4,38 @@ local feditor="zed"
# local feditor="vared"
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_functions_feditor
feditor=${znt_functions_feditor:-$feditor}
# 2. znt_functions_active_text
active_text=${znt_functions_active_text:-$active_text}
# 3. znt_functions_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_functions_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 4. znt_functions_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_functions_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 5. znt_functions_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_functions_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 6. znt_functions_keywords (array)
if (( ${+znt_functions_keywords} )); then
keywords=( "${znt_functions_keywords[@]}" )
fi

View file

@ -1,10 +1,43 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# underline support on that terminal). The same for screen/tmux.
local active_text=underline
# Highlight a few keywords
local NLIST_COLORING_PATTERN="(while|for |sudo|make|(#s)git|vim(#e)|vim |emacs(#e)|emacs )"
local NLIST_COLORING_COLOR=$'\x1b[00;33m'
local NLIST_COLORING_MATCH_MULTIPLE=1
# Search keywords, iterated with F2 or Ctrl-X or Ctrl-/
local -a keywords
keywords=( "git" "vim" "mplayer" )
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_history_active_text
active_text=${znt_history_active_text:-$active_text}
# 2. znt_history_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_history_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_history_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_history_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_history_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_history_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_history_keywords (array)
if (( ${+znt_history_keywords} )); then
keywords=( "${znt_history_keywords[@]}" )
fi

View file

@ -1,13 +1,46 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
# Colorize first number column and last path segment
# This doesn't cover scripts named "[0-9]## *", which should be very rare
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
# | is alternative, but only in ()
local NLIST_COLORING_PATTERN="((#s) #[0-9]## |[[][^]]#](#e)|[^ 0-9/?\\\\][^/\\\\]#(#e)|[^ /\\\\]##[^0-9/\\\\ ]##[^/\\\\]#(#e))"
local NLIST_COLORING_PATTERN="((#s) #[0-9]## |[[][^]]#](#e)|[^ 0-9/?\\\\][^/\\\\]#(#e))"
local NLIST_COLORING_COLOR=$'\x1b[00;33m'
local NLIST_COLORING_MATCH_MULTIPLE=1
# Search keywords, iterated with F2 or Ctrl-X or Ctrl-/
local -a keywords
keywords=( "vim" "git" "git commit" "firefox" "mplayer" )
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_kill_active_text
active_text=${znt_kill_active_text:-$active_text}
# 2. znt_kill_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_kill_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_kill_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_kill_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_kill_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_kill_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_kill_keywords (array)
if (( ${+znt_kill_keywords} )); then
keywords=( "${znt_kill_keywords[@]}" )
fi

View file

@ -1,3 +1,55 @@
# Should the list (text, borders) be drawn in bold
# Value 1 is the default
local bold=1
local bold=0
# Main color pair (foreground/background)
local colorpair="white/black"
# Should draw the border?
local border=0
# Combinations of colors to try out with Ctrl-T and Ctrl-G
# The last number is the bold option, 0 or 1
local -a themes
themes=( "white/black/1" "green/black/0" "green/black/1" "white/blue/0" "white/blue/1"
"magenta/black/0" "magenta/black/1" )
# Uncomment when using new (>5.2) Zsh version that supports 256 colors in zcurses
#themes=( "white/17/0" "10/17/1" "white/24/1" "white/22/0" "white/22/1" "white/25/0" "white/25/1"
# "white/59/0" "white/59/1" "white/60/0" "white/60/1" "white/61/0" "white/61/1" "black/65/0"
# "black/244/0" )
# When 1, pressing enter when in search mode will not
# only leave the mode, but also do selection and leave
# n-history
local NLIST_INSTANT_SELECT=0
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_list_bold
bold=${znt_list_bold:-$bold}
# 2. znt_list_colorpair
colorpair=${znt_list_colorpair:-$colorpair}
# 3. znt_list_border
border=${znt_list_border:-$border}
# 4. znt_list_themes (array)
if (( ${+znt_list_themes} )); then
themes=( "${znt_list_themes[@]}" )
fi
# 5. znt_list_instant_select
NLIST_INSTANT_SELECT=${znt_list_instant_select:-$NLIST_INSTANT_SELECT}

View file

@ -1,5 +1,34 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_options_active_text
active_text=${znt_options_active_text:-$active_text}
# 2. znt_options_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_options_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_options_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_options_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_options_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_options_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_options_keywords (array)
if (( ${+znt_options_keywords} )); then
keywords=( "${znt_options_keywords[@]}" )
fi

View file

@ -1,5 +1,34 @@
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# underline.
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# underline support on that terminal). The same for screen/tmux.
local active_text=reverse
#
# Zshrc integration. All below variables can
# be set in zshrc and will have precedence
# over config files
#
# 1. znt_panelize_active_text
active_text=${znt_panelize_active_text:-$active_text}
# 2. znt_panelize_nlist_coloring_pattern
NLIST_COLORING_PATTERN=${znt_panelize_nlist_coloring_pattern:-$NLIST_COLORING_PATTERN}
# 3. znt_panelize_nlist_coloring_color
NLIST_COLORING_COLOR=${znt_panelize_nlist_coloring_color:-$NLIST_COLORING_COLOR}
# 4. znt_panelize_nlist_coloring_match_multiple
NLIST_COLORING_MATCH_MULTIPLE=${znt_panelize_nlist_coloring_match_multiple:-$NLIST_COLORING_MATCH_MULTIPLE}
# 5. znt_panelize_keywords (array)
if (( ${+znt_panelize_keywords} )); then
keywords=( "${znt_panelize_keywords[@]}" )
fi

View file

@ -1,6 +1,6 @@
# Zsh Navigation Tools
http://imageshack.com/a/img633/7967/ps6rKR.png
https://raw.githubusercontent.com/psprint/zsh-navigation-tools/master/doc/img/n-history2.png
Set of tools like n-history  multi-word history searcher, n-cd directory
bookmark manager, n-kill  htop like kill utility, and more. Based on
@ -32,6 +32,26 @@ to key combinations (no need for autoload when using Oh My Zsh):
Oh My Zsh stores history into ~/.zsh_history. When you switch to OMZ you could
want to copy your previous data (from e.g. ~/.zhistory) into the new location.
## News
* 30-04-2016
- New feature: color themes. Use Ctrl-T and Ctrl-G to browse predefined
themes. They are listed in ~/.config/znt/n-list.conf. Use the file to
permanently set a color scheme. Also, I sent a patch to Zsh developers
and starting from Zsh > 5.2 (not yet released) supported will be 256 colors.
The file ~/.config/znt/n-list.conf already has set of 256-color themes prepared :)
* 29-04-2016
- New feature: private history n-history tracks selected history entries,
exposes them via new view (activated with F1)
* 28-04-2016
- New features:
1. New n-history view (activated with F1): Most Frequent History Words
2. Predefined search keywords  use F2 to quickly search for chosen
keywords (video: [https://youtu.be/DN9QqssAYB8](https://youtu.be/DN9QqssAYB8))
3. Configuration option for doing instant selection in search mode
## Introduction
The tools are:
@ -60,6 +80,65 @@ cursors. Other keys are:
- Ctrl-w (in incremental search) - delete whole word
- Ctrl-k (in incremental search) - delete whole line
## Configuration
`ZNT` has configuration files located in `~/.config/znt`. The files are:
```
n-aliases.conf
n-cd.conf
n-env.conf
n-functions.conf
n-history.conf
n-kill.conf
n-list.conf
n-options.conf
n-panelize.conf
```
`n-list.conf` contains main configuration variables:
```zsh
# Should the list (text, borders) be drawn in bold
local bold=0
# Main color pair (foreground/background)
local colorpair="white/black"
# Should draw the border?
local border=1
# Combinations of colors to try out with Ctrl-T and Ctrl-G
# The last number is the bold option, 0 or 1
local -a themes
themes=( "white/black/1" "green/black/0" "green/black/1" "white/blue/0" "white/blue/1"
"magenta/black/0" "magenta/black/1" )
```
Read remaining configuration files to see what's in them. Nevertheless, configuration
can be also set from `zshrc`. There are `5` standard `zshrc` configuration variables:
```
znt_history_active_text - underline or reverse - how should be active element highlighted
znt_history_nlist_coloring_pattern - pattern that can be used to colorize elements
znt_history_nlist_coloring_color - color with which to colorize
znt_history_nlist_coloring_match_multiple - should multiple matches be colorized (0 or 1)
znt_history_keywords (array) - search keywords activated with `Ctrl-X`
```
Above variables will work for `n-history` tool. For other tools, change `_history_` to
e.g. `_cd_`, for the `n-cd` tool. The same works for all `8` tools.
Common configuration of the tools uses variables with `_list_` in them:
```
znt_list_bold - should draw text in bold (0 or 1)
znt_list_colorpair - main pair of colors to be used, e.g "green/black"
znt_list_border - should draw borders around windows (0 or 1)
znt_list_themes (array) - list of themes to try out with Ctrl-T, e.g. ( "white/black/1" "green/black/0" )
znt_list_instant_select - should pressing enter in search mode leave tool (0 or 1)
```
## Programming
The function n-list is used as follows:

View file

@ -0,0 +1,41 @@
#compdef n-kill
local context ret=1
typeset -a list linewords
typeset -aU words wordbits
local line word
integer cygwin=0
local IFS="
"
case "$(uname)" in
CYGWIN*) list=( `command ps -Wa` ); cygwin=1 ;;
*) list=( `command ps -o pid,uid,command -A` ) ;;
esac
shift list
IFS=" "
for line in "${list[@]}"; do
linewords=( $=line )
if [ "$cygwin" = "1" ]; then
linewords=( "${(@)linewords[8,-1]}" )
else
linewords=( "${(@)linewords[3,-1]}" )
fi
for word in "${linewords[@]}"; do
if [ "$cygwin" = "1" ]; then
wordbits=( "${(@s:\:)word}" )
else
wordbits=( "${(@s:/:)word}" )
fi
words+=( "${wordbits[@]}" )
done
done
_wanted bits expl "Processes' name bits" \
compadd "$@" -a - words && ret=0
return "$ret"

View file

@ -16,8 +16,8 @@ local IFS="
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-aliases.conf ] && . ~/.config/znt/n-aliases.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-aliases.conf ] && builtin source ~/.config/znt/n-aliases.conf
local list
local selected

View file

@ -16,8 +16,8 @@ local IFS="
# Unset before configuration is read
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-cd.conf ] && . ~/.config/znt/n-cd.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-cd.conf ] && builtin source ~/.config/znt/n-cd.conf
local list
local selected
@ -53,13 +53,16 @@ if [ "$REPLY" -gt 0 ]; then
(( NCD_DONT_PUSHD )) && setopt NO_AUTO_PUSHD
cd "$selected"
local code=$?
(( NCD_DONT_PUSHD )) && setopt AUTO_PUSHD
# ZLE?
if [ "${(t)CURSOR}" = "integer-local-special" ]; then
zle -M "You have selected $selected"
else
echo "You have selected $selected"
if [ "$code" -eq "0" ]; then
# ZLE?
if [ "${(t)CURSOR}" = "integer-local-special" ]; then
zle -M "You have selected $selected"
else
echo "You have selected $selected"
fi
fi
else
[ "${(t)CURSOR}" = "integer-local-special" ] && zle redisplay

View file

@ -15,8 +15,8 @@ zmodload zsh/curses
local IFS="
"
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-env.conf ] && . ~/.config/znt/n-env.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-env.conf ] && builtin source ~/.config/znt/n-env.conf
local list
local selected

View file

@ -16,8 +16,8 @@ local IFS="
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-functions.conf ] && . ~/.config/znt/n-functions.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-functions.conf ] && builtin source ~/.config/znt/n-functions.conf
local list
local selected

View file

@ -0,0 +1,135 @@
autoload colors
colors
local h1="$fg_bold[magenta]"
local h2="$fg_bold[green]"
local h3="$fg_bold[blue]"
local h4="$fg_bold[yellow]"
local h5="$fg_bold[cyan]"
local rst="$reset_color"
LESS="-iRc" less <<<"
${h1}Key Bindings${rst}
${h2}H${rst}, ${h2}?${rst} (from n-history) - run n-help
${h2}Ctrl-A${rst} - rotate entered words (1+2+3 -> 3+1+2)
${h2}Ctrl-F${rst} - fix mode (approximate matching)
${h2}Ctrl-L${rst} - redraw of whole display
${h2}Ctrl-T${rst} - browse themes (next theme)
${h2}Ctrl-G${rst} - browse themes (previous theme)
${h2}Ctrl-U${rst} - half page up
${h2}Ctrl-D${rst} - half page down
${h2}Ctrl-P${rst} - previous element (also done with vim's k)
${h2}Ctrl-N${rst} - next element (also done with vim's j)
${h2}[${rst}, ${h2}]${rst} - jump directory bookmarks in n-cd and typical signals in n-kill
${h2}g, ${h2}G${rst} - beginning and end of the list
${h2}/${rst} - show incremental search
${h2}F3${rst} - show/hide incremental search
${h2}Esc${rst} - exit incremental search, clearing filter
${h2}Ctrl-W${rst} (in incremental search) - delete whole word
${h2}Ctrl-K${rst} (in incremental search) - delete whole line
${h2}Ctrl-O, ${h2}o${rst} - enter uniq mode (no duplicate lines)
${h2}Ctrl-E, ${h2}e${rst} - edit private history (when in private history view)
${h2}F1${rst} - (in n-history) - switch view
${h2}F2${rst}, ${h2}Ctrl-X${rst}, ${h2}Ctrl-/${rst} - search predefined keywords (defined in config files)
${h1}Configuration files${rst}
Location of the files is ${h3}~/.config/znt${rst}. Skeletons are copied there
when using ${h3}zsh-navigation-tools.plugin.zsh${rst} file (sourcing it or using
a plugin manager). There's a main config file ${h3}n-list.conf${rst} and files
for each tool.
To have a skeleton copied again into ${h3}~/.config/znt${rst}, delete it from
there and restart Zsh a few times (3-7 or so; there's a random check
that optimizes startup time).
${h1}Predefined search keywords${rst}
Following block of code in e.g. ${h3}~/.config/znt/n-history.conf${rst} defines
set of keywords that can be invoked (i.e. searched for) via ${h2}F2${rst}, ${h2}Ctrl-X${rst}
or ${h2}Ctrl-/${rst}:
${h4}# Search keywords, iterated with F2 or Ctrl-X or Ctrl-/${rst}
${h2}local${rst} -a keywords
keywords=( ${h2}\"git\" \"vim\" \"mplayer\"${rst} )
${h1}Search query rotation${rst}
When searching, after pressing ${h2}Ctrl-A${rst}, words 1 2 3 will become 3 1 2, etc.
This can be used to edit some not-last word.
${h1}Fix mode${rst}
Approximate matching - pressing ${h2}f${rst} or ${h2}Ctrl-F${rst} will enter "FIX" mode, in which
1 or 2 errors are allowed in what's searched. This utilizes original Zsh
approximate matching features and is intended to be used after entering
search query, when a typo is discovered.
${h1}Color themes${rst}
Following block of code in ${h3}~/.config/znt/n-list.conf${rst} defines set of
themes that can be browsed with ${h2}Ctrl-T${rst} and ${h2}Ctrl-G${rst}:
${h4}# Combinations of colors to try out with Ctrl-T and Ctrl-G
# The last number is the bold option, 0 or 1${rst}
${h2}local${rst} -a themes
themes=( ${h2}\"white/black/1\" \"green/black/0\" \"green/black/1\"${rst}
${h2}\"white/blue/0\" \"white/blue/1\" \"magenta/black/0\"${rst}
${h2}\"magenta/black/1\"${rst} )
It's \"foreground/background/bold\". There's support for 256-color themes
for Zsh > 5.2, defined like e.g.:
themes=( ${h2}\"white/17/0\" \"10/17/1\" \"white/24/1\"${rst} )
i.e. with use of numbers, from 0 to 254.
${h1}Private history${rst}
N-history stores what's selected in its own history file. It can be
edited. Use ${h2}e${rst} or ${h2}Ctrl-E${rst} for that when in n-history. Your \$EDITOR will
start. This is a way to have handy set of bookmarks prepared in private
history's file.
Private history is instantly shared among sessions.
${h1}Zshrc integration${rst}
There are 5 standard configuration variables that can be set in zshrc:
${h4}znt_history_active_text${rst}
\"underline\" or \"reverse\" - how should be active element highlighted
${h4}znt_history_nlist_coloring_pattern${rst}
Pattern that can be used to colorize elements
${h4}znt_history_nlist_coloring_color${rst}
Color with which to colorize via the pattern
${h4}znt_history_nlist_coloring_match_multiple${rst}
Should multiple matches be colorized (${h2}\"0\"${rst} or ${h2}\"1\"${rst})
${h4}znt_history_keywords ${h2}(array)${rst}
Search keywords activated with Ctrl-X, F2, Ctrl-/, e.g. ( ${h2}\"git\"${rst} ${h2}\"vim\"${rst} )
Above variables will work for n-history tool. For other tools, change
\"_history_\" to e.g. \"_cd_\", for the n-cd tool. The same works for
all 8 tools.
Common configuration of the tools uses variables with \"_list_\" in them:
${h4}znt_list_bold${rst}
Should draw text in bold (${h2}\"0\"${rst} or ${h2}\"1\"${rst})
${h4}znt_list_colorpair${rst}
Main pair of colors to be used, e.g ${h2}\"green/black\"${rst}
${h4}znt_list_border${rst}
Should draw borders around windows (${h2}\"0\"${rst} or ${h2}\"1\"${rst})
${h4}znt_list_themes ${h2}(array)${rst}
List of themes to try out with Ctrl-T, e.g. ( ${h2}\"white/black/1\"${rst}
${h2}\"green/black/0\"${rst} )
${h4}znt_list_instant_select${rst}
Should pressing enter in search mode leave tool (${h2}\"0\"${rst} or ${h2}\"1\"${rst})
If you used ZNT before v2.1.12 then remove old configuration files
${h3}~/.config/znt/*.conf${rst} so that ZNT can update them to the latest versions
that support integration with Zshrc. If you used installer then run it
again (after the remove of configuration files), that is not needed when
using as plugin.
"

View file

@ -15,37 +15,338 @@ zmodload zsh/parameter
local IFS="
"
unset NLIST_COLORING_PATTERN
# Variables to save list's state when switching views
# The views are: history and "most frequent history words"
local one_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
local one_NLIST_CURRENT_IDX
local one_NLIST_IS_SEARCH_MODE
local one_NLIST_SEARCH_BUFFER
local one_NLIST_TEXT_OFFSET
local one_NLIST_IS_UNIQ_MODE
local one_NLIST_IS_F_MODE
local one_NLIST_GREP_STRING
local one_NLIST_NONSELECTABLE_ELEMENTS
local one_NLIST_REMEMBER_STATE
local one_NLIST_ENABLED_EVENTS
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-history.conf ] && . ~/.config/znt/n-history.conf
local two_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
local two_NLIST_CURRENT_IDX
local two_NLIST_IS_SEARCH_MODE
local two_NLIST_SEARCH_BUFFER
local two_NLIST_TEXT_OFFSET
local two_NLIST_IS_UNIQ_MODE
local two_NLIST_IS_F_MODE
local two_NLIST_GREP_STRING
local two_NLIST_NONSELECTABLE_ELEMENTS
local two_NLIST_REMEMBER_STATE
local two_NLIST_ENABLED_EVENTS
local three_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
local three_NLIST_CURRENT_IDX
local three_NLIST_IS_SEARCH_MODE
local three_NLIST_SEARCH_BUFFER
local three_NLIST_TEXT_OFFSET
local three_NLIST_IS_UNIQ_MODE
local three_NLIST_IS_F_MODE
local three_NLIST_GREP_STRING
local three_NLIST_NONSELECTABLE_ELEMENTS
local three_NLIST_REMEMBER_STATE
local three_NLIST_ENABLED_EVENTS
# history view
integer active_view=0
# Lists are "0", "1", "2" - 1st, 2nd, 3rd
# Switching is done in cyclic manner
# i.e. 0 -> 1, 1 -> 2, 2 -> 0
_nhistory_switch_lists_states() {
# First argument is current, newly selected list, i.e. $active_view
# This implies that we are switching from previous view
if [ "$1" = "0" ]; then
# Switched to 1st list, save 3rd list's state
three_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
three_NLIST_CURRENT_IDX=$NLIST_CURRENT_IDX
three_NLIST_IS_SEARCH_MODE=$NLIST_IS_SEARCH_MODE
three_NLIST_SEARCH_BUFFER=$NLIST_SEARCH_BUFFER
three_NLIST_TEXT_OFFSET=$NLIST_TEXT_OFFSET
three_NLIST_IS_UNIQ_MODE=$NLIST_IS_UNIQ_MODE
three_NLIST_IS_F_MODE=$NLIST_IS_F_MODE
three_NLIST_GREP_STRING=$NLIST_GREP_STRING
three_NLIST_NONSELECTABLE_ELEMENTS=( ${NLIST_NONSELECTABLE_ELEMENTS[@]} )
three_NLIST_REMEMBER_STATE=$NLIST_REMEMBER_STATE
three_NLIST_ENABLED_EVENTS=( ${NLIST_ENABLED_EVENTS[@]} )
# ..and restore 1st list's state
NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$one_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
NLIST_CURRENT_IDX=$one_NLIST_CURRENT_IDX
NLIST_IS_SEARCH_MODE=$one_NLIST_IS_SEARCH_MODE
NLIST_SEARCH_BUFFER=$one_NLIST_SEARCH_BUFFER
NLIST_TEXT_OFFSET=$one_NLIST_TEXT_OFFSET
NLIST_IS_UNIQ_MODE=$one_NLIST_IS_UNIQ_MODE
NLIST_IS_F_MODE=$one_NLIST_IS_F_MODE
NLIST_GREP_STRING=$one_NLIST_GREP_STRING
NLIST_NONSELECTABLE_ELEMENTS=( ${one_NLIST_NONSELECTABLE_ELEMENTS[@]} )
NLIST_REMEMBER_STATE=$one_NLIST_REMEMBER_STATE
NLIST_ENABLED_EVENTS=( ${one_NLIST_ENABLED_EVENTS[@]} )
elif [ "$1" = "1" ]; then
# Switched to 2nd list, save 1st list's state
one_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
one_NLIST_CURRENT_IDX=$NLIST_CURRENT_IDX
one_NLIST_IS_SEARCH_MODE=$NLIST_IS_SEARCH_MODE
one_NLIST_SEARCH_BUFFER=$NLIST_SEARCH_BUFFER
one_NLIST_TEXT_OFFSET=$NLIST_TEXT_OFFSET
one_NLIST_IS_UNIQ_MODE=$NLIST_IS_UNIQ_MODE
one_NLIST_IS_F_MODE=$NLIST_IS_F_MODE
one_NLIST_GREP_STRING=$NLIST_GREP_STRING
one_NLIST_NONSELECTABLE_ELEMENTS=( ${NLIST_NONSELECTABLE_ELEMENTS[@]} )
one_NLIST_REMEMBER_STATE=$NLIST_REMEMBER_STATE
one_NLIST_ENABLED_EVENTS=( ${NLIST_ENABLED_EVENTS[@]} )
# ..and restore 2nd list's state
NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$two_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
NLIST_CURRENT_IDX=$two_NLIST_CURRENT_IDX
NLIST_IS_SEARCH_MODE=$two_NLIST_IS_SEARCH_MODE
NLIST_SEARCH_BUFFER=$two_NLIST_SEARCH_BUFFER
NLIST_TEXT_OFFSET=$two_NLIST_TEXT_OFFSET
NLIST_IS_UNIQ_MODE=$two_NLIST_IS_UNIQ_MODE
NLIST_IS_F_MODE=$two_NLIST_IS_F_MODE
NLIST_GREP_STRING=$two_NLIST_GREP_STRING
NLIST_NONSELECTABLE_ELEMENTS=( ${two_NLIST_NONSELECTABLE_ELEMENTS[@]} )
NLIST_REMEMBER_STATE=$two_NLIST_REMEMBER_STATE
NLIST_ENABLED_EVENTS=( ${two_NLIST_ENABLED_EVENTS[@]} )
elif [ "$1" = "2" ]; then
# Switched to 3rd list, save 2nd list's state
two_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
two_NLIST_CURRENT_IDX=$NLIST_CURRENT_IDX
two_NLIST_IS_SEARCH_MODE=$NLIST_IS_SEARCH_MODE
two_NLIST_SEARCH_BUFFER=$NLIST_SEARCH_BUFFER
two_NLIST_TEXT_OFFSET=$NLIST_TEXT_OFFSET
two_NLIST_IS_UNIQ_MODE=$NLIST_IS_UNIQ_MODE
two_NLIST_IS_F_MODE=$NLIST_IS_F_MODE
two_NLIST_GREP_STRING=$NLIST_GREP_STRING
two_NLIST_NONSELECTABLE_ELEMENTS=( ${NLIST_NONSELECTABLE_ELEMENTS[@]} )
two_NLIST_REMEMBER_STATE=$NLIST_REMEMBER_STATE
two_NLIST_ENABLED_EVENTS=( ${NLIST_ENABLED_EVENTS[@]} )
# ..and restore 3rd list's state
NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=$three_NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN
NLIST_CURRENT_IDX=$three_NLIST_CURRENT_IDX
NLIST_IS_SEARCH_MODE=$three_NLIST_IS_SEARCH_MODE
NLIST_SEARCH_BUFFER=$three_NLIST_SEARCH_BUFFER
NLIST_TEXT_OFFSET=$three_NLIST_TEXT_OFFSET
NLIST_IS_UNIQ_MODE=$three_NLIST_IS_UNIQ_MODE
NLIST_IS_F_MODE=$three_NLIST_IS_F_MODE
NLIST_GREP_STRING=$three_NLIST_GREP_STRING
NLIST_NONSELECTABLE_ELEMENTS=( ${three_NLIST_NONSELECTABLE_ELEMENTS[@]} )
NLIST_REMEMBER_STATE=$three_NLIST_REMEMBER_STATE
NLIST_ENABLED_EVENTS=( ${three_NLIST_ENABLED_EVENTS[@]} )
fi
}
local most_frequent_db="$HOME/.config/znt/mostfrequent.db"
_nhistory_generate_most_frequent() {
local title=$'\x1b[00;31m'"Most frequent history words:"$'\x1b[00;00m\0'
typeset -A uniq
for k in "${historywords[@]}"; do
uniq[$k]=$(( ${uniq[$k]:-0} + 1 ))
done
vk=()
for k v in ${(kv)uniq}; do
vk+="$v"$'\t'"$k"
done
print -rl -- "$title" "${(On)vk[@]}" > "$most_frequent_db"
}
# Load configuration
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-history.conf ] && builtin source ~/.config/znt/n-history.conf
local list
local selected
NLIST_REMEMBER_STATE=0
list=( "$history[@]" )
list=( "${(@M)list:#(#i)*$1*}" )
if [ "$#list" -eq 0 ]; then
echo "No matching history entries"
return 1
fi
local private_history_db="$HOME/.config/znt/privhist.db"
local NLIST_GREP_STRING="$1"
# 2 is: init once, then remember
local NLIST_REMEMBER_STATE=2
two_NLIST_REMEMBER_STATE=2
three_NLIST_REMEMBER_STATE=2
# Only Private history has EDIT
local -a NLIST_ENABLED_EVENTS
NLIST_ENABLED_EVENTS=( "F1" "HELP" )
two_NLIST_ENABLED_EVENTS=( "F1" "EDIT" "HELP" )
three_NLIST_ENABLED_EVENTS=( "F1" "HELP" )
# All view should attempt to replace new lines with \n
local NLIST_REPLACE_NEWLINES="1"
n-list "${list[@]}"
two_NLIST_REPLACE_NEWLINES="1"
three_NLIST_REPLACE_NEWLINES="1"
# Only second and third view has non-selectable first entry
local -a NLIST_NONSELECTABLE_ELEMENTS
NLIST_NONSELECTABLE_ELEMENTS=( )
two_NLIST_NONSELECTABLE_ELEMENTS=( 1 )
three_NLIST_NONSELECTABLE_ELEMENTS=( 1 )
while (( 1 )); do
#
# View 1 - history
#
if [ "$active_view" = "0" ]; then
list=( "$history[@]" )
list=( "${(@M)list:#(#i)*$NLIST_GREP_STRING*}" )
if [ "$#list" -eq 0 ]; then
echo "No matching history entries"
return 1
fi
n-list "${list[@]}"
# Selection or quit?
if [[ "$REPLY" = -(#c0,1)[0-9]## && ("$REPLY" -lt 0 || "$REPLY" -gt 0) ]]; then
break
fi
# View change?
if [ "$REPLY" = "F1" ]; then
# Target view: 2
active_view=1
_nhistory_switch_lists_states "1"
elif [ "$REPLY" = "HELP" ]; then
n-help
fi
#
# View 3 - most frequent words in history
#
elif [ "$active_view" = "2" ]; then
local -a dbfile
dbfile=( $most_frequent_db(Nm+1) )
# Compute most frequent history words
if [[ "${#NHISTORY_WORDS}" -eq "0" || "${#dbfile}" -ne "0" ]]; then
# Read the list if it's there
local -a list
list=()
[ -s "$most_frequent_db" ] && list=( ${(f)"$(<$most_frequent_db)"} )
# Will wait for the data?
local message=0
if [[ "${#list}" -eq 0 ]]; then
message=1
_nlist_alternate_screen 1
zcurses init
zcurses delwin info 2>/dev/null
zcurses addwin info "$term_height" "$term_width" 0 0
zcurses bg info white/black
zcurses string info "Computing most frequent history words..."$'\n'
zcurses string info "(This is done once per day, from now on transparently)"$'\n'
zcurses refresh info
sleep 3
fi
# Start periodic list regeneration?
if [[ "${#list}" -eq 0 || "${#dbfile}" -ne "0" ]]; then
# Mark the file with current time, to prevent double
# regeneration (on quick double change of view)
print >> "$most_frequent_db"
(_nhistory_generate_most_frequent &) &> /dev/null
fi
# Ensure we got the list, wait for it if needed
while [[ "${#list}" -eq 0 ]]; do
zcurses string info "."
zcurses refresh info
LANG=C sleep 0.5
[ -s "$most_frequent_db" ] && list=( ${(f)"$(<$most_frequent_db)"} )
done
NHISTORY_WORDS=( "${list[@]}" )
if [ "$message" -eq "1" ]; then
zcurses delwin info 2>/dev/null
zcurses refresh
zcurses end
_nlist_alternate_screen 0
fi
else
# Reuse most frequent history words
local -a list
list=( "${NHISTORY_WORDS[@]}" )
fi
n-list "${list[@]}"
if [ "$REPLY" = "F1" ]; then
# Target view: 1
active_view=0
_nhistory_switch_lists_states "0"
elif [[ "$REPLY" = -(#c0,1)[0-9]## && "$REPLY" -lt 0 ]]; then
break
elif [[ "$REPLY" = -(#c0,1)[0-9]## && "$REPLY" -gt 0 ]]; then
local word="${reply[REPLY]#(#s) #[0-9]##$'\t'}"
one_NLIST_SEARCH_BUFFER="$word"
one_NLIST_SEARCH_BUFFER="${one_NLIST_SEARCH_BUFFER## ##}"
# Target view: 1
active_view=0
_nhistory_switch_lists_states "0"
elif [ "$REPLY" = "HELP" ]; then
n-help
fi
#
# View 2 - private history
#
elif [ "$active_view" = "1" ]; then
if [ -s "$private_history_db" ]; then
local title=$'\x1b[00;32m'"Private history:"$'\x1b[00;00m\0'
() { fc -ap -R "$private_history_db"; list=( "$title" ${history[@]} ) }
else
list=( "Private history - history entries selected via this tool will be put here" )
fi
n-list "${list[@]}"
# Selection or quit?
if [[ "$REPLY" = -(#c0,1)[0-9]## && ("$REPLY" -lt 0 || "$REPLY" -gt 0) ]]; then
break
fi
# View change?
if [ "$REPLY" = "F1" ]; then
# Target view: 3
active_view=2
_nhistory_switch_lists_states "2"
# Edit of the history?
elif [ "$REPLY" = "EDIT" ]; then
"${EDITOR:-vim}" "$private_history_db"
elif [ "$REPLY" = "HELP" ]; then
n-help
fi
fi
done
if [ "$REPLY" -gt 0 ]; then
selected="$reply[REPLY]"
# ZLE?
if [ "${(t)CURSOR}" = "integer-local-special" ]; then
zle redisplay
zle kill-buffer
zle -U "$selected"
zle .redisplay
zle .kill-buffer
LBUFFER+="$selected"
# Append to private history
local newline=$'\n'
selected="${selected//$newline/\\$newline}"
[ "$active_view" = "0" ] && print -r -- "$selected" >> "$private_history_db"
else
print -zr "$selected"
print -zr -- "$selected"
fi
else
[ "${(t)CURSOR}" = "integer-local-special" ] && zle redisplay

View file

@ -13,8 +13,8 @@ zmodload zsh/curses
local IFS="
"
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-kill.conf ] && . ~/.config/znt/n-kill.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-kill.conf ] && builtin source ~/.config/znt/n-kill.conf
typeset -A signals
signals=(

View file

@ -29,7 +29,7 @@ _nlist_exit() {
setopt localoptions
setopt extendedglob
[[ "$REPLY" = -(#c0,1)[0-9]## ]] || REPLY="-1"
[[ "$REPLY" = -(#c0,1)[0-9]## || "$REPLY" = F<-> || "$REPLY" = "EDIT" || "$REPLY" = "HELP" ]] || REPLY="-1"
zcurses 2>/dev/null delwin inner
zcurses 2>/dev/null delwin main
zcurses 2>/dev/null refresh
@ -167,6 +167,26 @@ integer prev_uniq_mode=0
integer prev_start_idx=-1
local MBEGIN MEND MATCH mbegin mend match
# Iteration over predefined keywords
integer curkeyword nkeywords
local keywordisfresh="0"
if [[ "${(t)keywords}" != *array* ]]; then
local -a keywords
keywords=()
fi
curkeyword=0
nkeywords=${#keywords}
# Iteration over themes
integer curtheme nthemes
local themeisfresh="0"
if [[ "${(t)themes}" != *array* ]]; then
local -a themes
themes=()
fi
curtheme=0
nthemes=${#themes}
# Ability to remember the list between calls
if [[ -z "$NLIST_REMEMBER_STATE" || "$NLIST_REMEMBER_STATE" -eq 0 || "$NLIST_REMEMBER_STATE" -eq 2 ]]; then
NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN=1
@ -175,6 +195,7 @@ if [[ -z "$NLIST_REMEMBER_STATE" || "$NLIST_REMEMBER_STATE" -eq 0 || "$NLIST_REM
NLIST_SEARCH_BUFFER=""
NLIST_TEXT_OFFSET=0
NLIST_IS_UNIQ_MODE=0
NLIST_IS_F_MODE=0
# Zero - because it isn't known, unless we
# confirm that first element is selectable
@ -207,12 +228,19 @@ zcurses delwin main 2>/dev/null
zcurses delwin inner 2>/dev/null
zcurses addwin main "$term_height" "$term_width" 0 0
zcurses addwin inner "$inner_height" "$inner_width" 1 2
zcurses bg main white/black
zcurses bg inner white/black
# From n-list.conf
[ "$colorpair" = "" ] && colorpair="white/black"
[ "$border" = "0" ] || border="1"
local background="${colorpair#*/}"
local backuptheme="$colorpair/$bold"
zcurses bg main "$colorpair"
zcurses bg inner "$colorpair"
if [ "$NLIST_IS_SEARCH_MODE" -ne 1 ]; then
_nlist_cursor_visibility 0
fi
zcurses refresh
#
# Listening for input
#
@ -237,9 +265,12 @@ while (( 1 )); do
# Do searching (filtering with string)
if [ -n "$NLIST_SEARCH_BUFFER" ]; then
# Compute new list?
if [[ "$NLIST_SEARCH_BUFFER" != "$prev_search_buffer" || "$NLIST_IS_UNIQ_MODE" -ne "$prev_uniq_mode" ]]; then
if [[ "$NLIST_SEARCH_BUFFER" != "$prev_search_buffer" || "$NLIST_IS_UNIQ_MODE" -ne "$prev_uniq_mode"
|| "$NLIST_IS_F_MODE" -ne "$prev_f_mode" ]]
then
prev_search_buffer="$NLIST_SEARCH_BUFFER"
prev_uniq_mode="$NLIST_IS_UNIQ_MODE"
prev_f_mode="$NLIST_IS_F_MODE"
# regenerating list -> regenerating disp_list
prev_start_idx=-1
@ -251,7 +282,9 @@ while (( 1 )); do
# Remove non-selectable elements
[ "$#NLIST_NONSELECTABLE_ELEMENTS" -gt 0 ] && for i in "${(nO)NLIST_NONSELECTABLE_ELEMENTS[@]}"; do
list[$i]=()
if [[ "$i" = <-> ]]; then
list[$i]=()
fi
done
# Remove duplicates
@ -266,13 +299,22 @@ while (( 1 )); do
local search_pattern=""
local colsearch_pattern=""
if [ -n "$search_buffer" ]; then
# Patterns will be *foo*~^*bar* and (foo|bar)
search_pattern="${search_buffer// ##/*~^*}"
colsearch_pattern="${search_buffer// ##/|}"
# The repeat will make the matching work on a fresh heap
repeat 1; do
list=( "${(@M)list:#(#i)*$~search_pattern*}" )
if [ "$NLIST_IS_F_MODE" -eq "1" ]; then
search_pattern="${search_buffer// ##/*~^(#a1)*}"
colsearch_pattern="${search_buffer// ##/|(#a1)}"
list=( "${(@M)list:#(#ia1)*$~search_pattern*}" )
elif [ "$NLIST_IS_F_MODE" -eq "2" ]; then
search_pattern="${search_buffer// ##/*~^(#a2)*}"
colsearch_pattern="${search_buffer// ##/|(#a2)}"
list=( "${(@M)list:#(#ia2)*$~search_pattern*}" )
else
# Patterns will be *foo*~^*bar* and (foo|bar)
search_pattern="${search_buffer// ##/*~^*}"
colsearch_pattern="${search_buffer// ##/|}"
list=( "${(@M)list:#(#i)*$~search_pattern*}" )
fi
done
last_element="$#list"
@ -295,7 +337,13 @@ while (( 1 )); do
local red=$'\x1b[00;31m' reset=$'\x1b[00;00m'
# The repeat will make the matching work on a fresh heap
repeat 1; do
disp_list=( "${(@)disp_list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" )
if [ "$NLIST_IS_F_MODE" -eq "1" ]; then
disp_list=( "${(@)disp_list//(#mia1)($~colsearch_pattern)/$red${MATCH}$reset}" )
elif [ "$NLIST_IS_F_MODE" -eq "2" ]; then
disp_list=( "${(@)disp_list//(#mia2)($~colsearch_pattern)/$red${MATCH}$reset}" )
else
disp_list=( "${(@)disp_list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" )
fi
done
fi
@ -304,6 +352,7 @@ while (( 1 )); do
fi
# Output colored list
zcurses clear inner
n-list-draw "$(( (NLIST_CURRENT_IDX-1) % page_height + 1 ))" \
"$page_height" "$page_width" 0 0 "$NLIST_TEXT_OFFSET" inner \
"$disp_list[@]"
@ -327,7 +376,9 @@ while (( 1 )); do
# Remove non-selectable elements only when in uniq mode
[ "$NLIST_IS_UNIQ_MODE" -eq 1 ] && [ "$#NLIST_NONSELECTABLE_ELEMENTS" -gt 0 ] &&
for i in "${(nO)NLIST_NONSELECTABLE_ELEMENTS[@]}"; do
list[$i]=()
if [[ "$i" = <-> ]]; then
list[$i]=()
fi
done
# Remove duplicates when in uniq mode
@ -355,29 +406,49 @@ while (( 1 )); do
fi
# Output the list
zcurses clear inner
n-list-draw "$(( (NLIST_CURRENT_IDX-1) % page_height + 1 ))" \
"$page_height" "$page_width" 0 0 "$NLIST_TEXT_OFFSET" inner \
"$disp_list[@]"
fi
local status_msg_strlen
if [ "$NLIST_IS_SEARCH_MODE" = "1" ]; then
local _txt2=""
[ "$NLIST_IS_UNIQ_MODE" -eq 1 ] && _txt2="[-UNIQ-] "
_nlist_status_msg "${_txt2}Filtering with: ${NLIST_SEARCH_BUFFER// /+}"
elif [[ ${NLIST_NONSELECTABLE_ELEMENTS[(r)$NLIST_CURRENT_IDX]} != $NLIST_CURRENT_IDX ||
-n "$NLIST_SEARCH_BUFFER" || "$NLIST_IS_UNIQ_MODE" -eq 1 ]]; then
local _txt="" _txt2=""
[ -n "$NLIST_GREP_STRING" ] && _txt=" [$NLIST_GREP_STRING]"
[ "$NLIST_IS_UNIQ_MODE" -eq 1 ] && _txt2="[-UNIQ-] "
_nlist_status_msg "${_txt2}Current #$NLIST_USER_CURRENT_IDX (of #$NLIST_USER_LAST_ELEMENT entries)$_txt"
else
_nlist_status_msg ""
local keywordmsg=""
if [ "$keywordisfresh" = "1" ]; then
keywordmsg="($curkeyword/$nkeywords) "
keywordisfresh="0"
fi
zcurses border main
local thememsg=""
if [ "$themeisfresh" = "1" ]; then
local theme="$backuptheme"
[ "$curtheme" -gt 0 ] && theme="${themes[curtheme]}"
thememsg="($curtheme/$nthemes $theme) "
themeisfresh="0"
fi
local top_msg="${(C)ZSH_NAME} $ZSH_VERSION, shell level $SHLVL, $USER"
local _txt2="" _txt3=""
[ "$NLIST_IS_UNIQ_MODE" -eq 1 ] && _txt2="[-UNIQ-] "
[ "$NLIST_IS_F_MODE" -eq 1 ] && _txt3="[-FIX-] "
[ "$NLIST_IS_F_MODE" -eq 2 ] && _txt3="[-FIX2-] "
if [ "$NLIST_IS_SEARCH_MODE" = "1" ]; then
_nlist_status_msg "${_txt2}${_txt3}${keywordmsg}${thememsg}Filtering with: ${NLIST_SEARCH_BUFFER// /+}"
elif [[ ${NLIST_NONSELECTABLE_ELEMENTS[(r)$NLIST_CURRENT_IDX]} != $NLIST_CURRENT_IDX ||
-n "$NLIST_SEARCH_BUFFER" || "$NLIST_IS_UNIQ_MODE" -eq 1 ]]; then
local _txt=""
[ -n "$NLIST_GREP_STRING" ] && _txt=" [$NLIST_GREP_STRING]"
_nlist_status_msg "${_txt2}${_txt3}${keywordmsg}${thememsg}Current #$NLIST_USER_CURRENT_IDX (of #$NLIST_USER_LAST_ELEMENT entries)$_txt"
else
_nlist_status_msg "${keywordmsg}${thememsg}"
fi
[ "$border" = "1" ] && zcurses border main
local top_msg=" ${(C)ZSH_NAME} $ZSH_VERSION, shell level $SHLVL "
if [[ "${NLIST_ENABLED_EVENTS[(r)F1]}" = "F1" ]]; then
top_msg=" F1-change view,$top_msg"
fi
zcurses move main 0 $(( term_width / 2 - $#top_msg / 2 ))
zcurses string main $top_msg
@ -400,7 +471,7 @@ while (( 1 )); do
n-list-input "$NLIST_CURRENT_IDX" "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" \
"$page_height" "$page_width" "$last_element" "$NLIST_TEXT_OFFSET" \
"$final_key" "$NLIST_IS_SEARCH_MODE" "$NLIST_SEARCH_BUFFER" \
"$NLIST_IS_UNIQ_MODE"
"$NLIST_IS_UNIQ_MODE" "$NLIST_IS_F_MODE"
selection="$reply[1]"
action="$reply[2]"
@ -410,8 +481,11 @@ while (( 1 )); do
NLIST_IS_SEARCH_MODE="$reply[6]"
NLIST_SEARCH_BUFFER="$reply[7]"
NLIST_IS_UNIQ_MODE="$reply[8]"
NLIST_IS_F_MODE="$reply[9]"
if [ "$action" = "SELECT" ]; then
if [ -z "$action" ]; then
continue
elif [ "$action" = "SELECT" ]; then
REPLY="$selection"
reply=( "$list[@]" )
break
@ -422,6 +496,18 @@ while (( 1 )); do
elif [ "$action" = "REDRAW" ]; then
zcurses clear main redraw
zcurses clear inner redraw
elif [[ "$action" = F<-> ]]; then
REPLY="$action"
reply=( "$list[@]" )
break
elif [[ "$action" = "EDIT" ]]; then
REPLY="EDIT"
reply=( "$list[@]" )
break
elif [[ "$action" = "HELP" ]]; then
REPLY="HELP"
reply=( "$list[@]" )
break
fi
done

View file

@ -79,9 +79,9 @@ _nlist_print_with_ansi() {
if (( no_match == 0 )); then
if (( col >= 30 && col <= 37 )); then
zcurses attr "$win" $c[col-29]/black
zcurses attr "$win" $c[col-29]/"$background"
elif [[ "$col" -eq 0 ]]; then
zcurses attr "$win" white/black
zcurses attr "$win" "$colorpair"
fi
fi
done
@ -97,17 +97,19 @@ local win="$7"
shift 7
integer max_text_len=page_width-x_offset
[ "$bold" = "0" ] && bold="" || bold="+bold"
[[ "$bold" = "0" || "$bold" = "-bold" ]] && bold="-bold" || bold="+bold"
[[ "$active_text" = "underline" || "$active_text" = "reverse" ]] || local active_text="reverse"
# With Linux terminal underline won't work properly
[ "$TERM" = "linux" ] && active_text="reverse"
# Linux has ncv 18, screen* has ncv 3 - underline won't work properly
(( ${terminfo[ncv]:-0} & 2 )) && active_text="reverse"
# FreeBSD uses TERM=xterm for newcons but doesn't actually support underline
[[ "$TERM" = "xterm" && -z "$DISPLAY" ]] && active_text="reverse"
integer max_idx=page_height
integer end_idx=max_idx
[ "$end_idx" -gt "$#" ] && end_idx="$#"
integer y=y_offset
zcurses attr "$win" $bold white/black
zcurses attr "$win" "$bold" "$colorpair"
integer i text_len
local text

View file

@ -14,6 +14,52 @@ _nlist_compute_first_to_show_idx() {
from_what_idx_list_is_shown=0+((current_idx-1)/page_height)*page_height+1
}
_nlist_update_from_keywords() {
keywordisfresh="1"
if [ "$nkeywords" -gt 0 ]; then
curkeyword=$(( (curkeyword+1) % (nkeywords+1) ))
if [ "$curkeyword" -eq "0" ]; then
buffer=""
else
buffer="${keywords[curkeyword]}"
fi
fi
}
_nlist_iterate_theme() {
themeisfresh="1"
if [ "$1" = "1" ]; then
curtheme=$(( (curtheme+1) % (nthemes+1) ))
else
curtheme=curtheme-1
[ "$curtheme" -lt 0 ] && curtheme=nthemes
fi
if [ "$nthemes" -gt 0 ]; then
local theme=${themes[curtheme]}
[ "$curtheme" -eq "0" ] && theme="$backuptheme"
colorpair="${theme%/*}"
bold="${theme##*/}"
background="${colorpair#*/}"
zcurses bg main "$colorpair"
zcurses bg inner "$colorpair"
fi
}
_nlist_rotate_buffer() {
setopt localoptions noglob
local -a words
words=( ${(s: :)buffer} )
words=( ${words[-1]} ${words[1,-2]} )
local space=""
[ "${buffer[-1]}" = " " ] && space=" "
buffer="${(j: :)words}$space"
}
typeset -ga reply
reply=( -1 '' )
integer current_idx="$1"
@ -26,6 +72,7 @@ local key="$7"
integer search="$8"
local buffer="$9"
integer uniq_mode="$10"
integer f_mode="$11"
#
# Listening for input
@ -79,21 +126,36 @@ case "$key" in
${NLIST_NONSELECTABLE_ELEMENTS[(r)$current_idx]} != $current_idx ]]
then
# Save current element in the result variable
reply=( $current_idx SELECT )
reply=( $current_idx "SELECT" )
fi
;;
(H|'?')
# This event needs to be enabled
if [[ "${NLIST_ENABLED_EVENTS[(r)HELP]}" = "HELP" ]]; then
reply=( -1 "HELP" )
fi
;;
(F1)
# This event needs to be enabled
if [[ "${NLIST_ENABLED_EVENTS[(r)F1]}" = "F1" ]]; then
reply=( -1 "$key" )
fi
;;
(F4|F5|F6|F7|F8|F9|F10|DC)
# ignore; F2, F3 are used below
;;
(q)
reply=( -1 QUIT )
reply=( -1 "QUIT" )
;;
(/)
search=1
_nlist_cursor_visibility 1
;;
($'\t')
reply=( $current_idx LEAVE )
reply=( $current_idx "LEAVE" )
;;
($'\C-L')
reply=( -1 REDRAW )
reply=( -1 "REDRAW" )
;;
(\])
[[ "${(t)NLIST_HOP_INDEXES}" = "array" || "${(t)NLIST_HOP_INDEXES}" = "array-local" ]] &&
@ -127,9 +189,41 @@ case "$key" in
($'\E')
buffer=""
;;
(F3)
if [ "$search" = "1" ]; then
search=0
_nlist_cursor_visibility 0
else
search=1
_nlist_cursor_visibility 1
fi
;;
(o|$'\C-O')
uniq_mode=1-uniq_mode
;;
(f|$'\C-F')
(( f_mode=(f_mode+1) % 3 ))
;;
($'\x1F'|F2|$'\C-X')
search=1
_nlist_cursor_visibility 1
_nlist_update_from_keywords
;;
($'\C-T')
_nlist_iterate_theme 1
;;
($'\C-G')
_nlist_iterate_theme 0
;;
($'\C-E'|e)
# This event needs to be enabled
if [[ "${NLIST_ENABLED_EVENTS[(r)EDIT]}" = "EDIT" ]]; then
reply=( -1 "EDIT" )
fi
;;
($'\C-A')
_nlist_rotate_buffer
;;
(*)
;;
esac
@ -138,11 +232,19 @@ else
case "$key" in
($'\n'|ENTER)
search=0
_nlist_cursor_visibility 0
if [ "$NLIST_INSTANT_SELECT" = "1" ]; then
if [[ "$NLIST_SEARCH_BUFFER" != "" || "$NLIST_IS_UNIQ_MODE" -eq 1 ||
${NLIST_NONSELECTABLE_ELEMENTS[(r)$current_idx]} != $current_idx ]]
then
reply=( $current_idx "SELECT" )
fi
else
search=0
_nlist_cursor_visibility 0
fi
;;
($'\C-L')
reply=( -1 REDRAW )
reply=( -1 "REDRAW" )
;;
#
@ -192,8 +294,14 @@ case "$key" in
(RIGHT)
hscroll+=7
;;
(F1|F2|F3|F4|F5|F6|F7|F8|F9|F10)
# ignore
(F1)
# This event needs to be enabled
if [[ "${NLIST_ENABLED_EVENTS[(r)F1]}" = "F1" ]]; then
reply=( -1 "$key" )
fi
;;
(F4|F5|F6|F7|F8|F9|F10|DC)
# ignore; F2, F3 are used below
;;
#
@ -214,9 +322,39 @@ case "$key" in
search=0
_nlist_cursor_visibility 0
;;
(F3)
if [ "$search" = "1" ]; then
search=0
_nlist_cursor_visibility 0
else
search=1
_nlist_cursor_visibility 1
fi
;;
($'\C-O')
uniq_mode=1-uniq_mode
;;
($'\C-F')
(( f_mode=(f_mode+1) % 3 ))
;;
($'\x1F'|F2|$'\C-X')
_nlist_update_from_keywords
;;
($'\C-T')
_nlist_iterate_theme 1
;;
($'\C-G')
_nlist_iterate_theme 0
;;
($'\C-E')
# This event needs to be enabled
if [[ "${NLIST_ENABLED_EVENTS[(r)EDIT]}" = "EDIT" ]]; then
reply=( -1 "EDIT" )
fi
;;
($'\C-A')
_nlist_rotate_buffer
;;
(*)
if [[ $#key == 1 && $((#key)) -lt 31 ]]; then
# ignore all other control keys
@ -234,5 +372,6 @@ reply[5]="$hscroll"
reply[6]="$search"
reply[7]="$buffer"
reply[8]="$uniq_mode"
reply[9]="$f_mode"
# vim: set filetype=zsh:

View file

@ -14,8 +14,8 @@ local IFS="
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-options.conf ] && . ~/.config/znt/n-options.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-options.conf ] && builtin source ~/.config/znt/n-options.conf
# TODO restore options
unsetopt localoptions

View file

@ -17,8 +17,8 @@ local IFS="
unset NLIST_COLORING_PATTERN
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-panelize.conf ] && . ~/.config/znt/n-panelize.conf
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf
[ -f ~/.config/znt/n-panelize.conf ] && builtin source ~/.config/znt/n-panelize.conf
local list
local selected

View file

@ -4,6 +4,14 @@ local NLIST_START_IN_UNIQ_MODE=1
# Only if current $BUFFER doesn't come from history
if [ "$HISTCMD" = "$HISTNO" ]; then
() {
setopt localoptions extendedglob
local -a match mbegin mend
local MATCH; integer MBEGIN MEND
[ -n "$BUFFER" ] && BUFFER="${BUFFER%% ##} "
}
local NLIST_SET_SEARCH_TO="$BUFFER"
fi

View file

@ -15,24 +15,36 @@ if ! test -d "$CONFIG_DIR"; then
mkdir "$CONFIG_DIR"
fi
# 9 files
set n-aliases.conf n-env.conf n-history.conf n-list.conf n-panelize.conf n-cd.conf n-functions.conf n-kill.conf n-options.conf
for i; do
if ! test -f "$CONFIG_DIR/$i"; then
cp "$REPO_DIR/.config/znt/$i" "$CONFIG_DIR"
fi
done
# Check for random 2 files if they exist
# This will shift 0 - 7 elements
shift $(( RANDOM % 8 ))
if ! test -f "$CONFIG_DIR/$1" || ! test -f "$CONFIG_DIR/$2"; then
# Something changed - examine every file
set n-aliases.conf n-env.conf n-history.conf n-list.conf n-panelize.conf n-cd.conf n-functions.conf n-kill.conf n-options.conf
for i; do
if ! test -f "$CONFIG_DIR/$i"; then
cp "$REPO_DIR/.config/znt/$i" "$CONFIG_DIR"
fi
done
fi
# Don't leave positional parameters being set
set --
#
# Load functions
#
autoload n-aliases n-cd n-env n-functions n-history n-kill n-list n-list-draw n-list-input n-options n-panelize
autoload n-aliases n-cd n-env n-functions n-history n-kill n-list n-list-draw n-list-input n-options n-panelize n-help
autoload znt-usetty-wrapper znt-history-widget znt-cd-widget znt-kill-widget
alias naliases=n-aliases ncd=n-cd nenv=n-env nfunctions=n-functions nhistory=n-history
alias nkill=n-kill noptions=n-options npanelize=n-panelize
alias nkill=n-kill noptions=n-options npanelize=n-panelize nhelp=n-help
zle -N znt-history-widget
bindkey '^R' znt-history-widget
setopt AUTO_PUSHD HIST_IGNORE_DUPS PUSHD_IGNORE_DUPS
zstyle ':completion::complete:n-kill::bits' matcher 'r:|=** l:|=*'

View file

@ -58,7 +58,7 @@ plugins=(git)
# User configuration
export PATH=$HOME/bin:/usr/local/bin:$PATH
# export PATH="/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
# export MANPATH="/usr/local/man:$MANPATH"
source $ZSH/oh-my-zsh.sh

View file

@ -128,6 +128,7 @@ prompt_git() {
}
prompt_hg() {
(( $+commands[hg] )) || return
local rev status
if $(hg id >/dev/null 2>&1); then
if $(hg prompt >/dev/null 2>&1); then

Some files were not shown because too many files have changed in this diff Show more