aboutsummaryrefslogtreecommitdiff
path: root/dotfiles
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-19 13:09:23 -0500
committerCraig Jennings <c@cjennings.net>2026-05-19 13:09:23 -0500
commit331d9421f1ca56afdaf0d238082f83d82103a795 (patch)
tree4e1f0b568f6fcfa89053da8dc55846afc39ddb0e /dotfiles
parent685272399d7dbc35aea6028d6741963399d84e3f (diff)
downloadarchsetup-331d9421f1ca56afdaf0d238082f83d82103a795.tar.gz
archsetup-331d9421f1ca56afdaf0d238082f83d82103a795.zip
feat(tmux-util): add find subcommand
tmux-util find <pattern> walks every pane across every session, queries each pane's foreground command (`#{pane_current_command}`), and prints the location of any pane whose command matches the pattern. Output format: `<session>:<window>.<pane> <command>`, one per line. Pattern is a basic ERE (passed through `grep -E`), so anchors and alternation work. Substring matching is the common case. Exit code: - 0 with output: matches found - 1 with no output: no matches (lets you script around it) - 2 with usage on stderr: missing or empty pattern 7 new tests cover Normal cases (single match, multi-match across sessions, format verification) and Boundary cases (no matches, no sessions, missing pattern, empty pattern). fake-tmux now parses pid:cmd entries in the state file so panes can carry a synthetic command name. Total suite: 39 tests, all green.
Diffstat (limited to 'dotfiles')
-rwxr-xr-xdotfiles/common/.local/bin/tmux-util28
1 files changed, 27 insertions, 1 deletions
diff --git a/dotfiles/common/.local/bin/tmux-util b/dotfiles/common/.local/bin/tmux-util
index 4a7b596..5e0ce85 100755
--- a/dotfiles/common/.local/bin/tmux-util
+++ b/dotfiles/common/.local/bin/tmux-util
@@ -36,6 +36,29 @@ EOF
}
# -----------------------------------------------------------------------------
+# find
+# -----------------------------------------------------------------------------
+
+cmd_find() {
+ local pattern="${1:-}"
+ if [ -z "$pattern" ]; then
+ echo "tmux-util find: missing pattern" >&2
+ echo "Usage: tmux-util find <pattern>" >&2
+ return 2
+ fi
+
+ local matches
+ matches=$(tmux list-panes -a \
+ -F '#{session_name}:#{window_index}.#{pane_index} #{pane_current_command}' \
+ 2>/dev/null | grep -E "$pattern" || true)
+
+ if [ -z "$matches" ]; then
+ return 1
+ fi
+ echo "$matches"
+}
+
+# -----------------------------------------------------------------------------
# go
# -----------------------------------------------------------------------------
@@ -178,7 +201,10 @@ main() {
go)
cmd_go "$@"
;;
- pick|find|rename)
+ find)
+ cmd_find "$@"
+ ;;
+ pick|rename)
echo "tmux-util: subcommand '$sub' is not implemented yet" >&2
return 2
;;