]> git.phdru.name Git - dotfiles.git/commitdiff
Refactor(.shellrc): Declare `has_completion` once
authorOleg Broytman <phd@phdru.name>
Mon, 20 Jul 2020 07:42:15 +0000 (10:42 +0300)
committerOleg Broytman <phd@phdru.name>
Mon, 20 Jul 2020 07:43:43 +0000 (10:43 +0300)
.shellrc

index 0549c17a705e5ea004ccb4a3acd4e7fcff99d821..62e1f0bb324cbe0f5851ffd0fe105efe758da45f 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -66,29 +66,33 @@ if test -n "$BASH_VERSION"; then
    functions() { typeset -f "$@"; }
    j() { jobs; }
 
-   has_completion() { return 0; }
    if [ -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
       if [ -d /usr/share/bash-completion -a -r /usr/share/bash-completion/bash_completion ]; then
+         _BASH_COMPLETIONS_DIR=/usr/share/bash-completion/completions
          . /usr/share/bash-completion/bash_completion
-         has_completion() { [ -r /usr/share/bash-completion/completions/$1 -o -n "complete -p $1 2>/dev/null" ]; }
       elif [ -r /etc/bash_completion ]; then
+         _BASH_COMPLETIONS_DIR=/etc/bash_completion.d
          . /etc/bash_completion
-         has_completion() { [ -r /etc/bash_completion.d/$1 -o -n "complete -p $1 2>/dev/null" ]; }
       elif [ -d /etc/bash_completion.d ]; then
+         _BASH_COMPLETIONS_DIR=/etc/bash_completion.d
          for _compf in /etc/bash_completion.d/*; do
             . $_compf
          done
-         has_completion() { [ -r /etc/bash_completion.d/$1 -o -n "complete -p $1 2>/dev/null" ]; }
       elif [ -d /usr/local/etc/bash_completion.d ]; then
+         _BASH_COMPLETIONS_DIR=/usr/local/etc/bash_completion.d
          for _compf in /usr/local/etc/bash_completion.d/*; do
             . $_compf
          done
-         has_completion() { [ -r /usr/local/etc/bash_completion.d/$1 -o -n "complete -p $1 2>/dev/null" ]; }
       else
          echo "Unknown OS type, cannot source bash_completion" >&2
       fi
    fi
 
+   has_completion() {
+      [ -n "$_BASH_COMPLETIONS_DIR" -a -d "$_BASH_COMPLETIONS_DIR" -a -r "$_BASH_COMPLETIONS_DIR/$1" ] ||
+      complete -p $1 >/dev/null 2>&1
+   }
+
    for cmd in builtin cgmem_nice command dbus-launch exec \
          killall man nice nohup pidof pidOf KillAll pgrep pkill psg pswg \
          run-all-hosts su sudo time whence whereis which xargs; do
@@ -135,10 +139,9 @@ if test -n "$BASH_VERSION"; then
    delegate_completion ssh s
    delegate_completion wget wget-m wget-wrapper ww
 
-   unset has_completion delegate_completion
-
    complete -A job bg fg j jobs wait
    complete -A variable -A function unset
+   unset _BASH_COMPLETIONS_DIR has_completion delegate_completion
 
    if [ -d "$HOME/lib/config" ]; then
       complete -W "`cd \"$HOME/lib/config\" && echo *`" include