blob: 00cc1ce232213ea519601d249382efd8bc0813e0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#!/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")
get_number_of_active_window_panes() {
echo $(tmux lsp | wc -l)
}
get_active_pane(){
echo $(tmux lsp | grep '(active)' | cut -c 1)
}
get_number_of_buffer_window_panes() {
echo $(tmux lsp -t 2 | wc -l)
}
open_drawer_if_unopen() {
PANE_COUNT=$(get_number_of_active_window_panes)
if [[ "$PANE_COUNT" == '1' ]]; then
"$HOME"/.tmux/plugins/tmux-drawer/scripts/open_or_close_drawer.sh
fi
}
# Main loop of program
main() {
BUFFER_COUNT=$(get_number_of_buffer_window_panes)
PANE_COUNT=$(get_number_of_active_window_panes)
if [[ "$NUM_ARGS" == 0 ]]; then
ACTION='next'
elif [[ "$NUM_ARGS" == 1 ]]; then
ACTION="${ARGS[0]}"
fi
ACTIVE_PANE=$(get_active_pane)
if [[ "$ACTION" == 'prev' ]]; then
open_drawer_if_unopen
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"
elif [[ "$ACTION" == 'next' ]]; then
open_drawer_if_unopen
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"
else
echo "Command not recognized: $ACTION"
fi
}
main
|