]> git.plutz.net Git - serve0/commitdiff
fully implemented listing by filter
authorPaul Hänsch <paul@plutz.net>
Mon, 16 Jul 2018 12:34:54 +0000 (14:34 +0200)
committerPaul Hänsch <paul@plutz.net>
Mon, 16 Jul 2018 12:34:54 +0000 (14:34 +0200)
list.sh

diff --git a/list.sh b/list.sh
index 52b78b2b26878bda15a0e4d2f2fadec050dd2d07..72b4fc3561d427731d20b847341036a280c276cd 100644 (file)
--- a/list.sh
+++ b/list.sh
@@ -34,14 +34,33 @@ list_directories(){
   ) | cut -d/ -f2- | sort
 }
 
+[ "$FILTER" ] && list_fex="$(
+  fex='p'
+  STRING "$FILTER^" \
+  | sed -r 's;\^;\n;g; s;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\&;g' \
+  | while read -r f; do
+    [ ! "${f#~}" ] && continue
+    [ "${f#~}" = "$f" ] \
+    && fex="/(\ttags=([^\t]*,)?)(${f})((,[^\t]*)?\t)/{${fex}}" \
+    || fex="/(\ttags=([^\t]*,)?)(${f#~})((,[^\t]*)?\t)/d; ${fex}"
+    printf '%s\n' "${fex}"
+  done \
+  | tail -n1
+)"
+
 list_filemeta(){
   local meta base f fn file
   base="$1"
   meta="$1/.index/meta"
   meta_dir "$_DATA/$ITEM/$base"
 
-  grep -iE "$(STRING "${SEARCH}")" "$_DATA/$ITEM/$meta" \
-  | cut -f1,6- \
+  if [ "$FILTER" ]; then
+    sed -nr "$list_fex" "$_DATA/$ITEM/$meta"
+  elif [ "${SEARCH#!}" != "${SEARCH}" ]; then
+    grep -viE "$(STRING "${SEARCH#!}")" "$_DATA/$ITEM/$meta"
+  else
+    grep -iE "$(STRING "${SEARCH}")" "$_DATA/$ITEM/$meta"
+  fi |cut -f1,6- \
   | while f="$(line)"; do
     fn="$(UNSTRING "${f#*      }")"; fn="${fn%${CR}}";
     file="$(printf '%s\n' "$_DATA/$ITEM/$base/${fn}".*)"