diff --git a/rc/fzf-modules/fzf-cd.kak b/rc/fzf-modules/fzf-cd.kak index a8c9e80..af6d038 100644 --- a/rc/fzf-modules/fzf-cd.kak +++ b/rc/fzf-modules/fzf-cd.kak @@ -14,6 +14,21 @@ Default value: " \ str fzf_cd_command "find" +declare-option -docstring 'allow showing preview window while changing directories +Default value: + false +' \ +bool fzf_cd_preview false + +declare-option -docstring 'command to show list of directories in preview window +Default value: + tree -d +' \ +str cd_preview_cmd "tree -d {}" + +declare-option -docstring 'maximum amount of previewed directories' \ +int fzf_preview_dirs '300' + map global fzf -docstring "change directory" 'c' ': fzf-cd' define-command -hidden fzf-cd %{ evaluate-commands %sh{ @@ -26,6 +41,9 @@ define-command -hidden fzf-cd %{ evaluate-commands %sh{ *) items_command=$kak_opt_fzf_cd_command ;; esac - printf "%s\n" "fzf %{change-directory} %{$items_command} %{} %{fzf-cd}" + if [ $kak_opt_fzf_cd_preview = "true" ]; then + preview="--preview '($kak_opt_cd_preview_cmd) 2>/dev/null | head -n $kak_opt_fzf_preview_dirs'" + fi + printf "%s\n" "fzf %{change-directory} %{$items_command} %{$preview} %{fzf-cd}" }} diff --git a/rc/fzf.kak b/rc/fzf.kak index 6b44e93..ee7d12c 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -104,7 +104,7 @@ fzf -params 2..4 %{ evaluate-commands %sh{ exit fi - if [ "$command" = "edit" ] && [ $kak_opt_fzf_preview = "true" ]; then + if [ $command = "edit" ] && [ $kak_opt_fzf_preview = "true" ]; then case $kak_opt_fzf_highlighter in bat) highlighter="bat --color=always --style=plain {}" ;; @@ -122,16 +122,16 @@ fzf -params 2..4 %{ evaluate-commands %sh{ highlighter=$kak_opt_fzf_highlighter ;; esac - if [ -n "$kak_client_env_TMUX" ]; then - preview_pos="pos=right:$kak_opt_fzf_preview_width;" - tmux_height=$kak_opt_fzf_tmux_height_file_preview - else - preview_pos="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:$kak_opt_fzf_preview_width || pos=top:$kak_opt_fzf_preview_height;" - fi - + tmux_height=$kak_opt_fzf_tmux_height_file_preview additional_flags="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos $additional_flags" fi + if [ -n "$kak_client_env_TMUX" ]; then + preview_pos="pos=right:$kak_opt_fzf_preview_width;" + else + preview_pos="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:$kak_opt_fzf_preview_width || pos=top:$kak_opt_fzf_preview_height;" + fi + tmp=$(mktemp ${TMPDIR:-/tmp}/kak-fzf-tmp.XXXXXX) fzfcmd=$(mktemp ${TMPDIR:-/tmp}/kak-fzfcmd.XXXXXX) printf "%s\n" "cd $PWD && $preview_pos $items_command | SHELL=$(command -v sh) fzf $additional_flags > $tmp" > $fzfcmd