Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reusable zsh completion #16

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ xmirror: xmirror.in
chmod +x $@+
mv $@+ $@

completions: completions/_xmirror completions/xmirror.fish completions/xmirror.bash
completions: completions/_xmirror completions/_xmirrors completions/xmirror.fish completions/xmirror.bash

completions/%: completions/%.in
sed -e "s,@@PREFIX@@,$(PREFIX),g" $< >$@
Expand All @@ -22,12 +22,13 @@ install: all
install -Dm 755 xmirror -t $(DESTDIR)$(PREFIX)/bin
install -Dm 644 mirrors.lst -t $(DESTDIR)$(PREFIX)/share/xmirror
install -Dm 644 completions/_xmirror -t $(DESTDIR)$(PREFIX)/share/zsh/site-functions
install -Dm 644 completions/_xmirrors -t $(DESTDIR)$(PREFIX)/share/zsh/site-functions
install -Dm 644 completions/xmirror.fish -t $(DESTDIR)/$(PREFIX)/share/fish/vendor_completions.d
install -Dm 644 completions/xmirror.bash -t $(DESTDIR)/usr/share/bash-completion/completions
install -Dm 644 xmirror.1 -t $(DESTDIR)$(PREFIX)/share/man/man1

clean:
rm -rf xmirror _site completions/_xmirror completions/xmirror.fish completions/xmirror.bash
rm -rf xmirror _site completions/_xmirror completions/_xmirrors completions/xmirror.fish completions/xmirror.bash

README: xmirror.1
mandoc -Tutf8 $< | col -bx >$@
Expand Down
12 changes: 0 additions & 12 deletions completions/_xmirror.in
Original file line number Diff line number Diff line change
@@ -1,17 +1,5 @@
#compdef xmirror

_xmirrors() {
local mirror_lst
for line in "${(@f)"$(<@@PREFIX@@/share/xmirror/mirrors.lst)"}"
{
[[ "$line" = '#'* ]] && continue
while IFS=$'\t' read -r region url location tier rest; do
mirror_lst+=("${url//:/\\:}":"$location, Tier $tier")
done <<< "$line"
}
_describe -t mirrors "available mirrors" mirror_lst
}

_arguments -s : \
+ '(meta)' \
'(common interactive noninteractive)'{-h,--help}'[Show help for this command and exit]' \
Expand Down
21 changes: 21 additions & 0 deletions completions/_xmirrors.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#autoload

local -a mirror_lst expl suf
local line region url location rest
local -i tier repos

[[ "$@[-1]" = --repos ]] && shift -p && repos=1 && suf=( -S "" )

for line in ${(f)"$(<@@PREFIX@@/share/xmirror/mirrors.lst)"}; do
[[ $line = '#'* ]] && continue
while IFS=$'\t' read -r region url location tier rest; do
mirror_lst+=("${url//:/\\:}:$location, Tier $tier")
if (( repos )) && compset -P ${(b)url}; then
_wanted mirror-repositories expl "typical mirror repositories" \
compadd "$@" - current{,/musl,aarch64} nonfree multilib{,/nonfree} debug
return
fi
done <<< $line
done

_describe -t mirrors "available mirrors" mirror_lst "$@" -o nosort "$suf[@]"