diff --git a/sxbm b/sxbm index 117a170..de09840 100755 --- a/sxbm +++ b/sxbm @@ -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() {