bunkdeck/bunkdeck
oxaliq 8d976bfe63 remove bunkchat scripts (#2)
bunkdeck is now the repo for nice tools on top of bunkchat

includes `bunkdeck` for scripting terminal multiplexing and `delete.sh` to add to crontab for periodic flushing of chatlog

tested:
- [x] local
- [x] in tilde

Co-authored-by: maren <git@stillgreenmoss.net>
Reviewed-on: #2
Reviewed-by: maren <git@stillgreenmoss.net>
Co-authored-by: oxaliq <git@oxaliq.net>
Co-committed-by: oxaliq <git@oxaliq.net>
2024-04-22 20:45:27 +00:00

156 lines
3.9 KiB
Bash
Executable file

#!/bin/sh -e
sessionname=bunkdeck
heedPane=bunkdeck:0.0
proclaimPane=bunkdeck:0.1
shellPane=bunkdeck:0.2
isExistingDeck () {
if tmux has -t $sessionname ; then
return 0
else
return 1
fi
}
attachToDeck () {
# does not currently protect against nesting sessions (tmux does this for us)
tmux attach-session -d -t bunkdeck
}
startNewDeck () {
tmux new -d -s $sessionname heed
tmux split-window -h -t $sessionname -p 70
tmux split-window -t $heedPane -v -p 3
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
# turn on pane titling
tmux select-pane -t $heedPane -T heed
tmux select-pane -t $proclaimPane -T proclaim
tmux select-pane -t $shellPane -T shell
tmux set -g set-titles on
# attach session to shell
tmux attach -t $shellPane
}
killDeck () {
if isExistingDeck; then
tmux kill-session -t $sessionname
else
echo "you don't have bunkdeck running!"
fi
}
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
shell)
tmux resize-pane -t $shellPane -L "$3"
;;
proclaim)
tmux resize-pane -t $proclaimPane -U "$3"
;;
heed)
tmux resize-pane -t $heedPane -D "$3"
;;
*)
echo "usage: bunkdeck grow [WINDOW] [SIZE]"
echo
echo "windows:"
echo " shell horizontally grow the shell window"
echo " proclaim vertically grow the window where you send text"
echo " heed vertically grow the window where you read texts"
echo
echo "size:"
echo " number of cells to grow the selected window"
exit 1
;;
esac
}
shrinkPane () {
case $2 in
shell)
tmux resize-pane -t $shellPane -R "$3"
;;
proclaim)
tmux resize-pane -t $proclaimPane -D "$3"
;;
heed)
tmux resize-pane -t $heedPane -U "$3"
;;
*)
echo "usage: bunkdeck shrink [WINDOW] [SIZE]"
echo
echo "windows:"
echo " shell horizontally shrink the shell window"
echo " proclaim vertically shrink the window where you send text"
echo " heed vertically shrink the window where you read texts"
echo
echo "size:"
echo " number of cells to shrink the selected window"
exit 1
;;
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
kill)
killDeck
;;
"")
if isExistingDeck; then
attachToDeck
else
startNewDeck
fi
;;
leave)
leaveDeck
;;
grow)
growPane "$@"
;;
shrink)
shrinkPane "$@"
;;
help)
helpText
;;
*)
usageText
;;
esac