1
0
Fork 0

Merge pull request #64 from andreyorst/v1.1.0-dev

V1.1.0 dev
This commit is contained in:
Andrey Orst 2019-07-17 08:55:21 +03:00 committed by GitHub
commit ede90d3e02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 91 additions and 99 deletions

View file

@ -115,6 +115,15 @@ fzf` before configuring options. Same goes for `fzf_vcs` module.
From now on I assume that you're using one of the methods listed above for all From now on I assume that you're using one of the methods listed above for all
configurations below. configurations below.
### Windowing
If you're using Tmux, you do not have to worry about windowing, since fzf.kak
automatically creates all needed Tmux splits and panes for you. However in case
you're not using Tmux, fzf.kak uses `fzf_terminal_command` option to call windowing
command to create new windows. By default it is set to use `terminal` alias:
`terminal kak -c %val{session} -e "%arg{@}"`, but some terminals can provide
other aliases or commands, like `terminal-tab` in Kitty. You may want to edit
this variable accordingly to your personal preferences.
### Mappings ### Mappings
You can define what keys to use in `fzf` window via these options: You can define what keys to use in `fzf` window via these options:
@ -171,7 +180,7 @@ option to `false`.
#### Highlighting preview window #### Highlighting preview window
You also can highlight contents of the file displayed within preview window. To You also can highlight contents of the file displayed within preview window. To
do so, you can specify which highlighter to use with `fzf_highlight_cmd` option. do so, you can specify which highlighter to use with `fzf_highlight_command` option.
Supported highlighters are: Supported highlighters are:
* [Bat][16] * [Bat][16]

View file

@ -57,7 +57,7 @@ These are default arguments for the tools above:
highlight: "highlight --failsafe -O ansi {}" highlight: "highlight --failsafe -O ansi {}"
rouge: "rougify {}" rouge: "rougify {}"
' \ ' \
str fzf_highlight_cmd "highlight" str fzf_highlight_command "highlight"
declare-option -docstring "height of fzf tmux split in screen lines or percents. declare-option -docstring "height of fzf tmux split in screen lines or percents.
Default value: 25%%" \ Default value: 25%%" \
@ -84,34 +84,29 @@ str fzf_vertical_map 'ctrl-v'
declare-option -docstring "mapping to execute action in new horizontal split" \ declare-option -docstring "mapping to execute action in new horizontal split" \
str fzf_horizontal_map 'ctrl-s' str fzf_horizontal_map 'ctrl-s'
declare-option -docstring 'command to use to create new window when not using tmux.
Default value: terminal kak -c %val{session} -e "%arg{@}"' \
str fzf_terminal_command 'terminal kak -c %val{session} -e "%arg{@}"'
try %{ declare-user-mode fzf } try %{ declare-user-mode fzf }
define-command -hidden -docstring "wrapper command to create new vertical split" \ define-command -hidden -docstring "wrapper command to create new vertical split" \
fzf-vertical -params .. %{ try %{ fzf-vertical -params .. %{ evaluate-commands %{
tmux-terminal-vertical kak -c %val{session} -e "%arg{@}" tmux-terminal-vertical kak -c %val{session} -e "%arg{@}"
} catch %{
tmux-new-vertical "%arg{@}"
}} }}
define-command -hidden -docstring "wrapper command to create new horizontal split" \ define-command -hidden -docstring "wrapper command to create new horizontal split" \
fzf-horizontal -params .. %{ try %{ fzf-horizontal -params .. %{ evaluate-commands %{
tmux-terminal-horizontal kak -c %val{session} -e "%arg{@}" tmux-terminal-horizontal kak -c %val{session} -e "%arg{@}"
} catch %{
tmux-new-horizontal "%arg{@}"
}} }}
define-command -hidden -docstring "wrapper command to create new terminal" \ define-command -hidden -docstring "wrapper command to create new terminal" \
fzf-window -params .. %{ try %sh{ fzf-window -params .. %{ evaluate-commands %sh{
if [ -n "$kak_client_env_TMUX" ]; then if [ -n "$kak_client_env_TMUX" ]; then
printf "%s\n" 'tmux-terminal-window kak -c %val{session} -e "%arg{@}"' printf "%s\n" 'tmux-terminal-window kak -c %val{session} -e "%arg{@}"'
else else
printf "%s\n" 'terminal kak -c %val{session} -e "%arg{@}"' printf "%s\n" "$kak_opt_fzf_terminal_command"
fi
} catch %sh{
if [ -n "$kak_client_env_TMUX" ]; then
printf "%s\n" 'tmux-new-window "%arg{@}"'
else
printf "%s\n" 'new "%arg{@}"'
fi fi
}} }}
@ -144,16 +139,17 @@ fzf -params .. %{ evaluate-commands %sh{
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case $1 in case $1 in
-kak-cmd) shift; kakoune_cmd="$1" ;; (-kak-cmd) shift; kakoune_cmd="$1" ;;
-multiple-cmd) shift; multiple_cmd="$1" ;; (-multiple-cmd) shift; multiple_cmd="$1" ;;
-items-cmd) shift; items_cmd="$1 |" ;; (-items-cmd) shift; items_cmd="$1 |" ;;
-fzf-impl) shift; fzf_impl="$1" ;; (-fzf-impl) shift; fzf_impl="$1" ;;
-fzf-args) shift; fzf_args="$1" ;; (-fzf-args) shift; fzf_args="$1" ;;
-preview-cmd) shift; preview_cmd="$1" ;; (-preview-cmd) shift; preview_cmd="$1" ;;
-preview) preview="true" ;; (-preview) preview="true" ;;
-filter) shift; filter="| $1" ;; (-filter) shift; filter="| $1" ;;
-post-action) shift; post_action="$1" ;; (-post-action) shift; post_action="$1" ;;
esac; shift esac
shift
done done
[ -z "$multiple_cmd" ] && multiple_cmd="$kakoune_cmd" [ -z "$multiple_cmd" ] && multiple_cmd="$kakoune_cmd"
@ -162,21 +158,21 @@ fzf -params .. %{ evaluate-commands %sh{
# bake position option to define them at runtime # bake position option to define them at runtime
[ -n "${kak_client_env_TMUX}" ] && tmux_height="${kak_opt_fzf_preview_tmux_height}" [ -n "${kak_client_env_TMUX}" ] && tmux_height="${kak_opt_fzf_preview_tmux_height}"
case ${kak_opt_fzf_preview_pos} in case ${kak_opt_fzf_preview_pos} in
top|up) preview_position="pos=top:${kak_opt_fzf_preview_height};" ;; (top|up) preview_position="pos=top:${kak_opt_fzf_preview_height};" ;;
bottom|down) preview_position="pos=down:${kak_opt_fzf_preview_height};" ;; (bottom|down) preview_position="pos=down:${kak_opt_fzf_preview_height};" ;;
right) preview_position="pos=right:${kak_opt_fzf_preview_width};" ;; (right) preview_position="pos=right:${kak_opt_fzf_preview_width};" ;;
left) preview_position="pos=left:${kak_opt_fzf_preview_width};" ;; (left) preview_position="pos=left:${kak_opt_fzf_preview_width};" ;;
auto|*) preview_position="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:${kak_opt_fzf_preview_width} || pos=top:${kak_opt_fzf_preview_height};" (auto|*) preview_position="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:${kak_opt_fzf_preview_width} || pos=top:${kak_opt_fzf_preview_height};"
esac esac
# handle preview if not defined explicitly with `-preview-cmd' # handle preview if not defined explicitly with `-preview-cmd'
if [ ${kak_opt_fzf_preview} = "true" ] && [ -z "${preview_cmd}" ]; then if [ ${kak_opt_fzf_preview} = "true" ] && [ -z "${preview_cmd}" ]; then
case ${kak_opt_fzf_highlight_cmd} in case ${kak_opt_fzf_highlight_command} in
bat) highlight_cmd="bat --color=always --style=plain {}" ;; (bat) highlight_cmd="bat --color=always --style=plain {}" ;;
coderay) highlight_cmd="coderay {}" ;; (coderay) highlight_cmd="coderay {}" ;;
highlight) highlight_cmd="highlight --failsafe -O ansi {}" ;; (highlight) highlight_cmd="highlight --failsafe -O ansi {}" ;;
rouge) highlight_cmd="rougify {}" ;; (rouge) highlight_cmd="rougify {}" ;;
*) highlight_cmd="${kak_opt_fzf_highlight_cmd}" ;; (*) highlight_cmd="${kak_opt_fzf_highlight_command}" ;;
esac esac
preview_cmd="--preview '(${highlight_cmd} || cat {}) 2>/dev/null | head -n ${kak_opt_fzf_preview_lines}' --preview-window=\${pos}" preview_cmd="--preview '(${highlight_cmd} || cat {}) 2>/dev/null | head -n ${kak_opt_fzf_preview_lines}' --preview-window=\${pos}"
fi fi
@ -208,7 +204,7 @@ fzf -params .. %{ evaluate-commands %sh{
# `terminal' doesn't support any kind of width and height parameters, so tmux panes are created by tmux itself # `terminal' doesn't support any kind of width and height parameters, so tmux panes are created by tmux itself
cmd="nop %sh{ command tmux split-window ${measure} ${tmux_height%%%*} '${fzfcmd}' }" cmd="nop %sh{ command tmux split-window ${measure} ${tmux_height%%%*} '${fzfcmd}' }"
else else
cmd="terminal %{${fzfcmd}}" cmd="${kak_opt_fzf_terminal_command%% *} %{${fzfcmd}}"
fi fi
printf "%s\n" "${cmd}" printf "%s\n" "${cmd}"
@ -219,22 +215,26 @@ fzf -params .. %{ evaluate-commands %sh{
( (
while read -r line; do while read -r line; do
case ${line} in case ${line} in
${kak_opt_fzf_window_map}) wincmd="fzf-window" ;; (${kak_opt_fzf_window_map}) wincmd="fzf-window" ;;
${kak_opt_fzf_vertical_map}) wincmd="fzf-vertical" ;; (${kak_opt_fzf_vertical_map}) wincmd="fzf-vertical" ;;
${kak_opt_fzf_horizontal_map}) wincmd="fzf-horizontal" ;; (${kak_opt_fzf_horizontal_map}) wincmd="fzf-horizontal" ;;
*) item=${line} ;; (*) item=${line} ;;
esac esac
if [ -n "${item}" ]; then if [ -n "${item}" ]; then
item=$(printf "%s\n" "${item}" | sed "s/@/@@/g;s/&/&&/g") item=$(printf "%s\n" "${item}" | sed "s/@/@@/g;s/&/&&/g")
kakoune_cmd=$(printf "%s\n" "${kakoune_cmd}" | sed "s/&/&&/g")
printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %&${kakoune_cmd} %@${item}@&" printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %&${kakoune_cmd} %@${item}@&"
break break
fi fi
done done
[ -n "${multiple_cmd}" ] && multiple_cmd=$(printf "%s\n" "${multiple_cmd}" | sed "s/&/&&/g")
while read -r line; do while read -r line; do
printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %{${multiple_cmd} %{${line}}}" line=$(printf "%s\n" "${line}" | sed "s/@/@@/g;s/&/&&/g")
printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %&${multiple_cmd} %@${line}@&"
done done
if [ -n "${post_action}" ]; then if [ -n "${post_action}" ]; then
printf "%s\n" "evaluate-commands -client ${kak_client} %{${post_action}}" post_action=$(printf "%s\n" "${post_action}" | sed "s/&/&&/g")
printf "%s\n" "evaluate-commands -client ${kak_client} %&${post_action}&"
fi fi
) < ${result} | kak -p ${kak_session} ) < ${result} | kak -p ${kak_session}
fi fi

