192 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #compdef tmuxp
 | |
| 
 | |
| # ------------------------------------------------------------------------------
 | |
| # Copyright (c) 2017 Github zsh-users - https://github.com/zsh-users
 | |
| # All rights reserved.
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without
 | |
| # modification, are permitted provided that the following conditions are met:
 | |
| #     * Redistributions of source code must retain the above copyright
 | |
| #       notice, this list of conditions and the following disclaimer.
 | |
| #     * Redistributions in binary form must reproduce the above copyright
 | |
| #       notice, this list of conditions and the following disclaimer in the
 | |
| #       documentation and/or other materials provided with the distribution.
 | |
| #     * Neither the name of the zsh-users nor the
 | |
| #       names of its contributors may be used to endorse or promote products
 | |
| #       derived from this software without specific prior written permission.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | |
| # DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
 | |
| # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | |
| # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| # ------------------------------------------------------------------------------
 | |
| # Description
 | |
| # -----------
 | |
| #
 | |
| #  Completion script for tmuxp (https://github.com/tmux-python/tmuxp)
 | |
| #
 | |
| # ------------------------------------------------------------------------------
 | |
| # Authors
 | |
| # -------
 | |
| #
 | |
| #  * Bez Hermoso <bezalelhermoso@gmail.com>
 | |
| #
 | |
| # ------------------------------------------------------------------------------
 | |
| 
 | |
| _tmuxp() {
 | |
| 
 | |
|   local curcontext="$curcontext" state line
 | |
|   typeset -A opt_args
 | |
| 
 | |
|   _arguments -C \
 | |
|     ":command:->command" \
 | |
|     "*::options:->options" \
 | |
|     "--log-level[log level(default info)]: :(debug info warning error critical)" \
 | |
|     '(- *)'{-h,--help}'[display usage information]' \
 | |
|     '(- *)'{-V,--version}'[show version number and exit]'
 | |
| 
 | |
|     case $state in
 | |
|       (command)
 | |
|         local -a subcommands
 | |
|         subcommands=(
 | |
|           'load:Load tmuxp workspaces'
 | |
|           'shell:launch python shell for tmux server, session, window and pane'
 | |
|           'import:Import a teamocil/tmuxinator config'
 | |
|           'convert:Convert a tmuxp config between JSON and YAML'
 | |
|           'debug-info:print out all diagnostic info'
 | |
|           'ls:list sessions in config directory'
 | |
|           'edit: run $EDITOR on config'
 | |
|           'freeze:Snapshot a session into a config'
 | |
|         )
 | |
|         _describe -t commands 'commands' subcommands
 | |
|         ;;
 | |
|       (options)
 | |
|         case $line[1] in
 | |
|           (load)
 | |
|             __tmuxp_load
 | |
|             ;;
 | |
|           (import)
 | |
|             __tmuxp_import
 | |
|             ;;
 | |
|           (freeze)
 | |
|             local sessions="$(__tmux_sessions)"
 | |
|             _arguments -C \
 | |
|              '(- *)'{-h,--help}'[show  help message and exit]' \
 | |
|              '-S[pass-through for tmux -S]: :_files' \
 | |
|              '-L[pass-through for tmux -L]: :' \
 | |
|              '(-f --config-format)'{-f,--config-format}'[format to save in]: :(yaml json)' \
 | |
|              '(-o --save-to)'{-o,--save-to}'[file to save to]: :_files' \
 | |
|              '(-y --yes)'{-y,--yes}'[always answer yes]' \
 | |
|              '(-q --quiet)'{-q,--quiet}"[don't prompt for confirmation]" \
 | |
|              '--force[overwrite the config file]'\
 | |
|               "1::session name:compadd $sessions"
 | |
|             ;;
 | |
|           (convert)
 | |
|             _arguments -C \
 | |
|               '1:: :_files -g "*.(json|yaml|yml)"'
 | |
|             ;;
 | |
|           (shell)
 | |
|             local sessions="$(__tmux_sessions)"
 | |
|             local windows="$(__tmux_windows)"
 | |
|             _arguments -C \
 | |
|              '(- *)'{-h,--help}'[show  help message and exit]' \
 | |
|              '-S[pass-through for tmux -S]: :_files' \
 | |
|              '-L[pass-through for tmux -L]: :' \
 | |
|              '--best[use best shell available in site packages]' \
 | |
|              '--pdb[use plain pdb]' \
 | |
|              "--code[use stdlib's code.interact()]" \
 | |
|              '--ptipython[use ptpython + ipython]' \
 | |
|              '--ptpython[use ptpython]' \
 | |
|              '--ipython[use ipython]' \
 | |
|              '--bpython[use bpython]' \
 | |
|              (--no-startup)'--use-pythonrc[load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code]' \
 | |
|              (--use-pythonrc)'--no-startup[do not load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code]' \
 | |
|              (--no-vi-mode)'--use-vi-mode[use vi-mode in ptpython/ptipython]' \
 | |
|              (--vi-mode)'--no-vi-mode[do not use vi-mode in ptpython/ptipython]' \
 | |
|               "1::session name:compadd $sessions" \
 | |
|               "2::window name:compadd $windows"
 | |
|             ;;
 | |
|           (ls|debug-info)
 | |
|             _arguments -C \
 | |
|               '(- *)'{-h,--help}'[show help message and exit]'
 | |
|             ;;
 | |
|           (edit)
 | |
|             _arguments -C \
 | |
|               '(- *)'{-h,--help}'[show help message and exit]' \
 | |
|               '1:: :_files -g "*.(json|yaml|yml)"'
 | |
|             ;;
 | |
|         esac
 | |
|     esac
 | |
| 
 | |
| }
 | |
