feat(tmuxinator): show popup for choosing session on <prefix>s
This commit is contained in:
40
tmux/bin/fuzzy-switch.sh
Executable file
40
tmux/bin/fuzzy-switch.sh
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
die() {
|
||||||
|
printf "\n[tmux-fuzzy] %s\n" "$1" >&2
|
||||||
|
# keep popup visible if we're in a popup
|
||||||
|
if [ -n "${TMUX:-}" ]; then
|
||||||
|
printf "Press ENTER to close..."
|
||||||
|
read -r _ || true
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
list_projects() {
|
||||||
|
tmuxinator list 2>/dev/null \
|
||||||
|
| sed '1{/tmuxinator projects:/d;}' \
|
||||||
|
| tr -s '[:space:]' '\n' \
|
||||||
|
| grep -E '^[[:alnum:]_.:-]+$' \
|
||||||
|
|| true
|
||||||
|
}
|
||||||
|
|
||||||
|
# unique + sorted
|
||||||
|
items="$(list_projects | sort -u)"
|
||||||
|
[ -n "$items" ] || die "No tmuxinator projects found."
|
||||||
|
|
||||||
|
sel="$(
|
||||||
|
printf '%s\n' "$items" | fzf \
|
||||||
|
--prompt='Project > ' \
|
||||||
|
--height=100% --layout=reverse \
|
||||||
|
--print-query --expect=enter
|
||||||
|
)" || exit 0
|
||||||
|
|
||||||
|
key="$(printf '%s\n' "$sel" | sed -n '1p')"
|
||||||
|
query="$(printf '%s\n' "$sel" | sed -n '2p' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
||||||
|
choice="$(printf '%s\n' "$sel" | sed -n '3p')"
|
||||||
|
|
||||||
|
project="${choice:-$query}"
|
||||||
|
[ -n "$project" ] || exit 0
|
||||||
|
|
||||||
|
tmuxinator start "$project"
|
||||||
|
exit 0
|
||||||
|
|
||||||
@@ -66,5 +66,7 @@ set -g @plugin 'omerxx/tmux-sessionx'
|
|||||||
|
|
||||||
set -g @plugin 'christoomey/vim-tmux-navigator'
|
set -g @plugin 'christoomey/vim-tmux-navigator'
|
||||||
|
|
||||||
|
bind-key s display-popup -w 30% -h 30% -E "~/.config/tmux/bin/fuzzy-switch.sh"
|
||||||
|
|
||||||
# Initialise tmux plugin manager (needs to be at the bottom of the file)
|
# Initialise tmux plugin manager (needs to be at the bottom of the file)
|
||||||
run '~/.config/tmux/plugins/tpm/tpm'
|
run '~/.config/tmux/plugins/tpm/tpm'
|
||||||
|
|||||||
Reference in New Issue
Block a user