mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 05:40:05 +08:00
Add get_completions func
This commit is contained in:
parent
84478e71c2
commit
58b1348d67
53
autoload/SpaceVim/bin/get_complete
Executable file
53
autoload/SpaceVim/bin/get_complete
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Author: Brian Beffa <brbsix@gmail.com>
|
||||||
|
# Original source: https://brbsix.github.io/2015/11/29/accessing-tab-completion-programmatically-in-bash/
|
||||||
|
# License: LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0.txt)
|
||||||
|
#
|
||||||
|
|
||||||
|
get_completions(){
|
||||||
|
local completion COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMPREPLY=()
|
||||||
|
|
||||||
|
# load bash-completion if necessary
|
||||||
|
declare -F _completion_loader &>/dev/null || {
|
||||||
|
source /usr/share/bash-completion/bash_completion
|
||||||
|
}
|
||||||
|
|
||||||
|
COMP_LINE=$*
|
||||||
|
COMP_POINT=${#COMP_LINE}
|
||||||
|
|
||||||
|
eval set -- "$@"
|
||||||
|
|
||||||
|
COMP_WORDS=("$@")
|
||||||
|
|
||||||
|
# add '' to COMP_WORDS if the last character of the command line is a space
|
||||||
|
[[ ${COMP_LINE[@]: -1} = ' ' ]] && COMP_WORDS+=('')
|
||||||
|
|
||||||
|
# index of the last word
|
||||||
|
COMP_CWORD=$(( ${#COMP_WORDS[@]} - 1 ))
|
||||||
|
|
||||||
|
# determine completion function
|
||||||
|
completion=$(complete -p "$1" 2>/dev/null | awk '{print $(NF-1)}')
|
||||||
|
|
||||||
|
# run _completion_loader only if necessary
|
||||||
|
[[ -n $completion ]] || {
|
||||||
|
|
||||||
|
# load completion
|
||||||
|
_completion_loader "$1"
|
||||||
|
|
||||||
|
# detect completion
|
||||||
|
completion=$(complete -p "$1" 2>/dev/null | awk '{print $(NF-1)}')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# ensure completion was detected
|
||||||
|
[[ -n $completion ]] || return 1
|
||||||
|
|
||||||
|
# execute completion function
|
||||||
|
"$completion"
|
||||||
|
|
||||||
|
# print completions to stdout
|
||||||
|
printf '%s\n' "${COMPREPLY[@]}" | LC_ALL=C sort
|
||||||
|
}
|
||||||
|
|
||||||
|
get_completions $@
|
Loading…
Reference in New Issue
Block a user