Skip to content

Commit

Permalink
Merge pull request #8580 from bboozzoo/bboozzoo/zsh-completion
Browse files Browse the repository at this point in the history
data/completion: add `snap` command completion for zsh
  • Loading branch information
mvo5 committed May 5, 2020
2 parents 844d99d + b412ec6 commit 33625e2
Show file tree
Hide file tree
Showing 10 changed files with 102 additions and 19 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
59 changes: 59 additions & 0 deletions data/completion/zsh/_snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#compdef snap
#
# Copyright (C) 2020 Canonical Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# group --style options and arguments separately, so that users can customize
# the presentation of available completion matches
_description options optexpl option
_description arguments argexpl argument

if [[ ${#words[@]} -ge 2 ]]; then
# keep track of the command for later reference
local command="${words[2]}"
fi

# get completion options with what we have so far
local matches=($(GO_FLAGS_COMPLETION=1 "${words[@]}"))

local match
# we don't have a command yet, try to complete one first
if [[ "$command" == "" ]]; then
for match in $matches; do compadd $optexpl[@] "$match"; done
return 0
fi

for match in $matches; do
case "$match" in
-*) compadd $optexpl[@] -- $match ;;
*) compadd $argexpl[@] $match ;;
esac
done

# some commands take files/directories too
case "$command" in
install)
# include *.snap files
_path_files -g "*.snap"
;;
try)
# limit matches to directories
# TODO: only match directories with meta/snap.yaml inside
_path_files -/
;;
ack)
# there are no rules about assertion file names
_files
;;
esac
12 changes: 8 additions & 4 deletions packaging/arch/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
pkgname=snapd
pkgdesc="Service and tools for management of snap packages."
depends=('squashfs-tools' 'libseccomp' 'libsystemd')
optdepends=('bash-completion: bash completion support')
optdepends=('bash-completion: bash completion support'
'zsh: zsh completion support')
pkgver=2.44.5
pkgrel=1
arch=('x86_64')
Expand Down Expand Up @@ -119,12 +120,15 @@ package() {
export GOPATH="$srcdir/go"

# Install bash completion
install -Dm644 data/completion/snap \
install -Dm644 data/completion/bash/snap \
"$pkgdir/usr/share/bash-completion/completions/snap"
install -Dm644 data/completion/complete.sh \
install -Dm644 data/completion/bash/complete.sh \
"$pkgdir/usr/lib/snapd/complete.sh"
install -Dm644 data/completion/etelpmoc.sh \
install -Dm644 data/completion/bash/etelpmoc.sh \
"$pkgdir/usr/lib/snapd/etelpmoc.sh"
# Install zsh completion
install -Dm644 data/completion/zsh/_snap \
"$pkgdir/usr/share/zsh/site-functions/_snap"

# Install systemd units, dbus services and a script for environment variables
make -C data/ install \
Expand Down
8 changes: 5 additions & 3 deletions packaging/debian-sid/snapd.install
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/

# bash completion
data/completion/snap /usr/share/bash-completion/completions
data/completion/complete.sh /usr/lib/snapd/
data/completion/etelpmoc.sh /usr/lib/snapd/
data/completion/bash/snap /usr/share/bash-completion/completions
data/completion/bash/complete.sh /usr/lib/snapd/
data/completion/bash/etelpmoc.sh /usr/lib/snapd/
# zsh completion
data/completion/zsh/_snap /usr/share/zsh/vendor-completions
# snap/snapd version information
data/info /usr/lib/snapd/
# polkit actions
Expand Down
13 changes: 10 additions & 3 deletions packaging/fedora/snapd.spec
Original file line number Diff line number Diff line change
Expand Up @@ -602,9 +602,12 @@ bin/snap help --man > %{buildroot}%{_mandir}/man8/snap.8
install -m 644 -D data/info %{buildroot}%{_libexecdir}/snapd/info

# Install bash completion for "snap"
install -m 644 -D data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
install -m 644 -D data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D data/completion/bash/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
install -m 644 -D data/completion/bash/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D data/completion/bash/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
# Install zsh completion for "snap"
install -d -p %{buildroot}%{_datadir}/zsh/site-functions
install -m 644 -D data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap

# Install snap-confine
pushd ./cmd
Expand Down Expand Up @@ -740,6 +743,7 @@ popd
%{_datadir}/bash-completion/completions/snap
%{_libexecdir}/snapd/complete.sh
%{_libexecdir}/snapd/etelpmoc.sh
%{_datadir}/zsh/site-functions/_snap
%{_libexecdir}/snapd/snapd.run-from-snap
%{_sysconfdir}/profile.d/snapd.sh
%{_sysconfdir}/sudoers.d/99-snapd.conf
Expand Down Expand Up @@ -782,6 +786,9 @@ popd
%if %{with snap_symlink}
/snap
%endif
# this is typically owned by zsh, but we do not want to explicitly require zsh
%dir %{_datadir}/zsh
%dir %{_datadir}/zsh/site-functions

%files -n snap-confine
%doc cmd/snap-confine/PORTING
Expand Down
13 changes: 10 additions & 3 deletions packaging/opensuse/snapd.spec
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,12 @@ install -m 644 -D %{indigo_srcdir}/data/info %{buildroot}%{_libexecdir}/snapd/in

# Install bash completion for "snap"
# TODO: This should be handled by data makefile.
install -m 644 -D %{indigo_srcdir}/data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
install -m 644 -D %{indigo_srcdir}/data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D %{indigo_srcdir}/data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D %{indigo_srcdir}/data/completion/bash/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
install -m 644 -D %{indigo_srcdir}/data/completion/bash/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D %{indigo_srcdir}/data/completion/bash/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
# Install zsh completion for "snap"
install -d -p %{buildroot}%{_datadir}/zsh/site-functions
install -m 644 -D %{indigo_srcdir}/data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap

%verifyscript
%verify_permissions -e %{_libexecdir}/snapd/snap-confine
Expand Down Expand Up @@ -374,6 +377,9 @@ fi
%dir %{_userunitdir}
%dir %{snap_mount_dir}
%dir %{snap_mount_dir}/bin
# this is typically owned by zsh, but we do not want to explicitly require zsh
%dir %{_datadir}/zsh
%dir %{_datadir}/zsh/site-functions

# Ghost entries for things created at runtime
%ghost %dir %{_localstatedir}/snap
Expand All @@ -389,6 +395,7 @@ fi
%{_bindir}/snapctl
%{_datadir}/applications/snap-handle-link.desktop
%{_datadir}/bash-completion/completions/snap
%{_datadir}/zsh/site-functions/_snap
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/dbus-1/services/io.snapcraft.Settings.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
Expand Down
8 changes: 5 additions & 3 deletions packaging/ubuntu-14.04/snapd.install
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ usr/bin/snap-seccomp /usr/lib/snapd/
usr/bin/snap-preseed /usr/lib/snapd/

# bash completion
data/completion/snap /usr/share/bash-completion/completions
data/completion/complete.sh /usr/lib/snapd/
data/completion/etelpmoc.sh /usr/lib/snapd/
data/completion/bash/snap /usr/share/bash-completion/completions
data/completion/bash/complete.sh /usr/lib/snapd/
data/completion/bash/etelpmoc.sh /usr/lib/snapd/
# zsh completion
data/completion/zsh/_snap /usr/share/zsh/vendor-completions
# udev, must be installed before 80-udisks
data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
# snap/snapd version information
Expand Down
8 changes: 5 additions & 3 deletions packaging/ubuntu-16.04/snapd.install
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ usr/bin/snap-preseed /usr/lib/snapd/
usr/bin/snap-recovery-chooser /usr/lib/snapd/

# bash completion
data/completion/snap /usr/share/bash-completion/completions
data/completion/complete.sh /usr/lib/snapd/
data/completion/etelpmoc.sh /usr/lib/snapd/
data/completion/bash/snap /usr/share/bash-completion/completions
data/completion/bash/complete.sh /usr/lib/snapd/
data/completion/bash/etelpmoc.sh /usr/lib/snapd/
# zsh completion
data/completion/zsh/_snap /usr/share/zsh/vendor-completions
# udev, must be installed before 80-udisks
data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
# snap/snapd version information
Expand Down

0 comments on commit 33625e2

Please sign in to comment.