X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=.shellrc;h=aa12a31e36478fe7308f53f0c4db3f63626d928b;hb=bafdf9e9b816a691ddac7f11a6b5aea875e54eee;hp=e43c215913f3778b697c0804991596ffb8d6a761;hpb=6781dcaee2933ce190024915917015726662d50b;p=dotfiles.git diff --git a/.shellrc b/.shellrc index e43c215..aa12a31 100644 --- a/.shellrc +++ b/.shellrc @@ -112,45 +112,37 @@ 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 + 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 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 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 unset + complete -A variable -A function unset if [ -d "$HOME/lib/config" ]; then complete -W "`cd \"$HOME/lib/config\" && echo *`" include