diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-19 13:09:23 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-19 13:09:23 -0500 |
| commit | 331d9421f1ca56afdaf0d238082f83d82103a795 (patch) | |
| tree | 4e1f0b568f6fcfa89053da8dc55846afc39ddb0e /dotfiles | |
| parent | 685272399d7dbc35aea6028d6741963399d84e3f (diff) | |
| download | archsetup-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-x | dotfiles/common/.local/bin/tmux-util | 28 |
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 ;; |
