seen+=($fn 1)
print $fn
done | fzf -m | tr "\n" " " | read data
-tmux set-buffer "$data"
+tmux set-buffer "${data:- }"
--- /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
-#!/bin/sh
-
-tmux has-session -t path-extractor && tmux kill-session -t path-extractor || :
-tmux new-session -d -s path-extractor -c "$1" "pe < /tmp/tmux-buffer ; tmux detach"
-tmux set-option -t path-extractor status off
-exec tmux attach-session -t path-extractor
split-window 'vim -c "set listchars=" -c "match ExtraWhitespace //" /tmp/tmux-buffer'
}
-bind-key o {
- capture-pane -J
- save-buffer /tmp/tmux-buffer
- delete-buffer
- display-popup -KE -w 100% -R "~/bin/tmux-path-extractor.sh '#{pane_current_path}'"
- paste-buffer
- delete-buffer
-}
-
-bind-key O {
- display-popup -KE -w 100% -R "~/bin/tmux-git-extractor.sh '#{pane_current_path}'"
- paste-buffer
- delete-buffer
-}
+bind-key o display-menu \
+ find d "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}'\""
bind-key Y {
capture-pane -J -S - -E -
# }}}
# fzf {{{
-alias -g PE="| pe"
-
-export FZF_DEFAULT_OPTS="--color=16 --info=inline --preview='less -N -S {}'"
-
-_fzf_find() {
- find . \( -path "*/\.git" -o -fstype devfs -o -fstype procfs \) -prune \
- -o \( -type d $@ \) -print 2>/dev/null | cut -b3-
+export FZF_DEFAULT_OPTS="--color=16 --info=inline"
+cf() {
+ local dir=$(find ${1:-.} -path "*/\.git" -prune -o -type d -print |
+ fzf --height 40% --reverse --preview="tree -CN {}")
+ [[ -z "$dir" ]] || cd "$dir"
}
-
-export FZF_CTRL_T_COMMAND="_fzf_find -o -type f -o -type l"
-export FZF_ALT_C_COMMAND=_fzf_find
-
-. ~/work/fzf/shell/key-bindings.zsh
# }}}