]> git.phdru.name Git - dotfiles.git/commitdiff
.shellrc: refactor separate completion loaders into one
authorOleg Broytman <phd@phdru.name>
Sat, 27 Aug 2016 17:31:54 +0000 (20:31 +0300)
committerOleg Broytman <phd@phdru.name>
Sun, 28 Aug 2016 09:38:37 +0000 (12:38 +0300)
.shellrc

index 0d043e6362d8040711dc32c61b003b85e868668b..aa12a31e36478fe7308f53f0c4db3f63626d928b 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -112,52 +112,34 @@ if test -n "$BASH_VERSION"; then
          ! has_completion $cmd && complete -A hostname $cmd
    done
 
-   if has_completion wget; then
-      _wget_completion_loader() {
-         _completion_loader wget
-         complete -F _wget wget-m wget-wrapper ww
-         unset _wget_completion_loader
-         return 124
-      }
-      complete -F _wget_completion_loader wget-m wget-wrapper ww
-   fi
-
    for cmd in distribute ftp lftp r rsync \
       s scp ssh smbclient tcpdump tshark wireshark; do
          ! has_completion $cmd && complete -o default -A hostname $cmd;
    done
 
-   if has_completion rsync; then
-      _rsync_completion_loader() {
-         _completion_loader rsync
-         complete -F _rsync r
-         unset _rsync_completion_loader
-         return 124
-      }
-      complete -F _rsync_completion_loader r
-   fi
-
-   if has_completion ssh; then
-      _ssh_completion_loader() {
-         _completion_loader ssh
-         complete -F _ssh s
-         unset _ssh_completion_loader
-         return 124
-      }
-      complete -F _ssh_completion_loader s
-   fi
+   delegate_completion() {
+      local prog completion_f programs
+      prog="$1"
+      completion_f="$2"
+      shift; shift
+      programs="$@"
+      if has_completion "$prog"; then
+         eval "_${prog}_completion_loader() {
+            _completion_loader $prog
+            complete -F $completion_f $programs
+            unset _${prog}_completion_loader
+            return 124
+         }"
+         complete -F _"$prog"_completion_loader $programs
+      fi
+   }
 
-   if has_completion make; then
-      _make_completion_loader() {
-         _completion_loader make
-         complete -F _make m
-         unset _make_completion_loader
-         return 124
-      }
-      complete -F _make_completion_loader m
-   fi
+   delegate_completion make _make m
+   delegate_completion rsync _rsync r
+   delegate_completion ssh _ssh s
+   delegate_completion wget _wget wget-m wget-wrapper ww
 
-   unset has_completion
+   unset has_completion delegate_completion
 
    complete -A job bg fg j jobs wait
    complete -A variable -A function unset