mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-02 02:19:06 +01:00
A simple script that prettifies the 'dirs -v' output and provides regex directory switching
This commit is contained in:
parent
1120f97305
commit
f354ade247
2 changed files with 78 additions and 0 deletions
36
plugins/regex-dirstack/README.md
Normal file
36
plugins/regex-dirstack/README.md
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
## Regex Matching in the Directory Stack for ZSH ##
|
||||||
|
|
||||||
|
Adds `ss` and `csd` to the list of directory manipulation functions. Zsh (or at
|
||||||
|
least the one I'm using) is mainting the directory stack for me all the time,
|
||||||
|
but I don't like how it looks when you type type `dirs -v` and I think the whole
|
||||||
|
`+n` and `-n` thing is just annoying. I also don't know why the current
|
||||||
|
directory is shown. The current directory is the current directory, so I'm not
|
||||||
|
interested in it.
|
||||||
|
|
||||||
|
So I've simplified it to look "better" (IMO) with `ss` and the `csd` function
|
||||||
|
will accept a regular expression.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
# show stack
|
||||||
|
> ss
|
||||||
|
1) ~
|
||||||
|
2) /tmp
|
||||||
|
3) /tmp/this/has a/space in it
|
||||||
|
4) /tmp/src/main/scala/package/name/here
|
||||||
|
5) /tmp/src/test/scala/package/name/here
|
||||||
|
|
||||||
|
# change to stacked directory
|
||||||
|
> csd 4
|
||||||
|
/tmp/src/main/scala/package/name/here
|
||||||
|
>
|
||||||
|
|
||||||
|
# change to stacked directory by regex
|
||||||
|
> csd test
|
||||||
|
/tmp/src/test/scala/package/name/here
|
||||||
|
>
|
||||||
|
|
||||||
|
# change to stacked directory by more interesting regex
|
||||||
|
> csd src.*main
|
||||||
|
/tmp/src/main/scala/package/name/here
|
||||||
|
>
|
||||||
42
plugins/regex-dirstack/regex-dirstack.plugin.zsh
Normal file
42
plugins/regex-dirstack/regex-dirstack.plugin.zsh
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
function limitStringToWidthByMidpoint
|
||||||
|
{
|
||||||
|
local string="$1"
|
||||||
|
local width=$2
|
||||||
|
if (( ${#string} > $width )); then
|
||||||
|
local splitnum=$((collimit/2))
|
||||||
|
echo "$(echo $string | cut -c1-$splitnum) ... $(echo $string | cut -c$((${#string}-$splitnum))-)"
|
||||||
|
else
|
||||||
|
echo $string
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function ss
|
||||||
|
{
|
||||||
|
local c=1
|
||||||
|
local collimit=$((${COLUMNS-80}-10))
|
||||||
|
dirs -p | tail -n+2 | \
|
||||||
|
while read f
|
||||||
|
do
|
||||||
|
echo "$c) "$(limitStringToWidthByMidpoint $f $collimit)
|
||||||
|
((c=c+1))
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function csd
|
||||||
|
{
|
||||||
|
local num="${1-}"
|
||||||
|
|
||||||
|
if ! echo "$num" | grep -q '^[0-9][0-9]*$'; then
|
||||||
|
local re="$num"
|
||||||
|
local num=$(dirs -p | tail -n+2 | grep -n $re | head | cut -f1 -d:)
|
||||||
|
if [ -z $num ]; then
|
||||||
|
echo "'$re' matched nothing" 1>&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
elif [ $num -lt 1 ]; then
|
||||||
|
echo "usage: csd <number greater than 0 | regex>" 1>&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
cd +$num
|
||||||
|
return $?
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue