summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Russell <robby@planetargon.com>2014-03-08 08:33:14 -0800
committerRobby Russell <robby@planetargon.com>2014-03-08 08:33:14 -0800
commit7b7c5fd12be7c583165832727d4a1f252562b6dc (patch)
tree4b305d76a646832aab50337975bdf05fa4c8a088
parent0018969b807a5bd91647cceb2f55f2bc216c1ec4 (diff)
parentd41ac7fe3e52783054610c2cc57bbbfcdb2202b0 (diff)
downloadzsh-7b7c5fd12be7c583165832727d4a1f252562b6dc.tar.gz
zsh-7b7c5fd12be7c583165832727d4a1f252562b6dc.tar.bz2
zsh-7b7c5fd12be7c583165832727d4a1f252562b6dc.zip
Merge pull request #2579 from mfaerevaag/master
Updated wd plugin to v0.3.0
-rw-r--r--plugins/wd/_wd.sh110
-rwxr-xr-xplugins/wd/wd.plugin.zsh4
-rwxr-xr-xplugins/wd/wd.sh75
3 files changed, 102 insertions, 87 deletions
diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh
index 950564435..29df63520 100644
--- a/plugins/wd/_wd.sh
+++ b/plugins/wd/_wd.sh
@@ -1,48 +1,68 @@
-#compdef wd.sh
-
-zstyle ":completion:*:descriptions" format "%B%d%b"
-
-CONFIG=$HOME/.warprc
-
-local -a main_commands
-main_commands=(
- add:'Adds the current working directory to your warp points'
- #add'\!':'Overwrites existing warp point' # TODO: Fix
- rm:'Removes the given warp point'
- ls:'Outputs all stored warp points'
- show:'Outputs warp points to current directory'
-)
-
-local -a points
-while read line
-do
- points+=$(awk "{ gsub(/\/Users\/$USER|\/home\/$USER/,\"~\"); print }" <<< $line)
-done < $CONFIG
-
-_wd()
-{
- # init variables
- local curcontext="$curcontext" state line
- typeset -A opt_args
-
- # init state
- _arguments \
- '1: :->command' \
- '2: :->argument'
-
- case $state in
- command)
- compadd "$@" add rm ls show
- _describe -t warp-points 'Warp points:' points && ret=0
- ;;
- argument)
- case $words[2] in
- rm|add!)
- _describe -t warp-points 'warp points' points && ret=0
- ;;
- *)
- esac
- esac
+#compdef wd
+
+zstyle ':completion:*:descriptions' format '%B%d%b'
+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 -a commands
+ local -a warp_points
+ warp_points=( "${(f)mapfile[$CONFIG]}" )
+ # LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it
+
+ commands=(
+ 'add:Adds the current working directory to your warp points'
+ 'add!:Overwrites existing warp point'
+ 'rm:Removes the given warp point'
+ 'ls:Outputs all stored warp points'
+ 'show:Outputs all warp points that point to the current directory'
+ 'help:Show this extremely helpful text'
+ '..:Go back to last directory'
+ )
+
+ _arguments -C \
+ '1: :->first_arg' \
+ '2: :->second_arg' && ret=0
+
+ case $state in
+ first_arg)
+ _describe -t warp_points "Warp points" warp_points && ret=0
+ _describe -t commands "Commands" commands && ret=0
+ ;;
+ second_arg)
+ case $words[2] in
+ add\!|rm)
+ _describe -t points "Warp points" warp_points && ret=0
+ ;;
+ add)
+ _message 'Write the name of your warp point' && ret=0
+ ;;
+ esac
+ ;;
+ esac
+
+ return $ret
}
_wd "$@"
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 2
+# indent-tabs-mode: nil
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/plugins/wd/wd.plugin.zsh b/plugins/wd/wd.plugin.zsh
index bbec4a715..9800335fc 100755
--- a/plugins/wd/wd.plugin.zsh
+++ b/plugins/wd/wd.plugin.zsh
@@ -6,4 +6,6 @@
#
# @github.com/mfaerevaag/wd
-alias wd='. $ZSH/plugins/wd/wd.sh'
+wd() {
+ . $ZSH/plugins/wd/wd.sh
+}
diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh
index 744f58bc2..96a3426fc 100755
--- a/plugins/wd/wd.sh
+++ b/plugins/wd/wd.sh
@@ -50,12 +50,12 @@ wd_warp()
wd_print_msg $YELLOW "Warping to current directory?"
else
(( n = $#1 - 1 ))
- wd_print_msg $BLUE "Warping..."
+ #wd_print_msg $BLUE "Warping..."
cd -$n > /dev/null
fi
elif [[ ${points[$1]} != "" ]]
then
- wd_print_msg $BLUE "Warping..."
+ #wd_print_msg $BLUE "Warping..."
cd ${points[$1]}
else
wd_print_msg $RED "Unkown warp point '$1'"
@@ -64,16 +64,16 @@ wd_warp()
wd_add()
{
- if [[ $1 =~ "^\.+$" ]]
+ if [[ $2 =~ "^\.+$" || $2 =~ "^\s*$" ]]
then
- wd_print_msg $RED "Illeagal warp point (see README)."
- elif [[ ${points[$1]} == "" ]] || $2
+ wd_print_msg $RED "Illegal warp point (see README)."
+ elif [[ ${points[$2]} == "" ]] || $1
then
- wd_remove $1 > /dev/null
- print "$1:$PWD" >> $CONFIG
+ wd_remove $2 > /dev/null
+ print "$2:$PWD" >> $CONFIG
wd_print_msg $GREEN "Warp point added"
else
- wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite."
+ wd_print_msg $YELLOW "Warp point '$2' already exists. Use 'add!' to overwrite."
fi
}
@@ -83,7 +83,9 @@ wd_remove()
then
if wd_tmp=`sed "/^$1:/d" $CONFIG`
then
- echo $wd_tmp > $CONFIG
+ # `>!` 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!"
@@ -131,9 +133,9 @@ wd_print_usage()
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 remove Removes the given warp point"
+ print "\t rm \t Removes the given warp point"
print "\t show \t Outputs warp points to current directory"
- print "\t list \t Outputs all stored warp points"
+ print "\t ls \t Outputs all stored warp points"
print "\t help \t Show this extremely helpful text"
}
@@ -141,7 +143,7 @@ wd_print_usage()
## run
# get opts
-args=`getopt -o a:r:lhs -l add:,remove:,list,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 ]]
@@ -161,49 +163,40 @@ else
for i
do
- case "$i"
- in
- -a|--add|add)
- wd_add $2 false
- shift
- shift
+ case "$i"
+ in
+ -a|--add|add)
+ wd_add false $2
break
;;
-a!|--add!|add!)
- wd_add $2 true
- shift
- shift
+ wd_add true $2
break
;;
- -r|--remove|rm)
- wd_remove $2
- shift
- shift
+ -r|--remove|rm)
+ wd_remove $2
break
;;
- -l|--list|ls)
- wd_list_all
- shift
+ -l|--list|ls)
+ wd_list_all
break
;;
- -h|--help|help)
- wd_print_usage
- shift
+ -h|--help|help)
+ wd_print_usage
break
;;
- -s|--show|show)
- wd_show
- shift
+ -s|--show|show)
+ wd_show
break
;;
*)
wd_warp $i
- shift
break
;;
- --)
- shift; break;;
- esac
+ --)
+ break
+ ;;
+ esac
done
fi
@@ -211,6 +204,6 @@ fi
## garbage collection
# if not, next time warp will pick up variables from this run
# remember, there's no sub shell
-points=""
-args=""
-unhash -d val &> /dev/null # fixes issue #1
+unset points
+unset args
+unset val &> /dev/null # fixes issue #1