Как сказано в разделе комментариев, вам необходимо расширить инструмент bash-creation . Затем вы создадите скрипт, который обрабатывает нужные вам случаи (например, когда последний аргумент был -m
).
Этот небольшой пример ниже показывает начало для вашего пользовательского сценария завершения. Давайте назовем это python_completion.sh
.
_python_target() {
local cur prev opts
# Retrieving the current typed argument
cur="${COMP_WORDS[COMP_CWORD]}"
# Retrieving the previous typed argument ("-m" for example)
prev="${COMP_WORDS[COMP_CWORD-1]}"
# Preparing an array to store available list for completions
# COMREPLY will be checked to suggest the list
COMPREPLY=()
# Here, we'll only handle the case of "-m"
# Hence, the classic autocompletion is disabled
# (ie COMREPLY stays an empty array)
if [[ "$prev" != "-m" ]]
then
return 0
fi
# Retrieving paths and converts their separators into dots
# (if packages doesn't exist, same thing, empty array)
if [[ ! -e "./package" ]]
then
return 0
fi
# Otherwise, we retrieve first the paths starting with "./package"
# and converts their separators into dots
opts="$(find ./package -type d | sed -e 's+/+.+g' -e 's/^\.//' | head)"
# We store the whole list by invoking "compgen" and filling
# COMREPLY with its output content.
COMPREPLY=($(compgen -W "$opts" -- "$cur"))
}
complete -F _python_target python
(Предупреждение. У этого скрипта есть недостаток, он не будет работать с именами файлов, содержащими пробелы) . Чтобы проверить это, запустите его в среде current :
. ./python_completion.sh
И проверить это:
python -m packag[TAB]
Здесь - учебное пособие для продолжения в этом направлении.