-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.tmux
More file actions
executable file
·87 lines (69 loc) · 5.11 KB
/
main.tmux
File metadata and controls
executable file
·87 lines (69 loc) · 5.11 KB
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
#!/usr/bin/env bash
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BINARY_PATH="$CURRENT_DIR/tmux-popup-control"
BINARY_NAME=$(basename "$BINARY_PATH")
LAUNCH_SCRIPT="$CURRENT_DIR/main.sh"
if [[ ! -x "$BINARY_PATH" ]]; then
echo "can't find binary at $BINARY_PATH, calling make build..." 1>&2
( cd "$CURRENT_DIR"; go mod vendor; make build )
if [[ ! -x "$BINARY_PATH" ]]; then
echo "make build doesn't seem to have done anything, bailing early!" 1>&2
exit 1
fi
fi
# if [ -x "$(command -v copyq)" ]; then
# copyq &>/dev/null &
# fi
# Load all @tmux-popup-control-* options in one shot and populate an
# associative array so we never call tmux show-option more than once.
declare -A TMUX_OPTS
while IFS=$'\t' read -r key val; do
# tmux show-options -g outputs "option value" — strip the leading @.
key="${key#@}"
# Values may be wrapped in double quotes with \$ escapes; clean them.
val="${val#\"}"
val="${val%\"}"
val="${val//\\$/\$}"
TMUX_OPTS["$key"]="$val"
done < <(tmux show-options -g 2>/dev/null | grep '^@tmux-popup-control-' | sed 's/ /\t/')
# opt returns the value for a @tmux-popup-control-* option, or empty string.
opt() { echo "${TMUX_OPTS["tmux-popup-control-$1"]}"; }
[[ -z "$TMUX_POPUP_CONTROL_LAUNCH_KEY" ]] && TMUX_POPUP_CONTROL_LAUNCH_KEY="$(opt launch-key)"
[[ -z "$TMUX_POPUP_CONTROL_LAUNCH_KEY" ]] && TMUX_POPUP_CONTROL_LAUNCH_KEY="F"
[[ -z "$TMUX_POPUP_CONTROL_KEY_COMMAND_MENU" ]] && TMUX_POPUP_CONTROL_KEY_COMMAND_MENU="$(opt key-command-menu)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_COMMAND_MENU" ]] && TMUX_POPUP_CONTROL_KEY_COMMAND_MENU=":"
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_TREE" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_TREE="$(opt key-session-tree)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_TREE" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_TREE='s'
[[ -z "$TMUX_POPUP_CONTROL_KEY_PANE_SWITCHER" ]] && TMUX_POPUP_CONTROL_KEY_PANE_SWITCHER="$(opt key-pane-switcher)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_PANE_SWITCHER" ]] && TMUX_POPUP_CONTROL_KEY_PANE_SWITCHER='f'
[[ -z "$TMUX_POPUP_CONTROL_KEY_WINDOW_SWITCHER" ]] && TMUX_POPUP_CONTROL_KEY_WINDOW_SWITCHER="$(opt key-window-switcher)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_WINDOW_SWITCHER" ]] && TMUX_POPUP_CONTROL_KEY_WINDOW_SWITCHER='w'
[[ -z "$TMUX_POPUP_CONTROL_KEY_PANE_CAPTURE" ]] && TMUX_POPUP_CONTROL_KEY_PANE_CAPTURE="$(opt key-pane-capture)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_PANE_CAPTURE" ]] && TMUX_POPUP_CONTROL_KEY_PANE_CAPTURE='H'
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_SAVE" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_SAVE="$(opt key-session-save)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_SAVE" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_SAVE='C-s'
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_RESTORE_FROM" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_RESTORE_FROM="$(opt key-session-restore-from)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_RESTORE_FROM" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_RESTORE_FROM='C-r'
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_RENAME" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_RENAME="$(opt key-session-rename)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_SESSION_RENAME" ]] && TMUX_POPUP_CONTROL_KEY_SESSION_RENAME='$'
[[ -z "$TMUX_POPUP_CONTROL_KEY_WINDOW_RENAME" ]] && TMUX_POPUP_CONTROL_KEY_WINDOW_RENAME="$(opt key-window-rename)"
[[ -z "$TMUX_POPUP_CONTROL_KEY_WINDOW_RENAME" ]] && TMUX_POPUP_CONTROL_KEY_WINDOW_RENAME=','
BINDINGS_FILE="$(mktemp "${TMPDIR:-/tmp}/tmux-popup-control-bindings.XXXXXX")"
cleanup() {
rm -f "$BINDINGS_FILE"
}
trap cleanup EXIT
cat >"$BINDINGS_FILE" <<EOF
set-option -gq @tmux-popup-control-binary-path "$BINARY_PATH"
bind-key -T prefix -N "Launches $BINARY_NAME via $LAUNCH_SCRIPT" "$TMUX_POPUP_CONTROL_LAUNCH_KEY" run-shell -b "$LAUNCH_SCRIPT"
bind-key -T prefix -N "Launches $BINARY_NAME's command menu" "$TMUX_POPUP_CONTROL_KEY_COMMAND_MENU" run-shell -b "$LAUNCH_SCRIPT --root-menu=command"
bind-key -T prefix -N "Launches $BINARY_NAME's session tree" "$TMUX_POPUP_CONTROL_KEY_SESSION_TREE" run-shell -b "$LAUNCH_SCRIPT --root-menu session:tree"
bind-key -T prefix -N "Launches $BINARY_NAME's pane switcher" "$TMUX_POPUP_CONTROL_KEY_PANE_SWITCHER" run-shell -b "$LAUNCH_SCRIPT --root-menu pane:switch"
bind-key -T prefix -N "Launches $BINARY_NAME's window switcher" "$TMUX_POPUP_CONTROL_KEY_WINDOW_SWITCHER" run-shell -b "$LAUNCH_SCRIPT --root-menu window:switch"
bind-key -T prefix -N "Captures pane to file via $BINARY_NAME" "$TMUX_POPUP_CONTROL_KEY_PANE_CAPTURE" run-shell -b "$LAUNCH_SCRIPT --root-menu pane:capture"
bind-key -T prefix -N "Saves sessions via $BINARY_NAME" "$TMUX_POPUP_CONTROL_KEY_SESSION_SAVE" run-shell -b "$LAUNCH_SCRIPT --root-menu session:save"
bind-key -T prefix -N "Restores sessions from a snapshot via $BINARY_NAME" "$TMUX_POPUP_CONTROL_KEY_SESSION_RESTORE_FROM" run-shell -b "$LAUNCH_SCRIPT --root-menu session:restore-from"
bind-key -T prefix -N "Renames session via $BINARY_NAME" "$TMUX_POPUP_CONTROL_KEY_SESSION_RENAME" run-shell -b "$LAUNCH_SCRIPT --root-menu session:rename --menu-args '#{q:session_name}'"
bind-key -T prefix -N "Renames window via $BINARY_NAME" "$TMUX_POPUP_CONTROL_KEY_WINDOW_RENAME" run-shell -b "$LAUNCH_SCRIPT --root-menu window:rename --menu-args '#{q:session_name}:#{window_index}'"
EOF
tmux source-file "$BINDINGS_FILE"