From 3a9b0460d8830d0d9e7f29ec2487a1a29cfc032a Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Sun, 22 Dec 2019 09:21:53 -0500 Subject: Add a few shell functions to building tmux sessions easier --- shell/utils | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) (limited to 'shell') diff --git a/shell/utils b/shell/utils index 49b1985..b84bb48 100644 --- a/shell/utils +++ b/shell/utils @@ -134,3 +134,88 @@ passenv() { rm -f "$_f" } + +###################################################################### +# Tmux utilities +_tmux_session() { +session="" +window_name="" +working_directory="$(pwd)" +while [ $# -gt 0 ] ; do case $1 in +--) shift ; break;; +-s) session="$2" ; shift ; shift ;; +-n) window_name="$2" ; shift ; shift ;; +-w) working_directory="$2" ; shift ; shift ;; +*)echo "Invalid option $1" ; return ;; +esac ; done + +cd "$working_directory" || { echo "Cannot change to: $working_directory" ; return; } + +tmux new-session -s "$session" -n "$window_name" -c "$working_directory" \;\ + "$@" +} + + +_tmux_dev() { +session="" +working_directory="$(pwd)" +window_name="editor" +while [ $# -gt 0 ] ; do case $1 in +--) shift ; break;; +-s) session="$2" ; shift ; shift ;; +-n) window_name="$2" ; shift ; shift ;; +-w) working_directory="$2" ; shift ; shift ;; +*)echo "Invalid option $1" ; return ;; +esac ; done + +cd "$working_directory" || { echo "Cannot change to: $working_directory" ; return; } + +_tmux_session -s "$session" -w "$working_directory" -n "$window_name" \ + -- \ + send-keys -t 0 "$EDITOR" \; send-keys -t 0 Enter \;\ + new-window -n "shell" \;\ + new-window -n "git" \;\ + send-keys -t 0 "git status" \; send-keys -t 0 Enter \;\ + "$@" + +} + +_tmux_servers_split_commands() { +n=0 +server_cmds="" +while [ $# -gt 0 ] ; do + if [ $n -eq 0 ] ; then + server_cmds='send-keys "ssh \"'"$1"'\"" \; send-keys Enter \; ' + else + server_cmds="${server_cmds} split-window \; "'send-keys "ssh \"'"$1"'\"" \; send-keys Enter \; ' + fi + n="$(echo "$n+1" | bc)" + shift +done +echo "$server_cmds" +} + +_tmux_servers() { +session="" +working_directory="$HOME" +servers="" +layout="even-vertical" +while [ $# -gt 0 ] ; do case $1 in +--) shift ; break;; +-s) session="$2" ; shift ; shift ;; +-w) working_directory="$2" ; shift ; shift ;; +-servers) servers="$2"; shift ; shift ;; +-l) layout="$2"; shift ; shift ;; +*)echo "Invalid option $1" ; return ;; +esac ; done +cd "$working_directory" || { echo "Cannot change to: $working_directory" ; return; } + +layout="select-layout $layout ';' set-window-option -g synchronize-panes on ';'" + +eval _tmux_session -s "\$session" -w "\$working_directory" -n "main" \ + -- \ + $(_tmux_servers_split_commands $servers) \ + $layout \ + "\$@" \ + +} -- cgit v1.2.3