View file

@ -25,10 +25,8 @@ define-command -hidden fzf-bzr %{ evaluate-commands %sh{
current_path=$(pwd) current_path=$(pwd)
repo_root=$(bzr root) repo_root=$(bzr root)
case $kak_opt_fzf_bzr_command in case $kak_opt_fzf_bzr_command in
bzr) (bzr) cmd="bzr ls -R --versioned -0" ;;
cmd="bzr ls -R --versioned -0" ;; (bzr*) cmd=$kak_opt_fzf_bzr_command ;;
bzr*)
cmd=$kak_opt_fzf_bzr_command ;;
esac esac
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map"
printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}" printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}"

View file

@ -25,10 +25,8 @@ define-command -override -hidden fzf-git %{ evaluate-commands %sh{
current_path=$(pwd) current_path=$(pwd)
repo_root=$(git rev-parse --show-toplevel) repo_root=$(git rev-parse --show-toplevel)
case $kak_opt_fzf_git_command in case $kak_opt_fzf_git_command in
git) (git) cmd="git ls-tree --full-tree --name-only -r HEAD" ;;
cmd="git ls-tree --full-tree --name-only -r HEAD" ;; (git*) cmd=$kak_opt_fzf_git_command ;;
git*)
cmd=$kak_opt_fzf_git_command ;;
esac esac
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map"
printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}" printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}"

