config/shell/browse: consolidate zoxide helpers

This commit is contained in:
xeruf 2022-01-10 11:49:56 +01:00
parent 49810e6239
commit aef761baaa
4 changed files with 25 additions and 23 deletions

View File

@ -1,4 +1,4 @@
# Utilities regarding file system navigation # Utilities for file system navigation
# Useful when the current directory was recreated # Useful when the current directory was recreated
alias recd='cd $PWD' alias recd='cd $PWD'
@ -39,7 +39,7 @@ cd() {
fi fi
} }
# LOCATE # LOCATE {{{1
alias fselect='fzf -0 -1 --reverse --height=30% | while read f; do test -d "$f" && cd "$f" || b "$f"; done' alias fselect='fzf -0 -1 --reverse --height=30% | while read f; do test -d "$f" && cd "$f" || b "$f"; done'
loci() { loci() {
locate --all --ignore-case --basename --existing "$@" | locate --all --ignore-case --basename --existing "$@" |
@ -53,11 +53,28 @@ alias loce='noglob locei'
# locate all # locate all
alias loca='noglob sudo updatedb --prunenames "" --prunefs "" --prunepaths "/var/cache" -o /var/lib/mlocate/all.db && loci --database /var/lib/mlocate/all.db' alias loca='noglob sudo updatedb --prunenames "" --prunefs "" --prunepaths "/var/cache" -o /var/lib/mlocate/all.db && loci --database /var/lib/mlocate/all.db'
# ZOXIDE # ZOXIDE {{{1
alias c=z alias c=z
# Listing for quick directory switcher based on zoxide and fzf
alias zoxide-list='noglob zoxide query -sl'
# fzf for zoxide
zoxide-fzf() {
# returns the selected path stripped of its score
fzf -0 -1 -n2.. --tiebreak=index \
--preview-window=20% --preview="ls -a --color --human-readable --group-directories-first --file-type {2..}" \
--height=80% --reverse |
sed 's|.* /|/|'
}
# Locate directories and add 0 zoxide score
locate-zox() {
locate --basename --ignore-case "$@" |
while read -r file; do test -d "$file" && echo "$file"; done |
sed 's/^/ 0 /'
}
# Switch directory heuristically using zoxide and locate
d() { d() {
test "$1" != "-" -a ! -d "$1" -a $# -eq 1 || { cd "$@" && return } test "$1" != "-" -a ! -d "$1" -a $# -eq 1 || { cd "$@" && return }
local query="$(zf "$@")" local query="$(zoxide-list "$@")"
# First find out whether there is an obvious match # First find out whether there is an obvious match
# (score at least ten times above runner-up and score above 20) # (score at least ten times above runner-up and score above 20)
# If not select with fzf, using locate to find extra options # If not select with fzf, using locate to find extra options
@ -65,10 +82,11 @@ d() {
expr "$(echo "$query" | head -1 | cut -d' ' -f1)" \> 20 \& \ expr "$(echo "$query" | head -1 | cut -d' ' -f1)" \> 20 \& \
$(echo "$query" | sed 'N;s|/.* \([0-9]\)|> 10 * \1|;q' | sed 's| */.*||') >/dev/null #2>&1 $(echo "$query" | sed 'N;s|/.* \([0-9]\)|> 10 * \1|;q' | sed 's| */.*||') >/dev/null #2>&1
then echo "$query" | head -1 then echo "$query" | head -1
else test -n "$query" && echo "$query"; locz "$@" else test -n "$query" && echo "$query"; locate-zox "$@"
fi | zfz)" fi | zoxide-fzf)"
} }
# Switch directory interactively using zoxide and locate
di() { di() {
test "$1" = "-" || local dir=$({ zf "$@"; locz "$@" } | zfz) test "$1" = "-" || local dir=$({ zoxide-list "$@"; locate-zox "$@" } | zoxide-fzf)
cd "${dir:-$1}" cd "${dir:-$1}"
} }

View File

@ -1,5 +0,0 @@
#!/bin/sh
# Locate existing directories in zoxide format
locate --basename --ignore-case "$@" |
while read -r file; do test -d "$file" && echo "$file"; done |
sed 's/^/ 0 /'

View File

@ -1,4 +0,0 @@
#!/bin/sh
# Listing for quick directory switcher based on zoxide and fzf
set -o noglob
zoxide query -sl "$@"

View File

@ -1,7 +0,0 @@
#!/bin/sh
# fzf for zoxide
# returns the selected path stripped of its score
fzf -0 -1 -n2.. --tiebreak=index \
--preview-window=20% --preview="ls -a --color --human-readable --group-directories-first --file-type {2..}" \
--height=80% --reverse |
sed 's|.* /|/|'