diff options
Diffstat (limited to 'bash_completion.d')
-rw-r--r-- | bash_completion.d/000_bash_completion_compat.bash | 507 |
1 files changed, 507 insertions, 0 deletions
diff --git a/bash_completion.d/000_bash_completion_compat.bash b/bash_completion.d/000_bash_completion_compat.bash new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/bash_completion.d/000_bash_completion_compat.bash @@ -0,0 +1,507 @@ +# Deprecated bash_completion functions and variables -*- shell-script -*- + +_comp_deprecate_func 2.12 _userland _comp_userland +_comp_deprecate_func 2.12 _sysvdirs _comp_sysvdirs +_comp_deprecate_func 2.12 _have _comp_have_command +_comp_deprecate_func 2.12 _rl_enabled _comp_readline_variable_on +_comp_deprecate_func 2.12 _command_offset _comp_command_offset +_comp_deprecate_func 2.12 _command _comp_command +_comp_deprecate_func 2.12 _root_command _comp_root_command +_comp_deprecate_func 2.12 _xfunc _comp_xfunc +_comp_deprecate_func 2.12 _upvars _comp_upvars +_comp_deprecate_func 2.12 _get_comp_words_by_ref _comp_get_words +_comp_deprecate_func 2.12 _known_hosts_real _comp_compgen_known_hosts +_comp_deprecate_func 2.12 __ltrim_colon_completions _comp_ltrim_colon_completions +_comp_deprecate_func 2.12 _variables _comp_compgen_variables +_comp_deprecate_func 2.12 _signals _comp_compgen_signals +_comp_deprecate_func 2.12 _mac_addresses _comp_compgen_mac_addresses +_comp_deprecate_func 2.12 _available_interfaces _comp_compgen_available_interfaces +_comp_deprecate_func 2.12 _configured_interfaces _comp_compgen_configured_interfaces +_comp_deprecate_func 2.12 _ip_addresses _comp_compgen_ip_addresses +_comp_deprecate_func 2.12 _kernel_versions _comp_compgen_kernel_versions +_comp_deprecate_func 2.12 _uids _comp_compgen_uids +_comp_deprecate_func 2.12 _gids _comp_compgen_gids +_comp_deprecate_func 2.12 _xinetd_services _comp_compgen_xinetd_services +_comp_deprecate_func 2.12 _services _comp_compgen_services +_comp_deprecate_func 2.12 _bashcomp_try_faketty _comp_try_faketty +_comp_deprecate_func 2.12 _expand _comp_expand +_comp_deprecate_func 2.12 _pids _comp_compgen_pids +_comp_deprecate_func 2.12 _pgids _comp_compgen_pgids +_comp_deprecate_func 2.12 _pnames _comp_compgen_pnames +_comp_deprecate_func 2.12 _modules _comp_compgen_kernel_modules +_comp_deprecate_func 2.12 _installed_modules _comp_compgen_inserted_kernel_modules +_comp_deprecate_func 2.12 _usergroup _comp_compgen_usergroups +_comp_deprecate_func 2.12 _complete_as_root _comp_as_root +_comp_deprecate_func 2.12 __load_completion _comp_load + +# completers +_comp_deprecate_func 2.12 _service _comp_complete_service +_comp_deprecate_func 2.12 _user_at_host _comp_complete_user_at_host +_comp_deprecate_func 2.12 _known_hosts _comp_complete_known_hosts +_comp_deprecate_func 2.12 _longopt _comp_complete_longopt +_comp_deprecate_func 2.12 _filedir_xspec _comp_complete_filedir_xspec +_comp_deprecate_func 2.12 _minimal _comp_complete_minimal + +_comp_deprecate_var 2.12 COMP_FILEDIR_FALLBACK BASH_COMPLETION_FILEDIR_FALLBACK +_comp_deprecate_var 2.12 COMP_KNOWN_HOSTS_WITH_AVAHI BASH_COMPLETION_KNOWN_HOSTS_WITH_AVAHI +_comp_deprecate_var 2.12 COMP_KNOWN_HOSTS_WITH_HOSTFILE BASH_COMPLETION_KNOWN_HOSTS_WITH_HOSTFILE + +# @deprecated 2.12 Use `_comp_xspecs` +declare -Ag _xspecs + +# Backwards compatibility for compat completions that use have(). +# @deprecated 1.90 should no longer be used; generally not needed with +# dynamically loaded completions, and _comp_have_command is suitable for +# runtime use. +# shellcheck disable=SC2317 # available at load time only +have() +{ + unset -v have + _comp_have_command "$1" && have=yes +} + +# This function shell-quotes the argument +# @deprecated 2.12 Use `_comp_quote` instead. Note that `_comp_quote` stores +# the results in the variable `REPLY` instead of writing them to stdout. +quote() +{ + local quoted=${1//\'/\'\\\'\'} + printf "'%s'" "$quoted" +} + +# @deprecated 2.12 Use `_comp_quote_compgen` +quote_readline() +{ + local REPLY + _comp_quote_compgen "$1" + printf %s "$REPLY" +} + +# This function is the same as `_comp_quote_compgen`, but receives the second +# argument specifying the variable name to store the result. +# @param $1 Argument to quote +# @param $2 Name of variable to return result to +# @deprecated 2.12 Use `_comp_quote_compgen "$1"` instead. Note that +# `_comp_quote_compgen` stores the result in a fixed variable `REPLY`. +_quote_readline_by_ref() +{ + [[ $2 == REPLY ]] || local REPLY + _comp_quote_compgen "$1" + [[ $2 == REPLY ]] || printf -v "$2" %s "$REPLY" +} + +# This function shell-dequotes the argument +# @deprecated 2.12 Use `_comp_dequote' instead. Note that `_comp_dequote` +# stores the results in the array `REPLY` instead of writing them to stdout. +dequote() +{ + local REPLY + _comp_dequote "$1" + local rc=$? + printf %s "$REPLY" + return $rc +} + +# Assign variable one scope above the caller +# Usage: local "$1" && _upvar $1 "value(s)" +# @param $1 Variable name to assign value to +# @param $* Value(s) to assign. If multiple values, an array is +# assigned, otherwise a single value is assigned. +# NOTE: For assigning multiple variables, use '_comp_upvars'. Do NOT +# use multiple '_upvar' calls, since one '_upvar' call might +# reassign a variable to be used by another '_upvar' call. +# @see https://fvue.nl/wiki/Bash:_Passing_variables_by_reference +# @deprecated 2.10 Use `_comp_upvars' instead +_upvar() +{ + echo "bash_completion: $FUNCNAME: deprecated function," \ + "use _comp_upvars instead" >&2 + if unset -v "$1"; then # Unset & validate varname + # shellcheck disable=SC2140 # TODO + if (($# == 2)); then + eval "$1"=\"\$2\" # Return single value + else + eval "$1"=\(\"\$"{@:2}"\"\) # Return array + fi + fi +} + +# Get the word to complete. +# This is nicer than ${COMP_WORDS[COMP_CWORD]}, since it handles cases +# where the user is completing in the middle of a word. +# (For example, if the line is "ls foobar", +# and the cursor is here --------> ^ +# @param $1 string Characters out of $COMP_WORDBREAKS which should NOT be +# considered word breaks. This is useful for things like scp where +# we want to return host:path and not only path, so we would pass the +# colon (:) as $1 in this case. +# @param $2 integer Index number of word to return, negatively offset to the +# current word (default is 0, previous is 1), respecting the exclusions +# given at $1. For example, `_get_cword "=:" 1' returns the word left of +# the current word, respecting the exclusions "=:". +# @deprecated 1.2 Use `_comp_get_words cur' instead +# @see _comp_get_words() +_get_cword() +{ + local LC_CTYPE=C + local cword words + _comp__reassemble_words "${1-}" words cword + + # return previous word offset by $2 + if [[ ${2-} && ${2//[^0-9]/} ]]; then + printf "%s" "${words[cword - $2]}" + elif ((${#words[cword]} == 0 && COMP_POINT == ${#COMP_LINE})); then + : # nothing + else + local i + local cur=$COMP_LINE + local index=$COMP_POINT + for ((i = 0; i <= cword; ++i)); do + # Current word fits in $cur, and $cur doesn't match cword? + while [[ ${#cur} -ge ${#words[i]} && + ${cur:0:${#words[i]}} != "${words[i]}" ]]; do + # Strip first character + cur=${cur:1} + # Decrease cursor position, staying >= 0 + ((index > 0)) && ((index--)) + done + + # Does found word match cword? + if ((i < cword)); then + # No, cword lies further; + local old_size=${#cur} + cur=${cur#"${words[i]}"} + local new_size=${#cur} + ((index -= old_size - new_size)) + fi + done + + if [[ ${words[cword]:0:${#cur}} != "$cur" ]]; then + # We messed up! At least return the whole word so things + # keep working + printf "%s" "${words[cword]}" + else + printf "%s" "${cur:0:index}" + fi + fi +} + +# Get word previous to the current word. +# This is a good alternative to `prev=${COMP_WORDS[COMP_CWORD-1]}' because bash4 +# will properly return the previous word with respect to any given exclusions to +# COMP_WORDBREAKS. +# @deprecated 1.2 Use `_comp_get_words cur prev' instead +# @see _comp_get_words() +# +_get_pword() +{ + if ((COMP_CWORD >= 1)); then + _get_cword "${@-}" 1 + fi +} + +# Get real command. +# @deprecated 2.12 Use `_comp_realcommand` instead. +# Note that `_comp_realcommand` stores the result in the variable `REPLY` +# instead of writing it to stdout. +_realcommand() +{ + local REPLY + _comp_realcommand "$1" + local rc=$? + printf "%s\n" "$REPLY" + return $rc +} + +# Initialize completion and deal with various general things: do file +# and variable completion where appropriate, and adjust prev, words, +# and cword as if no redirections exist so that completions do not +# need to deal with them. Before calling this function, make sure +# cur, prev, words, and cword are local, ditto split if you use -s. +# +# Options: +# -n EXCLUDE Passed to _comp_get_words -n with redirection chars +# -e XSPEC Passed to _filedir as first arg for stderr redirections +# -o XSPEC Passed to _filedir as first arg for other output redirections +# -i XSPEC Passed to _filedir as first arg for stdin redirections +# -s Split long options with _comp__split_longopt, implies -n = +# @var[out] cur Reconstructed current word +# @var[out] prev Reconstructed previous word +# @var[out] words Reconstructed words +# @var[out] cword Current word index in `words` +# @var[out,opt] split When "-s" is specified, `"true"/"false"` is set depending +# on whether the split happened. +# @return True (0) if completion needs further processing, +# False (> 0) no further processing is necessary. +# +# @deprecated 2.12 Use the new interface `_comp_initialize`. The new interface +# supports the same set of options. The new interface receives additional +# arguments $1 (command name), $2 (part of current word before the cursor), and +# $3 (previous word) that are specified to the completion function by Bash. +# When `-s` is specified, instead of variable `split`, the new interface sets +# variable `was_split` to the value "set"/"" when the split happened/not +# happened. +_init_completion() +{ + local was_split + _comp_initialize "$@" + local rc=$? + + # When -s is specified, convert "split={set,}" to "split={true,false}" + local flag OPTIND=1 OPTARG="" OPTERR=0 + while getopts "n:e:o:i:s" flag "$@"; do + case $flag in + [neoi]) ;; + s) + if [[ $was_split ]]; then + split=true + else + split=false + fi + break + ;; + esac + done + + return "$rc" +} + +# @deprecated 2.12 Use the variable `_comp_backup_glob` instead. This is the +# backward-compatibility name. +# shellcheck disable=SC2154 # defined in the main "bash_completion" +_backup_glob=$_comp_backup_glob + +# @deprecated 2.12 use `_comp_cmd_cd` instead. +_cd() +{ + declare -F _comp_cmd_cd &>/dev/null || __load_completion cd + _comp_cmd_cd "$@" +} + +# @deprecated 2.12 Use `_comp_command_offset` instead. Note that the new +# interface `_comp_command_offset` is changed to receive an index in +# `words` instead of that in `COMP_WORDS` as `_command_offset` did. +_command_offset() +{ + # We unset the shell variable `words` locally to tell + # `_comp_command_offset` that the index is intended to be that in + # `COMP_WORDS` instead of `words`. + local words + unset -v words + _comp_command_offset "$@" +} + +# @deprecated 2.12 Use `_comp_compgen -a filedir` +_filedir() +{ + _comp_compgen -a filedir "$@" +} + +# Perform tilde (~) completion +# @return True (0) if completion needs further processing, +# False (1) if tilde is followed by a valid username, completions are +# put in COMPREPLY and no further processing is necessary. +# @deprecated 2.12 Use `_comp_compgen -c CUR tilde [-d]`. Note that the exit +# status of `_comp_compgen_tilde` is flipped. It returns 0 when the tilde +# completions are attempted, or otherwise 1. +_tilde() +{ + ! _comp_compgen -c "$1" tilde +} + +# Helper function for _parse_help and _parse_usage. +# @return True (0) if an option was found, False (> 0) otherwise +# @deprecated 2.12 Use _comp_compgen_help__parse +__parse_options() +{ + local -a _options=() + _comp_compgen_help__parse "$1" + printf '%s\n' "${_options[@]}" +} + +# Parse GNU style help output of the given command. +# @param $1 command; if "-", read from stdin and ignore rest of args +# @param $2 command options (default: --help) +# @deprecated 2.12 Use `_comp_compgen_help`. `COMPREPLY=($(compgen -W +# '$(_parse_help "$1" ...)' -- "$cur"))` can be replaced with +# `_comp_compgen_help [-- ...]`. Also, `var=($(_parse_help "$1" ...))` can +# be replaced with `_comp_compgen -Rv var help [-- ...]`. +_parse_help() +{ + local -a args + if [[ $1 == - ]]; then + args=(-) + else + local REPLY opt IFS=$' \t\n' + _comp_dequote "$1" + _comp_split opt "${2:---help}" + args=(-c "$REPLY" ${opt[@]+"${opt[@]}"}) + fi + local -a REPLY=() + _comp_compgen -Rv REPLY help "${args[@]}" || return 1 + ((${#REPLY[@]})) && printf '%s\n' "${REPLY[@]}" + return 0 +} + +# Parse BSD style usage output (options in brackets) of the given command. +# @param $1 command; if "-", read from stdin and ignore rest of args +# @param $2 command options (default: --usage) +# @deprecated 2.12 Use `_comp_compgen_usage`. `COMPREPLY=($(compgen -W +# '$(_parse_usage "$1" ...)' -- "$cur"))` can be replaced with +# `_comp_compgen_usage [-- ...]`. `var=($(_parse_usage "$1" ...))` can be +# replaced with `_comp_compgen -Rv var usage [-- ...]`. +_parse_usage() +{ + local -a args + if [[ $1 == - ]]; then + args=(-) + else + local REPLY opt IFS=$' \t\n' + _comp_dequote "$1" + _comp_split opt "${2:---usage}" + args=(-c "$REPLY" ${opt[@]+"${opt[@]}"}) + fi + local -a REPLY=() + _comp_compgen -Rv REPLY usage "${args[@]}" || return 1 + ((${#REPLY[@]})) && printf '%s\n' "${REPLY[@]}" + return 0 +} + +# @deprecated 2.12 Use `_comp_get_ncpus`. +_ncpus() +{ + local REPLY + _comp_get_ncpus + printf %s "$REPLY" +} + +# Expand variable starting with tilde (~). +# We want to expand ~foo/... to /home/foo/... to avoid problems when +# word-to-complete starting with a tilde is fed to commands and ending up +# quoted instead of expanded. +# Only the first portion of the variable from the tilde up to the first slash +# (~../) is expanded. The remainder of the variable, containing for example +# a dollar sign variable ($) or asterisk (*) is not expanded. +# +# @deprecated 2.12 Use `_comp_expand_tilde`. The new function receives the +# value instead of a variable name as $1 and always returns the result to the +# variable `REPLY`. +__expand_tilde_by_ref() +{ + [[ ${1+set} ]] || return 0 + [[ $1 == REPLY ]] || local REPLY + _comp_expand_tilde "${!1-}" + # shellcheck disable=SC2059 + [[ $1 == REPLY ]] || printf -v "$1" "$REPLY" +} + +# @deprecated 2.12 Use `_comp_compgen -a cd_devices` +_cd_devices() +{ + _comp_compgen -a cd_devices +} + +# @deprecated 2.12 Use `_comp_compgen -a dvd_devices` +_dvd_devices() +{ + _comp_compgen -a dvd_devices +} + +# @deprecated 2.12 Use `_comp_compgen -a pci_ids` +_pci_ids() +{ + _comp_compgen -a pci_ids +} + +# @deprecated 2.12 Use `_comp_compgen -a usb_ids` +_usb_ids() +{ + _comp_compgen -a usb_ids +} + +# @deprecated 2.12 Use `_comp_compgen -a terms` +_terms() +{ + _comp_compgen -a terms +} + +# @deprecated 2.12 Use `_comp_compgen -c "${prefix:-$cur}" allowed_users` +_allowed_users() +{ + _comp_compgen -c "${1:-$cur}" allowed_users +} + +# @deprecated 2.12 Use `_comp_compgen -c "${prefix:-$cur}" allowed_groups` +_allowed_groups() +{ + _comp_compgen -c "${1:-$cur}" allowed_groups +} + +# @deprecated 2.12 Use `_comp_compgen -a shells` +_shells() +{ + _comp_compgen -a shells +} + +# @deprecated 2.12 Use `_comp_compgen -a fstypes` +_fstypes() +{ + _comp_compgen -a fstypes +} + +# This function returns the first argument, excluding options +# @deprecated 2.12 Use `_comp_get_first_arg`. Note that the new function +# `_comp_get_first_arg` operates on `words` and `cword` instead of `COMP_WORDS` +# and `COMP_CWORD`. The new function considers a command-line argument after +# `--` as an argument. The new function returns the result in variable `REPLY` +# instead of `arg`. +_get_first_arg() +{ + local i + + arg= + for ((i = 1; i < COMP_CWORD; i++)); do + if [[ ${COMP_WORDS[i]} != -* ]]; then + arg=${COMP_WORDS[i]} + break + fi + done +} + +# This function counts the number of args, excluding options +# @param $1 chars Characters out of $COMP_WORDBREAKS which should +# NOT be considered word breaks. See _comp__reassemble_words. +# @param $2 glob Options whose following argument should not be counted +# @param $3 glob Options that should be counted as args +# @var[out] args Return the number of arguments +# @deprecated 2.12 Use `_comp_count_args`. Note that the new function +# `_comp_count_args` returns the result in variable `REPLY` instead of `args`. +# In the new function, `-` is also counted as an argument. The new function +# counts all the arguments after `--`. +# shellcheck disable=SC2178 # assignments are not intended for global "args" +_count_args() +{ + local i cword words + _comp__reassemble_words "${1-}" words cword + + args=1 + for ((i = 1; i < cword; i++)); do + # shellcheck disable=SC2053 + if [[ ${words[i]} != -* && ${words[i - 1]} != ${2-} || + ${words[i]} == ${3-} ]]; then + ((args++)) + fi + done +} + +# @deprecated 2.12 Use `_comp_load -D -- CommandName` to load the completion, +# or use `_comp_complete_load` as a completion function specified to `complete +# -F`. +_completion_loader() +{ + # We call `_comp_complete_load` instead of `_comp_load -D` in case that + # `_completion_loader` is used without an argument or `_completion_loader` + # is specified to `complete -F` by a user. + _comp_complete_load "$@" +} +# ex: filetype=sh |