View file

@ -25,10 +25,8 @@ define-command -hidden fzf-hg %{ evaluate-commands %sh{
current_path=$(pwd) current_path=$(pwd)
repo_root=$(hg root) repo_root=$(hg root)
case $kak_opt_fzf_hg_command in case $kak_opt_fzf_hg_command in
hg) (hg) cmd="hg locate -f -0 -I .hg locate -f -0 -I ." ;;
cmd="hg locate -f -0 -I .hg locate -f -0 -I ." ;; (hg*) cmd=$kak_opt_fzf_hg_command ;;
hg*)
cmd=$kak_opt_fzf_hg_command ;;
esac esac
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map"
printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}" printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}"

View file

@ -25,10 +25,8 @@ define-command -hidden fzf-svn %{ evaluate-commands %sh{
current_path=$(pwd) current_path=$(pwd)
repo_root=$(svn info | awk -F': ' '/Working Copy Root Path: .*/ {print $2}') repo_root=$(svn info | awk -F': ' '/Working Copy Root Path: .*/ {print $2}')
case $kak_opt_fzf_svn_command in case $kak_opt_fzf_svn_command in
svn) (svn) cmd="svn list -R $repo_root | grep -v '$/'" ;;
cmd="svn list -R $repo_root | grep -v '$/'" ;; (svn*) cmd=$kak_opt_fzf_svn_command ;;
svn*)
cmd=$kak_opt_fzf_svn_command ;;
esac esac
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map"
printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}" printf "%s\n" "fzf -kak-cmd %{cd $repo_root; edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect $kak_opt_fzf_window_map $additional_flags} -post-action %{cd $current_path}"

