- printf '%stmux\n%ssessions %d, clients %d\n' \
- "$indent_unit" \
- "${indent_unit}${indent_unit}" \
- "$(tmux list-sessions 2> /dev/null | wc -l)" \
- "$(tmux list-clients 2> /dev/null | wc -l)"
+ # TODO Bring back seesion and client listing, but per server/socket.
+ printf '%stmux\n' "$indent_unit"
+ ps -eo comm,cmd \
+ | awk '
+ # Expecting lines like:
+ # "tmux: server tmux -L pistactl new-session -d -s pistactl"
+ # "tmux: client tmux -L foo"
+ # "tmux: client tmux -Lbar"
+ # "tmux: client tmux"
+ # "tmux: server tmux -L foo -S bar" <-- -S takes precedence
+ /^tmux:/ {
+ # XXX This of course assumes pervasive usage of -L
+ # TODO Handle -S
+ role=$2
+
+ split($0, sides_of_S, "-S")
+ split(sides_of_S[2], words_right_of_S, FS)
+
+ split($0, sides_of_L, "-L")
+ split(sides_of_L[2], words_right_of_L, FS)
+
+ if (words_right_of_S[1]) {
+ sock = "path." words_right_of_S[1]
+ } else if (words_right_of_L[1]) {
+ sock = "name." words_right_of_L[1]
+ } else {
+ sock = "default"
+ }
+
+ roles[role]++
+ socks[sock]++
+ count[role, sock]++
+ }
+
+ END {
+ for (sock in socks) {
+ clients = count["client", sock]
+ printf "%s ", sock
+ if (clients) {
+ printf "<-> %d", clients
+ }
+ printf "\n"
+ }
+ printf "\n"
+ }' \
+ | sort \
+ | column -t \
+ | indent "${indent_unit}${indent_unit}"