Add bash line editor.
This commit is contained in:
101
.local/share/blesh/contrib/integration/fzf-completion.bash
Normal file
101
.local/share/blesh/contrib/integration/fzf-completion.bash
Normal file
@@ -0,0 +1,101 @@
|
||||
# ble/contrib/integration/fzf-completion.bash (C) 2020-2024, akinomyoga
|
||||
|
||||
[[ $- == *i* ]] || return 0
|
||||
|
||||
# fzf/shell/completion.bash を未ロードの時のみロードする
|
||||
if ! ble/is-function _fzf_complete; then
|
||||
ble-import contrib/integration/fzf-initialize || return 1
|
||||
if [[ -f $_ble_contrib_fzf_base/completion.bash ]]; then
|
||||
source -- "$_ble_contrib_fzf_base/completion.bash"
|
||||
elif [[ -f $_ble_contrib_fzf_base/shell/completion.bash ]]; then
|
||||
source -- "$_ble_contrib_fzf_base/shell/completion.bash"
|
||||
elif [[ $_ble_contrib_fzf_base == */share/fzf && -f /etc/bash_completion.d/fzf ]]; then
|
||||
source /etc/bash_completion.d/fzf
|
||||
elif [[ $_ble_contrib_fzf_base == __eval_fzf_bash__ ]]; then
|
||||
ble/util/eval-stdout '"$_ble_contrib_fzf_path" --bash | sed -n "/### completion/,/### end/p"'
|
||||
fi
|
||||
fi
|
||||
|
||||
# clear blesh completer for cd
|
||||
blehook/eval-after-load complete 'builtin unset -f ble/cmdinfo/complete:cd'
|
||||
|
||||
# patch fzf functions
|
||||
ble-import contrib/integration/fzf.common
|
||||
ble/function#advice -f around __fzf_generic_path_completion 'ble/contrib/integration:fzf/complete.advice'
|
||||
ble/function#advice -f around _fzf_complete 'ble/contrib/integration:fzf/complete.advice keep-stdin'
|
||||
ble/function#advice -f around _fzf_complete_kill 'ble/contrib/integration:fzf/complete.advice'
|
||||
ble/function#advice -f around _fzf_handle_dynamic_completion 'ble/contrib/integration:fzf/handle_dynamic_completion.advice'
|
||||
|
||||
if ble/is-function __fzf_orig_completion_get_orig_func; then
|
||||
## @fn ble/contrib/integration:fzf/orig_completion_get_orig_func.advice
|
||||
## @var[ref] comp_opts
|
||||
function ble/contrib/integration:fzf/orig_completion_get_orig_func.advice {
|
||||
if ((ADVICE_EXIT==0)); then
|
||||
local comp_func=$REPLY comp_prog=
|
||||
ble/complete/progcomp/adjust-third-party-completions
|
||||
fi
|
||||
}
|
||||
ble/function#advice after __fzf_orig_completion_get_orig_func 'ble/contrib/integration:fzf/orig_completion_get_orig_func.advice'
|
||||
elif ble/is-function _fzf_handle_dynamic_completion; then
|
||||
_ble_contrib_fzf_adjust_dynamic_completion=1
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Extensions
|
||||
|
||||
# This widget can be used to trigger fzf's '**' completion from a keybinding.
|
||||
function ble/widget/fzf-complete {
|
||||
local handler=_fzf_${1:-path}_completion
|
||||
if ! ble/is-function "$handler"; then
|
||||
ble/widget/.bell "unrecognized fzf-complete type '$1' (function '$handler' not found)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
((_ble_edit_ind==0)) && return 0
|
||||
|
||||
# If the width of the box-drawing characters in the current terminal is not
|
||||
# 1, we specify --no-unicode to fzf to suppress the use of the box-drawing
|
||||
# characters.
|
||||
if [[ " ${FZF_COMPLETION_OPTS-} " != *' --no-unicode '* ]]; then
|
||||
local ret
|
||||
ble/util/c2w 0x2500
|
||||
((ret==1)) ||
|
||||
local FZF_COMPLETION_OPTS="--no-unicode${FZF_COMPLETION_OPTS:+ $FZF_COMPLETION_OPTS}"
|
||||
fi
|
||||
|
||||
# Mask completion settings cached by fzf
|
||||
local -a fzf_orig_completions
|
||||
fzf_orig_completions=("${!_fzf_orig_completion_@}")
|
||||
local "${fzf_orig_completions[@]/%/=}" # disable=#D1570
|
||||
|
||||
# Replace the programmable-completion setting
|
||||
local completion_save
|
||||
ble/util/assign completion_save 'complete -p'
|
||||
complete -r
|
||||
if ((_ble_bash>=40100)); then
|
||||
complete -F "$handler" -D
|
||||
complete -F "$handler" -E
|
||||
else
|
||||
complete -F "$handler" _DefaultCmD_
|
||||
complete -F "$handler" _EmptycmD_
|
||||
fi
|
||||
if ((_ble_bash>=50000)); then
|
||||
complete -F "$handler" -I
|
||||
else
|
||||
complete -F "$handler" _InitialWorD_
|
||||
fi
|
||||
|
||||
# Disable completion auto-loader
|
||||
ble/function#push _comp_load 'return 1'
|
||||
|
||||
# Trigger fzf-completion without '**'
|
||||
local FZF_COMPLETION_TRIGGER=
|
||||
|
||||
ble/widget/complete; local ext=$?
|
||||
|
||||
# restore the settings
|
||||
ble/function#pop _comp_load
|
||||
complete -r
|
||||
builtin eval -- "$completion_save"
|
||||
return "$ext"
|
||||
}
|
||||
Reference in New Issue
Block a user