diff options
| author | Cody Hiar <cody@hiar.ca> | 2021-01-28 08:34:35 -0700 | 
|---|---|---|
| committer | Cody Hiar <cody@hiar.ca> | 2021-01-28 08:34:35 -0700 | 
| commit | 8866483844e64543a652590e2ec9aa40a5bb6ef4 (patch) | |
| tree | 3e69fa22b465f11c66f574924228edba4d2e6cc5 /scripts/rolodex | |
| parent | 1b3a041521e3bb59febd21d6f86f1881d86d971e (diff) | |
Updating scripts
Diffstat (limited to 'scripts/rolodex')
| -rwxr-xr-x | scripts/rolodex | 172 | 
1 files changed, 172 insertions, 0 deletions
diff --git a/scripts/rolodex b/scripts/rolodex new file mode 100755 index 0000000..fe386b3 --- /dev/null +++ b/scripts/rolodex @@ -0,0 +1,172 @@ +#!/usr/bin/env bash +# vim: set filetype=sh +# +# Author: Cody Hiar +# Date: 2019-01-11 +# +# Description: Rolodex script. Consider the following setup +#  +# +------------------------------+-----------------------------+ +# |                              |                             | +# |                              |           Pane 3            | +# |                              |                             | +# |        Pane 1                +-----------------------------+ +# |                              |                             | +# |                              |         Pane 4              | +# +------------------------------+                             | +# |                              |                             | +# |                              +-----------------------------+ +# |       Pane 2                 |                             | +# |                              |                             | +# |                              |       Pane 5                | +# |                              |                             | +# +------------------------------+-----------------------------+ +#        Window 1                         Window 2  +# +# This is my standard setup. Pane 1 is vim, pane 2-5 are just used for docker +# or w/e else. I almost always want to stick on Window 1 but I want to cycle +# between pane 2-5. This script will simply rotate them in either direction so +# I can stay in window 1 but have a sort of "tabbed" bottom window +# +# Set options: +#   e: Stop script if command fails +#   u: Stop script if unset variable is referenced +#   x: Debug, print commands as they are executed +#   o pipefail:  If any command in a pipeline fails it all fails +# +# IFS: Internal Field Separator +set -euo pipefail +IFS=$'\n\t' + +# Colors for printing +G='\e[0;32m' # Green +LG='\e[0;37m' # Light Gray +C='\e[0;36m' # Cyan +NC='\e[0m' # No Color + +# Immutable globals +readonly ARGS=( "$@" ) +readonly NUM_ARGS="$#" +readonly PROGNAME=$(basename "$0") +readonly OPEN=1 +readonly CLOSED=0 +readonly DRAWER_SIZE=15 + +get_active_pane(){ +    echo $(tmux lsp | grep '(active)' | cut -c 1) +} + +get_number_of_buffer_window_panes() { +    echo $(tmux lsp  -t 2 | wc -l) +} + +get_number_of_active_window_panes() { +    echo $(tmux lsp | wc -l) +} + +get_number_of_windows() { +    echo $(tmux lsw | wc -l) +} + +get_prev_pane() { +    PANE_COUNT=$(get_number_of_active_window_panes) +    if [[ "$PANE_COUNT" == '2' ]]; then +        BUFFER_COUNT=$(get_number_of_buffer_window_panes) +        ACTIVE_PANE=$(get_active_pane)    +        tmux swap-pane -s 1.2 -t 2."$BUFFER_COUNT" +        MAX=$((BUFFER_COUNT - 1)) +        for i in $(seq 1 "$MAX" | tac); do +            NEXT=$((i + 1)) +            tmux swap-pane -s 2."$i" -t 2."$NEXT" +        done +        tmux select-pane -t 1."$ACTIVE_PANE" +    fi +} + +get_next_pane() { +    PANE_COUNT=$(get_number_of_active_window_panes) +    if [[ "$PANE_COUNT" == '2' ]]; then +        BUFFER_COUNT=$(get_number_of_buffer_window_panes) +        ACTIVE_PANE=$(get_active_pane)    +        tmux swap-pane -s 1.2 -t 2.1 +        MAX=$((BUFFER_COUNT - 1)) +        for i in $(seq 1 "$MAX"); do +            NEXT=$((i + 1)) +            tmux swap-pane -s 2."$i" -t 2."$NEXT" +        done +        tmux select-pane -t 1."$ACTIVE_PANE" +    fi +} + + +close_drawer() { +    PANE_COUNT=$(get_number_of_active_window_panes) +    if [[ "$PANE_COUNT" == '2' ]]; then +        WINDOW_COUNT=$(get_number_of_windows) +        if [[ "$WINDOW_COUNT" == '1' ]]; then +            tmux new-window +        fi +        tmux move-pane -s 1.2 -t 2.1 +        tmux move-pane -s 2.1 -t 2.2 +        if [[ "$WINDOW_COUNT" == '1' ]]; then +            tmux kill-pane -t 2.2 +        fi +        tmux select-window -t 1 +    fi +} + +open_drawer() { +    PANE_COUNT=$(get_number_of_active_window_panes) +    if [[ "$PANE_COUNT" == '1' ]]; then +        WINDOW_COUNT=$(get_number_of_windows) +        if [[ "$WINDOW_COUNT" == '1' ]]; then +            tmux split-window -c '#{pane_current_path}' + +        else +            tmux move-pane -s 2.1 +        fi +        tmux resize-pane -t 1.2 -y "${DRAWER_SIZE}" +    fi +} + +check_if_drawer_is_open_or_closed() { +    set +e +    tmux showenv DRAWER_PANE_ID &> /dev/null +    RETVAL="$?" +    set -e +    if [[ "$RETVAL" == 0 ]]; then +        echo "${OPEN}" +    else +        echo "${CLOSED}" +    fi +} + +toggle_drawer() { +    PANE_COUNT=$(get_number_of_active_window_panes) +    if [[ "$PANE_COUNT" == '1' ]]; then +        open_drawer +    elif [[ "$PANE_COUNT" == '2' ]]; then +        close_drawer +    fi +} + +create_new_pane() { +    tmux split-window -c '#{pane_current_path}' +    tmux resize-pane -t 1.2 -y "${DRAWER_SIZE}" +} + +main() { +    ACTION="${1:-}" +    if [[ $ACTION == "toggle" ]]; then +        toggle_drawer +    elif [[ $ACTION == "next" ]]; then +        get_next_pane +    elif [[ $ACTION == "prev" ]]; then +        get_prev_pane +    elif [[ $ACTION == "new" ]]; then +        create_new_pane +    else +        echo "Unrecognized command: ${ACTION}" +    fi +} +main $ARGS  | 
