From a61f21b7e2b77cbeb20377492d4862cbbd3e7c7c Mon Sep 17 00:00:00 2001 From: Vladimir Bauer Date: Sat, 29 Sep 2018 19:01:19 +0300 Subject: [PATCH 1/6] preview for fzf-file, use highlight if available --- rc/fzf.kak | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index 13b2b0e..7997147 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -104,7 +104,9 @@ define-command -hidden fzf-file %{ : open file in new window $additional_keybindings" echo "info -title '$title' '$message'" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" - eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' + printf -v preview_opt -- "--preview '(highlight --failsafe -O ansi {} || cat {}) 2> /dev/null | head -n %d'" 200 + printf -v additional_flags "%s %s" "$additional_flags" "$preview_opt" + printf 'fzf "edit %s" "%s" "-m --expect ctrl-w %s"' '$1' "$cmd" "$additional_flags" } } From c9542b96b46f5d421bbcd6f21096b8cc0878889d Mon Sep 17 00:00:00 2001 From: Vladimir Bauer Date: Sat, 29 Sep 2018 19:01:57 +0300 Subject: [PATCH 2/6] increase view port to 20 --- rc/fzf.kak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index 7997147..9403edd 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -198,7 +198,7 @@ define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{ exec=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-exec.XXXXXX)) if [ ! -z "${kak_client_env_TMUX}" ]; then - cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-q $additional_flags > $tmp" + cmd="$items_command | fzf-tmux -d 20 --color=16 --expect ctrl-q $additional_flags > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then path=$(pwd) cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp'\"" From 403bab8525aebbbbcb58d2cbbd519c956d6d89f9 Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Sat, 29 Sep 2018 23:33:44 +0300 Subject: [PATCH 3/6] add support for highlighting, support changable tmux height --- rc/fzf.kak | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index 9403edd..ed395e5 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -50,6 +50,34 @@ Default arguments: " \ str fzf_tag_command "readtags" +declare-option -docstring "allow showing preview window +Default value: + false +" \ +bool fzf_preview true + +declare-option -docstring "amount of lines to pass to preview window +Default value: 100" \ +int fzf_preview_lines 100 + +declare-option -docstring "highlighter to use in preview window +Supported tools: + : : + Coderay: ""coderay"" + Highlight: ""highlight"" + Rouge: ""rouge"" + +Default arguments: + coderay: ""coderay {}"" + highlight: ""highlight --failsafe -O ansi -l {}"" + rouge: ""rougify {}"" +"\ +str fzf_highlighter "highlight" + +declare-option -docstring "height of fzf tmux split +Default value: 15" \ +int fzf_tmux_height 15 + # default mappings map global fzf -docstring "open buffer" b ': fzf-buffer' map global fzf -docstring "change directory" c ': fzf-cd' @@ -104,9 +132,32 @@ define-command -hidden fzf-file %{ : open file in new window $additional_keybindings" echo "info -title '$title' '$message'" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" - printf -v preview_opt -- "--preview '(highlight --failsafe -O ansi {} || cat {}) 2> /dev/null | head -n %d'" 200 - printf -v additional_flags "%s %s" "$additional_flags" "$preview_opt" - printf 'fzf "edit %s" "%s" "-m --expect ctrl-w %s"' '$1' "$cmd" "$additional_flags" + if [ $kak_opt_fzf_preview = "true" ]; then + case $kak_opt_fzf_highlighter in + coderay) + highlighter="coderay {}" + ;; + highlight) + highlighter="highlight --failsafe -O ansi {}" + ;; + rouge) + highlighter="rougify {}" + ;; + coderay*|highlight*|rougify*) + highlighter=$kak_opt_fzf_highlighter + ;; + *) + executable=$(echo $kak_opt_fzf_highlighter | awk '{print $1}'| tr '(' ' ' | cut -d " " -f 2) + echo "echo -markup '{Information}''$executable'' highlighter is not supported by the script. fzf.kak may not work as you expect.'" + highlighter=$kak_opt_fzf_highlighter + ;; + esac + sleep 0.1 + [ $(tput cols) -gt $(tput lines) ] && pos="right:50%%" || pos="top:60%%" + preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=$pos" + additional_flags="$preview_opt $additional_flags" + fi + eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' } } @@ -133,6 +184,31 @@ define-command -hidden fzf-git %{ : open file in new window $additional_keybindings" echo "info -title '$title' '$message'" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" + if [ $kak_opt_fzf_preview = "true" ]; then + case $kak_opt_fzf_highlighter in + coderay) + highlighter="coderay {}" + ;; + highlight) + highlighter="highlight --failsafe -O ansi {}" + ;; + rouge) + highlighter="rougify {}" + ;; + coderay*|highlight*|rougify*) + highlighter=$kak_opt_fzf_highlighter + ;; + *) + executable=$(echo $kak_opt_fzf_highlighter | awk '{print $1}'| tr '(' ' ' | cut -d " " -f 2) + echo "echo -markup '{Information}''$executable'' highlighter is not supported by the script. fzf.kak may not work as you expect.'" + cmd=$kak_opt_fzf_highlighter + ;; + esac + sleep 0.1 + [ $(tput cols) -gt $(tput lines) ] && pos="right:50%%" || pos="top:60%%" + preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=$pos" + additional_flags="$preview_opt $additional_flags" + fi eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' } } @@ -198,10 +274,10 @@ define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{ exec=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-exec.XXXXXX)) if [ ! -z "${kak_client_env_TMUX}" ]; then - cmd="$items_command | fzf-tmux -d 20 --color=16 --expect ctrl-q $additional_flags > $tmp" + cmd="$items_command | fzf-tmux -d $kak_opt_fzf_tmux_height --color=16 --expect ctrl-q $additional_flags > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then path=$(pwd) - cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp'\"" + cmd="$kak_opt_termcmd \"sh -c \\\"cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp\\\"\"" else echo "fail termcmd option is not set" exit From 8ae03b154e3043d8b542672201ba482091b6d61d Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Tue, 2 Oct 2018 00:32:21 +0300 Subject: [PATCH 4/6] run width and height calculation in new window --- rc/fzf.kak | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index ed395e5..b7a0571 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -152,9 +152,8 @@ define-command -hidden fzf-file %{ highlighter=$kak_opt_fzf_highlighter ;; esac - sleep 0.1 - [ $(tput cols) -gt $(tput lines) ] && pos="right:50%%" || pos="top:60%%" - preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=$pos" + cmd="sleep 0.1; if [ \$(tput cols) -gt \$(tput lines) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" + preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos" additional_flags="$preview_opt $additional_flags" fi eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' @@ -201,12 +200,11 @@ define-command -hidden fzf-git %{ *) executable=$(echo $kak_opt_fzf_highlighter | awk '{print $1}'| tr '(' ' ' | cut -d " " -f 2) echo "echo -markup '{Information}''$executable'' highlighter is not supported by the script. fzf.kak may not work as you expect.'" - cmd=$kak_opt_fzf_highlighter + highlighter=$kak_opt_fzf_highlighter ;; esac - sleep 0.1 - [ $(tput cols) -gt $(tput lines) ] && pos="right:50%%" || pos="top:60%%" - preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=$pos" + cmd="sleep 0.1; if [ \$(tput cols) -gt \$(tput lines) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" + preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos" additional_flags="$preview_opt $additional_flags" fi eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' @@ -277,6 +275,7 @@ define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{ cmd="$items_command | fzf-tmux -d $kak_opt_fzf_tmux_height --color=16 --expect ctrl-q $additional_flags > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then path=$(pwd) + additional_flags=$(echo $additional_flags | sed "s:\$pos:\\\\\$pos:") cmd="$kak_opt_termcmd \"sh -c \\\"cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp\\\"\"" else echo "fail termcmd option is not set" From 692c9c0865cb4998cda15372a0dc3dcf5171b722 Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Tue, 2 Oct 2018 01:04:01 +0300 Subject: [PATCH 5/6] approximate size of cell --- rc/fzf.kak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index b7a0571..81cd939 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -152,7 +152,7 @@ define-command -hidden fzf-file %{ highlighter=$kak_opt_fzf_highlighter ;; esac - cmd="sleep 0.1; if [ \$(tput cols) -gt \$(tput lines) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" + cmd="sleep 0.1; if [ \$(tput cols) -gt \$(expr \$(tput lines) \\* 2) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos" additional_flags="$preview_opt $additional_flags" fi @@ -203,7 +203,7 @@ define-command -hidden fzf-git %{ highlighter=$kak_opt_fzf_highlighter ;; esac - cmd="sleep 0.1; if [ \$(tput cols) -gt \$(tput lines) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" + cmd="sleep 0.1; if [ \$(tput cols) -gt \$(expr \$(tput lines) \\* 2) ]; then pos=right:50%%; else pos=top:60%%; fi; $cmd" preview_opt="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos" additional_flags="$preview_opt $additional_flags" fi From eb717a8be6e24c0c3faf1be2082cac870ca47bb7 Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Wed, 10 Oct 2018 20:01:00 +0300 Subject: [PATCH 6/6] disable colors in favor of optional argument --- rc/fzf.kak | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index 81cd939..e68e47d 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -272,11 +272,11 @@ define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{ exec=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-exec.XXXXXX)) if [ ! -z "${kak_client_env_TMUX}" ]; then - cmd="$items_command | fzf-tmux -d $kak_opt_fzf_tmux_height --color=16 --expect ctrl-q $additional_flags > $tmp" + cmd="$items_command | fzf-tmux -d $kak_opt_fzf_tmux_height --expect ctrl-q $additional_flags > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then path=$(pwd) additional_flags=$(echo $additional_flags | sed "s:\$pos:\\\\\$pos:") - cmd="$kak_opt_termcmd \"sh -c \\\"cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp\\\"\"" + cmd="$kak_opt_termcmd \"sh -c \\\"cd $path && $items_command | fzf --expect ctrl-q $additional_flags > $tmp\\\"\"" else echo "fail termcmd option is not set" exit @@ -326,9 +326,9 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ [ ! -z $buffer ] && [ $buffer != ' ' ] && echo $buffer >> $buffers done if [ ! -z "${kak_client_env_TMUX}" ]; then - cmd="cat $buffers | fzf-tmux -d 15 --color=16 --expect ctrl-d > $tmp" + cmd="cat $buffers | fzf-tmux -d 15 --expect ctrl-d > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then - cmd="$kak_opt_termcmd \"sh -c 'cat $buffers | fzf --color=16 --expect ctrl-d > $tmp'\"" + cmd="$kak_opt_termcmd \"sh -c 'cat $buffers | fzf --expect ctrl-d > $tmp'\"" else echo "fail termcmd option is not set" fi