aboutsummaryrefslogtreecommitdiff
path: root/tmuxrdr/plugin/bin/automatic-rename
diff options
context:
space:
mode:
Diffstat (limited to 'tmuxrdr/plugin/bin/automatic-rename')
-rwxr-xr-xtmuxrdr/plugin/bin/automatic-rename37
1 files changed, 37 insertions, 0 deletions
diff --git a/tmuxrdr/plugin/bin/automatic-rename b/tmuxrdr/plugin/bin/automatic-rename
new file mode 100755
index 00000000..f3409a5d
--- /dev/null
+++ b/tmuxrdr/plugin/bin/automatic-rename
@@ -0,0 +1,37 @@
+#!/bin/sh
+# tmux.conf: automatic-rename on, automatic-rename-format '#{b:pane_current_path}',
+# status-interval 5 -- every window is named after the directory of its
+# current pane. Herdr names nothing (an unnamed tab shows its place in the tab
+# bar), so this runs as a tab_bar_right command entry every 5 s (config.toml)
+# and renames each tab after the basename of its focused pane's foreground
+# directory -- tmux's pane_current_path. Like tmux's rename-window, a manual
+# rename switches it off for that tab for good: a label this did not set is
+# left alone. Prints nothing, so the status entry stays empty.
+H="${HERDR_BIN_PATH:-herdr}"
+dir="${XDG_STATE_HOME:-$HOME/.local/state}/herdr-tmux-mode/$(basename "$(dirname "${HERDR_SOCKET_PATH:-x/default/x}")")/names"
+mkdir -p "$dir"
+
+"$H" api snapshot | jq -r '
+ .result.snapshot as $s
+ | $s.tabs as $tabs
+ | range(0; $tabs | length) as $i
+ | $tabs[$i] as $t
+ | ([$tabs[0:$i][] | select(.workspace_id == $t.workspace_id)] | length + 1) as $pos
+ | ([$s.layouts[] | select(.tab_id == $t.tab_id) | .focused_pane_id][0]) as $fp
+ | ([$s.panes[] | select(.pane_id == $fp) | (.foreground_cwd // .cwd // "")][0] // "") as $cwd
+ | select($cwd != "")
+ | [$t.tab_id, $t.label, ($pos | tostring),
+ (if $cwd == "/" then "/" else ($cwd | rtrimstr("/") | split("/") | last) end)]
+ | @tsv' \
+| while IFS="$(printf '\t')" read -r tab label pos want; do
+ f="$dir/$(printf '%s' "$tab" | tr -c 'A-Za-z0-9._-' '_')"
+ mine="$(cat "$f" 2>/dev/null || true)"
+ [ "$mine" = "@manual" ] && continue
+ if [ "$label" != "$mine" ] && [ "$label" != "$pos" ]; then
+ printf '@manual\n' >"$f"
+ continue
+ fi
+ [ "$label" = "$want" ] && continue
+ "$H" tab rename "$tab" "$want" >/dev/null 2>&1 && printf '%s\n' "$want" >"$f"
+done
+exit 0