]> Sergey Matveev's repositories - dotfiles.git/blobdiff - bin/bin/tmux-fzf.zsh
Huge tmux-fzf simplification with files quoting
[dotfiles.git] / bin / bin / tmux-fzf.zsh
diff --git a/bin/bin/tmux-fzf.zsh b/bin/bin/tmux-fzf.zsh
new file mode 100755 (executable)
index 0000000..eb66b31
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/env zsh
+
+cd $2
+set -e
+tmp=`mktemp`
+trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
+
+case $1 in
+(find)
+    find . -mindepth 1 -path "*/.git" -prune -o \
+        \( -type f -o -type d -o -type l \) -print |
+    cut -c3- | fzf -m --preview="less -N -S {}" |
+    while read fn ; do print ${(q)fn} ; done > $tmp
+    ;;
+(buf-files)
+    tmux capture-pane -J
+    tmux save-buffer $tmp.capture
+    trap "rm -f $tmp.capture" HUP PIPE INT QUIT TERM EXIT
+    tmux delete-buffer
+    pe < $tmp.capture > $tmp
+    ;;
+(git-files) git status --short | fzf -m | perl -npe 's/^\s*\S+\s+//' > $tmp ;;
+(git-branches) { git branch ; git branch --remote } | fzf > $tmp ;;
+(git-commits)
+    git --no-pager log --oneline -n 20 | perl -ne "print \"@~\$n \$_\"; \$n++" |
+    fzf --reverse | cut -w -f1 > $tmp
+    ;;
+(*) echo unknown command ; sleep 1 ; exit ;;
+esac
+
+[ -s $tmp ] || exit
+tmux set-buffer "`perl -npe 's/\n/ /g' $tmp`"
+tmux paste-buffer
+tmux delete-buffer