diff --git a/bunkdeck b/bunkdeck index 907abaf..6de1c9a 100755 --- a/bunkdeck +++ b/bunkdeck @@ -1,121 +1,160 @@ -#!/bin/bash -set -e +#!/bin/sh -e +sessionname=bunkdeck heedPane="bunkdeck:0.0" proclaimPane="bunkdeck:0.1" shellPane="bunkdeck:0.2" -function isExistingDeck { - set +e - sessions=$(tmux list-sessions) - set -e +isExistingDeck () { + # format `-F '#S' # formats the result as just the session name` + # filter `-f "{==:#S,${sessionname}}` # only returns sessions named $sessionname + # capture error and redirect + sessions=$(tmux list-sessions -F '#S' -f "#{==:#S,${sessionname}}" 2>/dev/null) - if [[ $sessions == *"bunkdeck"* ]]; then - return 0 - else - return 1 - fi + if [ "${sessions}" = "${sessionname}" ] ; then + return 0 + else + return 1 + fi } -function startNewDeck { - tmux new -d -s bunkdeck heed - tmux split-window -h -t bunkdeck -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 +attachToDeck () { + tmux attach-session -t bunkdeck } -function killDeck { - tmux kill-session -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 } -function 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" +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 + echo "size:" + echo " number of cells to grow the selected window" + exit 1 + ;; + esac } -function 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" +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 + 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" +} -case $1 in - - kill) - killDeck - ;; - "") - if isExistingDeck; then - tmux attach-session -t bunkdeck - else - startNewDeck - fi - ;; - grow) - growPane "$@" - ;; - shrink) - shrinkPane "$@" - ;; - *) +usageText () { echo "usage: bunkdeck [COMMAND]" 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 " leave close bunkdeck without killing it" + echo " grow grow the size of a bunkdeck window" echo " shrink shrink the size of a bunkdeck window" - exit 1 - ;; -esac +} +case $1 in + + kill) + killDeck + ;; + "") + if isExistingDeck; then + attachToDeck + else + startNewDeck + fi + ;; + leave) + leaveDeck + ;; + grow) + growPane "$@" + ;; + shrink) + shrinkPane "$@" + ;; + help) + helpText + ;; + *) + usageText + ;; +esac