352 lines · 9.3 KB · executable
#!/usr/bin/env bash
set -euo pipefail

# Manage zellij sessions, tabs, and panes.
#
# Usage:
#   zellij_session.sh <command> [options]
#
# Sessions:
#   new <name> [workdir]               Create detached session (idempotent)
#   kill <name>                        Kill session (resurrectable)
#   delete <name>                      Kill session and purge resurrectable state
#   list                               Full tree: sessions, tabs, panes
#   list-sessions                      Session names only
#   exists <name>                      Check if session exists (exit 0/1)
#   attached <name>                    Check if session has clients (exit 0/1)
#
# Tabs:
#   new-tab <session> [name]           Create tab, prints tab id
#   list-tabs <session>                List tabs (id, position, name)
#   go-to-tab <session> <index|name>   Focus tab by index or name
#   close-tab <session> [tab_id]       Close tab (focused tab if no id)
#   rename-tab <session> <tab_id> <n>  Rename tab by stable id
#
# Panes (pane = terminal_1, plugin_2, or bare number; default: focused):
#   split <session> [right|down] [name] [workdir]  New shell pane, prints pane id
#   run <session> [name] [workdir] <cmd...>        New pane running cmd, prints pane id
#                                                  (no shell: use bash -c '...' for compound cmds)
#   list-panes <session> [--json|--all]            List panes
#   kill-pane <session> [pane]         Close pane
#   focus <session> <pane>             Focus pane
#   rename-pane <session> [pane] <n>   Rename pane
#   resize <session> [pane] <increase|decrease> <right|down|up|left>
#   clear <session> [pane]             Clear pane buffers (viewport + scrollback)
#   fullscreen <session> [pane]        Toggle fullscreen on pane
#   info <session> [pane]              Show pane details as JSON
#   -h, --help                         Show this help

usage() {
	sed -n '4,/^$/p' "$0" | sed 's/^# \?//' >&2