aboutsummaryrefslogtreecommitdiff
path: root/shell/utils
diff options
context:
space:
mode:
authorMitch Riedstra <mitch@riedstra.us>2019-12-22 09:21:53 -0500
committerMitch Riedstra <mitch@riedstra.us>2019-12-22 09:21:53 -0500
commit3a9b0460d8830d0d9e7f29ec2487a1a29cfc032a (patch)
tree85dc221cc11138af79be4d29d308e82dac219f8d /shell/utils
parent5dc98357f380a586f82a5e8bf27d378665181418 (diff)
downloaddotfiles-3a9b0460d8830d0d9e7f29ec2487a1a29cfc032a.tar.gz
dotfiles-3a9b0460d8830d0d9e7f29ec2487a1a29cfc032a.tar.xz
Add a few shell functions to building tmux sessions easier
Diffstat (limited to 'shell/utils')
-rw-r--r--shell/utils85
1 files changed, 85 insertions, 0 deletions
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 \
+ "\$@" \
+
+}