]> Sergey Matveev's repositories - dotfiles.git/blobdiff - bin/bin/tmux-fzf.sh
Single tmux popup for fzf
[dotfiles.git] / bin / bin / tmux-fzf.sh
diff --git a/bin/bin/tmux-fzf.sh b/bin/bin/tmux-fzf.sh
new file mode 100755 (executable)
index 0000000..6333330
--- /dev/null
@@ -0,0 +1,54 @@
+ #!/bin/sh
+
+tmux capture-pane -J
+tmp=`mktemp`
+trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
+tmux save-buffer $tmp
+tmux delete-buffer
+session_name="fzf-selector"
+tmux has-session -t $session_name 2>/dev/null && tmux kill-session -t $session_name || :
+
+case "$1" in
+find)
+    tmux new-session -d -s $session_name -c "$2" '
+        find . -path "*/.git" -prune -o \( -type f -o -type d -o -type l \) -print |
+        cut -c3- | fzf -m --preview="less -N -S {}" | read data
+        tmux set-buffer "${data:- }"
+    '
+    ;;
+buf-files)
+    tmux new-session -d -s $session_name -c "$2" "pe < $tmp"
+    ;;
+git-files)
+    tmux new-session -d -s $session_name -c "$2" '
+        git status --short | fzf -m | while read item ; do
+            item=$(echo $item | cut -w -f2-)
+            echo -n "$item "
+        done | read data
+        tmux set-buffer "${data:- }"
+    '
+    ;;
+git-branches)
+    tmux new-session -d -s $session_name -c "$2" '
+        { git branch ; git branch --remote } | fzf | read data
+        tmux set-buffer "${data:- }"
+    '
+    ;;
+git-commits)
+    tmux new-session -d -s $session_name -c "$2" '
+        git --no-pager log --oneline -n 20 | perl -ne "print \"@~\$n \$_\"; \$n++" |
+        fzf --reverse | cut -w -f1 | read data
+        tmux set-buffer "${data:- }"
+    '
+    ;;
+*)
+    echo unknown command
+    sleep 1
+    exit
+    ;;
+esac
+
+tmux set-option -t $session_name status off
+tmux attach-session -t $session_name
+tmux paste-buffer
+tmux delete-buffer