--- /dev/null
+#!/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