View file

@ -24,7 +24,7 @@ declare-option -docstring 'command to show list of directories in preview window
Default value: Default value:
tree -d tree -d
' \ ' \
str cd_preview_cmd "tree -d {}" str cd_preview_command "tree -d {}"
declare-option -docstring 'maximum amount of previewed directories' \ declare-option -docstring 'maximum amount of previewed directories' \
int fzf_preview_dirs '300' int fzf_preview_dirs '300'
@ -37,16 +37,13 @@ define-command -hidden fzf-cd %{ evaluate-commands %sh{
tmux_height=$kak_opt_fzf_tmux_height tmux_height=$kak_opt_fzf_tmux_height
printf '%s\n' "info -title %{fzf change directory} %{Change the server's working directory printf '%s\n' "info -title %{fzf change directory} %{Change the server's working directory
current path: $(pwd)}" current path: $(pwd)}"
case $kak_opt_fzf_cd_command in case $kak_opt_fzf_cd_command in
find) (find) items_command="(echo .. && find . \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" ;;
items_command="(echo .. && find . \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" ;; (*) items_command=$kak_opt_fzf_cd_command ;;
*)
items_command=$kak_opt_fzf_cd_command ;;
esac esac
if [ "$kak_opt_fzf_cd_preview" = "true" ]; then if [ "$kak_opt_fzf_cd_preview" = "true" ]; then
preview_flag="-preview" preview_flag="-preview"
preview="--preview '($kak_opt_cd_preview_cmd) 2>/dev/null | head -n $kak_opt_fzf_preview_dirs'" preview="--preview '($kak_opt_cd_preview_command) 2>/dev/null | head -n $kak_opt_fzf_preview_dirs'"
fi fi
printf "%s\n" "fzf $preview_flag -kak-cmd %{change-directory} -items-cmd %{$items_command} -preview-cmd %{$preview} -post-action %{fzf-cd}" printf "%s\n" "fzf $preview_flag -kak-cmd %{change-directory} -items-cmd %{$items_command} -preview-cmd %{$preview} -post-action %{fzf-cd}"
}} }}

