From 2eee3a3a05dc9246bc9ade54ef853ab1428c5f90 Mon Sep 17 00:00:00 2001 Message-Id: <2eee3a3a05dc9246bc9ade54ef853ab1428c5f90.1589807334.git.maciej.zenon.borzecki@canonical.com> In-Reply-To: References: From: Maciej Borzecki Date: Wed, 29 Apr 2020 21:04:40 +0200 Subject: [PATCH 1/4] data/completion: add completion for zsh Add completion function for snap command for zsh. Most of heavy lifting is done by go-flags and our completion helpers, this just glues everything together. Signed-off-by: Maciej Borzecki --- data/completion/_snap | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 data/completion/_snap diff --git a/data/completion/_snap b/data/completion/_snap new file mode 100644 index 0000000000000000000000000000000000000000..682ee0f089e0c0e2df02843029a6bcb1f5353946 --- /dev/null +++ b/data/completion/_snap @@ -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 . + +# 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 -- 2.26.2 From 0b47c2d040ac99ddd8e2912090a63ad57e9a1658 Mon Sep 17 00:00:00 2001 Message-Id: <0b47c2d040ac99ddd8e2912090a63ad57e9a1658.1589807334.git.maciej.zenon.borzecki@canonical.com> In-Reply-To: References: From: Maciej Borzecki Date: Wed, 29 Apr 2020 21:06:04 +0200 Subject: [PATCH 2/4] packaging: install zsh completion files Signed-off-by: Maciej Borzecki --- packaging/arch/PKGBUILD | 3 +++ packaging/debian-sid/snapd.install | 2 ++ packaging/fedora/snapd.spec | 7 +++++++ packaging/opensuse/snapd.spec | 7 +++++++ packaging/ubuntu-14.04/snapd.install | 2 ++ packaging/ubuntu-16.04/snapd.install | 2 ++ 6 files changed, 23 insertions(+) diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index e37ec70eb2b00b618219eb1efadd63b0e12ea322..4e2de2b33870412233bfa997f234cdf29e95ff79 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -125,6 +125,9 @@ package() { "$pkgdir/usr/lib/snapd/complete.sh" install -Dm644 data/completion/etelpmoc.sh \ "$pkgdir/usr/lib/snapd/etelpmoc.sh" + # Install zsh completion + install -Dm644 data/completion/_snap \ + "$pkgdir/usr/share/zsh/site-functions/_snap" # Install systemd units, dbus services and a script for environment variables make -C data/ install \ diff --git a/packaging/debian-sid/snapd.install b/packaging/debian-sid/snapd.install index 2ec10a240424cded2606dbafb474d3adceda1cd7..1d79725212498dbf38a46a7fc9bc01d7c237d4d7 100644 --- a/packaging/debian-sid/snapd.install +++ b/packaging/debian-sid/snapd.install @@ -10,6 +10,8 @@ usr/bin/snap-seccomp /usr/lib/snapd/ data/completion/snap /usr/share/bash-completion/completions data/completion/complete.sh /usr/lib/snapd/ data/completion/etelpmoc.sh /usr/lib/snapd/ +# zsh completion +data/completion/_snap /usr/share/zsh/vendor-completions # snap/snapd version information data/info /usr/lib/snapd/ # polkit actions diff --git a/packaging/fedora/snapd.spec b/packaging/fedora/snapd.spec index afbfaf9d36c2e187f780fecca9351ff8f61bd90a..5fe6dd0ff5b373e89200b9a76a018ae7a4e533bd 100644 --- a/packaging/fedora/snapd.spec +++ b/packaging/fedora/snapd.spec @@ -605,6 +605,9 @@ install -m 644 -D data/info %{buildroot}%{_libexecdir}/snapd/info 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 zsh completion for "snap" +install -d -p %{buildroot}%{_datadir}/zsh/site-functions +install -m 644 -D data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap # Install snap-confine pushd ./cmd @@ -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 @@ -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 diff --git a/packaging/opensuse/snapd.spec b/packaging/opensuse/snapd.spec index b4b87e72f4798c660003d5727bdd4d3ab5a7a364..30e4db867e10817f5e89ac4938340038985fcd88 100644 --- a/packaging/opensuse/snapd.spec +++ b/packaging/opensuse/snapd.spec @@ -297,6 +297,9 @@ install -m 644 -D %{indigo_srcdir}/data/info %{buildroot}%{_libexecdir}/snapd/in 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 zsh completion for "snap" +install -d -p %{buildroot}%{_datadir}/zsh/site-functions +install -m 644 -D %{indigo_srcdir}/data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap %verifyscript %verify_permissions -e %{_libexecdir}/snapd/snap-confine @@ -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 @@ -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 diff --git a/packaging/ubuntu-14.04/snapd.install b/packaging/ubuntu-14.04/snapd.install index a8e78dd8945411858e074327f692f9113f547562..dafd61b3478bad48da266fd88ab3f942f401aaee 100644 --- a/packaging/ubuntu-14.04/snapd.install +++ b/packaging/ubuntu-14.04/snapd.install @@ -13,6 +13,8 @@ usr/bin/snap-preseed /usr/lib/snapd/ data/completion/snap /usr/share/bash-completion/completions data/completion/complete.sh /usr/lib/snapd/ data/completion/etelpmoc.sh /usr/lib/snapd/ +# zsh completion +data/completion/_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 diff --git a/packaging/ubuntu-16.04/snapd.install b/packaging/ubuntu-16.04/snapd.install index 98f9343f089a4a0865de7087d95e2cb1af792f91..20815f31b20f1c8e811bccbd9dfc99d3f7ad0d2f 100644 --- a/packaging/ubuntu-16.04/snapd.install +++ b/packaging/ubuntu-16.04/snapd.install @@ -15,6 +15,8 @@ usr/bin/snap-recovery-chooser /usr/lib/snapd/ data/completion/snap /usr/share/bash-completion/completions data/completion/complete.sh /usr/lib/snapd/ data/completion/etelpmoc.sh /usr/lib/snapd/ +# zsh completion +data/completion/_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 -- 2.26.2 From 204b3ecc6d2c040c236399a222b393641572ce44 Mon Sep 17 00:00:00 2001 Message-Id: <204b3ecc6d2c040c236399a222b393641572ce44.1589807334.git.maciej.zenon.borzecki@canonical.com> In-Reply-To: References: From: Maciej Borzecki Date: Tue, 5 May 2020 09:45:46 +0200 Subject: [PATCH 3/4] data: move bash/zsh completion support to separate directories Signed-off-by: Maciej Borzecki --- data/completion/{ => bash}/complete.sh | 0 data/completion/{ => bash}/etelpmoc.sh | 0 data/completion/{ => bash}/snap | 0 data/completion/{ => zsh}/_snap | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename data/completion/{ => bash}/complete.sh (100%) rename data/completion/{ => bash}/etelpmoc.sh (100%) rename data/completion/{ => bash}/snap (100%) rename data/completion/{ => zsh}/_snap (100%) diff --git a/data/completion/complete.sh b/data/completion/bash/complete.sh similarity index 100% rename from data/completion/complete.sh rename to data/completion/bash/complete.sh diff --git a/data/completion/etelpmoc.sh b/data/completion/bash/etelpmoc.sh similarity index 100% rename from data/completion/etelpmoc.sh rename to data/completion/bash/etelpmoc.sh diff --git a/data/completion/snap b/data/completion/bash/snap similarity index 100% rename from data/completion/snap rename to data/completion/bash/snap diff --git a/data/completion/_snap b/data/completion/zsh/_snap similarity index 100% rename from data/completion/_snap rename to data/completion/zsh/_snap -- 2.26.2 From 5545181ef2b0aa0cce1bfeeb6c8d327a01cd83f1 Mon Sep 17 00:00:00 2001 Message-Id: <5545181ef2b0aa0cce1bfeeb6c8d327a01cd83f1.1589807334.git.maciej.zenon.borzecki@canonical.com> In-Reply-To: References: From: Maciej Borzecki Date: Tue, 5 May 2020 09:46:08 +0200 Subject: [PATCH 4/4] packaging: update completion support locations Signed-off-by: Maciej Borzecki --- packaging/arch/PKGBUILD | 8 ++++---- packaging/debian-sid/snapd.install | 8 ++++---- packaging/fedora/snapd.spec | 8 ++++---- packaging/opensuse/snapd.spec | 8 ++++---- packaging/ubuntu-14.04/snapd.install | 8 ++++---- packaging/ubuntu-16.04/snapd.install | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index 4e2de2b33870412233bfa997f234cdf29e95ff79..91c7067942c4259be498996b99d9a7b77e568a12 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -119,14 +119,14 @@ 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/_snap \ + install -Dm644 data/completion/zsh/_snap \ "$pkgdir/usr/share/zsh/site-functions/_snap" # Install systemd units, dbus services and a script for environment variables diff --git a/packaging/debian-sid/snapd.install b/packaging/debian-sid/snapd.install index 1d79725212498dbf38a46a7fc9bc01d7c237d4d7..3afdd39fec57ebc9cc7ba8616e4fa2e2e3c3cf35 100644 --- a/packaging/debian-sid/snapd.install +++ b/packaging/debian-sid/snapd.install @@ -7,11 +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/_snap /usr/share/zsh/vendor-completions +data/completion/zsh/_snap /usr/share/zsh/vendor-completions # snap/snapd version information data/info /usr/lib/snapd/ # polkit actions diff --git a/packaging/fedora/snapd.spec b/packaging/fedora/snapd.spec index 5fe6dd0ff5b373e89200b9a76a018ae7a4e533bd..190c8da62bf8786b147c0c48617c259c97c72845 100644 --- a/packaging/fedora/snapd.spec +++ b/packaging/fedora/snapd.spec @@ -602,12 +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/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap +install -m 644 -D data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap # Install snap-confine pushd ./cmd diff --git a/packaging/opensuse/snapd.spec b/packaging/opensuse/snapd.spec index 30e4db867e10817f5e89ac4938340038985fcd88..7cf2ea76b43e3755349fbc74a75aa461d9f94c96 100644 --- a/packaging/opensuse/snapd.spec +++ b/packaging/opensuse/snapd.spec @@ -294,12 +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/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap +install -m 644 -D %{indigo_srcdir}/data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap %verifyscript %verify_permissions -e %{_libexecdir}/snapd/snap-confine diff --git a/packaging/ubuntu-14.04/snapd.install b/packaging/ubuntu-14.04/snapd.install index dafd61b3478bad48da266fd88ab3f942f401aaee..855650c06354675a7253253010c4ced366eb51cb 100644 --- a/packaging/ubuntu-14.04/snapd.install +++ b/packaging/ubuntu-14.04/snapd.install @@ -10,11 +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/_snap /usr/share/zsh/vendor-completions +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 diff --git a/packaging/ubuntu-16.04/snapd.install b/packaging/ubuntu-16.04/snapd.install index 20815f31b20f1c8e811bccbd9dfc99d3f7ad0d2f..9c80c2da4d8af451514ad43b4112018f40662371 100644 --- a/packaging/ubuntu-16.04/snapd.install +++ b/packaging/ubuntu-16.04/snapd.install @@ -12,11 +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/_snap /usr/share/zsh/vendor-completions +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 -- 2.26.2