opencode zsh cmd update

This commit is contained in:
David Chen 2026-02-03 17:17:35 -08:00
parent d4a71cf7af
commit 4051d27f71
3 changed files with 71 additions and 1 deletions

View file

@ -51,6 +51,7 @@ _op_run() {
history
sessions
logs
skill
)
local name
@ -104,9 +105,35 @@ _op_run() {
fi
fi
OPENCODE_CONFIG_DIR="$tmp_home" "${opencode_cmd[@]}"
local explicit_session=""
local i
for (( i=1; i<=${#opencode_cmd[@]}; i++ )); do
case "${opencode_cmd[$i]}" in
-s|--session) explicit_session="${opencode_cmd[$((i+1))]}"; break ;;
-s=*|--session=*) explicit_session="${opencode_cmd[$i]#*=}"; break ;;
esac
done
OPENCODE_CONFIG_DIR="$tmp_home" \
RIPGREP_CONFIG_PATH="${RIPGREP_CONFIG_PATH:-$HOME/.ripgreprc}" \
"${opencode_cmd[@]}"
local exit_code=$?
local session_to_save=""
if [ -n "$explicit_session" ]; then
session_to_save="$explicit_session"
else
session_to_save=$(OPENCODE_CONFIG_DIR="$tmp_home" opencode session list 2>/dev/null | awk 'NR==3{print $1}')
fi
if [ -n "$session_to_save" ] && [ -n "$TMUX" ]; then
local win_key
win_key=$(tmux display-message -p '#{session_name}:#{window_name}')
local state_dir="${XDG_STATE_HOME:-$HOME/.local/state}/op"
mkdir -p "$state_dir"
printf '%s\n%s\n' "$session_to_save" "$tag" > "$state_dir/window_${win_key//[^a-zA-Z0-9_]/_}"
fi
trap - EXIT INT TERM
eval "$cleanup_cmd"
return $exit_code

42
zsh/functions/opr.zsh Normal file
View file

@ -0,0 +1,42 @@
opr() {
if [ -z "$TMUX" ]; then
print -u2 "opr: not in tmux"
return 1
fi
local win_key
win_key=$(tmux display-message -p '#{session_name}:#{window_name}')
local state_file="${XDG_STATE_HOME:-$HOME/.local/state}/op/window_${win_key//[^a-zA-Z0-9_]/_}"
if [ ! -f "$state_file" ]; then
print -u2 "opr: no previous session for this tmux window"
return 1
fi
local session_id tag
{ read -r session_id; read -r tag; } < "$state_file"
if [ -z "$session_id" ]; then
print -u2 "opr: no previous session to resume"
return 1
fi
tag="${tag:-op}"
print -u2 "opr: resuming session $session_id"
if ! typeset -f _op_run >/dev/null; then
local src=${funcfiletrace[1]%:*}
local dir=${src:h}
local common="$dir/_op_common.zsh"
if [ ! -f "$common" ]; then
common="${XDG_CONFIG_HOME:-$HOME/.config}/zsh/functions/_op_common.zsh"
fi
if [ ! -f "$common" ]; then
print -u2 "opr: missing _op_common.zsh at $common"
return 1
fi
source "$common" || return 1
fi
_op_run "$tag" --session "$session_id" "$@"
}

View file

@ -18,5 +18,6 @@ source ~/.config/zsh/functions/cd_git_root.zsh
source ~/.config/zsh/functions/co.zsh
source ~/.config/zsh/functions/op.zsh
source ~/.config/zsh/functions/opr.zsh
source ~/.config/zsh/functions/se.zsh