sfeedmenu: fixes, cleanup, add tests, add feed count to dmenu prompt. - sfeed-tools - Sfeed helper scripts.
 (HTM) git clone git://bitreich.org/sfeed-tools git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sfeed-tools
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
       ---
 (DIR) commit 76fcac95ec842a2a97d95dbd19d56fbda23007a5
 (DIR) parent 6625b04305bf19f598bcc15362e5010d98f2f8e6
 (HTM) Author: eidolon <?>
       Date:   Thu,  7 Nov 2024 21:55:54 -0500
       
       sfeedmenu: fixes, cleanup, add tests, add feed count to dmenu prompt.
       
       Diffstat:
         M sfeedmenu                           |      39 ++++++++++++++++++++++---------
       
       1 file changed, 28 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/sfeedmenu b/sfeedmenu
       @@ -2,11 +2,20 @@
        # sfeedmenu with filter
        # by: eidolon
        
       +# Set environment variable SFEED_NEW_AGE in seconds to set max
       +# age of displayed feeds.  Default is 24 hours, SFEED_NEW_AGE=$((3600*24)).
       +
       +die() {
       +    printf '%s: %s\n' "${0##*/}" "$*" >&2
       +    exit 1
       +}
       +
        filter() {
            # filter read items and deduplicate items by url
            LC_ALL=C awk -v urlfile="$urlfile" '
            BEGIN { while (getline < urlfile > 0) r[$0] = 1 }
            {
       +        $0 = substr($0, 3)
                match($0, /[a-z]+:\/\//)
                url = substr($0, RSTART)
                if (!dedup[url]++ && !r[url])
       @@ -14,26 +23,34 @@ filter() {
            }'
        }
        
       +graburl() {
       +    printf '%s\n' "$1" | sed -n 's,.* \([A-Za-z]*://\)\(.*\)$,\1\2,p'
       +}
       +
        plumber=plumb
        feeddir="$HOME/.sfeed/feeds"
        urlfile="$HOME/.sfeed/urls"
        
       -mkdir -p "$feeddir"
       +if [ ! -d "$feeddir" ]; then
       +    die "$feeddir not found."
       +fi
        
       -[ -f "$urlfile"  ] || : > "$urlfile"
       +if ! command -v "$plumber" >/dev/null; then
       +    die "$plumber not found."
       +fi
        
       -while IFS= read -r i; do
       -    [ -n "$i" ] || exit 1
       +[ -f "$urlfile"  ] || : > "$urlfile"
        
       -    i=$(printf '%s\n' "$i" \
       -    | sed -n 's,.* \([A-Za-z]*://\)\(.*\)$,\1\2,p')
       +feeds=$(sfeed_plain "$feeddir"/* | grep '^N' | filter | sort -rn)
       +count=$(printf '%s\n' "$feeds" | wc -l)
       +prompt="$count feeds:"
        
       +while IFS= read -r i
       +do
       +    [ -n "$i" ] || exit 1
       +    i=$(graburl "$i")
            printf '%s\n' "$i" >> "$urlfile"
            "$plumber" "$i"
        done << _EOF
       -$(sfeed_plain "$feeddir"/* \
       -    | sed -n '/^N / s///p' \
       -    | sort -rn \
       -    | filter \
       -    | dmenu -b -l 12)
       +$(printf '%s\n' "$feeds" | dmenu -b -p "$prompt" -l 12)
        _EOF