refactor bunkdeck with some add'l error handling and fixed format

This commit is contained in:
sorrel 2024-04-15 14:05:55 -04:00
parent 29d6b0de45
commit d3145c6073

View file

@ -1,25 +1,30 @@
#!/bin/bash #!/bin/sh -e
set -e
sessionname=bunkdeck
heedPane="bunkdeck:0.0" heedPane="bunkdeck:0.0"
proclaimPane="bunkdeck:0.1" proclaimPane="bunkdeck:0.1"
shellPane="bunkdeck:0.2" shellPane="bunkdeck:0.2"
function isExistingDeck { isExistingDeck () {
set +e # format `-F '#S' # formats the result as just the session name`
sessions=$(tmux list-sessions) # filter `-f "{==:#S,${sessionname}}` # only returns sessions named $sessionname
set -e # capture error and redirect
sessions=$(tmux list-sessions -F '#S' -f "#{==:#S,${sessionname}}" 2>/dev/null)
if [[ $sessions == *"bunkdeck"* ]]; then if [ "${sessions}" = "${sessionname}" ] ; then
return 0 return 0
else else
return 1 return 1
fi fi
} }
function startNewDeck { attachToDeck () {
tmux new -d -s bunkdeck heed tmux attach-session -t bunkdeck
tmux split-window -h -t bunkdeck -p 70 }
startNewDeck () {
tmux new -d -s $sessionname heed
tmux split-window -h -t $sessionname -p 70
tmux split-window -t $heedPane -v -p 3 tmux split-window -t $heedPane -v -p 3
tmux send-keys -t $proclaimPane 'proclaim' C-m tmux send-keys -t $proclaimPane 'proclaim' C-m
tmux send-keys -t $shellPane 'cowsay "press [CTRL+b then o] to cycle through panes"' C-m tmux send-keys -t $shellPane 'cowsay "press [CTRL+b then o] to cycle through panes"' C-m
@ -32,11 +37,25 @@ function startNewDeck {
tmux attach -t $shellPane tmux attach -t $shellPane
} }
function killDeck { killDeck () {
tmux kill-session -t bunkdeck if isExistingDeck; then
tmux kill-session -t $sessionname
else
echo "you don't have bunkdeck running!"
fi
} }
function growPane { leaveDeck () {
# currently assumes that bunkdeck is only session running
# if bunkdeck leave is issued from within another session, silent failure occurs
if isExistingDeck && [ "${TMUX}" != "" ]; then
tmux detach -s $sessionname
echo "you are not inside bunkdeck! for help:"
echo "$ bunkdeck help"
fi
}
growPane () {
case $2 in case $2 in
shell) shell)
tmux resize-pane -t $shellPane -L "$3" tmux resize-pane -t $shellPane -L "$3"
@ -62,7 +81,7 @@ function growPane {
esac esac
} }
function shrinkPane { shrinkPane () {
case $2 in case $2 in
shell) shell)
tmux resize-pane -t $shellPane -R "$3" tmux resize-pane -t $shellPane -R "$3"
@ -88,6 +107,28 @@ function shrinkPane {
esac esac
} }
helpText () {
usageText
echo
echo "help:"
echo
echo " movement:"
echo " bunkdeck gives you three panes, 'proclaim' to chat, 'heed' to read chats"
echo " and 'shell' to do whatever you want!"
echo " to move between panes you press [CTL + b] at the same time"
echo " then [arrow key] to move to a new pane, or 'o' to cycle around"
}
usageText () {
echo "usage: bunkdeck [COMMAND]"
echo
echo "commands:"
echo " (none) attach to existing bunkdeck or start new one"
echo " kill kill running bunkdeck"
echo " leave close bunkdeck without killing it"
echo " grow grow the size of a bunkdeck window"
echo " shrink shrink the size of a bunkdeck window"
}
case $1 in case $1 in
@ -96,26 +137,24 @@ case $1 in
;; ;;
"") "")
if isExistingDeck; then if isExistingDeck; then
tmux attach-session -t bunkdeck attachToDeck
else else
startNewDeck startNewDeck
fi fi
;; ;;
leave)
leaveDeck
;;
grow) grow)
growPane "$@" growPane "$@"
;; ;;
shrink) shrink)
shrinkPane "$@" shrinkPane "$@"
;; ;;
help)
helpText
;;
*) *)
echo "usage: bunkdeck [COMMAND]" usageText
echo
echo "commands:"
echo " (none) attach to existing bunkdeck or start new one"
echo " kill kill running bunkdeck"
echo " grow grow the size of a bunkdeck window"
echo " shrink shrink the size of a bunkdeck window"
exit 1
;; ;;
esac esac