1
0
Fork 0
fzf.kak/rc/fzf-modules/fzf-cd.kak

65 lines
2.6 KiB
Text
Raw Normal View History

2018-11-11 10:41:15 +00:00
# ╭─────────────╥────────────────────────╮
# │ Author: ║ File: │
# │ Andrey Orst ║ fzf-cd.kak │
# ╞═════════════╩════════════════════════╡
# │ Module for changing directories with │
# │ fzf for fzf.kak plugin │
# ╞══════════════════════════════════════╡
# │ GitHub.com/andreyorst/fzf.kak │
# ╰──────────────────────────────────────╯
declare-option -docstring "command to provide list of directories to fzf.
Default value:
find: (echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)
" \
str fzf_cd_command "find"
map global fzf -docstring "change directory" 'c' '<esc>: fzf-cd<ret>'
define-command -hidden fzf-cd %{ evaluate-commands %sh{
2018-11-22 12:36:32 +00:00
printf '%s\n' "info -title %{fzf change directory} %{Change the server's working directory}"
case $kak_opt_fzf_cd_command in
2018-11-11 10:41:15 +00:00
find)
2018-11-22 12:36:32 +00:00
items_command="(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" ;;
2018-11-11 10:41:15 +00:00
*)
2018-11-22 12:36:32 +00:00
items_command=$kak_opt_fzf_cd_command ;;
esac
tmux_height=$kak_opt_fzf_tmux_height
items_executable=$(printf "%s\n" "$items_command" | grep -o -E "[[:alpha:]]+" | head -1)
if [ -z $(command -v $items_executable) ]; then
printf "%s\n" "fail %{'$items_executable' executable not found}"
exit
fi
2018-11-11 10:41:15 +00:00
2018-11-22 12:36:32 +00:00
tmp=$(mktemp ${TMPDIR:-/tmp}/kak-fzf.XXXXXX)
if [ ! -z "${kak_client_env_TMUX}" ]; then
cmd="$items_command | fzf-tmux -d $tmux_height > $tmp"
elif [ ! -z "${kak_opt_termcmd}" ]; then
fzfcmd=$(mktemp ${TMPDIR:-/tmp}/kak-fzfcmd.XXXXXX)
chmod 755 $fzfcmd
printf "%s\n" "cd $PWD && $items_command | fzf > $tmp" > $fzfcmd
cmd="$kak_opt_termcmd 'sh -c $fzfcmd'"
else
printf "%s\n" "fail termcmd option is not set"
exit
fi
(
eval "$cmd"
if [ -s $tmp ]; then
(
while read item; do
printf "%s\n" "evaluate-commands -client $kak_client 'change-directory' '$item'" | kak -p $kak_session
printf "%s\n" "evaluate-commands -client $kak_client fzf-cd" | kak -p $kak_session
done
) < $tmp
fi
rm $tmp
[ -z "$fzfcmd" ] && rm $fzfcmd
) > /dev/null 2>&1 < /dev/null &
}}