From: Sergey Matveev Date: Sat, 27 Mar 2021 11:51:38 +0000 (+0300) Subject: Huge tmux-fzf simplification with files quoting X-Git-Url: http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff_plain;h=48338303d760027e62bab963fa11a940bc0d97eb Huge tmux-fzf simplification with files quoting --- diff --git a/bin/bin/pe b/bin/bin/pe index bcd149b..9777ecb 100755 --- a/bin/bin/pe +++ b/bin/bin/pe @@ -5,5 +5,4 @@ path-extractor | while read fn ; do [[ $seen[$fn] -eq 1 ]] && continue seen+=($fn 1) print $fn -done | fzf -m | tr "\n" " " | read data -tmux set-buffer ${data:- } +done | fzf -m diff --git a/bin/bin/tmux-fzf.sh b/bin/bin/tmux-fzf.sh deleted file mode 100755 index 6333330..0000000 --- a/bin/bin/tmux-fzf.sh +++ /dev/null @@ -1,54 +0,0 @@ - #!/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-fzf.zsh b/bin/bin/tmux-fzf.zsh new file mode 100755 index 0000000..eb66b31 --- /dev/null +++ b/bin/bin/tmux-fzf.zsh @@ -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 diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 0ee677e..a3b7c07 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -57,11 +57,11 @@ bind-key y { } 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 - diff --git a/zsh/.zshrc b/zsh/.zshrc index c8591ba..b0c5e6a 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -213,7 +213,7 @@ ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=cyan" # 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 }