From 9688519f5f0244cc84d34cb0d99a53df87d51206 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Sat, 27 Aug 2016 20:31:54 +0300 Subject: [PATCH] .shellrc: refactor separate completion loaders into one --- .shellrc | 60 ++++++++++++++++++++------------------------------------ 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/.shellrc b/.shellrc index 0d043e6..aa12a31 100644 --- 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 -- 2.39.2