summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_tmux
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_tmux')
-rw-r--r--Completion/Unix/Command/_tmux666
1 files changed, 372 insertions, 294 deletions
diff --git a/Completion/Unix/Command/_tmux b/Completion/Unix/Command/_tmux
index f0cc4be37..49c2b63ed 100644
--- a/Completion/Unix/Command/_tmux
+++ b/Completion/Unix/Command/_tmux
@@ -40,6 +40,14 @@
#
# The configuration for subcommand completions may be done in
# this context: ':completion:*:*:tmux-<sub-command>:*:*'
+#
+# TODO:
+#
+# - Implement __tmux-format
+# - Implement __tmux-style (possibly using existing helpers like
+# __tmux-attributes and __tmux-colours)
+# - in _tmux-list-panes, use __tmux-windows or __tmux-sessions
+# depending on -s is among the sub-commands current command line.
# Global variables; setup the first time _tmux is called.
# For $_tmux_commands[] generation, see the very end of this file.
@@ -51,6 +59,8 @@ _tmux_aliasmap=(
attach attach-session
detach detach-client
has has-session
+ lockc lock-client
+ locks lock-session
lsc list-clients
lscm list-commands
ls list-sessions
@@ -67,23 +77,26 @@ _tmux_aliasmap=(
breakp break-pane
capturep capture-pane
displayp display-panes
- downp down-pane
findw find-window
joinp join-pane
killp kill-pane
killw kill-window
last last-window
+ lastp last-pane
linkw link-window
lsp list-panes
lsw list-windows
+ movep move-pane
movew move-window
neww new-window
nextl next-layout
next next-window
pipep pipe-pane
prev previous-window
+ prevl previous-layout
renamew rename-window
resizep resize-pane
+ respawnp respawn-pane
respawnw respawn-window
rotatew rotate-window
selectl select-layout
@@ -93,7 +106,6 @@ _tmux_aliasmap=(
swapp swap-pane
swapw swap-window
unlinkw unlink-window
- upp up-pane
# key bindings
bind bind-key
@@ -117,7 +129,6 @@ _tmux_aliasmap=(
# buffers
clearhist clear-history
- copyb copy-buffer
deleteb delete-buffer
lsb list-buffers
loadb load-buffer
@@ -131,6 +142,7 @@ _tmux_aliasmap=(
lock lock-server
run run-shell
info server-info
+ wait wait-for
)
# --- Sub-command functions ---
@@ -154,6 +166,7 @@ function _tmux-attach-session() {
local -a args
args=(
+ '-c[specify working directory for the session]:directory:_path_files -g "*(-/)"'
'-d[detach other clients attached to target session]'
'-r[put the client into read-only mode]'
'-t[choose a target session]:target session:__tmux-sessions'
@@ -189,6 +202,8 @@ function _tmux-break-pane() {
local -a args
args=(
'-d[do not make the new window become the active one]'
+ '-F[specify format of output]:format:__tmux-format__tmux-format'
+ '-P[print information of new window after it has been created]'
'-t[choose a target pane]:panes:__tmux-panes'
)
_arguments ${args}
@@ -198,25 +213,80 @@ function _tmux-capture-pane() {
[[ -n ${tmux_describe} ]] && print "Capture the contents of a pane to a buffer" && return
local -a args
args=(
+ '-a[use alternate screen]'
'-b[choose target buffer]:target buffer:__tmux-buffers'
+ '-C[escape non-printable characters as octal \\ooo]'
+ '-e[include escape sequences for attributes etc]'
+ '-E[specify last line to capture. - means last line of pane]'
+ '-J[join wrapped lines and preserver trailing space]'
+ '-q[ignore errors when trying to access alternate screen]'
+ '-p[print data to stdout]'
+ '-P[only capture that is the beginning of an as-yet incomplete esc seq]'
+ '-S[specify start line to capture. - means first line of scrollback]'
'-t[choose source pane]:source pane:__tmux-panes'
)
_arguments ${args}
}
+function _tmux-choose-buffer() {
+ [[ -n ${tmux_describe} ]] && print "Put a window into buffer choice mode" && return
+ local -a args
+ args=(
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a target window]:sessions:__tmux-windows'
+ '*:: :->tmpl'
+ )
+ _arguments ${args} && return
+}
+
function _tmux-choose-client() {
[[ -n ${tmux_describe} ]] && print "Put a window into client choice mode" && return
- __tmux-choose-stuff
+ local -a args
+ args=(
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a target window]:sessions:__tmux-windows'
+ '*:: :->tmpl'
+ )
+ _arguments ${args} && return
}
function _tmux-choose-session() {
[[ -n ${tmux_describe} ]] && print "Put a window into session choice mode" && return
- __tmux-choose-stuff
+ local -a args
+ args=(
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a target window]:sessions:__tmux-windows'
+ '*:: :->tmpl'
+ )
+ _arguments ${args} && return
+}
+
+function _tmux-choose-tree() {
+ [[ -n ${tmux_describe} ]] && print "Put a window into tree choice mode" && return
+ local -a args
+ args=(
+ '-b[override default session command]:session-command:'
+ '-c[override default window command]:window-command:'
+ '-S[specify session format]:session-format:__tmux-formats'
+ '-s[choose among sessions]'
+ '-t[choose a target window]:sessions:__tmux-windows'
+ '-u[show generated tree uncollapsed at startup]'
+ '-W[specify window format]:window-format:__tmux-formats'
+ '-w[choose among windows]'
+ '*:: :->tmpl'
+ )
+ _arguments ${args} && return
}
function _tmux-choose-window() {
[[ -n ${tmux_describe} ]] && print "Put a window into window choice mode" && return
- __tmux-choose-stuff
+ local -a args
+ args=(
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a target window]:sessions:__tmux-windows'
+ '*:: :->tmpl'
+ )
+ _arguments ${args} && return
}
function _tmux-clear-history() {
@@ -238,6 +308,7 @@ function _tmux-command-prompt() {
local state
local -a args
args=(
+ '-I[comma separated list of initial inputs]:initial-text:->ilist'
'-p[list of prompts]:prompts:->plist'
'-t[choose a target client]:clients:__tmux-clients'
'*:: :->tmpl'
@@ -246,6 +317,9 @@ function _tmux-command-prompt() {
if [[ ${state} == 'plist' ]]; then
_message "comma seperated list of prompts"
return
+ elif [[ ${state} == 'ilist' ]]; then
+ _message "comma seperated list of initial text"
+ return
fi
__tmux-lastarg ${state} 'tmpl' 1 "command template"
}
@@ -255,46 +329,16 @@ function _tmux-confirm-before() {
local state
local -a args
args=(
+ '-p[specify prompt]:prompt:->prompt'
'-t[choose a target client]:clients:__tmux-clients'
'*:: :->command_and_args'
)
_arguments -C ${args} && return
- __tmux-lastarg ${state} 'command_and_args' 1 "command string"
-}
-
-function _tmux-copy-buffer() {
- [[ -n ${tmux_describe} ]] && print "Copy session paste buffers" && return
- local state session
- local -a args
- local -ax bopts
-
- args=(
- '-a[choose a source buffer index]:buffer:->srcbuf'
- '-b[choose a destination buffer index]:buffer:->dstbuf'
- '-s[choose a source session]:session:->srcsession'
- '-t[choose a destination session]:session:->dstsession'
- )
- _arguments ${args}
-
- case ${state} in
- ((src|dst)session)
- __tmux-sessions
- return
- ;;
- (srcbuf)
- session="$(__tmux-get-optarg -s "${words[@]}")"
- ;;
- (srcbuf)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
+ if [[ ${state} == 'prompt' ]]; then
+ _message 'prompt string'
return
fi
- bopts=()
- __tmux-buffers
+ __tmux-lastarg ${state} 'command_and_args' 1 "command string"
}
function _tmux-copy-mode() {
@@ -309,39 +353,20 @@ function _tmux-copy-mode() {
function _tmux-delete-buffer() {
[[ -n ${tmux_describe} ]] && print "Delete a paste buffer" && return
- local state session
local -a args
- local -ax bopts
-
- args=(
- '-b[choose a target buffer index]:panes:->buffer'
- '-t[choose a target session]:panes:->session'
- )
- _arguments ${args}
-
- case ${state} in
- (session)
- __tmux-sessions
- return
- ;;
- (buffer)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- (*) return ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
- return
- fi
- bopts=()
- __tmux-buffers
+ args=('-b[choose a target buffer index]:buffers:__tmux-buffers')
+ _arguments ${args} && return
}
function _tmux-detach-client() {
[[ -n ${tmux_describe} ]] && print "Detach a client from the server" && return
local -a args
- args=('-t[choose a target client]:clients:__tmux-clients')
+ args=(
+ '-a[kill all clients except for the named by -t]'
+ '-P[send SIGHUP to parent process]'
+ '-s[choose a target session and kill its clients]:sessions:__tmux-sessions'
+ '-t[choose a target client]:clients:__tmux-clients'
+ )
_arguments ${args}
}
@@ -349,6 +374,7 @@ function _tmux-display-message() {
[[ -n ${tmux_describe} ]] && print "Display a message in the status line" && return
local -a args
args=(
+ '-c[choose a target client]:clients:__tmux-clients'
'-p[print message to stdout]'
'-t[choose a target client]:clients:__tmux-clients'
'*:: :->msg'
@@ -364,18 +390,15 @@ function _tmux-display-panes() {
_arguments ${args}
}
-function _tmux-down-pane() {
- [[ -n ${tmux_describe} ]] && print "Move down a pane" && return
- local -a args
- args=('-t[choose a target pane]:panes:__tmux-panes')
- _arguments ${args}
-}
-
function _tmux-find-window() {
[[ -n ${tmux_describe} ]] && print "Search for a pattern in windows" && return
local curcontext="${curcontext}" state
local -a args
args=(
+ '-C[match visible contents]'
+ '-F[specify format of output]:format:__tmux-format'
+ '-N[match window name]'
+ '-T[match window title]'
'-t[choose a target window]:windows:__tmux-windows'
'*:: :->pattern'
)
@@ -394,6 +417,8 @@ function _tmux-if-shell() {
[[ -n ${tmux_describe} ]] && print "Execute a tmux command if a shell-command succeeded" && return
local -a args
args=(
+ '-b[run shell command in background]'
+ '-F[do not execute shell command but use it as a string-value]'
'1:shell command:'
'2:tmux command:'
)
@@ -404,6 +429,7 @@ function _tmux-join-pane() {
[[ -n ${tmux_describe} ]] && print "Split a pane and move an existing one into the new space" && return
local -a args
args=(
+ '-b[join source pane left of or above target pane]'
'-d[do not make the new window become the active one]'
'-h[split horizontally]'
'-v[split vertically]'
@@ -419,7 +445,7 @@ function _tmux-kill-pane() {
[[ -n ${tmux_describe} ]] && print "Destroy a given pane" && return
local -a args
args=(
- '-a[kill all panes, except current]'
+ '-a[kill all panes except the one specified by -t]'
'-t[choose a target pane]:panes:__tmux-panes'
)
_arguments ${args}
@@ -433,17 +459,34 @@ function _tmux-kill-server() {
function _tmux-kill-session() {
[[ -n ${tmux_describe} ]] && print "Destroy a given session" && return
local -a args
- args=('-t[choose a target session]:sessions:__tmux-sessions')
+ args=(
+ '-a[kill all session except the one specified by -t]'
+ '-t[choose a target session]:sessions:__tmux-sessions'
+ )
_arguments ${args}
}
function _tmux-kill-window() {
[[ -n ${tmux_describe} ]] && print "Destroy a given window" && return
local -a args
- args=('-t[choose a target window]:windows:__tmux-windows')
+ args=(
+ '-a[kill all windows except the one specified by -t]'
+ '-t[choose a target window]:windows:__tmux-windows'
+ )
_arguments ${args}
}
+function _tmux-last-pane() {
+ [[ -n ${tmux_describe} ]] && print "Select the previously selected pane" && return
+ local -a args
+ args=(
+ '-d[disable input to the pane]'
+ '-e[enable input to the pane]'
+ '-t[choose a session]:sessions:__tmux-sessions'
+ )
+ _arguments ${args} && return
+}
+
function _tmux-last-window() {
[[ -n ${tmux_describe} ]] && print "Select the previously selected window" && return
local -a args
@@ -466,13 +509,18 @@ function _tmux-link-window() {
function _tmux-list-buffers() {
[[ -n ${tmux_describe} ]] && print "List paste buffers of a session" && return
local -a args
- args=('-t[choose a session]:sessions:__tmux-sessions')
+ args=('-F[specify format of output]:format:__tmux-format')
_arguments ${args} && return
}
function _tmux-list-clients() {
[[ -n ${tmux_describe} ]] && print "List clients attached to server" && return
- __tmux-nothing-else
+ local -a args
+ args=(
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a session]:sessions:__tmux-sessions'
+ )
+ _arguments ${args} && return
}
function _tmux-list-commands() {
@@ -490,52 +538,43 @@ function _tmux-list-keys() {
function _tmux-list-panes() {
[[ -n ${tmux_describe} ]] && print "List panes of a window" && return
local -a args
- args=('-t[choose a window]:windows:__tmux-windows')
+ args=(
+ '-a[list all panes the server possesses]'
+ '-F[specify format of output]:format:__tmux-format'
+ '-s[if specified, -t chooses a session]'
+ # TODO: Use __tmux-windows or __tmux-sessions depending on -s.
+ '-t[choose a window]:windows:__tmux-windows'
+ )
_arguments ${args} && return
}
function _tmux-list-sessions() {
[[ -n ${tmux_describe} ]] && print "List sessions managed by server" && return
- __tmux-nothing-else
+ local -a args
+ args=('-F[specify format of output]:format:__tmux-format')
+ _arguments ${args} && return
}
function _tmux-list-windows() {
[[ -n ${tmux_describe} ]] && print "List windows of a session" && return
local -a args
- args=('-t[choose a session]:sessions:__tmux-sessions')
+ args=(
+ '-a[list all windows the tmux server possesses]'
+ '-F[specify format of output]:format:__tmux-format'
+ '-t[choose a session]:sessions:__tmux-sessions'
+ )
_arguments ${args} && return
}
function _tmux-load-buffer() {
[[ -n ${tmux_describe} ]] && print "Load a file into a paste buffer" && return
- local state session
local -a args
- local -ax bopts
args=(
- '-b[choose a target buffer index]:panes:->buffer'
- '-t[choose a target session]:panes:->session'
+ '-b[choose a target buffer index]:panes:__tmux-buffers'
'1:file name:_files -g "*(-.)"'
)
- _arguments ${args}
-
- case ${state} in
- (session)
- __tmux-sessions
- return
- ;;
- (buffer)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- (*) return ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
- return
- fi
- bopts=()
- __tmux-buffers
+ _arguments ${args} && return
}
function _tmux-lock-client() {
@@ -557,12 +596,30 @@ function _tmux-lock-session() {
_arguments ${args} && return
}
+function _tmux-move-pane() {
+ [[ -n ${tmux_describe} ]] && print "Move a pane into a new space" && return
+ local -a args
+ args=(
+ '-b[join source pane left of or above target pane]'
+ '-d[do not make the new window become the active one]'
+ '-h[split horizontally]'
+ '-v[split vertically]'
+ '-l[define new pane'\''s size]: :_guard "[0-9]#" "numeric value"'
+ '-p[define new pane'\''s size in percent]: :_guard "[0-9]#" "numeric value"'
+ '-s[choose source pane]:window:__tmux-panes'
+ '-t[choose target pane]:window:__tmux-panes'
+ )
+ _arguments ${args} && return
+}
+
function _tmux-move-window() {
[[ -n ${tmux_describe} ]] && print "Move a window to another" && return
local -a args
args=(
'-d[do not make the new window become the active one]'
+ '-k[kill the target window if it exists]'
'-s[choose source window]:window:__tmux-windows'
+ '-r[renumber windows in session in sequential order]'
'-t[choose destination window]:window:__tmux-windows'
)
_arguments ${args}
@@ -572,11 +629,17 @@ function _tmux-new-session() {
[[ -n ${tmux_describe} ]] && print "Create a new session" && return
local -a args
args=(
- '-d[do not attach new session to current terminal]'
'-A[attach to existing session if it already exists]'
+ '-c[specify working directory for the session]:directory:_path_files -g "*(-/)"'
+ '-d[do not attach new session to current terminal]'
+ '-D[in case of -A behave like attach-session'\''s -d]'
+ '-F[specify format of output]:format:__tmux-format'
'-n[name the initial window]:window name'
+ '-P[print information about new session after it is created]'
'-s[name the session]:session name:__tmux-sessions'
'-t[specify target session]:sessions:__tmux-sessions'
+ '-x[specify width]:width:_guard "[0-9]#" "numeric value"'
+ '-y[specify height]:height:_guard "[0-9]#" "numeric value"'
'*:: :_command'
)
_arguments -s ${args}
@@ -586,9 +649,13 @@ function _tmux-new-window() {
[[ -n ${tmux_describe} ]] && print "Create a new window" && return
local -a args
args=(
+ '-a[insert new window at next free index from -t]'
+ '-c[specify working directory for the session]:directory:_path_files -g "*(-/)"'
'-d[do not make the new window become the active one]'
+ '-F[specify format of output]:format:__tmux-format'
'-k[destroy it if the specified window exists]'
'-n[specify a window name]:window name:'
+ '-P[print information about new window after it is created]'
'-t[specify target window]:windows:__tmux-windows'
'*:: :_command'
)
@@ -606,7 +673,7 @@ function _tmux-next-window() {
[[ -n ${tmux_describe} ]] && print "Move to the next window in a session" && return
local -a args
args=(
- '-a[move to the next window with activity]'
+ '-a[move to the next window with an alert]'
'-t[choose target session]:session:__tmux-sessions'
)
_arguments ${args}
@@ -616,9 +683,11 @@ function _tmux-paste-buffer() {
[[ -n ${tmux_describe} ]] && print "Insert a paste buffer into the window" && return
local -a args
args=(
+ '-b[choose buffer]:source buffer:__tmux-buffers'
'-d[remove buffer from stack after pasting]'
+ '-p[use bracketed paste mode if the application requested it]'
'-r[do not replace LF with CR when pasting]'
- '-b[choose buffer]:source buffer:__tmux-buffers'
+ '-s[specify separator]:separator:'
'-t[choose target window]:window:__tmux-windows'
)
_arguments ${args}
@@ -647,7 +716,7 @@ function _tmux-previous-window() {
[[ -n ${tmux_describe} ]] && print "Move to the previous window in a session" && return
local -a args
args=(
- '-a[move to the previous window with activity]'
+ '-a[move to the previous window with an alert]'
'-t[choose target session]:session:__tmux-sessions'
)
_arguments ${args}
@@ -656,7 +725,10 @@ function _tmux-previous-window() {
function _tmux-refresh-client() {
[[ -n ${tmux_describe} ]] && print "Refresh a client" && return
local -a args
- args=('-t[choose target client]:client:__tmux-clients')
+ args=(
+ '-S[Only update the client'\''s status bar]'
+ '-t[choose target client]:client:__tmux-clients'
+ )
_arguments ${args}
}
@@ -690,11 +762,25 @@ function _tmux-resize-pane() {
'-R[resize to the right]'
'-U[resize upward]'
'-t[choose target pane]:pane:__tmux-panes'
+ '-x[specify width]:width:_guard "[0-9]#" "numeric value"'
+ '-y[specify height]:height:_guard "[0-9]#" "numeric value"'
+ '-Z[toggle zoom of pane]'
'1::adjustment (defaults to one):_guard "[0-9]#" "numeric value"'
)
_arguments ${args}
}
+function _tmux-respawn-pane() {
+ [[ -n ${tmux_describe} ]] && print "Reuse a pane in which a command has exited" && return
+ local -a args
+ args=(
+ '-k[kill window if it is in use]'
+ '-t[choose target pane]:window:__tmux-pane'
+ '*::command:_command'
+ )
+ _arguments ${args}
+}
+
function _tmux-respawn-window() {
[[ -n ${tmux_describe} ]] && print "Reuse a window in which a command has exited" && return
local -a args
@@ -719,43 +805,31 @@ function _tmux-rotate-window() {
function _tmux-run-shell() {
[[ -n ${tmux_describe} ]] && print "Execute a command without creating a new window" && return
- _command
+ local -a args
+ args=(
+ '-b[run shell command in background]'
+ '-t[choose target pane]:pane:__tmux-panes'
+ '*::command:_command'
+ )
+ _arguments ${args}
}
function _tmux-save-buffer() {
[[ -n ${tmux_describe} ]] && print "Save a paste buffer to a file" && return
- local state session
local -a args
- local -ax bopts
args=(
- '-b[choose a target buffer index]:buffer:->buffer'
- '-t[choose a target session]:buffer:->session'
+ '-a[append to rather than overwriting file]'
+ '-b[choose a target buffer index]:buffer:__tmux-buffers'
)
- _arguments ${args}
-
- case ${state} in
- (session)
- __tmux-sessions
- return
- ;;
- (buffer)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- (*) return ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
- return
- fi
- bopts=()
- __tmux-buffers
+ _arguments ${args} && return
}
function _tmux-select-layout() {
[[ -n ${tmux_describe} ]] && print "Choose a layout for a window" && return
args=(
+ '-n[behave like next-layout]'
+ '-p[behave like previous-layout]'
'-t[choose a target window]:target window:__tmux-windows'
'*::layout name:__tmux-layouts'
)
@@ -765,21 +839,29 @@ function _tmux-select-layout() {
function _tmux-select-pane() {
[[ -n ${tmux_describe} ]] && print "Make a pane the active one in the window" && return
local -a args
- args=('-t[choose a target pane]:panes:__tmux-panes')
- _arguments ${args} && return
-}
-
-function _tmux-select-prompt() {
- [[ -n ${tmux_describe} ]] && print "Open a prompt to enter a window index" && return
- local -a args
- args=('-t[choose a target client]:clients:__tmux-clients')
+ args=(
+ '-D[Move to the pane down of this]'
+ '-d[disable input to the pane]'
+ '-e[enable input to the pane]'
+ '-l[behave like last-pane]'
+ '-L[Move to the pane left of this]'
+ '-R[Move to the pane right of this]'
+ '-U[Move to the pane above this]'
+ '-t[choose a target pane]:panes:__tmux-panes'
+ )
_arguments ${args} && return
}
function _tmux-select-window() {
[[ -n ${tmux_describe} ]] && print "Select a window" && return
local -a args
- args=('-t[choose a target window]:windows:__tmux-windows')
+ args=(
+ '-l[behave like last-window]'
+ '-n[behave like next-window]'
+ '-p[behave like previous-window]'
+ '-T[if selected window is the current behave like last-window]'
+ '-t[choose a target window]:windows:__tmux-windows'
+ )
_arguments ${args} && return
}
@@ -788,6 +870,8 @@ function _tmux-send-keys() {
local curcontext="${curcontext}" state
local -a args
args=(
+ '-l[disable key name lookup and send data literally]'
+ '-R[reset terminal state]'
'-t[choose a target pane]:panes:__tmux-panes'
'*:: :->key'
)
@@ -798,7 +882,10 @@ function _tmux-send-keys() {
function _tmux-send-prefix() {
[[ -n ${tmux_describe} ]] && print "Send the prefix key to a window" && return
local -a args
- args=('-t[choose a target pane]:panes:__tmux-panes')
+ args=(
+ '-2[send secondary prefix key]'
+ '-t[choose a target pane]:panes:__tmux-panes'
+ )
_arguments ${args}
}
@@ -809,33 +896,16 @@ function _tmux-server-info() {
function _tmux-set-buffer() {
[[ -n ${tmux_describe} ]] && print "Set contents of a paster buffer" && return
- local state session
+ local state
local -a args
- local -ax bopts
-
args=(
- '-b[choose a target buffer index]:panes:->buffer'
- '-t[choose a target session]:panes:->session'
+ '-a[append to rather than overwriting target buffer]'
+ '-b[choose a target buffer index]:panes:__tmux-buffer'
+ '-n[specify new buffer name]:buffer-name:'
+ '*:: :->data'
)
- _arguments ${args}
-
- case ${state} in
- (session)
- __tmux-sessions
- return
- ;;
- (buffer)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- (*) return ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
- return
- fi
- bopts=()
- __tmux-buffers
+ _arguments ${args} && return
+ __tmux-lastarg ${state} 'data' 1 "data"
}
function _tmux-set-environment() {
@@ -904,33 +974,9 @@ function _tmux-set-window-option() {
function _tmux-show-buffer() {
[[ -n ${tmux_describe} ]] && print "Display the contents of a paste buffer" && return
- local state session
local -a args
- local -ax bopts
-
- args=(
- '-b[choose a target buffer index]:panes:->buffer'
- '-t[choose a target session]:panes:->session'
- )
- _arguments ${args}
-
- case ${state} in
- (session)
- __tmux-sessions
- return
- ;;
- (buffer)
- session="$(__tmux-get-optarg -t "${words[@]}")"
- ;;
- (*) return ;;
- esac
- if [[ -n ${session} ]]; then
- bopts=( -t ${session} )
- __tmux-buffers
- return
- fi
- bopts=()
- __tmux-buffers
+ args=('-b[choose a target buffer index]:panes:->buffer')
+ _arguments ${args} && return
}
function _tmux-show-environment() {
@@ -945,7 +991,13 @@ function _tmux-show-environment() {
function _tmux-show-messages() {
[[ -n ${tmux_describe} ]] && print "Show client"\'"s message log" && return
- args=('-t[choose target client]:client:__tmux-clients')
+ local -a args
+ args=(
+ '-I[show debugging information about the tmux server]'
+ '-J[show debugging information about running jobs]'
+ '-T[show debugging information about involved terminals]'
+ '-t[choose target client]:client:__tmux-clients'
+ )
_arguments ${args}
}
@@ -978,12 +1030,14 @@ function _tmux-split-window() {
[[ -n ${tmux_describe} ]] && print "Splits a pane into two" && return
local -a args
args=(
+ '-b[create new pane left of or above target pane]'
'-d[do not make the new window become the active one]'
+ '-F[specify format of output]:format:__tmux-format'
'-h[split horizontally]'
'-v[split vertically]'
'-l[define new pane'\''s size]: :_guard "[0-9]#" "numeric value"'
'-p[define new pane'\''s size in percent]: :_guard "[0-9]#" "numeric value"'
- # Yes, __tmux_pane is correct here. The behaviour was changed
+ # Yes, __tmux-panes is correct here. The behaviour was changed
# in recent tmux versions and makes more sense. Except that
# changing the command's name might annoy users. So it stays like
# this.
@@ -1034,6 +1088,10 @@ function _tmux-switch-client() {
local -a args
args=(
'-c[choose a target client]:client:__tmux-clients'
+ '-l[move client to last session]'
+ '-n[move client to next session]'
+ '-p[move client to previous session]'
+ '-r[toggle read-only flag of client]'
'-t[choose a target window]:window:__tmux-windows'
)
_arguments ${args}
@@ -1046,6 +1104,7 @@ function _tmux-unbind-key() {
ow=( "${words[@]}" )
args=(
+ '-a[Remove all key bindings]'
'-c[kill the window if it is only in one session]'
'-n[remove a non-prefix binding]'
'-t[choose a key table]:key table:__tmux-key-tables'
@@ -1071,11 +1130,18 @@ function _tmux-unlink-window() {
_arguments ${args}
}
-function _tmux-up-pane() {
- [[ -n ${tmux_describe} ]] && print "Move up a pane" && return
+function _tmux-wait-for() {
+ [[ -n ${tmux_describe} ]] && print "Wait for an event or trigger it" && return
+ local state
local -a args
- args=('-t[choose a target pane]:panes:__tmux-panes')
- _arguments ${args}
+ args=(
+ '-L[lock the named channel]'
+ '-S[send signal to channel]'
+ '-U[unlock the named channel]'
+ '*:: :->channel'
+ )
+ _arguments ${args} && return
+ __tmux-lastarg ${state} 'channel' 1 "event channel"
}
# --- Utility functions ---
@@ -1110,18 +1176,6 @@ function __tmux-bound-keys() {
_describe -t keys 'keys' keys
}
-function __tmux-choose-stuff() {
- # choose-{client,session,window} accept exactly the same arguments, so...
- local curcontext="${curcontext}" state
- local -a args
- args=(
- '-t[choose a target pane]:panes:__tmux-panes'
- '*:: :->tmpl'
- )
- _arguments ${args} && return
- __tmux-lastarg ${state} 'tmpl' 1 "tmux command template"
-}
-
function __tmux-clients() {
local expl
local -a clients
@@ -1129,6 +1183,10 @@ function __tmux-clients() {
_describe -t clients 'clients' clients
}
+function __tmux-format() {
+ _message 'not implemented yet'
+}
+
function __tmux-colours() {
local -a colnames
colnames=( default black red green yellow blue magenta cyan white colourN:"replace N by a number between 0 and 255" )
@@ -1197,13 +1255,14 @@ function __tmux-option-guard() {
int_guard='_guard "[0-9]#" "'${opt}': numeric value"'
if [[ ${mode} == 'session' ]]; then
options=(
+ 'assume-paste-time:'${int_guard}
'base-index:'${int_guard}
- 'bell-action:DESC:any none current'
- 'buffer-limit:'${int_guard}
+ 'bell-action:DESC:any none current other'
+ 'bell-on-alert:DESC:on off'
'default-command:MSG:command string'
- 'default-path:MSG:path name'
'default-shell:MSG:shell executable'
- 'default-terminal:MSG:terminal string'
+ 'destroy-unattached:DESC:on off'
+ 'detach-on-destroy:DESC:on off'
'display-panes-colour:__tmux-colours'
'display-panes-active-colour:__tmux-colours'
'display-panes-time:'${int_guard}
@@ -1212,78 +1271,85 @@ function __tmux-option-guard() {
'lock-after-time:'${int_guard}
'lock-command:MSG:command string'
'lock-server:DESC:on off'
- 'message-attr:__tmux-attributes'
- 'message-bg:__tmux-colours'
- 'message-fg:__tmux-colours'
- 'message-limit:'${int_guard}
- 'mouse-select-pane:DESC:on off'
- 'pane-border-bg:__tmux-colours'
- 'pane-border-fg:__tmux-colours'
- 'pane-active-border-bg:__tmux-colours'
- 'pane-active-border-fg:__tmux-colours'
- 'prefix:MSG:comma-seperated key list'
+ 'message-command-style:__tmux-style'
+ 'message-style:__tmux-style'
+ 'mouse:DESC:on off'
+ 'mouse-utf8:DESC:on off'
+ 'prefix:MSG:primary prefix key'
+ 'prefix2:MSG:secondary prefix key'
+ 'renumber-windows:DESC:on off'
'repeat-time:'${int_guard}
'set-remain-on-exit:DESC:on off'
'set-titles:DESC:on off'
'set-titles-string:MSG:title format string'
'status:DESC:on off'
- 'status-attr:__tmux-attributes'
- 'status-bg:__tmux-colours'
- 'status-fg:__tmux-colours'
'status-interval:'${int_guard}
'status-justify:DESC:left centre right'
'status-keys:DESC:vi emacs'
'status-left:MSG:format string'
- 'status-left-attr:__tmux-attributes'
- 'status-left-bg:__tmux-colours'
- 'status-left-fg:__tmux-colours'
'status-left-length:'${int_guard}
+ 'status-left-style:__tmux-style'
+ 'status-position:DESC:top bottom'
'status-right:MSG:format string'
- 'status-right-attr:__tmux-attributes'
- 'status-right-bg:__tmux-colours'
- 'status-right-fg:__tmux-colours'
'status-right-length:'${int_guard}
+ 'status-right-style:__tmux-style'
+ 'status-style:__tmux-style'
'status-utf8:DESC:on off'
- 'terminal-overrides:MSG:overrides string'
'update-environment:MSG:string listing env. variables'
'visual-activity:DESC:on off'
'visual-bell:DESC:on off'
- 'visual-content:DESC:on off'
+ 'visual-silence:DESC:on off'
+ 'word-separators:MSG:separator string'
)
elif [[ ${mode} == 'server' ]]; then
options=(
+ 'buffer-limit:'${int_guard}
+ 'default-terminal:MSG:terminal string'
'escape-time:'${int_guard}
+ 'exit-unattached:DESC:on off'
+ 'focus-events:DESC:on off'
+ 'history-file:_path-files -g "*(-.)"'
+ 'message-limit:'${int_guard}
'quiet:DESC:on off'
+ 'set-clipboard:DESC:on off'
+ 'terminal-overrides:MSG:overrides string'
)
else
options=(
'aggressive-resize:DESC:on off'
+ 'allow-rename:DESC:on off'
'alternate-screen:DESC:on off'
'automatic-rename:DESC:on off'
+ 'automatic-rename-format:DESC:__tmux-format'
'clock-mode-colour:__tmux-colours'
'clock-mode-style:DESC:12 24'
'force-height:'${int_guard}
'force-width:'${int_guard}
'main-pane-height:'${int_guard}
'main-pane-width:'${int_guard}
- 'mode-attr:__tmux-attributes'
- 'mode-bg:__tmux-colours'
- 'mode-fg:__tmux-colours'
'mode-keys:DESC:vi emacs'
- 'mode-mouse:DESC:on off'
+ 'mode-style:__tmux-style'
'monitor-activity:DESC:on off'
- 'monitor-content:MSG:fnmatch(3) pattern'
+ 'monitor-silence:DESC:on off'
+ 'other-pane-height:'${int_guard}
+ 'other-pane-width:'${int_guard}
+ 'pane-active-border-style:__tmux-style'
+ 'pane-base-index:'${int_guard}
+ 'pane-border-style:__tmux-style'
'remain-on-exit:DESC:on off'
'synchronize-panes:DESC:on off'
'utf8:DESC:on off'
- 'window-status-attr:__tmux-attributes'
- 'window-status-bg:__tmux-colours'
- 'window-status-current-attr:__tmux-attributes'
- 'window-status-current-bg:__tmux-colours'
- 'window-status-current-fg:__tmux-colours'
+ 'window-active-style:__tmux-style'
+ 'window-status-activity-style:__tmux-style'
+ 'window-status-bell-style:__tmux-style'
'window-status-current-format:MSG:status format string'
- 'window-status-fg:__tmux-colours'
+ 'window-status-current-style:__tmux-style'
'window-status-format:MSG:status format string'
+ 'window-status-last-style:__tmux-style'
+ 'window-status-separator:MSG:separator string'
+ 'window-status-style:__tmux-style'
+ 'window-style:__tmux-style'
+ 'wrap-seach:DESC:on off'
'xterm-keys:DESC:on off'
)
fi
@@ -1310,16 +1376,17 @@ function __tmux-option-guard() {
esac
}
-function __tmux-options() {
- local -a tmux_options
- tmux_options=(
+function __tmux-session-options() {
+ local -a tmux_session_options
+ tmux_session_options=(
+ 'assume-paste-time:assume keys are pasted instead of typed if this fast'
'base-index:define where to start numbering'
'bell-action:set action on window bell'
- 'buffer-limit:number of buffers kept per session'
+ 'bell-on-alert:ring the terminal bell when an alert occurs'
'default-command:default command for new windows'
- 'default-path:default working directory'
'default-shell:default shell executable'
- 'default-terminal:default terminal definition string'
+ 'destroy-unattached:destroy session if no client is attached'
+ 'detach-on-destroy:detach client if attached session is destroyed'
'display-panes-colour:colour used for display-panes'
'display-panes-active-colour:colour for active pane in display-panes'
'display-panes-time:time (in msecs) of display-panes output'
@@ -1328,45 +1395,37 @@ function __tmux-options() {
'lock-after-time:lock sessions after N seconds'
'lock-command:command to run for locking a client'
'lock-server:make lock-after-time lock the server instead of sessions'
- 'message-attr:set status line message attributes'
- 'message-bg:set status line message background colour'
- 'message-fg:set status line message foreground colour'
- 'message-limit:set size of message log per client'
- 'mouse-select-pane:make mouse clicks select window panes'
- 'pane-border-bg:set pane border foreground colour'
- 'pane-border-fg:set pane border background colour'
- 'pane-active-border-bg:set active pane border foreground colour'
- 'pane-active-border-fg:set active pane border background colour'
- 'prefix:comma seperated line of keys accepted as prefix key'
+ 'message-command-style:status line message command style'
+ 'message-style:status line message style'
+ 'mouse:enable mouse support'
+ 'mouse-utf8:request utf8 mouse support'
+ 'prefix:primary prefix key'
+ 'prefix2:secondary prefix key'
+ 'renumber-windows:renumber windows if a window is closed'
'repeat-time:time for multiple commands without prefix-key presses'
'set-remain-on-exit:set remain-on-exit window option'
'set-titles:try to set xterm window titles'
'set-titles-string:format used by set-titles'
'status:show or hide the status bar'
- 'status-attr:status bar attributes'
- 'status-bg:status bar background colour'
- 'status-fg:status bar foreground colour'
'status-interval:interval (in seconds) for status bar updates'
'status-justify:position of the window list in status bar'
'status-keys:mode to use in status bar modes (vi/emacs)'
'status-left:format to use left in status bar'
- 'status-left-attr:attribute for the left part of the status bar'
- 'status-left-bg:background colour of the left part of the status bar'
- 'status-left-fg:foreground colour of the left part of the status bar'
'status-left-length:maximum length of the left part of the status bar'
+ 'status-left-style:style of left part of status line'
+ 'status-position:status line position'
'status-right:format to use right in status bar'
- 'status-right-attr:attribute for the right part of the status bar'
- 'status-right-bg:background colour of the right part of the status bar'
- 'status-right-fg:foreground colour of the right part of the status bar'
'status-right-length:maximum length of the right part of the status bar'
+ 'status-right-style:style of right part of status line'
+ 'status-style:style status line'
'status-utf8:assume UTF-8 sequences to appear in status bar'
- 'terminal-overrides:override terminal descriptions'
'update-environment:list of variables to be copied to a session'\''s environment'
'visual-activity:display status line messages upon activity'
'visual-bell:use visual bell instead of audible'
- 'visual-content:display status line messages upon content changes'
+ 'visual-silence:print a message if monitor-silence is on'
+ 'word-separators:string of characters considered word separators'
)
- _describe -t tmux-options 'tmux option' tmux_options
+ _describe -t tmux-options 'tmux session option' tmux_session_options
}
function __tmux-options-complete() {
@@ -1375,7 +1434,7 @@ function __tmux-options-complete() {
case ${state} in
name_or_value)
if (( CURRENT == 1 )) && [[ ${mode} == 'session' ]]; then
- __tmux-options
+ __tmux-session-options
elif (( CURRENT == 1 )) && [[ ${mode} == 'server' ]]; then
__tmux-server-options
elif (( CURRENT == 1 )) && [[ ${mode} == 'window' ]]; then
@@ -1413,8 +1472,16 @@ function __tmux-panes() {
function __tmux-server-options() {
local -a tmux_server_options
tmux_server_options=(
+ 'buffer-limit:number of buffers kept per session'
+ 'default-terminal:default terminal definition string'
'escape-time:set timeout to detect single escape characters (in msecs)'
+ 'exit-unattached:make server exit if it has no attached clients'
+ 'focus-events:request focus events from terminal'
+ 'history-file:tmux command history file name'
+ 'message-limit:set size of message log per client'
'quiet:enable/disable the display of various informational messages'
+ 'set-clipboard:use esc sequences to set terminal clipboard'
+ 'terminal-overrides:override terminal descriptions'
)
_describe -t tmux-server-options 'tmux server option' tmux_server_options
}
@@ -1435,36 +1502,47 @@ function __tmux-socket-name() {
_wanted socket expl 'socket name' compadd ${expl} -- ${socks}
}
+function __tmux-style() {
+ _message 'not implemented yet'
+}
+
function __tmux-window-options() {
local -a tmux_window_options
tmux_window_options=(
'aggressive-resize:aggressively resize windows'
+ 'allow-rename:allow programs to change window titles'
'alternate-screen:allow alternate screen feature to be used'
'automatic-rename:attempt to automatically rename windows'
+ 'automatic-rename-format:format for automatic renames'
'clock-mode-colour:set clock colour'
'clock-mode-style:set clock hour format (12/24)'
'force-height:force a windows to a certain height'
'force-width:force a windows to a certain width'
'main-pane-height:set height for main-* layouts'
'main-pane-width:set width for main-* layouts'
- 'mode-attr:set window modes attributes'
- 'mode-bg:set window modes background colour'
- 'mode-fg:set window modes foreground colour'
'mode-keys:mode to use in copy and choice modes (vi/emacs)'
- 'mode-mouse:use mouse in modes'
+ 'mode-style:set window modes style'
'monitor-activity:monitor window activity'
- 'monitor-content:monitor window contents for a fnmatch(3) pattern'
+ 'monitor-silence:monitor window for inactivity'
+ 'other-pane-height:height of other panes'
+ 'other-pane-width:width of other panes'
+ 'pane-active-border-style:style of border of active pane'
+ 'pane-base-index:integer at which to start indexing panes'
+ 'pane-border-style:style of border pane'
'remain-on-exit:do not destroy windows after the program exits'
'synchronize-panes:send input to all panes of a window'
'utf8:assume UTF-8 sequences to appear in a window'
- 'window-status-attr:set status line attributes for a window'
- 'window-status-bg:set status line background for a window'
- 'window-status-current-attr:set status line attributes for active window'
- 'window-status-current-bg:set status line background for active window'
- 'window-status-current-fg:set status line foreground for active window'
+ 'window-active-style:style of active window'
+ 'window-status-activity-style:style of status bar activity tag'
+ 'window-status-bell-style:style of status bar bell tag'
'window-status-current-format:set status line format for active window'
- 'window-status-fg:set status line foreground for a window'
+ 'window-status-current-style:style of current window in status bar'
'window-status-format:set status line format for all but the active window'
+ 'window-status-last-style:style of last window in status bar'
+ 'window-status-separator:separator drawn between windows in status line'
+ 'window-status-style:general status bar style'
+ 'window-style:style of window'
+ 'wrap-search:search wrap around at the end of a pane'
'xterm-keys:generate xterm-style function key sequences'
)
_describe -t tmux-window-options 'tmux window option' tmux_window_options
@@ -1492,20 +1570,21 @@ function _tmux() {
local curcontext="${curcontext}"
local mode state ret=1
local -a args
- local -x tmuxcommand
- unset tmux_describe
+ local tmuxcommand
+ local tmux_describe=
args=(
'-2[force using 256 colours]'
'-8[force using 88 colours]'
'-c[execute a shell command]:command name:_command_names'
+ '-C[start tmux in control mode. -CC disables echo]'
'-f[specify configuration file]:tmux config file:_files -g "*(-.)"'
'-l[behave like a login shell]'
'-L[specify socket name]:socket name:__tmux-socket-name'
- '-q[do not send informational messages]'
'-S[specify socket path]:server socket:_path_files -g "*(=,/)"'
'-u[force using UTF-8]'
'-v[request verbose logging]'
+ '-V[report tmux version]'
'*:: :->subcommand_or_options'
)
_arguments -C -s -w ${args} && ret=0
@@ -1551,7 +1630,7 @@ function _tmux() {
# description generation follows; only done on 1st _tmux call.
local f desc
local -A rev
-local -x tmux_describe
+local tmux_describe
tmux_describe='yes, please'
for f in ${(k)_tmux_aliasmap} ; do
rev+=( ${_tmux_aliasmap[$f]} $f )
@@ -1561,6 +1640,5 @@ for f in ${(M)${(k)functions}:#_tmux-*} ; do
_tmux_commands+=( "${f#_tmux-}${desc:+:$desc}" )
[[ -n ${rev[${f#_tmux-}]} ]] && _tmux_aliases+=( "${rev[${f#_tmux-}]}${desc:+:$desc}" )
done
-unset desc f rev tmux_describe
-_tmux
+_tmux "$@"