summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/adb/_adb39
-rw-r--r--plugins/aws/aws.plugin.zsh15
-rw-r--r--plugins/bbedit/README.md20
-rw-r--r--plugins/bbedit/bbedit.plugin.zsh21
-rw-r--r--plugins/brew/_brew1
-rw-r--r--plugins/composer/composer.plugin.zsh4
-rw-r--r--plugins/gem/_gem2
-rw-r--r--plugins/git-prompt/gitstatus.py2
-rw-r--r--plugins/git/git.plugin.zsh4
-rw-r--r--plugins/jira/jira.plugin.zsh41
-rw-r--r--plugins/marked2/README.md13
-rw-r--r--plugins/marked2/marked2.plugin.zsh12
-rw-r--r--plugins/pass/_pass33
-rw-r--r--plugins/symfony2/symfony2.plugin.zsh25
-rw-r--r--plugins/textastic/README.md15
-rw-r--r--plugins/textastic/textastic.plugin.zsh17
-rw-r--r--plugins/tmuxinator/_tmuxinator6
-rw-r--r--plugins/wd/LICENSE21
-rw-r--r--plugins/wd/README.md26
-rw-r--r--plugins/wd/_wd.sh15
-rw-r--r--plugins/wd/wd.plugin.zsh4
-rwxr-xr-xplugins/wd/wd.sh159
-rw-r--r--plugins/zsh_reload/zsh_reload.plugin.zsh5
23 files changed, 380 insertions, 120 deletions
diff --git a/plugins/adb/_adb b/plugins/adb/_adb
new file mode 100644
index 000000000..4c998172d
--- /dev/null
+++ b/plugins/adb/_adb
@@ -0,0 +1,39 @@
+#compdef adb
+#autoload
+
+# in order to make this work, you will need to have the android adb tools
+
+# adb zsh completion, based on homebrew completion
+
+local -a _1st_arguments
+_1st_arguments=(
+'bugreport:return all information from the device that should be included in a bug report.'
+'connect:connect to a device via TCP/IP Port 5555 is default.'
+'devices:list all connected devices'
+'disconnect:disconnect from a TCP/IP device. Port 5555 is default.'
+'emu:run emulator console command'
+'forward:forward socket connections'
+'help:show the help message'
+'install:push this package file to the device and install it'
+'jdwp:list PIDs of processes hosting a JDWP transport'
+'logcat:View device log'
+'pull:copy file/dir from device'
+'push:copy file/dir to device'
+'shell:run remote shell interactively'
+'sync:copy host->device only if changed (-l means list but dont copy)'
+'uninstall:remove this app package from the device'
+'version:show version num'
+)
+
+local expl
+local -a pkgs installed_pkgs
+
+_arguments \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "adb subcommand" _1st_arguments
+ return
+fi
+
+_files
diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
index 3f7fb1995..8b57d7db1 100644
--- a/plugins/aws/aws.plugin.zsh
+++ b/plugins/aws/aws.plugin.zsh
@@ -1,3 +1,11 @@
+_homebrew-installed() {
+ type brew &> /dev/null
+}
+
+_awscli-homebrew-installed() {
+ brew --prefix awscli &> /dev/null
+}
+
export AWS_HOME=~/.aws
function agp {
@@ -14,4 +22,9 @@ function aws_profiles {
}
compctl -K aws_profiles asp
-source `which aws_zsh_completer.sh`
+
+if _homebrew-installed && _awscli-homebrew-installed ; then
+ source $(brew --prefix)/opt/awscli/libexec/bin/aws_zsh_completer.sh
+else
+ source `which aws_zsh_completer.sh`
+fi
diff --git a/plugins/bbedit/README.md b/plugins/bbedit/README.md
new file mode 100644
index 000000000..ec2b743d6
--- /dev/null
+++ b/plugins/bbedit/README.md
@@ -0,0 +1,20 @@
+## bbedit
+
+Plugin for BBEdit, an HTML and text editor for Mac OS X
+
+### Requirements
+
+ * [BBEdit](http://www.barebones.com/products/bbedit/)
+ * [BBEdit Command-Line Tools](http://www.barebones.com/support/bbedit/cmd-line-tools.html)
+
+### Usage
+
+ * If the `bb` command is called without an argument, launch BBEdit
+
+ * If `bb` is passed a directory, cd to it and open it in BBEdit
+
+ * If `bb` is passed a file, open it in BBEdit
+
+ * If `bbpb` create a new BBEdit document with the contents of the clipboard
+
+ * If `bbd` alias for BBEdit diff tool
diff --git a/plugins/bbedit/bbedit.plugin.zsh b/plugins/bbedit/bbedit.plugin.zsh
new file mode 100644
index 000000000..fe9e72c65
--- /dev/null
+++ b/plugins/bbedit/bbedit.plugin.zsh
@@ -0,0 +1,21 @@
+alias bbpb='pbpaste | bbedit --clean --view-top'
+
+alias bbd=bbdiff
+
+#
+# If the bb command is called without an argument, launch BBEdit
+# If bb is passed a directory, cd to it and open it in BBEdit
+# If bb is passed a file, open it in BBEdit
+#
+function bb() {
+ if [[ -z "$1" ]]
+ then
+ bbedit --launch
+ else
+ bbedit "$1"
+ if [[ -d "$1" ]]
+ then
+ cd "$1"
+ fi
+ fi
+}
diff --git a/plugins/brew/_brew b/plugins/brew/_brew
index 9eb3bb557..40442a1d3 100644
--- a/plugins/brew/_brew
+++ b/plugins/brew/_brew
@@ -50,6 +50,7 @@ _1st_arguments=(
'server:start a local web app that lets you browse formulae (requires Sinatra)'
'services:small wrapper around `launchctl` for supported formulae'
'tap:tap a new formula repository from GitHub, or list existing taps'
+ 'uninstall:uninstall a formula'
'unlink:unlink a formula'
'unpin:unpin specified formulae'
'untap:remove a tapped repository'
diff --git a/plugins/composer/composer.plugin.zsh b/plugins/composer/composer.plugin.zsh
index 86f2ca4df..2243dd3c1 100644
--- a/plugins/composer/composer.plugin.zsh
+++ b/plugins/composer/composer.plugin.zsh
@@ -47,5 +47,5 @@ alias cdu='composer dump-autoload'
# install composer in the current directory
alias cget='curl -s https://getcomposer.org/installer | php'
-# Add Composer's global binaries to PATH
-export PATH=$PATH:~/.composer/vendor/bin
+# Add Composer's global & local binaries to PATH
+export PATH=$PATH:~/.composer/vendor/bin:./bin
diff --git a/plugins/gem/_gem b/plugins/gem/_gem
index 25967f1e7..92feebe95 100644
--- a/plugins/gem/_gem
+++ b/plugins/gem/_gem
@@ -59,6 +59,8 @@ case "$words[1]" in
build)
_files -g "*.gemspec"
;;
+ install)
+ _files ;;
list)
if [[ "$state" == forms ]]; then
_gem_installed
diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py
index c665a9ee1..256841432 100644
--- a/plugins/git-prompt/gitstatus.py
+++ b/plugins/git-prompt/gitstatus.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from subprocess import Popen, PIPE
import re
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index cef7926db..e2e54ffb6 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -7,6 +7,8 @@ alias gd='git diff'
compdef _git gd=git-diff
alias gdc='git diff --cached'
compdef _git gdc=git-diff
+alias gdt='git diff-tree --no-commit-id --name-only -r'
+compdef _git gdc=git diff-tree --no-commit-id --name-only -r
alias gl='git pull'
compdef _git gl=git-pull
alias gup='git pull --rebase'
@@ -109,12 +111,14 @@ alias gsd='git svn dcommit'
# Usage example: git pull origin $(current_branch)
#
function current_branch() {
+ if [ ! -d .git ]; then return; fi
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
echo ${ref#refs/heads/}
}
function current_repository() {
+ if [ ! -d .git ]; then return; fi
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
echo $(git remote -v | cut -d':' -f 2)
diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
index 3d510e430..a6d08410f 100644
--- a/plugins/jira/jira.plugin.zsh
+++ b/plugins/jira/jira.plugin.zsh
@@ -26,7 +26,7 @@ open_jira_issue () {
jira_url=$JIRA_URL
else
echo "JIRA url is not specified anywhere."
- return 0
+ return 1
fi
if [ -f .jira-prefix ]; then
@@ -39,7 +39,9 @@ open_jira_issue () {
if [ -z "$1" ]; then
echo "Opening new issue"
- $open_cmd "$jira_url/secure/CreateIssue!default.jspa"
+ $open_cmd "${jira_url}/secure/CreateIssue!default.jspa"
+ elif [[ "$1" = "assigned" || "$1" = "reported" ]]; then
+ jira_query $@
else
echo "Opening issue #$1"
if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
@@ -50,4 +52,39 @@ open_jira_issue () {
fi
}
+jira_name () {
+ if [[ -z "$1" ]]; then
+ if [[ "x${JIRA_NAME}" != "x" ]]; then
+ jira_name=${JIRA_NAME}
+ else
+ echo "JIRA_NAME not specified"
+ return 1
+ fi
+ else
+ jira_name=$@
+ fi
+}
+
+jira_query () {
+ verb="$1"
+ if [[ "${verb}" = "reported" ]]; then
+ lookup=reporter
+ preposition=by
+ elif [[ "${verb}" = "assigned" ]]; then
+ lookup=assignee
+ preposition=to
+ else
+ echo "not a valid lookup $verb"
+ return 1
+ fi
+ shift 1
+ jira_name $@
+ if [[ $? = 1 ]]; then
+ return 1
+ fi
+ echo "Browsing issues ${verb} ${preposition} ${jira_name}"
+ $open_cmd "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
+}
+
alias jira='open_jira_issue'
+
diff --git a/plugins/marked2/README.md b/plugins/marked2/README.md
new file mode 100644
index 000000000..101343abb
--- /dev/null
+++ b/plugins/marked2/README.md
@@ -0,0 +1,13 @@
+## marked2
+
+Plugin for Marked 2, a previewer for Markdown files on Mac OS X
+
+### Requirements
+
+ * [Marked 2](http://marked2app.com)
+
+### Usage
+
+ * If `marked` is called without an argument, open Marked
+
+ * If `marked` is passed a file, open it in Marked
diff --git a/plugins/marked2/marked2.plugin.zsh b/plugins/marked2/marked2.plugin.zsh
new file mode 100644
index 000000000..56863ade5
--- /dev/null
+++ b/plugins/marked2/marked2.plugin.zsh
@@ -0,0 +1,12 @@
+#
+# If marked is called without an argument, open Marked
+# If marked is passed a file, open it in Marked
+#
+function marked() {
+ if [ "$1" ]
+ then
+ open -a "marked 2.app" "$1"
+ else
+ open -a "marked 2.app"
+ fi
+}
diff --git a/plugins/pass/_pass b/plugins/pass/_pass
index d8ec38828..7a9b1f955 100644
--- a/plugins/pass/_pass
+++ b/plugins/pass/_pass
@@ -1,13 +1,16 @@
#compdef pass
#autoload
-# Copyright (C) 2012:
+# Copyright (C) 2012 - 2014:
# Johan Venant <jvenant@invicem.pro>
# Brian Mattern <rephorm@rephorm.com>
# Jason A. Donenfeld <Jason@zx2c4.com>.
-# Santiago Borrazás <sanbor@gmail.com>
# All Rights Reserved.
-# This file is licensed under the GPLv2+. Please see COPYING for more information.
+#
+# This file is licensed under the GPLv2+.
+# Please visit http://git.zx2c4.com/password-store/tree/COPYING for more information.
+#
+# Oh my zsh plugin maintainer: Santiago Borrazás <sanbor@gmail.com>
_pass () {
@@ -23,8 +26,8 @@ _pass () {
case "${cmd}" in
init)
_arguments : \
- "-r[re-encrypt existing passwords]" \
- "--reencrypt[re-encrypt existing passwords]"
+ "-p[gpg-id will only be applied to this subfolder]" \
+ "--path[gpg-id will only be applied to this subfolder]"
_pass_complete_keys
;;
ls|list|edit)
@@ -43,9 +46,19 @@ _pass () {
"-n[don't include symbols in password]" \
"--no-symbols[don't include symbols in password]" \
"-c[copy password to the clipboard]" \
- "--clip[copy password to the clipboard]"
+ "--clip[copy password to the clipboard]" \
+ "-f[force overwrite]" \
+ "--force[force overwrite]" \
+ "-i[replace first line]" \
+ "--in-place[replace first line]"
_pass_complete_entries_with_subdirs
;;
+ cp|copy|mv|rename)
+ _arguments : \
+ "-f[force rename]" \
+ "--force[force rename]"
+ _pass_complete_entries_with_subdirs
+ ;;
rm)
_arguments : \
"-f[force deletion]" \
@@ -75,10 +88,14 @@ _pass () {
subcommands=(
"init:Initialize new password storage"
"ls:List passwords"
+ "find:Find password files or directories based on pattern"
+ "grep:Search inside decrypted password files for matching pattern"
"show:Decrypt and print a password"
"insert:Insert a new password"
"generate:Generate a new password using pwgen"
"edit:Edit a password with \$EDITOR"
+ "mv:Rename the password"
+ "cp:Copy the password"
"rm:Remove the password"
"git:Call git on the password store"
"version:Output version information"
@@ -101,7 +118,7 @@ _pass_cmd_show () {
_pass_complete_entries_helper () {
local IFS=$'\n'
local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- _values -C 'passwords' $(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
+ _values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' | sort):-""}
}
_pass_complete_entries_with_subdirs () {
@@ -117,3 +134,5 @@ _pass_complete_keys () {
# Extract names and email addresses from gpg --list-keys
_values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')
}
+
+_pass
diff --git a/plugins/symfony2/symfony2.plugin.zsh b/plugins/symfony2/symfony2.plugin.zsh
index 1d5177e6d..c8c102eee 100644
--- a/plugins/symfony2/symfony2.plugin.zsh
+++ b/plugins/symfony2/symfony2.plugin.zsh
@@ -1,23 +1,24 @@
# Symfony2 basic command completion
+_symfony_console () {
+ echo "php $(find . -maxdepth 2 -mindepth 1 -name 'console')"
+}
+
_symfony2_get_command_list () {
- php $(find . -maxdepth 2 -mindepth 1 -name 'console') --no-ansi | sed "1,/Available commands/d" | awk '/^ [a-z]+/ { print $1 }'
+ `_symfony_console` --no-ansi | sed "1,/Available commands/d" | awk '/^ [a-z]+/ { print $1 }'
}
_symfony2 () {
- if [ -f $(find . -maxdepth 2 -mindepth 1 -name 'console') ]; then
- compadd `_symfony2_get_command_list`
- fi
+ compadd `_symfony2_get_command_list`
}
-compdef _symfony2 $(find . -maxdepth 2 -mindepth 1 -name 'console')
+compdef _symfony2 '`_symfony_console`'
compdef _symfony2 sf
#Alias
-alias sf='php $(find . -maxdepth 2 -mindepth 1 -name 'console') '
-alias sfcl='php $(find . -maxdepth 2 -mindepth 1 -name 'console') cache:clear'
-alias sfcw='php $(find . -maxdepth 2 -mindepth 1 -name 'console') cache:warmup'
-alias sfroute='php $(find . -maxdepth 2 -mindepth 1 -name 'console') router:debug'
-alias sfcontainer='php $(find . -maxdepth 2 -mindepth 1 -name 'console') container:debug'
-alias sfgb='php $(find . -maxdepth 2 -mindepth 1 -name 'console') generate:bundle'
-
+alias sf='`_symfony_console`'
+alias sfcl='sf cache:clear'
+alias sfcw='sf cache:warmup'
+alias sfroute='sf router:debug'
+alias sfcontainer='sf container:debug'
+alias sfgb='sf generate:bundle' \ No newline at end of file
diff --git a/plugins/textastic/README.md b/plugins/textastic/README.md
new file mode 100644
index 000000000..369c2c137
--- /dev/null
+++ b/plugins/textastic/README.md
@@ -0,0 +1,15 @@
+## textastic
+
+Plugin for Textastic, a text and code editor for Mac OS X
+
+### Requirements
+
+ * [Textastic](http://www.textasticapp.com/mac.html)
+
+### Usage
+
+ * If `tt` command is called without an argument, launch Textastic
+
+ * If `tt` is passed a directory, cd to it and open it in Textastic
+
+ * If `tt` is passed a file, open it in Textastic
diff --git a/plugins/textastic/textastic.plugin.zsh b/plugins/textastic/textastic.plugin.zsh
new file mode 100644
index 000000000..f5901eae2
--- /dev/null
+++ b/plugins/textastic/textastic.plugin.zsh
@@ -0,0 +1,17 @@
+#
+# If the tt command is called without an argument, launch Textastic
+# If tt is passed a directory, cd to it and open it in Textastic
+# If tt is passed a file, open it in Textastic
+#
+function tt() {
+ if [[ -z "$1" ]]
+ then
+ open -a "textastic.app"
+ else
+ open -a "textastic.app" "$1"
+ if [[ -d "$1" ]]
+ then
+ cd "$1"
+ fi
+ fi
+}
diff --git a/plugins/tmuxinator/_tmuxinator b/plugins/tmuxinator/_tmuxinator
index cd227b7df..e4f8b6ce0 100644
--- a/plugins/tmuxinator/_tmuxinator
+++ b/plugins/tmuxinator/_tmuxinator
@@ -11,10 +11,12 @@ _arguments -C \
case $state in
cmds)
_values "tmuxinator command" \
+ "new[create a new project file and open it in your editor]" \
"start[start a tmux session using project's tmuxinator config]" \
"open[create a new project file and open it in your editor]" \
"copy[copy source_project project file to a new project called new_project]" \
"delete[deletes the project called project_name]" \
+ "debug[output the shell commands generated by a projet]" \
"implode[deletes all existing projects!]" \
"list[list all existing projects]" \
"doctor[look for problems in your configuration]" \
@@ -24,9 +26,9 @@ case $state in
;;
args)
case $line[1] in
- start|open|copy|delete)
+ start|open|copy|delete|debug)
_configs=(`find ~/.tmuxinator -name \*.yml | cut -d/ -f5 | sed s:.yml::g`)
- _values 'configs' $_configs
+ [[ -n "$_configs" ]] && _values 'configs' $_configs
ret=0
;;
esac
diff --git a/plugins/wd/LICENSE b/plugins/wd/LICENSE
new file mode 100644
index 000000000..8caa6c6ce
--- /dev/null
+++ b/plugins/wd/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Markus Færevaag
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE. \ No newline at end of file
diff --git a/plugins/wd/README.md b/plugins/wd/README.md
index f9f4e7ac1..bc0ebe334 100644
--- a/plugins/wd/README.md
+++ b/plugins/wd/README.md
@@ -2,37 +2,39 @@
**Maintainer:** [mfaerevaag](https://github.com/mfaerevaag)
-`wd` (warp directory) lets you jump to custom directories in zsh, without using cd. Why? Because cd seems ineffecient when the folder is frequently visited or has a long path. [Source](https://github.com/mfaerevaag/wd)
+`wd` (*warp directory*) lets you jump to custom directories in zsh, without using `cd`. Why? Because `cd` seems ineffecient when the folder is frequently visited or has a long path. [Source](https://github.com/mfaerevaag/wd)
### Usage
* Add warp point to current working directory:
- wd add test
+ $ wd add foo
If a warp point with the same name exists, use `add!` to overwrite it.
- * From an other directory, warp to test with:
+ Note, a warp point cannot contain colons, or only consist of only spaces and dots. The first will conflict in how `wd` stores the warp points, and the second will conflict other features, as below.
- wd test
+ * From an other directory (not necessarily), warp to `foo` with:
- * You can warp back to previous directory, and so on, with the puncticulation syntax:
+ $ wd foo
- wd ..
- wd ...
+ * You can warp back to previous directory, and so on, with this dot syntax:
+
+ $ wd ..
+ $ wd ...
This is a wrapper for the zsh `dirs` function.
* Remove warp point test point:
- wd rm test
+ $ wd rm foo
- * List warp points to current directory (stored in `~/.warprc`):
+ * List all warp points (stored in `~/.warprc`):
- wd show
+ $ wd ls
- * List all warp points (stored in `~/.warprc`):
+ * List warp points to current directory
- wd ls
+ $ wd show
* Print usage with no opts or the `help` argument.
diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh
index 29df63520..0b03d8fff 100644
--- a/plugins/wd/_wd.sh
+++ b/plugins/wd/_wd.sh
@@ -5,23 +5,16 @@ zstyle ':completion::complete:wd:*:commands' group-name commands
zstyle ':completion::complete:wd:*:warp_points' group-name warp_points
zstyle ':completion::complete:wd::' list-grouped
-# Call `_wd()` when when trying to complete the command `wd`
-
zmodload zsh/mapfile
+
function _wd() {
- local ret=1
local CONFIG=$HOME/.warprc
-
- # Stolen from
- # http://stackoverflow.com/questions/9000698/completion-when-program-has-sub-commands
-
- # local curcontext="$curcontext" state line
- # typeset -A opt_args
+ local ret=1
local -a commands
local -a warp_points
- warp_points=( "${(f)mapfile[$CONFIG]}" )
- # LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it
+
+ warp_points=( "${(f)mapfile[$CONFIG]//$HOME/~}" )
commands=(
'add:Adds the current working directory to your warp points'
diff --git a/plugins/wd/wd.plugin.zsh b/plugins/wd/wd.plugin.zsh
index 9800335fc..c0559293d 100644
--- a/plugins/wd/wd.plugin.zsh
+++ b/plugins/wd/wd.plugin.zsh
@@ -1,7 +1,7 @@
#!/bin/zsh
-# WARP
-# ====
+# WARP DIRECTORY
+# ==============
# oh-my-zsh plugin
#
# @github.com/mfaerevaag/wd
diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh
index 9ebad6808..dfb9ad89a 100755
--- a/plugins/wd/wd.sh
+++ b/plugins/wd/wd.sh
@@ -1,7 +1,7 @@
#!/bin/zsh
-# WARP
-# ====
+# WARP DIRECTORY
+# ==============
# Jump to custom directories in terminal
# because `cd` takes too long...
#
@@ -9,26 +9,28 @@
## variables
-CONFIG=$HOME/.warprc
+readonly CONFIG=$HOME/.warprc
-## colors
-BLUE="\033[96m"
-GREEN="\033[92m"
-YELLOW="\033[93m"
-RED="\033[91m"
-NOC="\033[m"
+# colors
+readonly BLUE="\033[96m"
+readonly GREEN="\033[92m"
+readonly YELLOW="\033[93m"
+readonly RED="\033[91m"
+readonly NOC="\033[m"
+## init
+
# check if config file exists
-if [[ ! -a $CONFIG ]]
+if [ ! -e $CONFIG ]
then
- # if not: create config file
- touch $CONFIG
+ # if not, create config file
+ touch $CONFIG
fi
-## load warp points
+# load warp points
typeset -A points
-while read line
+while read -r line
do
arr=(${(s,:,)line})
key=${arr[1]}
@@ -39,72 +41,78 @@ done < $CONFIG
## functions
-# prepended wd_ to not conflict with your environment (no sub shell)
wd_warp()
{
- if [[ $1 =~ "^\.+$" ]]
+ local point=$1
+
+ if [[ $point =~ "^\.+$" ]]
then
- if [[ $#1 < 2 ]]
+ if [ $#1 < 2 ]
then
wd_print_msg $YELLOW "Warping to current directory?"
else
(( n = $#1 - 1 ))
- #wd_print_msg $BLUE "Warping..."
cd -$n > /dev/null
fi
- elif [[ ${points[$1]} != "" ]]
+ elif [[ ${points[$point]} != "" ]]
then
- #wd_print_msg $BLUE "Warping..."
- cd ${points[$1]}
+ cd ${points[$point]}
else
- wd_print_msg $RED "Unknown warp point '$1'"
+ wd_print_msg $RED "Unknown warp point '${point}'"
fi
}
wd_add()
{
- if [[ $2 =~ "^\.+$" || $2 =~ "^\s*$" ]]
+ local force=$1
+ local point=$2
+
+ if [[ $point =~ "^[\.]+$" ]]
+ then
+ wd_print_msg $RED "Warp point cannot be just dots"
+ elif [[ $point =~ "(\s|\ )+" ]]
then
- wd_print_msg $RED "Illegal warp point (see README)."
- elif [[ ${points[$2]} == "" ]] || $1
+ wd_print_msg $RED "Warp point should not contain whitespace"
+ elif [[ $point == *:* ]]
then
- wd_remove $2 > /dev/null
- print "$2:$PWD" >> $CONFIG
+ wd_print_msg $RED "Warp point cannot contain colons"
+ elif [[ $point == "" ]]
+ then
+ wd_print_msg $RED "Warp point cannot be empty"
+ elif [[ ${points[$2]} == "" ]] || $force
+ then
+ wd_remove $point > /dev/null
+ printf "%q:%q\n" "${point}" "${PWD}" >> $CONFIG
+
wd_print_msg $GREEN "Warp point added"
else
- wd_print_msg $YELLOW "Warp point '$2' already exists. Use 'add!' to overwrite."
+ wd_print_msg $YELLOW "Warp point '${point}' already exists. Use 'add!' to overwrite."
fi
}
wd_remove()
{
- if [[ ${points[$1]} != "" ]]
+ local point=$1
+
+ if [[ ${points[$point]} != "" ]]
then
- if wd_tmp=`sed "/^$1:/d" $CONFIG`
+ if sed -i.bak "s,^${point}:.*$,,g" $CONFIG
then
- # `>!` forces overwrite
- # we need this if people use `setopt NO_CLOBBER`
- echo $wd_tmp >! $CONFIG
wd_print_msg $GREEN "Warp point removed"
else
- wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
+ wd_print_msg $RED "Something bad happened! Sorry."
fi
else
wd_print_msg $RED "Warp point was not found"
fi
}
-wd_show()
-{
- wd_print_msg $BLUE "Warp points to current directory:"
- wd_list_all | grep $PWD$
-}
-
wd_list_all()
{
wd_print_msg $BLUE "All warp points:"
- while read line
+
+ while IFS= read -r line
do
if [[ $line != "" ]]
then
@@ -112,38 +120,52 @@ wd_list_all()
key=${arr[1]}
val=${arr[2]}
- print "\t" $key "\t -> \t" $val
+ printf "%20s -> %s\n" $key $val
fi
- done < $CONFIG
+ done <<< $(sed "s:${HOME}:~:g" $CONFIG)
+}
+
+wd_show()
+{
+ local cwd=$(print $PWD | sed "s:^${HOME}:~:")
+
+ wd_print_msg $BLUE "Warp points to current directory:"
+ wd_list_all | grep -e "${cwd}$"
}
wd_print_msg()
{
- if [[ $1 == "" || $2 == "" ]]
+ local color=$1
+ local msg=$2
+
+ if [[ $color == "" || $msg == "" ]]
then
- print " $RED*$NOC Could not print message. Sorry!"
+ print " ${RED}*${NOC} Could not print message. Sorry!"
else
- print " $1*$NOC $2"
+ print " ${color}*${NOC} ${msg}"
fi
}
wd_print_usage()
{
- print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
- print "\nCommands:"
- print "\t add \t Adds the current working directory to your warp points"
- print "\t add! \t Overwrites existing warp point"
- print "\t rm \t Removes the given warp point"
- print "\t show \t Outputs warp points to current directory"
- print "\t ls \t Outputs all stored warp points"
- print "\t help \t Show this extremely helpful text"
+ cat <<- EOF
+Usage: wd [add|-a|--add] [rm|-r|--remove] <point>
+
+Commands:
+ add Adds the current working directory to your warp points
+ add! Overwrites existing warp point
+ rm Removes the given warp point
+ show Outputs warp points to current directory
+ ls Outputs all stored warp points
+ help Show this extremely helpful text
+EOF
}
## run
# get opts
-args=`getopt -o a:r:lhs -l add:,rm:,ls,help,show -- $*`
+args=$(getopt -o a:r:lhs -l add:,rm:,ls,help,show -- $*)
# check if no arguments were given
if [[ $? -ne 0 || $#* -eq 0 ]]
@@ -151,19 +173,16 @@ then
wd_print_usage
# check if config file is writeable
-elif [[ ! -w $CONFIG ]]
+elif [ ! -w $CONFIG ]
then
- wd_print_msg $RED "\'$CONFIG\' is not writeable."
- # do nothing => exit
+ # do nothing
# can't run `exit`, as this would exit the executing shell
- # i.e. your terminal
+ wd_print_msg $RED "\'$CONFIG\' is not writeable."
else
- #set -- $args # WTF
-
- for i
+ for o
do
- case "$i"
+ case "$o"
in
-a|--add|add)
wd_add false $2
@@ -190,7 +209,7 @@ else
break
;;
*)
- wd_warp $i
+ wd_warp $o
break
;;
--)
@@ -200,10 +219,18 @@ else
done
fi
-
## garbage collection
# if not, next time warp will pick up variables from this run
# remember, there's no sub shell
-unset points
+
+unset wd_warp
+unset wd_add
+unset wd_remove
+unset wd_show
+unset wd_list_all
+unset wd_print_msg
+unset wd_print_usage
+
unset args
+unset points
unset val &> /dev/null # fixes issue #1
diff --git a/plugins/zsh_reload/zsh_reload.plugin.zsh b/plugins/zsh_reload/zsh_reload.plugin.zsh
index 94945bd48..3f44b99c6 100644
--- a/plugins/zsh_reload/zsh_reload.plugin.zsh
+++ b/plugins/zsh_reload/zsh_reload.plugin.zsh
@@ -1,10 +1,11 @@
# reload zshrc
function src()
{
+ local cache="$ZSH/cache"
autoload -U compinit zrecompile
- compinit -d "$ZSH/cache/zcomp-$HOST"
+ compinit -d "$cache/zcomp-$HOST"
- for f in ~/.zshrc "$ZSH/cache/zcomp-$HOST"; do
+ for f in ~/.zshrc "$cache/zcomp-$HOST"; do
zrecompile -p $f && command rm -f $f.zwc.old
done