mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 02:10: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