Skip to content

Commit c21c306

Browse files
committed
fzf/tmux: add tmux session tree preview
1 parent 07bbc3b commit c21c306

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

fzf_bash.sh

+10-6
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,17 @@ bind -m vi-command '"\C-r": "i\C-r"'
306306
# }}}
307307
# Tmux {{{
308308

309+
__tmux_fzf_get_session__() {
310+
session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null |
311+
fzf --exit-0 --preview='tmux_tree {} | bat --theme TwoDark --style plain')
312+
echo "$session"
313+
}
314+
309315
# Tmux session switcher (`tms foo` attaches to `foo` if exists, else creates
310316
# it)
311317
tms() {
312318
[[ -n "$TMUX" ]] && change="switch-client" || change="attach-session"
313-
if [[ "$1" ]]; then
319+
if [[ -n "$1" ]]; then
314320
if [[ "$1" == "-ask" ]]; then
315321
read -r -p "New tmux session name: " session_name
316322
else
@@ -321,14 +327,12 @@ tms() {
321327
tmux $change -t "$session_name");
322328
return
323329
fi
324-
session=$(tmux list-sessions -F \
325-
"#{session_name}" 2>/dev/null | fzf --exit-0) && \
326-
tmux $change -t "$session" || echo "No sessions found."
330+
session=$(eval __tmux_fzf_get_session__)
331+
tmux $change -t "$session" || echo "No sessions found."
327332
}
328333
# Tmux session killer
329334
tmk() {
330-
session=$(tmux list-sessions -F "#{session_name}" | \
331-
fzf --query="$1" --exit-0) &&
335+
session=$(eval __tmux_fzf_get_session__)
332336
tmux kill-session -t "$session"
333337
}
334338

setup-new/symlinks.sh

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ fi
111111
if type "tmux" > /dev/null 2>&1; then
112112
$ln_cmd -fTs "$dotfiles_dir/tmux" "$HOME/.tmux"
113113
echo Created .tmux folder symlink
114+
$ln_cmd -fTs "$dotfiles_dir/tmux/tmux_tree" "$HOME/bin/tmux_tree"
115+
echo Created bin/tmux_tree symlink
114116
fi
115117
if type "powerline-daemon" > /dev/null 2>&1; then
116118
$ln_cmd -fTs "$dotfiles_dir/config/powerline" "$HOME/.config/powerline"

tmux/tmux_tree

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env bash
2+
3+
tmux ls -F'#{session_id}' | while read -r s; do
4+
S=$(tmux ls -F'#{session_id}#{session_name}: #{T:tree_mode_format}' | grep ^"$s")
5+
session_info=${S##$s}
6+
session_name=$(echo "$session_info" | cut -d ':' -f 1)
7+
if [[ -n "$1" ]] && [[ "$1" == "$session_name" ]]; then
8+
echo -e "\033[1;34m$session_info\033[0m"
9+
else
10+
echo -e "\033[1m$session_info\033[0m"
11+
fi
12+
tmux lsw -t"$s" -F'#{window_id}' | while read -r w; do
13+
W=$(tmux lsw -t"$s" -F'#{window_id}#{T:tree_mode_format}' | grep ^"$w")
14+
echo "${W##$w}"
15+
done
16+
done
17+

0 commit comments

Comments
 (0)