diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-08 14:24:36 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-08 14:24:36 +0200 |
| commit | e4638ec665c28ab077831ebd7a861fc1b4b716f8 (patch) | |
| tree | 2f5f7ba17d596ee3d627185582e4935815a60f4f /frontends/scripts | |
| parent | e648341f45628a5fef4cce29388dfd6cb48e1f29 (diff) | |
doesnt belong here
Diffstat (limited to 'frontends/scripts')
| -rw-r--r-- | frontends/scripts/tmux-edit-send | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/frontends/scripts/tmux-edit-send b/frontends/scripts/tmux-edit-send deleted file mode 100644 index ef1030f..0000000 --- a/frontends/scripts/tmux-edit-send +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env bash -set -u -o pipefail - -LOG_ENABLED=0 -log_file="${TMPDIR:-/tmp}/tmux-edit-send.log" -log() { - if [ "$LOG_ENABLED" -eq 1 ]; then - printf '%s\n' "$*" >> "$log_file" - fi -} - -# Read the target pane id from a temp file created by tmux binding. -read_target_from_file() { - local file_path="$1" - if [ -n "$file_path" ] && [ -f "$file_path" ]; then - sed -n '1p' "$file_path" | tr -d '[:space:]' - fi -} - -# Read the target pane id from tmux environment if present. -read_target_from_env() { - local env_line - env_line="$(tmux show-environment -g TMUX_EDIT_TARGET 2>/dev/null || true)" - case "$env_line" in - TMUX_EDIT_TARGET=*) printf '%s' "${env_line#TMUX_EDIT_TARGET=}" ;; - esac -} - -# Resolve the target pane id, falling back to the last pane. -resolve_target_pane() { - local candidate="$1" - local current_pane last_pane - - current_pane="$(tmux display-message -p "#{pane_id}" 2>/dev/null || true)" - log "current pane=${current_pane:-<empty>}" - if [ -n "$candidate" ] && [[ "$candidate" == *"#{"* ]]; then - log "format target detected, clearing" - candidate="" - fi - if [ -z "$candidate" ]; then - candidate="$(tmux display-message -p "#{last_pane}" 2>/dev/null || true)" - elif [ "$candidate" = "$current_pane" ]; then - last_pane="$(tmux display-message -p "#{last_pane}" 2>/dev/null || true)" - if [ -n "$last_pane" ]; then - candidate="$last_pane" - fi - fi - printf '%s' "$candidate" -} - -# Capture the latest multi-line prompt content from the pane. -capture_prompt_text() { - local target="$1" - tmux capture-pane -p -t "$target" -S -2000 2>/dev/null | awk ' - function trim_box(line) { - sub(/^ *│ ?/, "", line) - sub(/ *│ *$/, "", line) - sub(/[[:space:]]+$/, "", line) - return line - } - /^ *│ *→/ && index($0,"INSERT")==0 && index($0,"Add a follow-up")==0 { - if (text != "") last = text - text = "" - capture = 1 - line = $0 - sub(/^.*→ ?/, "", line) - line = trim_box(line) - if (line != "") text = line - next - } - capture { - if ($0 ~ /^ *└/) { - capture = 0 - if (text != "") last = text - next - } - if ($0 ~ /^ *│/ && index($0,"INSERT")==0 && index($0,"Add a follow-up")==0) { - line = trim_box($0) - if (line != "") { - if (text != "") text = text " " line - else text = line - } - } - } - END { - if (text != "") last = text - if (last != "") print last - } - ' -} - -# Write captured prompt text into the temp file if available. -prefill_tmpfile() { - local tmpfile="$1" - local prompt_text="$2" - if [ -n "$prompt_text" ]; then - printf '%s\n' "$prompt_text" > "$tmpfile" - fi -} - -# Ensure the target pane exists before sending keys. -validate_target_pane() { - local target="$1" - local pane target_found - if [ -z "$target" ]; then - log "error: no target pane determined" - echo "Could not determine target pane." >&2 - return 1 - fi - target_found=0 - for pane in $(tmux list-panes -a -F "#{pane_id}" 2>/dev/null || true); do - if [ "$pane" = "$target" ]; then - target_found=1 - break - fi - done - if [ "$target_found" -ne 1 ]; then - log "error: target pane not found: $target" - echo "Target pane not found: $target" >&2 - return 1 - fi -} - -# Send temp file contents to the target pane line by line. -send_content() { - local target="$1" - local tmpfile="$2" - local prompt_text="$3" - local first_line=1 - local line - while IFS= read -r line || [ -n "$line" ]; do - if [ "$first_line" -eq 1 ] && [ -n "$prompt_text" ]; then - if [[ "$line" == "$prompt_text"* ]]; then - line="${line#"$prompt_text"}" - fi - fi - first_line=0 - tmux send-keys -t "$target" -l "$line" - tmux send-keys -t "$target" Enter - done < "$tmpfile" - log "sent content to $target" -} - -# Main entry point. -main() { - local target_file="${1:-}" - local target - local editor="${EDITOR:-vi}" - local tmpfile - local prompt_text - - target="$(read_target_from_file "$target_file" || true)" - if [ -n "$target" ]; then - log "file target=${target:-<empty>}" - rm -f "$target_file" - fi - if [ -z "$target" ]; then - target="${TMUX_EDIT_TARGET:-}" - fi - log "env target=${target:-<empty>}" - if [ -z "$target" ]; then - target="$(read_target_from_env || true)" - fi - log "tmux env target=${target:-<empty>}" - target="$(resolve_target_pane "$target")" - log "fallback target=${target:-<empty>}" - - tmpfile="$(mktemp "./.tmux-edit-send.XXXXXX.md")" - trap 'rm -f "$tmpfile"' EXIT - - prompt_text="$(capture_prompt_text "$target")" - prefill_tmpfile "$tmpfile" "$prompt_text" - - "$editor" "$tmpfile" - log "editor exited with status $?" - - if [ ! -s "$tmpfile" ]; then - log "empty file, nothing sent" - exit 0 - fi - - validate_target_pane "$target" - send_content "$target" "$tmpfile" "$prompt_text" -} - -main "$@" |
