Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

[PATCH 02/18] _tmux: Update options for supported commands



This also adds a little TODO on top about what is missing.
---
 Completion/Unix/Command/_tmux | 339 ++++++++++++++++++++++++------------------
 1 file changed, 194 insertions(+), 145 deletions(-)

diff --git a/Completion/Unix/Command/_tmux b/Completion/Unix/Command/_tmux
index 7e192ab..7fb328e 100644
--- a/Completion/Unix/Command/_tmux
+++ b/Completion/Unix/Command/_tmux
@@ -40,6 +40,21 @@
 #
 # The configuration for subcommand completions may be done in
 # this context: ':completion:*:*:tmux-<sub-command>:*:*'
+#
+# TODO:
+#
+# Missing sub-commands:
+#
+#   - choose-tree
+#   - last-pane
+#   - move-pane
+#   - respawn-pane
+#   - choose-buffer
+#   - wait-for
+#
+# In addition, the way options (set/show etc) are handled needs to be reviewed.
+# For example, set-option can set every type of option now. I hope this is
+# rather simple to improve.
 
 # Global variables; setup the first time _tmux is called.
 # For $_tmux_commands[] generation, see the very end of this file.
@@ -154,6 +169,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 +205,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'
+        '-P[print information of new window after it has been created]'
         '-t[choose a target pane]:panes:__tmux-panes'
     )
     _arguments ${args}
@@ -198,7 +216,16 @@ 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}
@@ -206,17 +233,35 @@ function _tmux-capture-pane() {
 
 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-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 +283,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 +292,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,10 +304,15 @@ 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
+    if [[ ${state} == 'prompt' ]]; then
+        _message 'prompt string'
+        return
+    fi
     __tmux-lastarg ${state} 'command_and_args' 1 "command string"
 }
 
@@ -309,39 +363,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 +384,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'
@@ -376,6 +412,10 @@ function _tmux-find-window() {
     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 +434,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 +446,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 +462,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,14 +476,20 @@ 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}
 }
 
@@ -466,13 +515,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 +544,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() {
@@ -562,7 +607,9 @@ function _tmux-move-window() {
     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 +619,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 +639,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 +663,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 +673,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 +706,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 +715,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,6 +752,9 @@ 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}
@@ -719,43 +784,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,7 +818,16 @@ 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')
+    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
 }
 
@@ -779,7 +841,13 @@ function _tmux-select-prompt() {
 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 +856,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 +868,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 +882,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 +960,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 +977,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 +1016,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 +1074,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 +1090,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'
@@ -1129,6 +1174,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" )
-- 
2.1.4



Messages sorted by: Reverse Date, Date, Thread, Author