[[ $seen[$fn] -eq 1 ]] && continue
seen+=($fn 1)
print $fn
-done | fzf -m | tr "\n" " " | read data
-tmux set-buffer ${data:- }
+done | fzf -m
+++ /dev/null
- #!/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
--- /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
}
bind-key o display-menu \
- find o "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.sh find '#{pane_current_path}'\"" \
- buf-files f "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.sh buf-files '#{pane_current_path}'\"" \
- git-files g "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.sh git-files '#{pane_current_path}'\"" \
- git-branches b "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.sh git-branches '#{pane_current_path}'\"" \
- git-commits c "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.sh git-commits '#{pane_current_path}'\""
+ find o "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh find '#{pane_current_path}'\"" \
+ buf-files f "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh buf-files '#{pane_current_path}'\"" \
+ git-files g "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-files '#{pane_current_path}'\"" \
+ git-branches b "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-branches '#{pane_current_path}'\"" \
+ git-commits c "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-commits '#{pane_current_path}'\""
bind-key Y {
capture-pane -J -S - -E -
# fzf {{{
export FZF_DEFAULT_OPTS="--color=16 --info=inline"
cf() {
- local dir=$(find ${1:-.} -path "*/\.git" -prune -o -type d -print |
+ local dir=$(find ${1:-.} -mindepth 1 -path "*/\.git" -prune -o -type d -print |
fzf --height 40% --reverse --preview="tree -CN {}")
[[ -z $dir ]] || cd $dir
}