update match algorithm
This commit is contained in:
@@ -106,21 +106,43 @@ function fzf_selector() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dp "${all_items[@]}"
|
dp "${all_items[@]}"
|
||||||
#shopt -u dotglob
|
|
||||||
|
|
||||||
files=()
|
files=()
|
||||||
|
# match
|
||||||
|
# 1. try match file/dir equals to keyword completely
|
||||||
|
# 2. try match file/dir which keyword (contains upper letters) is substring of
|
||||||
|
# 3. try match file/dir equals to keyword completely after ignoring cases
|
||||||
|
# 4. try match file/dir which keyword is substring of after ignoring cases
|
||||||
|
|
||||||
for item in "${all_items[@]}"; do
|
for item in "${all_items[@]}"; do
|
||||||
# if the keyword equals to a file or folder, returns
|
# 1.
|
||||||
# it.
|
|
||||||
if [ "$item" = "$1" ] || [ "$item" = "$1/" ]; then
|
if [ "$item" = "$1" ] || [ "$item" = "$1/" ]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
grep $1 <<< $item > /dev/null 2>&1 && \
|
|
||||||
files+=("$item")
|
# 2.
|
||||||
|
[[ $1 =~ [A-Z] ]] && \
|
||||||
|
grep $1 <<< $item > /dev/null 2>&1 && \
|
||||||
|
files+=("$item")
|
||||||
done
|
done
|
||||||
|
|
||||||
# if grep find zero file
|
dp "len contains upper cases ${#files[@]}"
|
||||||
|
|
||||||
if [ "${#files[@]}" = "0" ]; then
|
if [ "${#files[@]}" = "0" ]; then
|
||||||
|
for item in "${all_items[@]}"; do
|
||||||
|
# 3.
|
||||||
|
if ([ "$SHELL_NAME" = "bash" ] && ( [ "${item,,}" = "${1,,}" ] || [ "${item,,}" = "${1,,}/" ] )) || \
|
||||||
|
([ "$SHELL_NAME" = "zsh" ] && ( [ "${item:l}" = "${1:l}" ] || [ "${item:l}" = "${1:l}/" ] )) ; then
|
||||||
|
ret=$item
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# 4.
|
||||||
|
grep -i $1 <<< $item > /dev/null 2>&1 && files+=("$item")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#files[@]}" = "0" ]; then
|
||||||
|
# if grep find zero file
|
||||||
ret=$1
|
ret=$1
|
||||||
elif [ "${#files[@]}" = "1" ]; then
|
elif [ "${#files[@]}" = "1" ]; then
|
||||||
ret=$files
|
ret=$files
|
||||||
|
|||||||
Reference in New Issue
Block a user