diff --git a/toys/ollie.sh b/toys/ollie.sh
index dbe38a6..9715918 100755
--- a/toys/ollie.sh
+++ b/toys/ollie.sh
@@ -5,6 +5,21 @@ set -o history
MOUNT=${OLLIE_9MOUNT:-$HOME/mnt/ollie}
LAST=$HOME/.config/ollie/last-session
+# load_session
→ prints session ID for that dir, or nothing
+load_session() {
+ awk -F'\t' -v d="$1" 'NF==2 && $1==d {print $2; exit}' "$LAST" 2>/dev/null
+}
+
+# save_session → upserts {dir}\t{id} in $LAST
+save_session() {
+ local dir="$1" id="$2" tmp
+ mkdir -p "$(dirname "$LAST")"
+ tmp=$(mktemp)
+ awk -F'\t' -v d="$dir" 'NF==2 && $1!=d' "$LAST" 2>/dev/null > "$tmp" || true
+ printf '%s\t%s\n' "$dir" "$id" >> "$tmp"
+ mv "$tmp" "$LAST"
+}
+
die() { printf 'error: %s\n' "$*" >&2; exit 1; }
is_idle() { [ "$(tr -d '[:space:]' < "$S/state" 2>/dev/null)" = "idle" ]; }
drain() {
@@ -57,24 +72,25 @@ create_session() {
}
# Resolve session
+_dir=${cwd:-$(pwd)}
if [ -n "$id_flag" ]; then
[ -d "$MOUNT/s/$id_flag" ] || die "session not found: $id_flag"
id=$id_flag; printf 'session: %s (resumed)\n' "$id" >&2
elif [ "$resume" = 1 ]; then
- id=$(cat "$LAST" 2>/dev/null | tr -d '[:space:]')
- [ -n "$id" ] && [ -d "$MOUNT/s/$id" ] || die "no resumable session"
+ id=$(load_session "$_dir")
+ [ -n "$id" ] && [ -d "$MOUNT/s/$id" ] || die "no resumable session for $_dir"
printf 'session: %s (resumed)\n' "$id" >&2
elif [ "$new" = 1 ]; then
create_session
- printf '%s\n' "$id" > "$LAST"
+ save_session "$_dir" "$id"
printf 'session: %s\n' "$id" >&2
else
- id=$(cat "$LAST" 2>/dev/null | tr -d '[:space:]')
+ id=$(load_session "$_dir")
if [ -n "$id" ] && [ -d "$MOUNT/s/$id" ]; then
printf 'session: %s (resumed)\n' "$id" >&2
else
create_session
- printf '%s\n' "$id" > "$LAST"
+ save_session "$_dir" "$id"
printf 'session: %s\n' "$id" >&2
fi
fi