Compare commits

..

1 Commits

Author SHA1 Message Date
7822f27a4f improvement: consistent use of delimiter 2025-06-18 15:27:40 +02:00
11 changed files with 53 additions and 120 deletions

View File

@@ -10,7 +10,6 @@
## 5. filename (collection/name)
##
## @assign collection_labels: See configuration of the current program.
## @assign style_line: Style for each line
@include "lib/awk/icalendar.awk"
@@ -39,7 +38,7 @@ function title(start, summary) {
depth = split(FILENAME, path, "/")
collection = depth > 1 ? path[depth-1] : ""
collection = collection in collection2label ? collection2label[collection] : collection
return style_line "~ " collection " " gensub(/^[^0-9]*([0-9]{4})([0-9]{2}).*$/, "\\1-\\2", "1", start) " " summary OFF
return FAINT "~ " collection " " gensub(/^[^0-9]*([0-9]{4})([0-9]{2}).*$/, "\\1-\\2", "1", start) " " summary OFF
}
# AWK program
@@ -53,6 +52,7 @@ BEGIN {
collection2label[m[1]] = m[2]
}
# Colors
FAINT = "\033[2m"
OFF = "\033[m"
}
BEGINFILE { inside = 0; rs = 0; dur = 0; summary = ""; start = "ERROR"; end = "ERROR" }

View File

@@ -3,20 +3,22 @@
##
## @assign cur: Day-of-month to mark as `today`
## @assign day: Day-of-month to highlight
## @assign style_month: Theme to use for month
## @assign style_weekdays: Theme to use for weekdays
## @assign style_cur: Theme to use for current day
## @assign style_highlight: Theme to use for highlighted day
BEGIN {
BLACK = "\033[1;30m"
GREEN = "\033[1;32m"
RED = "\033[1;31m"
FAINT = "\033[2m"
BOLD = "\033[1m"
BG = "\033[41m"
OFF = "\033[m"
day = day + 0
cur = cur + 0
}
NR == 1 { print style_month $0 OFF; next }
NR == 2 { print style_weekdays $0 OFF; next }
NR == 1 { print GREEN $0 OFF; next }
NR == 2 { print FAINT $0 OFF; next }
{
sub("\\y"cur"\\y", style_cur cur OFF)
sub("\\y"day"\\y", style_highlight day OFF)
sub("\\y"cur"\\y", BG BLACK BOLD cur OFF)
sub("\\y"day"\\y", RED BOLD day OFF)
print
}

View File

