completion/bash-it: use `read -a` to populate `$COMPREPLY`

This allows for spaces and special characters in file names, i.e. internaltional/unicode words.
pull/2029/head
John D Pell 2022-01-07 17:27:43 -08:00 committed by John D Pell
parent 3874ad85c2
commit e1e971c0ea
2 changed files with 57 additions and 45 deletions

View File

@ -1,31 +1,43 @@
# shellcheck shell=bash
function _bash-it-comp-list-available-not-enabled() {
local subdirectory="$1"
COMPREPLY=($(compgen -W "all $(_bash-it-component-list-disabled "${subdirectory}")" -- "${cur}"))
local subdirectory="$1" IFS=$'\n' REPL
COMPREPLY=('all')
while read -ra REPL; do
COMPREPLY+=("${REPL[@]}")
done < <(compgen -W "$(_bash-it-component-list-disabled "${subdirectory}")" -- "${cur}")
}
function _bash-it-comp-list-enabled() {
local subdirectory="$1"
COMPREPLY=($(compgen -W "all $(_bash-it-component-list-enabled "${subdirectory}")" -- "${cur}"))
local subdirectory="$1" IFS=$'\n' REPL
COMPREPLY=('all')
while read -ra REPL; do
COMPREPLY+=("${REPL[@]}")
done < <(compgen -W "$(_bash-it-component-list-enabled "${subdirectory}")" -- "${cur}")
}
function _bash-it-comp-list-available() {
local subdirectory="$1"
COMPREPLY=($(compgen -W "all $(_bash-it-component-list "${subdirectory}")" -- "${cur}"))
local subdirectory="$1" IFS=$'\n' REPL
COMPREPLY=('all')
while read -ra REPL; do
COMPREPLY+=("${REPL[@]}")
done < <(compgen -W "$(_bash-it-component-list "${subdirectory}")" -- "${cur}")
}
function _bash-it-comp-list-profiles() {
local profiles
local profiles IFS=$'\n' REPL
COMPREPLY=()
profiles=("${BASH_IT}/profiles"/*.bash_it)
profiles=("${profiles[@]##*/}")
COMPREPLY=($(compgen -W "${profiles[*]%%.bash_it}" -- "${cur}"))
while read -ra REPL; do
COMPREPLY+=("${REPL[@]}")
done < <(compgen -W "${profiles[*]%%.bash_it}" -- "${cur}")
}
function _bash-it-comp() {
local cur prev opts
local cur prev opts chose_opt file_type
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD - 1]}"

View File

@ -155,10 +155,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/atom.aliases.bash"
ln -s $BASH_IT/completion/available/apm.completion.bash $BASH_IT/completion/enabled/apm.completion.bash
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/completion/enabled/apm.completion.bash"
assert_link_exist "$BASH_IT/completion/enabled/apm.completion.bash"
run __check_completion 'bash-it disable alias a'
@ -166,10 +166,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/150---atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
ln -s $BASH_IT/completion/available/apm.completion.bash $BASH_IT/completion/enabled/350---apm.completion.bash
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/completion/enabled/350---apm.completion.bash"
assert_link_exist "$BASH_IT/completion/enabled/350---apm.completion.bash"
run __check_completion 'bash-it disable alias a'
@ -177,10 +177,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/enabled/150---atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---atom.aliases.bash"
ln -s $BASH_IT/completion/available/apm.completion.bash $BASH_IT/enabled/350---apm.completion.bash
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/enabled/350---apm.completion.bash"
assert_link_exist "$BASH_IT/enabled/350---apm.completion.bash"
run __check_completion 'bash-it disable alias a'
@ -188,10 +188,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/docker-compose.aliases.bash
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
ln -s $BASH_IT/plugins/available/docker-machine.plugin.bash $BASH_IT/plugins/enabled/docker-machine.plugin.bash
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/plugins/enabled/docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
@ -199,10 +199,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/150---docker-compose.aliases.bash
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
ln -s $BASH_IT/plugins/available/docker-machine.plugin.bash $BASH_IT/plugins/enabled/350---docker-machine.plugin.bash
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/plugins/enabled/350---docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
@ -210,10 +210,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/enabled/150---docker-compose.aliases.bash
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
ln -s $BASH_IT/plugins/available/docker-machine.plugin.bash $BASH_IT/enabled/350---docker-machine.plugin.bash
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/enabled/350---docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
@ -221,10 +221,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash"
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/plugins/enabled/todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
@ -232,10 +232,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/plugins/enabled/350---todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
@ -243,10 +243,10 @@ function __check_completion () {
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/enabled/150---todo.txt-cli.aliases.bash
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/enabled/350---todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
@ -264,7 +264,7 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
@ -272,7 +272,7 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/150---atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
@ -280,55 +280,55 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/enabled/150---atom.aliases.bash
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
assert_line -n 0 "all ag ansible apt"
}
@test "completion bash-it: enable - provide the docker-* plugins when nothing is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker* plugins when docker-compose is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* plugins when nothing is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/150---docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker-* plugins when docker-compose is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* plugins when nothing is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/enabled/150---docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker-* plugins when docker-compose is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* completions when nothing is enabled with the old location and name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* completions when nothing is enabled with the old location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/150---docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* completions when nothing is enabled with the new location and priority-based name" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/enabled/150---docker-compose.aliases.bash
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
@ -336,7 +336,7 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and name" {
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/plugins/enabled/todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/todo.plugin.bash"
run __check_completion 'bash-it enable alias to'
@ -344,7 +344,7 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and priority-based name" {
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/plugins/enabled/350---todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it enable alias to'
@ -352,7 +352,7 @@ function __check_completion () {
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the new location and priority-based name" {
ln -s $BASH_IT/plugins/available/todo.plugin.bash $BASH_IT/enabled/350---todo.plugin.bash
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it enable alias to'