From: Sergey Matveev Date: Wed, 10 Feb 2021 10:29:11 +0000 (+0300) Subject: Single tmux popup for fzf X-Git-Url: http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff_plain;h=f3dc6d0d24f814b8aadf7e6b73e3c188e2dfa883 Single tmux popup for fzf --- diff --git a/bin/bin/pe b/bin/bin/pe index 77c8790..48b7ede 100755 --- a/bin/bin/pe +++ b/bin/bin/pe @@ -6,4 +6,4 @@ path-extractor | while read fn ; do seen+=($fn 1) print $fn done | fzf -m | tr "\n" " " | read data -tmux set-buffer "$data" +tmux set-buffer "${data:- }" diff --git a/bin/bin/tmux-fzf.sh b/bin/bin/tmux-fzf.sh new file mode 100755 index 0000000..6333330 --- /dev/null +++ b/bin/bin/tmux-fzf.sh @@ -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 diff --git a/bin/bin/tmux-path-extractor.sh b/bin/bin/tmux-path-extractor.sh deleted file mode 100755 index ed2cebc..0000000 --- a/bin/bin/tmux-path-extractor.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/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 diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index db063c9..da27fea 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -56,20 +56,12 @@ bind-key y { 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 - diff --git a/zsh/.zshrc b/zsh/.zshrc index cede543..387f852 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -211,17 +211,10 @@ ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=cyan" # }}} # 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 # }}}