FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 04-16-2012, 01:02 AM
Dave Reisner
 
Default patch to add zsh completion to pacman-key

On Sun, Apr 15, 2012 at 01:16:43PM -0400, Daniel Wallace wrote:
> this patch adds a _pacman_key function to the _pacman zsh site function
> so that zsh users can have completion for pacman-key <keyids> and other
> files which may be used with pacman-key
>
> Signed-off-by: Daniel Wallace <daniel.wallace@gatech.edu>
> ---

I don't know ZSH completion at all, but I gave this a test run and it
seems to work. I only have one comment, which I've left inline...

> contrib/zsh_completion.in | 58 +++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 54 insertions(+), 4 deletions(-)
>
> diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
> index b30e960..73ce42f 100644
> --- a/contrib/zsh_completion.in
> +++ b/contrib/zsh_completion.in
> @@ -1,4 +1,4 @@
> -#compdef pacman pacman.static=pacman
> +#compdef pacman pacman.static=pacman pacman-key
>
> # copy this file to /usr/share/zsh/site-functions/_pacman
>
> @@ -286,7 +286,7 @@ _pacman_get_command() {
> }
>
> # main dispatcher
> -_pacman() {
> +_pacman_zsh_comp() {
> case $words[2] in
> -Q*g*) # ipkg groups
> _arguments -s :
> @@ -332,5 +332,55 @@ _pacman() {
> esac
> }
>
> -# run the main dispatcher
> -_pacman "$@"
> +_pacman_key() {
> + _arguments
> + '(- '{-h,--help}"[show help]"
> + '(-a --add)*'{-a,--add}"[Add the specified keys (empty for stdin)]: :_files"
> + '(-d --delete)*'{-d,--delete}"[Remove the Specified keyids]: :_keys"
> + '(-e --export)*'{-e,--export}"[Export the specified or all keyids]: :_keys"
> + '(-f --finger)*'{-f,--finger}"[List fingreprint for specidied or all keyids]: :_keys"
> + '(-l --list-keys)*'{-l,--list-keys}"[List the specified or all keys]: :_keys"
> + '(-r --recv-keys)*'{-r,--recv-keys}"[Fetch the specified keyids]: :_keys"
> + '(-u --updatedb)*'{-u,--updatedb}"[Update the trustdb of pacman]"
> + '(-v --verify)*'{-v,--verify}"[Verify the file specified by the signature]: :_files -g '*.sig'"
> + '(-V --version)*'{-V,--version}"[Show program version]"
> + '(--config)*'{*,--config}"[Use an alternate config file]: :_files"
> + '(--edit-key)*'{*,--edit-key}"[Present a menu for key management task on keyids]: :_keys"
> + '(--gpgdir)*'{*,--gpgdir}"[Set an alternate directory for GnuPG (instead of '/etc/pacman.d/gnupg')]: :_files -/"
> + '(--import)*'{*,--import}"[Imports pubring.gpg from dir(s)]: :_files -g '*.gpg'"
> + '(--import-trustdb)*'{*,--import-tb}"[Imports ownertrust values from trustdb.gpg in dir(s)]: :_files -g '*.gpg'"
> + '(--init)*'{*,--init}"[Ensure the keyring is properly initialized]"
> + '(--keyserver)*'{*,--keyserver}"[Specify a keyserver to use if necessary]"
> + '(--list-sigs)*'{*,--list-sigs}"[List keys and their signatures]: :_keys"
> + '(--lsign-key)*'{*,--lsign-key}"[Locally sign the specified keyid]: :_keys"
> + '(--populate)*'{*,--populate}"[Reload the default keys from the (given) keyrings in '/usr/share/pacman/keyrings']: :_path_files -W /usr/share/pacman/keyrings"
> + '(--refresh-keys)*'{*,--refresh-keys}"[Update specified or all keys from a keyserver]: :_keys"
> +}
> +
> +_keys() {
> + local keys
> + #uses the first < to the end and remove first > to the end to get all the emails
> + #the using the first / to end then remove first ' ' to the end this gets all the keyids (pub and sub)
> + #the ##uid* removes all the .jpeg pictures with ids, and ##pubbring.gpg removes the beginning line that lists
> + #where stuff is stored, ##--* removes the line of dashes at the beginning, but doesn't remove email addresses
> + #with dashes in them
> + keys=( ${${${${${${${${${(f)"$(pacman-key --list-keys 2>/dev/null)"}}##*<}%%>}##*/}%% *}##uid*}##pubring.gpg}##--*} )

I realize that the goal here is to avoid forking, but this is unreadable. Using
awk, I can cook up the below which should accomplish the same and seems
infinitely more maintainable.

pacman-key --list-keys 2>/dev/null | awk '
$1 == "pub" {
# key id
split($2, a, "/"); print a[2]
}
$1 == "uid" {
# email
l = len($NF)
print substr($NF, 2, l - 2)
}
'

> + _describe -t modules 'keys in keyring' keys && return 0
> +}
> +
> +_pacman_comp() {
> + case "$service" in
> + pacman-key)
> + _pacman_key "$@";;
> + pacman)
> + _pacman_zsh_comp "$@";;
> + *)
> + _message "Error";;
> + esac
> +}
> +
> +_pacman_comp "$@"
> +
> +
> +
> +# vim: ft=zsh sw=2 ts=2 et
> --
> 1.7.10
>
>
 
Old 04-16-2012, 01:05 AM
Dave Reisner
 
Default patch to add zsh completion to pacman-key

On Sun, Apr 15, 2012 at 09:02:05PM -0400, Dave Reisner wrote:
> On Sun, Apr 15, 2012 at 01:16:43PM -0400, Daniel Wallace wrote:
> > this patch adds a _pacman_key function to the _pacman zsh site function
> > so that zsh users can have completion for pacman-key <keyids> and other
> > files which may be used with pacman-key
> >
> > Signed-off-by: Daniel Wallace <daniel.wallace@gatech.edu>
> > ---
>
> I don't know ZSH completion at all, but I gave this a test run and it
> seems to work. I only have one comment, which I've left inline...
>

Yay, replying to myself... if we're going to be merging my parseopts
branch, this greatly changes option parsing semantics for pacman-key.
I only tested this against 4.0.3, but I suspect it does a lot of things
wrong against that branch...

> > contrib/zsh_completion.in | 58 +++++++++++++++++++++++++++++++++++++++++----
> > 1 file changed, 54 insertions(+), 4 deletions(-)
> >
> > diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
> > index b30e960..73ce42f 100644
> > --- a/contrib/zsh_completion.in
> > +++ b/contrib/zsh_completion.in
> > @@ -1,4 +1,4 @@
> > -#compdef pacman pacman.static=pacman
> > +#compdef pacman pacman.static=pacman pacman-key
> >
> > # copy this file to /usr/share/zsh/site-functions/_pacman
> >
> > @@ -286,7 +286,7 @@ _pacman_get_command() {
> > }
> >
> > # main dispatcher
> > -_pacman() {
> > +_pacman_zsh_comp() {
> > case $words[2] in
> > -Q*g*) # ipkg groups
> > _arguments -s :
> > @@ -332,5 +332,55 @@ _pacman() {
> > esac
> > }
> >
> > -# run the main dispatcher
> > -_pacman "$@"
> > +_pacman_key() {
> > + _arguments
> > + '(- '{-h,--help}"[show help]"
> > + '(-a --add)*'{-a,--add}"[Add the specified keys (empty for stdin)]: :_files"
> > + '(-d --delete)*'{-d,--delete}"[Remove the Specified keyids]: :_keys"
> > + '(-e --export)*'{-e,--export}"[Export the specified or all keyids]: :_keys"
> > + '(-f --finger)*'{-f,--finger}"[List fingreprint for specidied or all keyids]: :_keys"
> > + '(-l --list-keys)*'{-l,--list-keys}"[List the specified or all keys]: :_keys"
> > + '(-r --recv-keys)*'{-r,--recv-keys}"[Fetch the specified keyids]: :_keys"
> > + '(-u --updatedb)*'{-u,--updatedb}"[Update the trustdb of pacman]"
> > + '(-v --verify)*'{-v,--verify}"[Verify the file specified by the signature]: :_files -g '*.sig'"
> > + '(-V --version)*'{-V,--version}"[Show program version]"
> > + '(--config)*'{*,--config}"[Use an alternate config file]: :_files"
> > + '(--edit-key)*'{*,--edit-key}"[Present a menu for key management task on keyids]: :_keys"
> > + '(--gpgdir)*'{*,--gpgdir}"[Set an alternate directory for GnuPG (instead of '/etc/pacman.d/gnupg')]: :_files -/"
> > + '(--import)*'{*,--import}"[Imports pubring.gpg from dir(s)]: :_files -g '*.gpg'"
> > + '(--import-trustdb)*'{*,--import-tb}"[Imports ownertrust values from trustdb.gpg in dir(s)]: :_files -g '*.gpg'"
> > + '(--init)*'{*,--init}"[Ensure the keyring is properly initialized]"
> > + '(--keyserver)*'{*,--keyserver}"[Specify a keyserver to use if necessary]"
> > + '(--list-sigs)*'{*,--list-sigs}"[List keys and their signatures]: :_keys"
> > + '(--lsign-key)*'{*,--lsign-key}"[Locally sign the specified keyid]: :_keys"
> > + '(--populate)*'{*,--populate}"[Reload the default keys from the (given) keyrings in '/usr/share/pacman/keyrings']: :_path_files -W /usr/share/pacman/keyrings"
> > + '(--refresh-keys)*'{*,--refresh-keys}"[Update specified or all keys from a keyserver]: :_keys"
> > +}
> > +
> > +_keys() {
> > + local keys
> > + #uses the first < to the end and remove first > to the end to get all the emails
> > + #the using the first / to end then remove first ' ' to the end this gets all the keyids (pub and sub)
> > + #the ##uid* removes all the .jpeg pictures with ids, and ##pubbring.gpg removes the beginning line that lists
> > + #where stuff is stored, ##--* removes the line of dashes at the beginning, but doesn't remove email addresses
> > + #with dashes in them
> > + keys=( ${${${${${${${${${(f)"$(pacman-key --list-keys 2>/dev/null)"}}##*<}%%>}##*/}%% *}##uid*}##pubring.gpg}##--*} )
>
> I realize that the goal here is to avoid forking, but this is unreadable. Using
> awk, I can cook up the below which should accomplish the same and seems
> infinitely more maintainable.
>
> pacman-key --list-keys 2>/dev/null | awk '
> $1 == "pub" {
> # key id
> split($2, a, "/"); print a[2]
> }
> $1 == "uid" {
> # email
> l = len($NF)
> print substr($NF, 2, l - 2)
> }
> '
>
> > + _describe -t modules 'keys in keyring' keys && return 0
> > +}
> > +
> > +_pacman_comp() {
> > + case "$service" in
> > + pacman-key)
> > + _pacman_key "$@";;
> > + pacman)
> > + _pacman_zsh_comp "$@";;
> > + *)
> > + _message "Error";;
> > + esac
> > +}
> > +
> > +_pacman_comp "$@"
> > +
> > +
> > +
> > +# vim: ft=zsh sw=2 ts=2 et
> > --
> > 1.7.10
> >
> >
 
Old 04-16-2012, 03:07 AM
Daniel Wallace
 
Default patch to add zsh completion to pacman-key

I was told to only use zsh for zsh completion, However if it is ok to
use awk instead, I can use that.
Also about parse opts I can remove the : :_files or : :_keys for
anything that does not allow for arguments in the parseopts branch,
whenever it is merged.


On Sun, Apr 15, 2012 at 09:02:05PM -0400, Dave Reisner wrote:
> On Sun, Apr 15, 2012 at 01:16:43PM -0400, Daniel Wallace wrote:
> > this patch adds a _pacman_key function to the _pacman zsh site function
> > so that zsh users can have completion for pacman-key <keyids> and other
> > files which may be used with pacman-key
> >
> > Signed-off-by: Daniel Wallace <daniel.wallace@gatech.edu>
> > ---
>
> I don't know ZSH completion at all, but I gave this a test run and it
> seems to work. I only have one comment, which I've left inline...
>
> > contrib/zsh_completion.in | 58 +++++++++++++++++++++++++++++++++++++++++----
> > 1 file changed, 54 insertions(+), 4 deletions(-)
> >
> > diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
> > index b30e960..73ce42f 100644
> > --- a/contrib/zsh_completion.in
> > +++ b/contrib/zsh_completion.in
> > @@ -1,4 +1,4 @@
> > -#compdef pacman pacman.static=pacman
> > +#compdef pacman pacman.static=pacman pacman-key
> >
> > # copy this file to /usr/share/zsh/site-functions/_pacman
> >
> > @@ -286,7 +286,7 @@ _pacman_get_command() {
> > }
> >
> > # main dispatcher
> > -_pacman() {
> > +_pacman_zsh_comp() {
> > case $words[2] in
> > -Q*g*) # ipkg groups
> > _arguments -s :
> > @@ -332,5 +332,55 @@ _pacman() {
> > esac
> > }
> >
> > -# run the main dispatcher
> > -_pacman "$@"
> > +_pacman_key() {
> > + _arguments
> > + '(- '{-h,--help}"[show help]"
> > + '(-a --add)*'{-a,--add}"[Add the specified keys (empty for stdin)]: :_files"
> > + '(-d --delete)*'{-d,--delete}"[Remove the Specified keyids]: :_keys"
> > + '(-e --export)*'{-e,--export}"[Export the specified or all keyids]: :_keys"
> > + '(-f --finger)*'{-f,--finger}"[List fingreprint for specidied or all keyids]: :_keys"
> > + '(-l --list-keys)*'{-l,--list-keys}"[List the specified or all keys]: :_keys"
> > + '(-r --recv-keys)*'{-r,--recv-keys}"[Fetch the specified keyids]: :_keys"
> > + '(-u --updatedb)*'{-u,--updatedb}"[Update the trustdb of pacman]"
> > + '(-v --verify)*'{-v,--verify}"[Verify the file specified by the signature]: :_files -g '*.sig'"
> > + '(-V --version)*'{-V,--version}"[Show program version]"
> > + '(--config)*'{*,--config}"[Use an alternate config file]: :_files"
> > + '(--edit-key)*'{*,--edit-key}"[Present a menu for key management task on keyids]: :_keys"
> > + '(--gpgdir)*'{*,--gpgdir}"[Set an alternate directory for GnuPG (instead of '/etc/pacman.d/gnupg')]: :_files -/"
> > + '(--import)*'{*,--import}"[Imports pubring.gpg from dir(s)]: :_files -g '*.gpg'"
> > + '(--import-trustdb)*'{*,--import-tb}"[Imports ownertrust values from trustdb.gpg in dir(s)]: :_files -g '*.gpg'"
> > + '(--init)*'{*,--init}"[Ensure the keyring is properly initialized]"
> > + '(--keyserver)*'{*,--keyserver}"[Specify a keyserver to use if necessary]"
> > + '(--list-sigs)*'{*,--list-sigs}"[List keys and their signatures]: :_keys"
> > + '(--lsign-key)*'{*,--lsign-key}"[Locally sign the specified keyid]: :_keys"
> > + '(--populate)*'{*,--populate}"[Reload the default keys from the (given) keyrings in '/usr/share/pacman/keyrings']: :_path_files -W /usr/share/pacman/keyrings"
> > + '(--refresh-keys)*'{*,--refresh-keys}"[Update specified or all keys from a keyserver]: :_keys"
> > +}
> > +
> > +_keys() {
> > + local keys
> > + #uses the first < to the end and remove first > to the end to get all the emails
> > + #the using the first / to end then remove first ' ' to the end this gets all the keyids (pub and sub)
> > + #the ##uid* removes all the .jpeg pictures with ids, and ##pubbring.gpg removes the beginning line that lists
> > + #where stuff is stored, ##--* removes the line of dashes at the beginning, but doesn't remove email addresses
> > + #with dashes in them
> > + keys=( ${${${${${${${${${(f)"$(pacman-key --list-keys 2>/dev/null)"}}##*<}%%>}##*/}%% *}##uid*}##pubring.gpg}##--*} )
>
> I realize that the goal here is to avoid forking, but this is unreadable. Using
> awk, I can cook up the below which should accomplish the same and seems
> infinitely more maintainable.
>
> pacman-key --list-keys 2>/dev/null | awk '
> $1 == "pub" {
> # key id
> split($2, a, "/"); print a[2]
> }
> $1 == "uid" {
> # email
> l = len($NF)
> print substr($NF, 2, l - 2)
> }
> '
>
> > + _describe -t modules 'keys in keyring' keys && return 0
> > +}
> > +
> > +_pacman_comp() {
> > + case "$service" in
> > + pacman-key)
> > + _pacman_key "$@";;
> > + pacman)
> > + _pacman_zsh_comp "$@";;
> > + *)
> > + _message "Error";;
> > + esac
> > +}
> > +
> > +_pacman_comp "$@"
> > +
> > +
> > +
> > +# vim: ft=zsh sw=2 ts=2 et
> > --
> > 1.7.10
> >
> >
>
 

Thread Tools




All times are GMT. The time now is 09:32 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org