View file

@ -34,20 +34,14 @@ define-command -hidden fzf-file %{ evaluate-commands %sh{
kak_opt_fzf_file_command="find" kak_opt_fzf_file_command="find"
fi fi
case $kak_opt_fzf_file_command in case $kak_opt_fzf_file_command in
find) (find) cmd="find -L . -type f" ;;
cmd="find -L . -type f" ;; (ag) cmd="ag -l -f --hidden --one-device . " ;;
ag) (rg) cmd="rg -L --hidden --files" ;;
cmd="ag -l -f --hidden --one-device . " ;; (fd) cmd="fd --type f --follow" ;;
rg) (find*|ag*|rg*|fd*) cmd=$kak_opt_fzf_file_command ;;
cmd="rg -L --hidden --files" ;; (*) items_executable=$(printf "%s\n" "$kak_opt_fzf_file_command" | grep -o -E "[[:alpha:]]+" | head -1)
fd) printf "%s\n" "echo -markup '{Information}'Warning: '$executable'' is not supported by fzf.kak.'"
cmd="fd --type f --follow" ;; cmd=$kak_opt_fzf_file_command ;;
find*|ag*|rg*|fd*)
cmd=$kak_opt_fzf_file_command ;;
*)
items_executable=$(printf "%s\n" "$kak_opt_fzf_file_command" | grep -o -E "[[:alpha:]]+" | head -1)
printf "%s\n" "echo -markup '{Information}'Warning: '$executable'' is not supported by fzf.kak.'"
cmd=$kak_opt_fzf_file_command ;;
esac esac
cmd="$cmd 2>/dev/null" cmd="$cmd 2>/dev/null"

View file

@ -49,16 +49,16 @@ define-command -hidden fzf-save-path-as-project-no-prompt %{ evaluate-commands %
mkdir -p "${kak_opt_fzf_project_file%/*}" mkdir -p "${kak_opt_fzf_project_file%/*}"
# portable version of `basename' # portable version of `basename'
base() { base() {
filename=$1 filename="$1"
case "$filename" in case "$filename" in
*/*[!/]*) (*/*[!/]*)
trail=${filename##*[!/]} trail=${filename##*[!/]}
filename=${filename%%"$trail"} filename=${filename%%"$trail"}
base=${filename##*/} ;; base=${filename##*/} ;;
*[!/]*) (*[!/]*)
trail=${filename##*[!/]} trail=${filename##*[!/]}
base=${filename%%"$trail"} ;; base=${filename%%"$trail"} ;;
*) base="/" ;; (*) base="/" ;;
esac esac
printf "%s\n" "${base}" printf "%s\n" "${base}"
} }
@ -84,16 +84,16 @@ fzf-add-project -file-completion -params 1..2 %{ evaluate-commands %sh{
fi fi
# portable version of `basename' # portable version of `basename'
base() { base() {
filename=$1 filename="$1"
case "$filename" in case "$filename" in
*/*[!/]*) (*/*[!/]*)
trail=${filename##*[!/]} trail=${filename##*[!/]}
filename=${filename%%"$trail"} filename=${filename%%"$trail"}
base=${filename##*/} ;; base=${filename##*/} ;;
*[!/]*) (*[!/]*)
trail=${filename##*[!/]} trail=${filename##*[!/]}
base=${filename%%"$trail"} ;; base=${filename%%"$trail"} ;;
*) base="/" ;; (*) base="/" ;;
esac esac
printf "%s\n" "${base}" printf "%s\n" "${base}"
} }