summaryrefslogtreecommitdiff
path: root/plugins/wd/wd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/wd/wd.sh')
-rwxr-xr-xplugins/wd/wd.sh72
1 files changed, 63 insertions, 9 deletions
diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh
index 5ecbdc503..cf54713bd 100755
--- a/plugins/wd/wd.sh
+++ b/plugins/wd/wd.sh
@@ -8,7 +8,7 @@
# @github.com/mfaerevaag/wd
# version
-readonly WD_VERSION=0.4
+readonly WD_VERSION=0.4.2
# colors
readonly WD_BLUE="\033[96m"
@@ -80,7 +80,9 @@ Commands:
rm <point> Removes the given warp point
show Print warp points to current directory
show <point> Print path to given warp point
- ls Print all stored warp points
+ list Print all stored warp points
+ls <point> Show files from given warp point
+path <point> Show the path to given warp point
clean! Remove points warping to nonexistent directories
-v | --version Print version
@@ -96,7 +98,7 @@ wd_exit_fail()
{
local msg=$1
- wd_print_msg $WD_RED $1
+ wd_print_msg $WD_RED $msg
WD_EXIT_CODE=1
}
@@ -108,6 +110,22 @@ wd_exit_warn()
WD_EXIT_CODE=1
}
+wd_getdir()
+{
+ local name_arg=$1
+
+ point=$(wd_show $name_arg)
+ dir=${point:28+$#name_arg+7}
+
+ if [[ -z $name_arg ]]; then
+ wd_exit_fail "You must enter a warp point"
+ break
+ elif [[ -z $dir ]]; then
+ wd_exit_fail "Unknown warp point '${name_arg}'"
+ break
+ fi
+}
+
# core
wd_warp()
@@ -125,7 +143,7 @@ wd_warp()
fi
elif [[ ${points[$point]} != "" ]]
then
- cd ${points[$point]}
+ cd ${points[$point]/#\~/$HOME}
else
wd_exit_fail "Unknown warp point '${point}'"
fi
@@ -151,7 +169,7 @@ wd_add()
elif [[ ${points[$2]} == "" ]] || $force
then
wd_remove $point > /dev/null
- printf "%q:%s\n" "${point}" "${PWD}" >> $WD_CONFIG
+ printf "%q:%s\n" "${point}" "${PWD/#$HOME/~}" >> $WD_CONFIG
wd_print_msg $WD_GREEN "Warp point added"
@@ -185,6 +203,21 @@ wd_list_all()
{
wd_print_msg $WD_BLUE "All warp points:"
+ entries=$(sed "s:${HOME}:~:g" $WD_CONFIG)
+
+ max_warp_point_length=0
+ while IFS= read -r line
+ do
+ arr=(${(s,:,)line})
+ key=${arr[1]}
+
+ length=${#key}
+ if [[ length -gt max_warp_point_length ]]
+ then
+ max_warp_point_length=$length
+ fi
+ done <<< $entries
+
while IFS= read -r line
do
if [[ $line != "" ]]
@@ -195,10 +228,22 @@ wd_list_all()
if [[ -z $wd_quiet_mode ]]
then
- printf "%20s -> %s\n" $key $val
+ printf "%${max_warp_point_length}s -> %s\n" $key $val
fi
fi
- done <<< $(sed "s:${HOME}:~:g" $WD_CONFIG)
+ done <<< $entries
+}
+
+wd_ls()
+{
+ wd_getdir $1
+ ls ${dir/#\~/$HOME}
+}
+
+wd_path()
+{
+ wd_getdir $1
+ echo $(echo $dir | sed "s:${HOME}:~:g")
}
wd_show()
@@ -218,6 +263,7 @@ wd_show()
local wd_matches
wd_matches=()
# do a reverse lookup to check whether PWD is in $points
+ PWD="${PWD/$HOME/~}"
if [[ ${points[(r)$PWD]} == $PWD ]]
then
for name in ${(k)points}
@@ -316,7 +362,7 @@ do
done < $WD_CONFIG
# get opts
-args=$(getopt -o a:r:c:lhs -l add:,rm:,clean\!,ls,help,show -- $*)
+args=$(getopt -o a:r:c:lhs -l add:,rm:,clean\!,list,ls:,path:,help,show -- $*)
# check if no arguments were given, and that version is not set
if [[ ($? -ne 0 || $#* -eq 0) && -z $wd_print_version ]]
@@ -349,10 +395,18 @@ else
wd_remove $2
break
;;
- -l|--list|ls)
+ -l|list)
wd_list_all
break
;;
+ -ls|ls)
+ wd_ls $2
+ break
+ ;;
+ -p|--path|path)
+ wd_path $2
+ break
+ ;;
-h|--help|help)
wd_print_usage
break