aboutsummaryrefslogtreecommitdiff
path: root/scripts/rolodex
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rolodex')
-rwxr-xr-xscripts/rolodex172
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