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:
55
sxbm
55
sxbm
@ -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"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
############
|
############
|
||||||
|
|||||||
Reference in New Issue
Block a user