reimplementaion of list, posix compliant

still not happy with the implementaion.
theres a bunch of bugs too (see TODO)
my decision to make the script fully posix compliant is biting me back in the ass.
This commit is contained in:
NRK
2021-04-15 15:35:42 +06:00
parent 01141b7119
commit 7b70d3aad8

55
sxbm
View File

@ -52,6 +52,9 @@ COMMANDS:
} }
bm_list(){ bm_list(){
local QUERY_TAG="-n "
local QUERY_TITLE="-n "
while [ -n "$1" ]; do while [ -n "$1" ]; do
case "$1" in case "$1" in
"-c"|"--disable-colors") "-c"|"--disable-colors")
@ -59,7 +62,8 @@ bm_list(){
shift shift
;; ;;
"-s"|"--strict") "-s"|"--strict")
local TAG_STRICT="1" QUERY_TAG=""
QUERY_TITLE=""
shift shift
;; ;;
*) *)
@ -68,47 +72,44 @@ bm_list(){
esac esac
done done
# POSIX shell doesn't have arrays.
# Desperate times calls for desperate measures!
while [ -n "$1" ]; do while [ -n "$1" ]; do
case "$1" in case "$1" in
+*) +*)
local QUERY_TAG="${QUERY_TAG}$1 " [ "${QUERY_TAG#-n}" != "$QUERY_TAG" ] &&
QUERY_TAG="${QUERY_TAG}-e '/[[:space:]]$1[[:space:]]/p' " ||
QUERY_TAG="${QUERY_TAG}-e '/[[:space:]]$1[[:space:]]/!d' "
shift shift
;; ;;
*) *)
local QUERY_TITLE="${QUERY_TITLE}$1 " [ "${QUERY_TITLE#-n}" != "$QUERY_TITLE" ] &&
QUERY_TITLE="${QUERY_TITLE}-e '/$1/p' " ||
QUERY_TITLE="${QUERY_TITLE}-e '/$1/!d' "
shift shift
;; ;;
esac esac
done done
# POSIX shell doesn't have arrays. # TODO print the line number
# Desperate times calls for desperate measures! # TODO fix double print if --strict not used
[ -n "$QUERY_TAG" ] && # '/[[:space:]]+apps[[:space:]]\|[[:space:]]+lmao[[:space:]]/p'
QUERY_TAG=$(echo "$QUERY_TAG" | sed 's/ *$//;s/ /" -e "/g;s/^/-e "/;s/$/"/') # TODO title search needs to exclude +tags
# 's/[[:space:]]+[^[:space:]]\{1,\}//g' this kills the tags
# TODO title search needs to be case insensitive
[ -n "$QUERY_TITLE" ] && [ "${#QUERY_TAG}" -le 3 ] && [ "${#QUERY_TITLE}" -le 3 ] &&
QUERY_TITLE=$(echo "$QUERY_TITLE" | sed 's/ *$//;s/ /" -e "/g;s/^/-e "/;s/$/"/') sed "" "$DATA_FILE"
[ -n "$QUERY_TAG" ] && [ -n "$QUERY_TITLE" ] && [ "${#QUERY_TAG}" -le 3 ] && [ "${#QUERY_TITLE}" -gt 3 ] &&
eval grep -w -n "$QUERY_TAG" "$DATA_FILE" | eval sed "$QUERY_TITLE" "$DATA_FILE"
eval grep -i "$QUERY_TITLE" |
sed 's/:/) /;s/+.*//g;s/ *$//'
[ -n "$QUERY_TAG" ] && [ -z "$QUERY_TITLE" ] && [ "${#QUERY_TAG}" -gt 3 ] && [ "${#QUERY_TITLE}" -le 3 ] &&
eval grep -w -n "$QUERY_TAG" "$DATA_FILE" | eval sed "$QUERY_TAG" "$DATA_FILE"
sed 's/:/) /;s/+.*//g;s/ *$//'
[ -z "$QUERY_TAG" ] && [ -n "$QUERY_TITLE" ] && [ "${#QUERY_TAG}" -gt 3 ] && [ "${#QUERY_TITLE}" -gt 3 ] &&
eval grep -i -n "$QUERY_TITLE" "$DATA_FILE" | eval sed "$QUERY_TAG" "$DATA_FILE" |
sed 's/:/) /;s/+.*//g;s/ *$//' eval sed "$QUERY_TITLE"
[ -z "$QUERY_TAG" ] && [ -z "$QUERY_TITLE" ] &&
awk -v COL_LINE_NUM=$COL_LINE_NUM \
-v COL_TITLE="$COL_TITLE" -v COL_LINK="$COL_LINK" \
' { LINK=$1; $1="";
gsub(/+\w+/,"");
print COL_LINE_NUM NR ") " COL_LINK LINK " " COL_TITLE $0 ; }' \
"$DATA_FILE"
} }
############ ############