cleand and with-nth

This commit is contained in:
Ämin Baumeler 2025-06-05 20:05:58 +02:00
parent 6973fb9f04
commit aaf3c56565
4 changed files with 22 additions and 28 deletions

View File

@ -48,7 +48,7 @@ function title(start, summary) {
depth = split(FILENAME, path, "/"); depth = split(FILENAME, path, "/");
collection = depth > 1 ? path[depth-1] : ""; collection = depth > 1 ? path[depth-1] : "";
collection = collection in collection2label ? collection2label[collection] : collection; collection = collection in collection2label ? collection2label[collection] : collection;
return FAINT "~ " collection " " gensub(/^[^0-9]*([0-9]{4})([0-9]{2}).*$/, "\\1-\\2", "1", start) " " summary " ;" start OFF return FAINT "~ " collection " " gensub(/^[^0-9]*([0-9]{4})([0-9]{2}).*$/, "\\1-\\2", "1", start) " " summary OFF
} }
BEGIN { BEGIN {
@ -69,7 +69,7 @@ BEGIN {
OFF = "\033[m"; OFF = "\033[m";
} }
BEGINFILE { inside = 0; rs = 0; dur = 0; summary = ""; start = "ERROR"; end = "ERROR" } BEGINFILE { inside = 0; rs = 0; dur = 0; summary = ""; start = "ERROR"; end = "ERROR" }
/^END:VEVENT/ { print start, dur ? start " " end : end, title(start, summary), fn(FILENAME, n, a); nextfile } /^END:VEVENT/ { print "~", start, dur ? start " " end : end, title(start, summary), fn(FILENAME, n, a); nextfile }
/^DTSTART/ && inside { start = parse( dt) } /^DTSTART/ && inside { start = parse( dt) }
/^DTEND/ && inside { end = parse( dt) } /^DTEND/ && inside { end = parse( dt) }
/^DURATION/ && inside { end = parse_duration( dt, dta, i, n, a, seps); dur = 1 } /^DURATION/ && inside { end = parse_duration( dt, dta, i, n, a, seps); dur = 1 }

View File

@ -11,7 +11,7 @@ NR == FNR {
if (from[FNR] > to[FNR]) if (from[FNR] > to[FNR])
print "FNR", FNR, ":", from[FNR],"-",to[FNR], " ",$0; print "FNR", FNR, ":", from[FNR],"-",to[FNR], " ",$0;
for(i=from[FNR]; i<=to[FNR]; i++) { for(i=from[FNR]; i<=to[FNR]; i++) {
week[i] = week[i] ? week[i] ";" $4 : $4 week[i] = week[i] " " $5
} }
} }
END { for (i in week) print i, week[i]; } END { for (i in week) print i week[i]; }

View File

