feat: directory-aware session resume via cwd-keyed last-session file
last-session now stores {cwd}\t{session-id} lines so each working
directory tracks its own last session independently. Resume, create,
and upsert logic updated in tui, ollie.el, and ollie.sh.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
70a2003dc3
commit
e175e5d7cc
|
|
@ -5,6 +5,21 @@ set -o history
|
|||
MOUNT=${OLLIE_9MOUNT:-$HOME/mnt/ollie}
|
||||
LAST=$HOME/.config/ollie/last-session
|
||||
|
||||
# load_session <dir> → 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 <dir> <id> → 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
|
||||
|
|
|
|||
Loading…
Reference in New Issue