| 
 | |
| __tmuxp_load() {
 | |
|   local state line
 | |
|   typeset -A opt_args
 | |
|   _arguments -C \
 | |
|     '*:sessions:->sessions' \
 | |
|     '--yes:yes' \
 | |
|     '-d[Load the session without attaching it]' \
 | |
|     '-2[Force tmux to assume the terminal supports 256 colors]' \
 | |
|     '-8[Like -2, but indicates that the terminal supports 88 colors]'
 | |
| 
 | |
|   # Can't get the options to be recognized when there are sessions that has
 | |
|   # a dash.
 | |
| 
 | |
|   case $state in
 | |
|     (sessions)
 | |
|       local s
 | |
|       _alternative \
 | |
|         'sessions-user:user session:compadd -F line - ~/.tmuxp/*.(json|yml|yaml)(:r:t)' \
 | |
|         'sessions-other:session in current directory:_path_files -/ -g "**/.tmuxp.(yml|yaml|json)"' \
 | |
|         'sessions-other:session in current directory:_path_files -g "*.(yml|yaml|json)"'
 | |
|       ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| __tmuxp_import() {
 | |
|   local state line
 | |
|   typeset -A opt_args
 | |
|   _arguments -C \
 | |
|     '1::program:(tmuxinator teamocil)' \
 | |
|     '2::project:->project'
 | |
| 
 | |
|   case $state in
 | |
|     (project)
 | |
|       if [[ $line[1] == 'tmuxinator' ]]
 | |
|       then
 | |
|         _wanted tmuxinator-projects exp 'tmuxinator projects' compadd $(tmuxinator completions start)
 | |
|       fi
 | |
|       ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| __tmux_sessions () {
 | |
|   local tmux_sessions
 | |
|   tmux_sessions=($(_call_program tmux_sessions 'tmux ls -F "#{session_name}"'))
 | |
|   echo $tmux_sessions
 | |
| }
 | |
| 
 | |
| __tmux_windows () {
 | |
|   local tmux_windows
 | |
|   tmux_windows=($(_call_program tmux_sessions 'tmux ls -F "#{window_name}"'))
 | |
|   echo $tmux_windows
 | |
| }
 | |
| 
 | |
| _tmuxp "$@"
 | |
| 
 | |
| 
 | |
| # Local Variables:
 | |
| # mode: Shell-Script
 | |
| # sh-indentation: 2
 | |
| # indent-tabs-mode: nil
 | |
| # sh-basic-offset: 2
 | |
| # End:
 | |
| # vim: ft=zsh sw=2 ts=2 et
 |