- 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
+ }