Don't require tmux server to be running for completion to work.
authorVon Welch <von@vwelch.com>
Sat, 30 Jun 2012 20:47:13 +0000 (16:47 -0400)
committerVon Welch <von@vwelch.com>
Sat, 30 Jun 2012 20:47:13 +0000 (16:47 -0400)
completion/available/tmux.completion.bash

index c872ec5..a1b8f06 100644 (file)
@@ -5,6 +5,90 @@
 # Usage: Put "source bash_completion_tmux.sh" into your .bashrc
 # Based upon the example at http://paste-it.appspot.com/Pj4mLycDE
 
+    _tmux_cmds=" \
+attach-session \
+bind-key \
+break-pane \
+capture-pane \
+choose-client \
+choose-session \
+choose-window \
+clear-history \
+clock-mode \
+command-prompt \
+confirm-before \
+copy-buffer \
+copy-mode \
+delete-buffer \
+detach-client \
+display-message \
+display-panes \
+down-pane \
+find-window \
+has-session \
+if-shell \
+join-pane \
+kill-pane \
+kill-server \
+kill-session \
+kill-window \
+last-window \
+link-window \
+list-buffers \
+list-clients \
+list-commands \
+list-keys \
+list-panes \
+list-sessions \
+list-windows \
+load-buffer \
+lock-client \
+lock-server \
+lock-session \
+move-window \
+new-session \
+new-window \
+next-layout \
+next-window \
+paste-buffer \
+pipe-pane \
+previous-layout \
+previous-window \
+refresh-client \
+rename-session \
+rename-window \
+resize-pane \
+respawn-window \
+rotate-window \
+run-shell \
+save-buffer \
+select-layout \
+select-pane \
+select-prompt \
+select-window \
+send-keys \
+send-prefix \
+server-info \
+set-buffer \
+set-environment \
+set-option \
+set-window-option \
+show-buffer \
+show-environment \
+show-messages \
+show-options \
+show-window-options \
+source-file \
+split-window \
+start-server \
+suspend-client \
+swap-pane \
+swap-window \
+switch-client \
+unbind-key \
+unlink-window \
+up-pane"
+
 _tmux_expand () 
 { 
     [ "$cur" != "${cur%\\}" ] && cur="$cur"'\';
@@ -34,12 +118,12 @@ _tmux_filedir ()
 function _tmux_complete_client() {
     local IFS=$'\n'
     local cur="${1}"
-    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-clients | cut -f 1 -d ':')" -- "${cur}") )
+    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-clients 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
 }
 function _tmux_complete_session() {
     local IFS=$'\n'
     local cur="${1}"
-    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions | cut -f 1 -d ':')" -- "${cur}") )
+    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
 }
 function _tmux_complete_window() {
     local IFS=$'\n'
@@ -47,10 +131,10 @@ function _tmux_complete_window() {
     local session_name="$(echo "${cur}" | sed 's/\\//g' | cut -d ':' -f 1)"
     local sessions
     
-    sessions="$(tmux -q list-sessions | sed -re 's/([^:]+:).*$/\1/')"
+    sessions="$(tmux -q list-sessions 2>/dev/null | sed -re 's/([^:]+:).*$/\1/')"
     if [[ -n "${session_name}" ]]; then
         sessions="${sessions}
-$(tmux -q list-windows -t "${session_name}" | sed -re 's/^([^:]+):.*$/'"${session_name}"':\1/')"
+$(tmux -q list-windows -t "${session_name}" 2>/dev/null | sed -re 's/^([^:]+):.*$/'"${session_name}"':\1/')"
     fi
     cur="$(echo "${cur}" | sed -e 's/:/\\\\:/')"
     sessions="$(echo "${sessions}" | sed -e 's/:/\\\\:/')"
@@ -102,8 +186,7 @@ _tmux() {
 
     if [[ $COMP_CWORD -le $cmd_index ]]; then
         # The user has not specified a command yet
-        local all_commands="$(tmux -q list-commands | cut -f 1 -d ' ')"
-        COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${all_commands}" -- "${cur}") )
+        COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${_tmux_cmds}" -- "${cur}") )
     else        
         case ${cmd} in
             attach-session|attach)