@ -8,12 +8,13 @@ BEGIN {
CYAN = "\033[1;36m"; CYAN = "\033[1;36m";
FAINT = "\033[2m"; FAINT = "\033[2m";
OFF = "\033[m"; OFF = "\033[m";
OFS = "|"
} }
/^[0-7] 00:00 -- 00:00/ { dayline = dayline " " c(); next } /^[0-7] 00:00 -- 00:00/ { dayline = dayline " " c(); next }
/^[0-7] 00:00 -- / { dayline = dayline " <-|" $4 " " c(); next } /^[0-7] 00:00 -- / { dayline = dayline " <-|" $4 " " c(); next }
/^[0-7] [0-9]{2}:[0-9]{2} -- 00:00/ { dayline = dayline " " $2 "|-> " c(); next } /^[0-7] [0-9]{2}:[0-9]{2} -- 00:00/ { dayline = dayline " " $2 "|-> " c(); next }
/^[0-7] [0-9]{2}:[0-9]{2} -- [0-9]{2}:[0-9]{2}/ { dayline = dayline " " $2 " - " $4 " " c(); next } /^[0-7] [0-9]{2}:[0-9]{2} -- [0-9]{2}:[0-9]{2}/ { dayline = dayline " " $2 " - " $4 " " c(); next }
/^[0-7]$/ && dayline { print dayline " ;" startofweek " +" $0 " days"; } /^[0-7]$/ && dayline { print "+", startofweek " +" $0 " days", "", dayline; }
/^[0-7]$/ { /^[0-7]$/ {
cmd = "date -d '" startofweek " +" $0 " days' +\"%a %e %b %Y\""; cmd = "date -d '" startofweek " +" $0 " days' +\"%a %e %b %Y\"";
cmd | getline dayline; cmd | getline dayline;

View File

@ -73,13 +73,6 @@ EOF
) )
export AWK_PARSE export AWK_PARSE
AWK_WEEKS=$(
cat <<'EOF'
@@include src/awk/weeks.awk
EOF
)
export AWK_WEEKS
AWK_WEEKVIEW=$( AWK_WEEKVIEW=$(
cat <<'EOF' cat <<'EOF'
@@include src/awk/weekview.awk @@include src/awk/weekview.awk
@ -100,7 +93,7 @@ __load_approx_data() {
} }
__load_weeks() { __load_weeks() {
dates=$(awk -F'|' '{ print $1; print $2 }' "$APPROX_DATA_FILE") dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE")
file_dates=$(mktemp) file_dates=$(mktemp)
echo "$dates" | date --file="/dev/stdin" +"%s" >"$file_dates" echo "$dates" | date --file="/dev/stdin" +"%s" >"$file_dates"
awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE" awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE"
@ -110,13 +103,12 @@ __load_weeks() {
__list() { __list() {
weeknr=$(date -d "$DISPLAY_DATE" +"%s") weeknr=$(date -d "$DISPLAY_DATE" +"%s")
weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday
files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2) files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
dayofweek=$(date -d "$DISPLAY_DATE" +"%u") dayofweek=$(date -d "$DISPLAY_DATE" +"%u")
delta=$((1 - dayofweek)) delta=$((1 - dayofweek))
startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D") startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D")
# loop over files # loop over files
sef=$({ sef=$({
IFS=';'
set -- $files set -- $files
for file in "$@"; do for file in "$@"; do
file="$ROOT/$file" file="$ROOT/$file"
@ -166,13 +158,11 @@ __list() {
} }
if [ -z "${APPROX_DATA_FILE:-}" ]; then if [ -z "${APPROX_DATA_FILE:-}" ]; then
echo "GOING TO LOAD"
APPROX_DATA_FILE=$(mktemp) APPROX_DATA_FILE=$(mktemp)
__load_approx_data >"$APPROX_DATA_FILE" __load_approx_data >"$APPROX_DATA_FILE"
export APPROX_DATA_FILE export APPROX_DATA_FILE
fi fi
if [ -z "${WEEKLY_DATA_FILE:-}" ]; then if [ -z "${WEEKLY_DATA_FILE:-}" ]; then
echo "GOING TO LOAD WD"
WEEKLY_DATA_FILE=$(mktemp) WEEKLY_DATA_FILE=$(mktemp)
__load_weeks >"$WEEKLY_DATA_FILE" __load_weeks >"$WEEKLY_DATA_FILE"
export WEEKLY_DATA_FILE export WEEKLY_DATA_FILE
@ -188,7 +178,8 @@ DISPLAY_DATE_PREV=$(date -d "$DISPLAY_DATE -1 week" +"%D")
DISPLAY_DATE_NEXT=$(date -d "$DISPLAY_DATE +1 week" +"%D") DISPLAY_DATE_NEXT=$(date -d "$DISPLAY_DATE +1 week" +"%D")
selection=$( ( selection=$( (
cut -d '|' -f 3 "$APPROX_DATA_FILE" #cut -d '|' -f 3 "$APPROX_DATA_FILE"
cat "$APPROX_DATA_FILE"
yes " " | head -n 50 yes " " | head -n 50
__list __list
) | ) |
@ -197,6 +188,9 @@ selection=$( (
--no-sort \ --no-sort \
--no-hscroll \ --no-hscroll \
--ellipsis='' \ --ellipsis='' \
--delimiter='|' \
--with-nth='{4}' \
--accept-nth=1,2,3,5 \
--ansi \ --ansi \
--no-clear \ --no-clear \
--bind="ctrl-p:become($0 --date '$DISPLAY_DATE_PREV')" \ --bind="ctrl-p:become($0 --date '$DISPLAY_DATE_PREV')" \
@ -208,16 +202,15 @@ if [ -z "$selection" ]; then
return 0 return 0
fi fi
case "$selection" in sign=$(echo "$selection" | cut -d '|' -f 1)
"~"*) startdate=$(echo "$selection" | cut -d '|' -f 2)
start=$(echo "$selection" | rev | cut -d';' -f 1 | rev) endate=$(echo "$selection" | cut -d '|' -f 3)
exec $0 --date "$start" files=$(echo "$selection" | cut -d '|' -f 4)
;; if [ "$sign" = "~" ]; then
*) exec $0 --date "$startdate"
day=$(echo "$selection" | rev | cut -d';' -f 1 | rev) else
exec $0 --day "$day" exec $0 --day "$startdate"
;; fi
esac
echo "Going to end..." echo "Going to end..."
echo "$selection" echo "$selection"
echo "STOPPING NOW" echo "STOPPING NOW"