1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/usr/bin/env bash
set -e
# The current sky against a natal chart, with astrolog: an ordered transit
# table and a biwheel image.
#
# ASTRO_LAT, ASTRO_LONG where you are, signed decimal degrees (N and E positive)
# ASTRO_ZONE your standard (winter) UTC offset in hours west,
# e.g. 5 for New York, -1 for Berlin
# ASTRO_NATAL the natal chart, an astrolog chart file
# (default ~/.local/share/astrology/natal.dat)
# ASTROLOG astrolog's data directory, holding the Swiss
# Ephemeris files; without seas_18.se1,
# Chiron/Ceres/Pallas/Juno/Vesta come out as 0Ari00
# ASTRO_VIEWER image viewer that stays open until closed (default imv)
#
# With --emacs, prints TABLE=path and IMAGE=path instead of showing them.
: "${ASTRO_LAT:?set ASTRO_LAT to your latitude}"
: "${ASTRO_LONG:?set ASTRO_LONG to your longitude}"
: "${ASTRO_ZONE:?set ASTRO_ZONE to your standard UTC offset in hours west}"
NATAL="${ASTRO_NATAL:-$HOME/.local/share/astrology/natal.dat}"
: "${ASTROLOG:=$HOME/.local/share/astrolog}"
export ASTROLOG
[ -f "$NATAL" ] || { echo "astro-transits: no natal chart at $NATAL" >&2; exit 1; }
# astrolog wants coordinates as DD:MMH, not the signed decimal degrees
# ASTRO_LAT/ASTRO_LONG are stored as.
to_dms() {
awk -v v="$1" -v pos="$2" -v neg="$3" 'BEGIN {
h = (v < 0) ? neg : pos
v = (v < 0) ? -v : v
d = int(v)
m = int((v - d) * 60 + 0.5)
if (m == 60) { d++; m = 0 }
printf "%d:%02d%s", d, m, h
}'
}
LAT_DMS=$(to_dms "$ASTRO_LAT" N S)
LONG_DMS=$(to_dms "$ASTRO_LONG" E W)
# ASTRO_ZONE is the standard (winter) UTC offset in hours west; derive
# whether the current moment is in daylight time by comparing it to
# the actual local UTC offset right now.
off=$(date +%z)
sign=${off:0:1}
offset_min=$((10#${off:1:2} * 60 + 10#${off:3:2}))
[ "$sign" = "-" ] && offset_min=$(( -offset_min ))
standard_min=$(( -ASTRO_ZONE * 60 ))
if [ "$offset_min" -ne "$standard_min" ]; then DAYLIGHT=1; else DAYLIGHT=0; fi
COMMON_ARGS=(-zl "$LONG_DMS" "$LAT_DMS" -z "$ASTRO_ZONE" -z0 "$DAYLIGHT")
TABLE=$(mktemp --suffix=.txt)
IMAGE=$(mktemp --suffix=.png)
# --emacs hands back the table/image paths instead of displaying them,
# so a caller (e.g. Emacs) takes ownership of the files and their
# cleanup; only clean up here if we fail before handing them off.
if [ "$1" = "--emacs" ]; then
trap 'rm -f "$TABLE" "$IMAGE"' ERR
else
trap 'rm -f "$TABLE" "$IMAGE"' EXIT
fi
astrolog "${COMMON_ARGS[@]}" -i "$NATAL" -Tn -os "$TABLE" >/dev/null
astrolog "${COMMON_ARGS[@]}" -y "$NATAL" -X -Xbp -Xo "$IMAGE" >/dev/null
if [ "$1" = "--emacs" ]; then
echo "TABLE=$TABLE"
echo "IMAGE=$IMAGE"
else
cat "$TABLE"
"${ASTRO_VIEWER:-imv}" "$IMAGE"
fi
|