mailto: function in card listing
[confetti] / pages / cards.sh
index 506022f..538146d 100755 (executable)
@@ -60,26 +60,12 @@ list_hi_companies(){
 
 list_categories() {
   catfile="${_DATA}/mappings/categories"
-  sort -u "$catfile"
+  sort -u "$catfile" \
+  | sed -r '/^[\t ]*$/d'
 }
 
-listcards() {
-  filterex='s;^([^\n]+)\n.*$;\1;p'
-  printf '%s\n' "${_GET[filter]}" |tr '^' '\n' \
-  | sed -r 's;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\\\&;g' \
-  | while read each; do
-    case $each in
-        name:*) expr='(FN|NICKNAME|N)(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
-      street:*) expr='ADR(\;[^\n]+)*:([^\;]*;){2}[^\;\n]*'"(${each#*:})";;
-         zip:*) expr='ADR(\;[^\n]+)*:([^\;]*;){5}[^\;\n]*'"(${each#*:})";;
-      any:*|:*) expr="[^\n]*"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
-           *:*) expr="${each%%:*}"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
-             *) expr="(${each})";;
-    esac
-    filterex='/(^|\n)'"${expr}"'/{'"${filterex}"'}'
-  done
-
-  for file in "${_DATA}/vcard/"*.vcf; do
+listcards_order(){
+  while read file; do
     case "${_GET[order]}" in
       firstname)
         printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")" "$file"
@@ -94,12 +80,43 @@ listcards() {
         ;;
     esac
   done \
-  | sort -u |sed -r 's;^.*\t;;' \
-  | while read n; do
+  | sort -u |sed -r 's;^.*\t;;'
+}
+
+listcards_filter(){
+  filterex='s;^([^\n]+)\n.*$;\1;p'
+  printf '%s\n' "${_GET[filter]}" |tr '^' '\n' \
+  | sed -r 's;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\\\&;g' \
+  | while read each; do
+    case $each in
+        name:*) expr='(FN|NICKNAME|N)(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
+      street:*) expr='ADR(\;[^\n]+)*:([^\;]*;){2}[^\;\n]*'"(${each#*:})";;
+         zip:*) expr='ADR(\;[^\n]+)*:([^\;]*;){5}[^\;\n]*'"(${each#*:})";;
+      any:*|:*) expr="[^\n]*"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
+           *:*) expr="${each%%:*}"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";;
+             *) expr="(${each})";;
+    esac
+    filterex='/(^|\n)'"${expr}"'/I{'"${filterex}"'}'
+  done
+
+  while read n; do
     { printf '%s\n' "$n"; cat "$n"; } \
-    | sed -rn ':X;N;$!bX; {'"$filterex"'}'
-  done \
-  | sed -r 's;^(.*/)*;;;'
+    | sed -En ':X;N;$!bX; {'"$filterex"'}'
+  done
+
+}
+
+listcards() {
+  printf %s\\n "${_DATA}/vcard/"*.vcf \
+  | listcards_filter \
+  | listcards_order \
+  | sed -E 's;^(.*/)*;;;'
+}
+
+listcards_mail() {
+  printf %s\\n "${_DATA}/vcard/"*.vcf \
+  | listcards_filter \
+  | xargs -r -d\\n sed -En 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p'
 }
 
 vcf_parse() {