]> Sergey Matveev's repositories - dotfiles.git/blob - bin/bin/tmux-fzf.sh
Single tmux popup for fzf
[dotfiles.git] / bin / bin / tmux-fzf.sh
1  #!/bin/sh
2
3 tmux capture-pane -J
4 tmp=`mktemp`
5 trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
6 tmux save-buffer $tmp
7 tmux delete-buffer
8 session_name="fzf-selector"
9 tmux has-session -t $session_name 2>/dev/null && tmux kill-session -t $session_name || :
10
11 case "$1" in
12 find)
13     tmux new-session -d -s $session_name -c "$2" '
14         find . -path "*/.git" -prune -o \( -type f -o -type d -o -type l \) -print |
15         cut -c3- | fzf -m --preview="less -N -S {}" | read data
16         tmux set-buffer "${data:- }"
17     '
18     ;;
19 buf-files)
20     tmux new-session -d -s $session_name -c "$2" "pe < $tmp"
21     ;;
22 git-files)
23     tmux new-session -d -s $session_name -c "$2" '
24         git status --short | fzf -m | while read item ; do
25             item=$(echo $item | cut -w -f2-)
26             echo -n "$item "
27         done | read data
28         tmux set-buffer "${data:- }"
29     '
30     ;;
31 git-branches)
32     tmux new-session -d -s $session_name -c "$2" '
33         { git branch ; git branch --remote } | fzf | read data
34         tmux set-buffer "${data:- }"
35     '
36     ;;
37 git-commits)
38     tmux new-session -d -s $session_name -c "$2" '
39         git --no-pager log --oneline -n 20 | perl -ne "print \"@~\$n \$_\"; \$n++" |
40         fzf --reverse | cut -w -f1 | read data
41         tmux set-buffer "${data:- }"
42     '
43     ;;
44 *)
45     echo unknown command
46     sleep 1
47     exit
48     ;;
49 esac
50
51 tmux set-option -t $session_name status off
52 tmux attach-session -t $session_name
53 tmux paste-buffer
54 tmux delete-buffer