]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg-quick: better bash completion for non-renaming OSes
authorJason A. Donenfeld <Jason@zx2c4.com>
Wed, 23 May 2018 13:17:41 +0000 (15:17 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 23 May 2018 13:24:07 +0000 (15:24 +0200)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/completion/wg-quick.bash-completion

index 3474120db4bcde14e2d05ec8323c03e81ca59a87..7b14b75eac179f810fa357bdb438d6eb2234cf7e 100644 (file)
@@ -2,17 +2,18 @@
 # Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
 
 _wg_quick_completion() {
-       local p i a search_paths
+       local p i a search_paths old_glob
        search_paths=( /etc/wireguard )
 
+       old_glob="$(shopt -p nullglob)"
+       shopt -s nullglob
+
        [[ $OSTYPE == *freebsd* || $OSTYPE == *darwin* ]] && search_paths+=( /usr/local/etc/wireguard )
 
        if [[ $COMP_CWORD -eq 1 ]]; then
                COMPREPLY+=( $(compgen -W "up down" -- "${COMP_WORDS[1]}") )
        elif [[ $COMP_CWORD -eq 2 ]]; then
                if [[ ${COMP_WORDS[1]} == up ]]; then
-                       local old_glob="$(shopt -p nullglob)"
-                       shopt -s nullglob
                        for p in "${search_paths[@]}"; do
                                for i in "$p"/*.conf; do
                                        i="${i##*/}"; i="${i%.conf}"
@@ -20,15 +21,23 @@ _wg_quick_completion() {
                                        COMPREPLY+=( "${a[@]}" )
                                done
                        done
-                       eval "$old_glob"
                        mapfile -t a < <(compgen -f -X '!*.conf' -- "${COMP_WORDS[2]}")
                        COMPREPLY+=( "${a[@]}" )
                        mapfile -t a < <(compgen -d -- "${COMP_WORDS[2]}")
                        COMPREPLY+=( "${a[@]}" )
                elif [[ ${COMP_WORDS[1]} == down ]]; then
-                       COMPREPLY+=( $(compgen -W "$(wg show interfaces)" -- "${COMP_WORDS[2]}") )
+                       if [[ $OSTYPE == *openbsd* || $OSTYPE == *darwin* ]]; then
+                               for i in /var/run/wireguard/*.name; do
+                                       i="${i##*/}"; i="${i%.name}"
+                                       mapfile -t a < <(compgen -W "$i" -- "${COMP_WORDS[2]}")
+                                       COMPREPLY+=( "${a[@]}" )
+                               done
+                       else
+                               COMPREPLY+=( $(compgen -W "$(wg show interfaces)" -- "${COMP_WORDS[2]}") )
+                       fi
                fi
        fi
+       eval "$old_glob"
 }
 
 complete -o filenames -o nosort -F _wg_quick_completion wg-quick