commit
df68ea9b34
1 changed files with 78 additions and 17 deletions
95
rc/fzf.kak
95
rc/fzf.kak
|
@ -133,35 +133,91 @@ define-command -hidden fzf-tag %{
|
|||
}
|
||||
}
|
||||
define-command -hidden fzf-cd %{
|
||||
fzf "change-directory $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)"
|
||||
fzf "cd $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)"
|
||||
}
|
||||
|
||||
define-command -hidden fzf -params 2 %{ evaluate-commands %sh{
|
||||
callback=$1
|
||||
items_command=$2
|
||||
tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX))
|
||||
exec=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-exec.XXXXXX))
|
||||
if [ ! -z "${kak_client_env_TMUX}" ]; then
|
||||
cmd="$items_command | fzf-tmux -d 15 --color=16 > $tmp"
|
||||
elif [ ! -z "${kak_opt_termcmd}" ]; then
|
||||
path=$(pwd)
|
||||
cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 > $tmp'\""
|
||||
else
|
||||
echo "fail termcmd option is not set"
|
||||
fi
|
||||
|
||||
case $callback in
|
||||
cd*)
|
||||
title="fzf change directory"
|
||||
message="Change the server''s working directory"
|
||||
additional_flags=
|
||||
;;
|
||||
ctags-search*)
|
||||
title="fzf tag"
|
||||
[ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings="
|
||||
<c-s>: open tag in horizontal split
|
||||
<c-v>: open tag in vertical split"
|
||||
message="Jump to a symbol''s definition.
|
||||
<ret>: open tag in new buffer.
|
||||
<c-w>: open tag in new window $additional_keybindings"
|
||||
additional_flags="--expect ctrl-v --expect ctrl-s"
|
||||
;;
|
||||
edit*)
|
||||
title="fzf edit"
|
||||
[ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings="
|
||||
<c-s>: open file in horizontal split
|
||||
<c-v>: open file in vertical split"
|
||||
message="Open single or multiple files.
|
||||
<ret>: open file in new buffer.
|
||||
<c-w>: open file in new window $additional_keybindings"
|
||||
additional_flags="-m --expect ctrl-v --expect ctrl-s"
|
||||
;;
|
||||
*)
|
||||
title="fzf unknown command"
|
||||
message="This command is not known by fzf.kak plugin. You can send a PR with it to https://github.com/andreyorst/fzf.kak"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "info -title '$title' '$message'"
|
||||
# 'tr' - if '(cmd1 && cmd2) | fzf' was passed 'awk' will return '(cmd1'
|
||||
items_executable=$(echo $items_command | awk '{print $1}' | tr '(' ' ')
|
||||
if [ -z $(command -v $items_executable) ]; then
|
||||
echo "fail \'$items_executable' executable not found"
|
||||
exit
|
||||
fi
|
||||
echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec
|
||||
chmod 755 $exec
|
||||
|
||||
tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX))
|
||||
exec=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-exec.XXXXXX))
|
||||
|
||||
if [ ! -z "${kak_client_env_TMUX}" ]; then
|
||||
cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-w $additional_flags> $tmp"
|
||||
elif [ ! -z "${kak_opt_termcmd}" ]; then
|
||||
path=$(pwd)
|
||||
cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 -m --expect ctrl-w > $tmp'\""
|
||||
else
|
||||
echo "fail termcmd option is not set"
|
||||
fi
|
||||
|
||||
(
|
||||
eval "$cmd"
|
||||
(while read file; do
|
||||
$exec $file
|
||||
done) < $tmp
|
||||
if [ -s $tmp ]; then
|
||||
(
|
||||
read action
|
||||
if [ "${callback% *}" != "cd" ]; then
|
||||
case $action in
|
||||
"ctrl-w")
|
||||
wincmd="x11-new"
|
||||
[ ! -z "${kak_client_env_TMUX}" ] && wincmd="tmux-new-window" ;;
|
||||
"ctrl-s")
|
||||
wincmd="tmux-new-vertical" ;;
|
||||
"ctrl-v")
|
||||
wincmd="tmux-new-horizontal" ;;
|
||||
*)
|
||||
wincmd= ;;
|
||||
esac
|
||||
callback="$wincmd $callback"
|
||||
fi
|
||||
echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec
|
||||
chmod 755 $exec
|
||||
while read file; do
|
||||
$exec $file
|
||||
done
|
||||
) < $tmp
|
||||
fi
|
||||
rm $tmp
|
||||
rm $exec
|
||||
) > /dev/null 2>&1 < /dev/null &
|
||||
|
@ -173,6 +229,7 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{
|
|||
delbuf=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-delbuf.XXXXXX))
|
||||
buffers=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-buffers.XXXXXX))
|
||||
items_command="echo $kak_buflist | tr ' ' '\n' | sort"
|
||||
|
||||
if [ ! -z "${kak_client_env_TMUX}" ]; then
|
||||
cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-d > $tmp"
|
||||
elif [ ! -z "${kak_opt_termcmd}" ]; then
|
||||
|
@ -182,6 +239,10 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{
|
|||
else
|
||||
echo "fail termcmd option is not set"
|
||||
fi
|
||||
|
||||
echo "info -title 'fzf buffer' 'Set buffer to edit in current client
|
||||
<c-d>: delete selected buffer'"
|
||||
|
||||
echo "echo eval -client $kak_client \"buffer \$1\" | kak -p $kak_session" > $setbuf
|
||||
echo "echo eval -client $kak_client \"delete-buffer \$1\" | kak -p $kak_session" > $delbuf
|
||||
echo "echo eval -client $kak_client \"fzf-buffer \" | kak -p $kak_session" >> $delbuf
|
||||
|
@ -192,7 +253,7 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{
|
|||
if [ -s $tmp ]; then
|
||||
( read action
|
||||
read buf
|
||||
if [ "$action" == "ctrl-d" ]; then
|
||||
if [ "$action" = "ctrl-d" ]; then
|
||||
$setbuf $kak_bufname
|
||||
$delbuf $buf
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue