I assume most of you are familiar with watch program. If not – it shows, periodically, output of a command.
I was missing similar functionality for tmux, especially when I have multiple windows/panes.
So I wrote tmux_watch_many.
How to use it?
Well, you run it like this:
=$ tmux_watch_many '^win[024]'And it does it's magic.
It will, every 1 second (configurable):
- scan all available panes
 - get their content, removing empty lines
 - get just n last lines, so that output will fit on screen
 - show it all on screen
 
Script will end (by default) if there are no panes matching given MATCHER.
Full help:
=$ tmux_watch_many -h
Syntax:
    tmux_watch_many [-a] [-f] [-s SKIP_MATCHER] [-m LINE_MATCHER] [-w WAIT_TIME] PANE_MATCHER
 
Description:
    Shows last non-empty lines of all matching panes.
    Optionally skips lines provided by SKIP_MATCHER, and filters to lines
    matching LINE_MATCHER.
 
Options:
    -a : Enables matching across all sessions, not only current.
    -f : Forever, don't stop when there are no matching panes.
    -s : Skip lines that match this regular expression (egrep style).
    -m : Show only lines matching this regular expression (egrep style),
         defaults to : >>[^[:space:]]<<
    -w : Wait given time between checks of terminal, defaults to 1 (second).
 
Arguments:
    PANE_MATCHER    : Regular expression (compatible with egrep), that will be
                      used to select panes that should be processed.  Without
                      -a, panes are listed only from current session, and have
                      format:
                      WINDOW_NAME.PANE_INDEX
                      With -a, panes are listed from all sessions, and have
                      format:
                      SESSION_NAME:WINDOW_NAME.PANE_INDEX