list: major restructure

currently only tag search is functional.
This commit is contained in:
NRK
2021-09-08 06:09:00 +06:00
parent 41869f8324
commit 913a220ba1

63
sxbm
View File

@ -86,62 +86,63 @@ bm_add() {
die "Couldn't add link"
}
__awk_search() {
awk "$@"' { LINK=$1; $1="";
print NR ") " LINK " " $0 }' "$DATA_FILE"
}
# this entire function is a massive joke
bm_list() {
QUERY_TAG=""
QUERY_TITLE=""
QUERY_STRICT="||"
TAG_STRICT="||"
TITLE_STRICT="&&"
while [ -n "$1" ]; do
case "$1" in
"-c"|"--disable-colors")
COL_LINK=""; COL_TITLE=""; COL_LINE_NUM="";
shift
unset COL_LINK COL_TITLE COL_LINE_NUM
;;
"-s"|"--strict")
QUERY_STRICT="&&"
shift
TAG_STRICT="&&"
;;
"-S")
TITLE_STRICT="||"
;;
*)
break
;;
esac
shift
done
# POSIX shell doesn't have arrays.
# Desperate times calls for desperate measures!
# search titles
# awk 'toupper($0)~"[[:blank:]]SUCKLESS[[:blank:]]" && toupper($0)~"[[:blank:]]ROCKS[[:blank:]]"'
# search tags
# awk "/[[:blank:]]\+apps($| )/ || /[[:blank:]]\+books($| )/"
while [ -n "$1" ]; do
case "$1" in
+*)
[ -z "$QUERY_TAG" ] &&
QUERY_TAG="/[[:blank:]]\\$1($| )/" ||
QUERY_TAG="${QUERY_TAG} $QUERY_STRICT /[[:blank:]]\\$1($| )/"
QUERY_TAG="/[[:blank:]]\\$1($| )/ $TAG_STRICT $QUERY_TAG"
;;
*)
if [ -z "$QUERY_TITLE" ]; then
QUERY_TITLE="grep -i -e \"$1\""
else
[ "$QUERY_STRICT" = "&&" ] &&
QUERY_TITLE="${QUERY_TITLE} | grep -i -e \"$1\"" ||
QUERY_TITLE="${QUERY_TITLE} -e \"$1\""
fi
tmp_char="$(echo "$1" | tr '[:lower:]' '[:upper:]')"
QUERY_TITLE=""
;;
esac
shift
done
QUERY_TAG="${QUERY_TAG%$TAG_STRICT }"
__tag_search() {
awk -v COL_LINE_NUM="$COL_LINE_NUM" \
-v COL_LINK="$COL_LINK" -v COL_TITLE="$COL_TITLE" \
"$QUERY_TAG"'{ LINK=$1; $1="";
gsub(/[[:space:]]\+[^[:space:]]+/,"");
print COL_LINE_NUM NR ") " COL_LINK LINK " " COL_TITLE $0 }' \
"$DATA_FILE"
}
[ -z "$QUERY_TITLE" ] &&
__tag_search ||
__tag_search | eval "$QUERY_TITLE"
if [ -z "$QUERY_TAG" ] && [ -z "$QUERY_TITLE" ]; then
__awk_search
elif [ -n "$QUERY_TAG" ] && [ -z "$QUERY_TITLE" ]; then
__awk_search "$QUERY_TAG"
elif [ -z "$QUERY_TAG" ] && [ -n "$QUERY_TITLE" ]; then
__awk_search "$QUERY_TITLE"
elif [ -n "$QUERY_TAG" ] && [ -n "$QUERY_TITLE" ]; then
printf '%s\n%s\n' \
"$(__awk_search "$QUERY_TAG")" "$(__awk_search "$QUERY_TITLE")" |
sort | uniq -d
fi
}
bm_open() {