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 |