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