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