@@ -21,13 +21,6 @@
## @assign today: Date of `today` in the format %D (%m/%d/%y)
## @assign daystart: Hour of start of the day
## @assign dayend: Hour of end of the day
## @assign style_allday
## @assign style_timerange
## @assign style_confirmed
## @assign style_tentative
## @assign style_cancelled
## @assign style_hour
## @assign style_emptyhour
# Functions
@@ -36,7 +29,7 @@
# @input status: Event status, one of TENTATIVE, CONFIRMED, CANCELLED
# @return: Color modifier
function color_from_status(status) {
return status == "CANCELLED" ? style_cancelled : status == "TENTATIVE" ? style_tentative : style_confirmed
return status == "CANCELLED" ? STRIKE CYAN : status == "TENTATIVE" ? FAINT CYAN : CYAN
}
# Return line for all-day event.
@@ -48,7 +41,7 @@ function color_from_status(status) {
# @return: Single-line string
function allday(collection, desc, status, color) {
color = color_from_status(status)
return collection " " style_allday
return collection " " LIGHT_CYAN ITALIC FAINT " (allday) " OFF color desc OFF
}
# Return line for multi-day event, or event that starts at midnight, which ends today.
@@ -61,7 +54,7 @@ function allday(collection, desc, status, color) {
# @return: Single-line string
function endstoday(stop, collection, desc, status) {
color = color_from_status(status)
return collection " " style_timerange " → " stop ": " OFF color desc OFF
return collection " " LIGHT_CYAN " → " stop ": " OFF color desc OFF
}
# Return line for event that starts sometime today.
@@ -76,9 +69,9 @@ function endstoday(stop, collection, desc, status) {
function slice(start, stop, collection, desc, status) {
color = color_from_status(status)
if (stop == "00:00")
return collection " " style_timerange start " → " ": " OFF color desc OFF
return collection " " LIGHT_CYAN start " → " ": " OFF color desc OFF
else
return collection " " style_timerange start " " stop ": " OFF color desc OFF
return collection " " LIGHT_CYAN start " " stop ": " OFF color desc OFF
}
# Print line for a single hour entry.
@@ -86,7 +79,7 @@ function slice(start, stop, collection, desc, status) {
# @input hour: Hour of the entry
function hrline(hour) {
hour = hour < 10 ? "0"hour : hour
print today, hour, "", "", "", " " style_hou hour ":00" OFF " " style_emptyhour
print today, hour, "", "", "", " " FAINT hour ":00 ----------------------" OFF
}
# Print lines for hour entries before an event that starts at `start` and stops
@@ -114,6 +107,11 @@ function hrlines(start, stop, h, starth, stoph, tmp, i) {
BEGIN {
FS = "\t"
OFS = "\t"
LIGHT_CYAN = "\033[1;36m"
CYAN = "\033[1;36m"
ITALIC = "\033[3m"
FAINT = "\033[2m"
STRIKE = "\033[9m"
OFF = "\033[m"
}
$1 == "00:00" && $2 == "00:00" { print today, $1, $3, $4, $5, allday($6, $7, $8); next }

View File

@@ -4,10 +4,6 @@
## printf "%s\t%s\t%s\t%s\n" "$i" "$s" "$e" "$description"
##
## @assign startofweek: Date of first day in the week
## @assign style_day: Style for dates
## @assign style_event_delim: Event delimiter
## @assign style_summary: Style for summary lines
## @assign style_time: Style for times
# Functions
@@ -16,7 +12,7 @@
# @input desc: String with a description of the event
# @return: Single-line string
function c(desc) {
return style_summary desc OFF " " style_event_delim
return CYAN desc OFF " " RED "/" OFF
}
# AWK program
@@ -24,16 +20,19 @@ function c(desc) {
BEGIN {
FS = "\t"
OFS = "\t"
GREEN = "\033[1;32m"
RED = "\033[1;31m"
CYAN = "\033[1;36m"
OFF = "\033[m"
}
$2 == "00:00" && $3 == "00:00" { dayline = dayline " " c($4); next }
$2 == "00:00" { dayline = dayline style_time " → " $3 OFF " " c($4); next }
$3 == "00:00" { dayline = dayline style_time " " $2 " → " OFF c($4); next }
NF == 4 { dayline = dayline style_time " " $2 " " $3 OFF " " c($4); next }
$2 == "00:00" { dayline = dayline " → " $3 " " c($4); next }
$3 == "00:00" { dayline = dayline " " $2 " → " c($4); next }
NF == 4 { dayline = dayline " " $2 " " $3 " " c($4); next }
NF == 1 && dayline { print "+", startofweek " +" $1-1 " days", "", dayline }
NF == 1 {
cmd = "date -d '" startofweek " +" $1 " days' +\"%a %e %b %Y\""
cmd | getline dayline
close(cmd)
dayline = style_day dayline ": " OFF
dayline = GREEN dayline ": " OFF
}

View File

@@ -70,7 +70,9 @@ __refresh_data
### Exports
# The preview calls run in subprocesses. These require the following variables:
export ROOT CAT AWK_GET AWK_CALSHIFT AWK_CALANNOT CYAN STRIKE FAINT WHITE ITALIC OFF AWK_ATTACHLS
# The reload commands also run in subprocesses, and use in addition
export COLLECTION_LABELS DAY_START DAY_END AWK_DAYVIEW AWK_WEEKVIEW AWK_PARSE
# as well as the following variables that will be dynamically specified. So, we
# export them in the main loop using the following function.

View File

@@ -20,102 +20,87 @@ AWK_APPROX=$(
@@include awk/approx.awk
EOF
)
export AWK_APPROX
AWK_MERGE=$(
cat <<'EOF'
@@include awk/merge.awk
EOF
)
export AWK_MERGE
AWK_PARSE=$(
cat <<'EOF'
@@include awk/parse.awk
EOF
)
export AWK_PARSE
AWK_WEEKVIEW=$(
cat <<'EOF'
@@include awk/weekview.awk
EOF
)
export AWK_WEEKVIEW
AWK_DAYVIEW=$(
cat <<'EOF'
@@include awk/dayview.awk
EOF
)
export AWK_DAYVIEW
AWK_GET=$(
cat <<'EOF'
@@include awk/get.awk
EOF
)
export AWK_GET
AWK_UPDATE=$(
cat <<'EOF'
@@include awk/update.awk
EOF
)
export AWK_UPDATE
AWK_NEW=$(
cat <<'EOF'
@@include awk/new.awk
EOF
)
export AWK_NEW
AWK_CALSHIFT=$(
cat <<'EOF'
@@include awk/calshift.awk
EOF
)
export AWK_CALSHIFT
AWK_CALANNOT=$(
cat <<'EOF'
@@include awk/calannot.awk
EOF
)
export AWK_CALANNOT
AWK_SET=$(
cat <<'EOF'
@@include awk/set.awk
EOF
)
export AWK_SET
AWK_ATTACHLS=$(
cat <<'EOF'
@@include awk/attachls.awk
EOF
)
export AWK_ATTACHLS
AWK_ATTACHDD=$(
cat <<'EOF'
@@include awk/attachdd.awk
EOF
)
export AWK_ATTACHDD
AWK_ATTACHRM=$(
cat <<'EOF'
@@include awk/attachrm.awk
EOF
)
export AWK_ATTACHRM
AWK_ATTACH=$(
cat <<'EOF'
@@include awk/attach.awk
EOF
)
export AWK_ATTACH

View File

@@ -21,9 +21,9 @@ if [ "${1:-}" = "--preview-event" ]; then
elif [ "$status" = "CANCELLED" ]; then
symb="❌"
fi
echo "📅${symb:-} ${STYLE_EPV_DATETIME}$start${OFF}${STYLE_EPV_DATETIME}$end${OFF}"
echo "📅${symb:-} ${CYAN}$start${OFF}${CYAN}$end${OFF}"
if [ -n "${location:-}" ]; then
echo "📍 ${STYLE_EPV_LOCATION}$location${OFF}"
echo "📍 ${CYAN}$location${OFF}"
fi
attcnt=$(awk "$AWK_ATTACHLS" "$fpath" | wc -l)
if [ "$attcnt" -gt 0 ]; then
@@ -88,12 +88,12 @@ if [ "${1:-}" = "--preview-week" ]; then
fi
# show
(
cal "$month_pre2" "$year_pre2" | awk "$AWK_CALSHIFT" | awk -v cur="${var_pre2:-}" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month_pre" "$year_pre" | awk "$AWK_CALSHIFT" | awk -v cur="${var_pre:-}" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month" "$year" | awk "$AWK_CALSHIFT" | awk -v cur="${var:-}" -v day="$day" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month_nex" "$year_nex" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex:-}" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month_nex2" "$year_nex2" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex2:-}" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month_nex3" "$year_nex3" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex3:-}" -v style_month="$STYLE_CALENDAR_MONTH" -v style_weekdays="$STYLE_CALENDAR_WEEKDAYS" -v style_cur="$STYLE_CALENDAR_CURRENT_DAY" -v style_highlight="$STYLE_CALENDAR_HL_DAY" "$AWK_CALANNOT"
cal "$month_pre2" "$year_pre2" | awk "$AWK_CALSHIFT" | awk -v cur="${var_pre2:-}" "$AWK_CALANNOT"
cal "$month_pre" "$year_pre" | awk "$AWK_CALSHIFT" | awk -v cur="${var_pre:-}" "$AWK_CALANNOT"
cal "$month" "$year" | awk "$AWK_CALSHIFT" | awk -v cur="${var:-}" -v day="$day" "$AWK_CALANNOT"
cal "$month_nex" "$year_nex" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex:-}" "$AWK_CALANNOT"
cal "$month_nex2" "$year_nex2" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex2:-}" "$AWK_CALANNOT"
cal "$month_nex3" "$year_nex3" | awk "$AWK_CALSHIFT" | awk -v cur="${var_nex3:-}" "$AWK_CALANNOT"
) | awk '{ l[NR%8] = l[NR%8] " " $0 } END {for (i in l) if (i>0) print l[i] }'
fi
exit

View File

@@ -20,16 +20,15 @@ if [ -z "${ROOT:-}" ] || [ -z "${COLLECTION_LABELS:-}" ]; then
err "Configuration is incomplete."
exit 1
fi
export ROOT COLLECTION_LABELS
export SYNC_CMD=${SYNC_CMD:-echo 'Synchronization disabled'}
export DAY_START=${DAY_START:-8}
export DAY_END=${DAY_END:-18}
export ZI_DIR=${ZI_DIR:-/usr/share/zoneinfo/posix}
SYNC_CMD=${SYNC_CMD:-echo 'Synchronization disabled'}
DAY_START=${DAY_START:-8}
DAY_END=${DAY_END:-18}
ZI_DIR=${ZI_DIR:-/usr/share/zoneinfo/posix}
if [ ! -d "$ZI_DIR" ]; then
err "Could not determine time-zone information"
exit 1
fi
export OPEN=${OPEN:-open}
OPEN=${OPEN:-open}
# Check and load required tools
# - FZF: Fuzzy finder `fzf``
@@ -40,14 +39,14 @@ export OPEN=${OPEN:-open}
# The presence of POSIX tools is not checked.
if command -v "fzf" >/dev/null; then
export FZF="fzf --black"
FZF="fzf --black"
else
err "Did not find the command-line fuzzy finder fzf."
exit 1
fi
if command -v "uuidgen" >/dev/null; then
export UUIDGEN="uuidgen"
UUIDGEN="uuidgen"
else
err "Did not find the uuidgen command."
exit 1
@@ -59,8 +58,8 @@ elif command -v "batcat" >/dev/null; then
CAT="batcat"
fi
CAT=${CAT:+$CAT --color=always --style=numbers --language=md}
export CAT=${CAT:-cat}
CAT=${CAT:-cat}
if command -v "git" >/dev/null && [ -d "$ROOT/.git" ]; then
export GIT="git -C $ROOT"
GIT="git -C $ROOT"
fi

View File

@@ -9,7 +9,6 @@ __load_approx_data() {
xargs -0 -P0 \
awk \
-v collection_labels="$COLLECTION_LABELS" \
-v style_line="$STYLE_LV" \
"$AWK_APPROX"
}

View File

@@ -1,42 +1,8 @@
# Colors
GREEN="\033[1;32m"
BLACK="\033[1;30m"
RED="\033[1;31m"
WHITE="\033[1;97m"
CYAN="\033[1;36m"
LIGHT_CYAN="\033[1;36m"
STRIKE="\033[9m"
ITALIC="\033[3m"
FAINT="\033[2m"
BOLD="\033[1m"
BG="\033[41m"
OFF="\033[m"
# Style
# Calendar
export STYLE_CALENDAR_MONTH="$GREEN"
export STYLE_CALENDAR_WEEKDAYS="$FAINT"
export STYLE_CALENDAR_CURRENT_DAY="$BLACK$BG"
export STYLE_CALENDAR_HL_DAY="$BOLD$RED"
# Week view
export STYLE_WV_DAY="$GREEN"
export STYLE_WV_EVENT_DELIM="$RED / $OFF"
export STYLE_WV_SUMMARY="$CYAN"
export STYLE_WV_TIME="$WHITE"
# List view
export STYLE_LV="$FAINT"
# Day view
export STYLE_DV_ALLDAY="$LIGHT_CYAN$ITALIC$FAINT (allday) $OFF"
export STYLE_DV_TIME="$LIGHT_CYAN"
export STYLE_DV_CONFIRMED="$CYAN"
export STYLE_DV_TENTATIVE="$FAINT$CYAN"
export STYLE_DV_CANCELLED="$STRIKE$CYAN"
export STYLE_DV_HOUR="$FAINT"
export STYLE_DV_EMPTYHOUR="$FAINT----------------------$OFF"
# Event preview
export STYLE_EPV_DATETIME="$CYAN"
export STYLE_EPV_LOCATION="$GREEN"

View File

@@ -58,21 +58,10 @@ __view_day() {
else
continue
fi
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$s" "$e" "$starttime" "$endtime" "$fpath" "$collection" "$description" "$status"
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\%s\n" "$s" "$e" "$starttime" "$endtime" "$fpath" "$collection" "$description" "$status"
done)
fi
echo "$sef" | sort -n | awk \
-v today="$today" \
-v daystart="$DAY_START" \
-v dayend="$DAY_END" \
-v style_allday="$STYLE_DV_ALLDAY" \
-v style_timerange="$STYLE_DV_TIME" \
-v style_confirmed="$STYLE_DV_CONFIRMED" \
-v style_tentative="$STYLE_DV_TENTATIVE" \
-v style_cancelled="$STYLE_DV_CANCELLED" \
-v style_hour="$STYLE_DV_HOUR" \
-v style_emptyhour="$STYLE_DV_EMPTYHOUR" \
"$AWK_DAYVIEW"
echo "$sef" | sort -n | awk -v today="$today" -v daystart="$DAY_START" -v dayend="$DAY_END" "$AWK_DAYVIEW"
}
# This function prints the view for the week that contains the day specified in `$DISPLAY_DATE`.
@@ -138,13 +127,7 @@ __view_week() {
echo "$sef"
seq 0 7
} | sort -n)
echo "$sef" | awk \
-v startofweek="$startofweek" \
-v style_day="$STYLE_WV_DAY" \
-v style_event_delim="$STYLE_WV_EVENT_DELIM" \
-v style_summary="$STYLE_WV_SUMMARY" \
-v style_time="$STYLE_WV_TIME" \
"$AWK_WEEKVIEW"
echo "$sef" | awk -v startofweek="$startofweek" "$AWK_WEEKVIEW"
}
# This function prints all entries.