# [PALUDIS+ZSH] Completions

## Bapt

EDIT : intégré depuis la version 0.14 de paludis use zsh-completion

UPDATE : n'utilisant pas la version svn de paludis donc les fonction de completion sont en retard par rapport au nouvelles fonctionnalité, voici donc un patch pour avoir les options apparues entre la 0.12 et la 0.14.2 : http://baptux.free.fr/_paludis-0.14.2.patch

Pour l'appliquer : 

```

cd /usr/share/zsh/site-functions/

patch -p0 < chemin_vers_/_paludis-0.14.2.patch

```

Paludis fourni des fonctions de completions pour bash avec le use flash bash-completion, mais rien pour ZSH. 

De plus en essayant les fonctions de completion bash, elles ne sont pas terrible, en effet toutes les options sont offertes à tous les niveaux, même si on a déjà mis des options incompatibles avec celles offertes.

J'ai donc pris mon plus beau vim et ai fait des fonctions de completions zsh pour paludis sur le même modèle que celles que j'avais déjà fait pour portage il y a longtemps.

C'est pas parfait, mais toutes les options sont dispo et je trouve le comportement/fonctionnalité plus évolué que celle pour bash.

attention au copier coller, j'ai mis une version à dl : _paludis

_paludis_packages

Procédure à suivre : 

copier dans /usr/share/zsh/site_functions/_paludis_packages : 

```
#autoload

#Author: Bapt <baptux@free.fr>

# function for paludis packages

# Usage _paludis_packages installed|available|repositories|categories|sets

local flags prepo packages categories

_paludis_packages_update_available(){

  categories=(${${(M)${(f)"$(paludis --list-categories)"}:#\* *}##\* })

  if [[ $PREFIX != */* ]];then

    _wanted cat_packages expl "category/packages" compadd -S "/" $categories

  else

  compset -P '*/'

# packages=(${${(M)${(f)"$(paludis --category ${PREFIX//\//} --list-packages)"}:#\* *}##\* })

  packages=(${${${(M)${(f)"$(paludis --category ${IPREFIX//\//} --list-packages)"}:#\* *}##\* }//$IPREFIX/})

  _wanted cat_packages expl "category/packages" compadd ${(@)packages}

  fi

}

_paludis_packages_update_installed(){

  packages=(${${(M)${(f)"$(paludis --repository installed --list-packages)"}:#\* *}##\* })

  compadd ${(@)packages}

}

_paludis_packages_update_categories(){

  packages=(${${${(M)${(f)"$(paludis --list-categories)"}:#\* *}##\* }:#*(virtual|installed)*})

  compadd ${(@)packages}

}

_paludis_packages_update_repositories(){

  packages=(${${${(M)${(f)"$(paludis --list-repositories)"}:#\* *}##\* }:#*(virtual|installed)*})

  compadd ${(@)packages}

}

_paludis_packages_update_sets(){

  packages=(${${${(M)${(f)"$(paludis --list-sets)"}:#\* *}##\* }:#*(virtual|installed)*})

  compadd ${(@)packages}

}

_paludis_packages(){

  local command="$argv[$#]" expl cachevar pkgset update_policy

  zstyle -s ":completion:*:*:$service:*" cache-policy update_policy

  if [[ -z "$update_policy" ]]; then

    zstyle ":completion:*:*:$service:*" cache-policy _paludis_cache_policy

  fi

  [[ "$command" == (installed|available|categories|repositories|sets) ]] || {

    _message "unknown command: $command"

    return

  }

  [[ "$pkgset" ==  (installed|available|categoriesrepositories|sets) ]] || {

    pkgset="$command"

  }

  expl=("${(@)argv[1,-2]}")

    _paludis_packages_update_$pkgset

}

_paludis_cache_policy () {

# rebuild if cache is more than a week old

    oldp=( "$1"(mw+1) )

    (( $#oldp )) && return 0

}

_paludis_packages "$@"

```

et dans /usr/share/zsh/site_functions/_paludis

```

#compdef paludis

_paludis () {

  local actions action_args query_args general_args deplist_args install_uninstall_args list_args lists

  actions=( --query --install -i --uninstall -u --sync -s --report --contents -k --owner -o --version -V --info -I --help -h \

  --has-version  --best-version --environnement-variable --list-repositories --list-categories --list-packages --list-sets --list-sync-protocols --list-repository-formats --list-dep-tag-categories --regenerate-installed-cache  --update-news --regenerate-installable-cache)

  query_args=(

    '(--show-deps -D)'{--show-deps,-D}"[Show dependencies]"

    '(--show-metadata -M)'{--show-metadata,-M}"[Show raw metadata]"

  )

  install_uninstall_args=(

    '(--pretend -p)'{--pretend,-p}"[Pretend only]"

    '(--preserve-world -1)'{--preserve-world,-1}"[Don t modify the world file]"

    '--no-config-protection[Disable config file protection (dangerous)]'

    '--debug-build[What to do with debug information]:Debug Build:(( none\:Discard\ debug\ information split\:Split\ debug\ information internal\:Keep\ debug\ information\ with\ binaries ))'

    '(--fetch -f)'{--fetch,-f}'[Only fetch sources; don t install anything]'

    '--show-install-reasons[Show why packages are being installed]:Verbosity:((none\:Don\ t\ show\ any\ information summary\:Show\ a\ summary full\:Show\ full\ output))'

    '--with-unused-dependencies[Also uninstall any dependencies of the target that are no longer used]'

    '--with-dependencies[Also uninstall packages that depend upon the target]'

  )

  list_args=(

    '--repository[Matches with this repository name only]:repository:_paludis_packages repositories'

    '--category[Matches with this category name only]:category:_paludis_packages category'

    '--package[Matches with this package name only]:package:_paludis_packages available'

    '--set[Matches with this package set name only]:set:_paluldis_packages set'

  )

  lists=(

    '(: -)--list-repositories[List available repositories]'

    '(: -)--list-categories[List available categories]'

    '(: -)--list-packages[List available packages]'

    '(: -)--list-sets[List available package sets]'

    '(: -)--list-sync-protocols[List available sync protocols]'

    '(: -)--list-repository-formats[List available repository formats]'

    '(: -)--list-dep-tag-categories[List known dep tag categories]'

  )

  general_args=(

    '--log-level[Specify the log level]:log level:((debug\:Show\ debug\ output qa\:Show\ QA\ messages\ and\ warnings\ only warning\:Show\ warnings\ only silent\:Suppress\ all\ log\ messages))'

    '(--no-colour --no-color)'{--no-colour,--no-color}"[Do not use colour]"

    '(--config-suffix -c)'{-c,--config-suffix}"[Config directory suffix]"

  )

  action_args=(

    "($actions)"{-q,--query}"[Query for package information]"

    "($actions)"{-i,--install}"[Install one or more packages]"

    "($actions)"{-u,--uninstall}"[Uninstall one or more packages]"

    "(: -)"{--sync,-s}"[Sync all or specified repositories]:repository:_paludis_packages repositories"

    "($actions)--uninstall-unused[Uninstall unused packages]"

    "(: -)"{--report,-r}"[Report the current state of the system]"

    "(: -)"{--contents,-k}"[Display contents of a package]:package:_paludis_packages installed"

    "(: -)"{--owner,-o}"[Display the owner of a file]:File:_files"

    "(: -)"{--version,-V}"[Display program version]"

    "(: -)"{--info,-I}"[Display program version and system information]"

    "(: -)"{--help,-h}"[Display program help]"

    "(: -)--has-version[Check whether the specified atom is installed]:package:_paludis_packages available"

    "(: -)--best-version[Display the best version of the specified atom]:package _paludis_packages available"

    "(: -)--environment-variable[Display the value of an environment variable for a particular package]:package:_paludis_packages available"

    "(: -)--configuration-variable[Display the value of a configuration variable for a particular repository]:_paludis_packages repositories"

    "(: -)--update-news[Regenerate news.unread files]"

    "(: -)--regenerate-installed-cache[Regenerate (non-metadata) cache for installed repositories]"

    "(: -)--regenerate-installable-cache[Regenerate (non-metadata) cache for installable repositories]"

  )

  deplist_args=(

    "--dl-reinstall[When to reinstall packages]:When:(never always if-use-changed)"

    "--dl-reinstall-scm[When to reinstall scm packages]:When:(never always daily weekly)"

    "--dl-upgrade[When to upgrade packages]:When:(always as-needed)"

    "--dl-installed-deps-pre[How to handle pre dependencies for installed packages]:How:(pre pre-or-post post try-post discard)"

    "--dl-installed-deps-runtime[How to handle runtime dependencies for installed packages]:How:(pre pre-or-post post try-post discard)"

    "--dl-installed-deps-post[How to handle post dependencies for installed packages]:How:(pre pre-or-post post try-post discard)"

    "--dl-uninstalled-deps-pre[How to handle pre dependencies for uninstalled packages]:How:(pre pre-or-post post try-post discard)"

    "--dl-uninstalled-deps-post[How to handle post dependencies for uninstalled packages]:How:(pre pre-or-post post try-post discard)"

    "--dl-circular[How to handle circular dependencies]:How:(error discard)"

    "--dl-fall-back[When to fall back to installed packages]:When:(as-needed-except-targets as-needed never)"

  )

  #dispatch

  if (( $words[(I)(--(uninstall)|-[[:alpha:]]#(u)[[:alpha:]]#)] )) ; then

    _arguments -s \

        $general_args[@] $deplist_args[@] $install_uninstall_args[@] \

        "*:installed package:_paludis_packages installed" && return 0

  elif (( $words[(I)--uninstall-unused] )) ; then

      _arguments -s \

        $deplist_args[@] $install_uninstall_args[@] && return 0

  elif (( $words[(I)(--(install)|-[[:alpha:]]#(i)[[:alpha:]]#)] )) ;then

    _arguments -s \

        $general_args[@] $deplist_args[@] $install_uninstall_args[@] \

      "*:available packages:_paludis_packages available" && return 0

  elif (( $words[(I)(--(query)|-[[:alpha:]]#(q)[[:alpha:]]#)] )) ;then

    _arguments -s \

        $general_args[@] $query_args[@]\

      "*:available packages:_paludis_packages available" && return 0

  elif (( $words[(I)--(repository|package|category|set)] ));then

    _arguments \

      $lists[@] && reruen 0

  else

    _arguments -s \

      $general_args[@] $deplist_args[@] $list_args[@] $lists[@] $install_uninstall_args[@] "$action_args[@]" && return 0

  fi

}

_paludis "$@"

```

les noms de fichiers sont importants, en revanche le répertoire dois juste être dans $fpath.

Voila.

paludis -[tab]  :Smile: 

EDIT : J'allais oublié, il y a le support des overlay, car des appels à paludis sont fait pour récupérer tout : catérories, sets, répertoires, packages etc.Last edited by Bapt on Mon Jan 08, 2007 11:25 am; edited 2 times in total

----------

## truc

ouaaaaa, bon sérieu, faut vraiment que j'essaie zsh!!

En plus ça me ferai du bien, quelque chose de nouveau;)

Merci pour ton travail en tout cas!

As tu également fais la completion pour les outils de paludis (qualudis ...)? Non pas que j'en ai besoin, mais si tu l'as fait, ça a des chances de pouvoir integrer l'arbre officiel, non?  :Smile: 

[EDIT] Sérieu ce flag ncurse pour zsh c'est pour quoi??

----------

## Bapt

Le flag ncurses c'est pour utiliser curses-terminfo au lieu de terminfo directement, c'est pour manipuler le terminal je crois. (lecture du configure --help + google  :Smile: ) J'ai toujours installé avec ncurses sans vraiment me poser de question (j'ai plein d'appli ncurses  :Smile: )

EDIT: j'oublie de répondre à la question principale : non je n'ai pas encore fait qualudis, j'attends des retours d'expérience sur paludis et je passerai à qualudis dès que je serai satisfait de paludis, ensuite, je le proposerai à ciaranm.Last edited by Bapt on Thu Dec 21, 2006 6:01 pm; edited 1 time in total

----------

## TrizoLakai

Je vais faire mon gros lourd, mais ça ne fonctionne pas. Une fois que j'ai créé les fichier je doit rajouter qqch à ~/.zshrc ?

----------

## Bapt

 *TrizoLakai wrote:*   

> Je vais faire mon gros lourd, mais ça ne fonctionne pas. Une fois que j'ai créé les fichier je doit rajouter qqch à ~/.zshrc ?

 

J'ai oublié : 

```
compdef -a _paludis paludis
```

et si ça ne fonctionne toujours pas (vérifie eu relog), supprime ton fichier .zcompdump et relog toi, zsh va le recréer.

----------

## TrizoLakai

Ok.

Bon j'ai ça : 

 *Quote:*   

> trizolakai@Athlou site-functions % paludis -
> 
> _arguments:comparguments:208: invalid argument:  
> 
> _paludis:95: command not found: --log-level[Specify the log level]:log level:((debug\:Show\ debug\ output qa\:Show\ QA\ messages\ and\ warnings\ only warning\:Show\ warnings\ only silent\:Suppress\ all\ log\ messages))
> ...

 

----------

## Marsu

moi je vais jouer mon ignorant, mais c'est quoi paludis ?

----------

## TrizoLakai

C'est un remplaçant à portage écris en C++

https://forums.gentoo.org/viewtopic-t-497873-highlight-paludis.html

----------

## Bapt

[quote="TrizoLakai"]Ok.

Bon j'ai ça : 

 *Quote:*   

> trizolakai@Athlou site-functions % paludis -
> 
> _arguments:comparguments:208: invalid argument:  
> 
> _paludis:95: command not found: --log-level[Specify the log level]:log level:((debug\:Show\ debug\ output qa\:Show\ QA\ messages\ and\ warnings\ only warning\:Show\ warnings\ only silent\:Suppress\ all\ log\ messages))
> ...

 

Je comprends pas, moi jai ça :

```
-=[bapt@gallway]=(~)> paludis -

option

--best-version                              -- Display the best version of the specified atom                                                                       

--category                                  -- Matches with this category name only                                                                                 

--config-suffix                 -c          -- Config directory suffix                                                                                              

--configuration-variable                    -- Display the value of a configuration variable for a particular repository                                            

--contents                      -k          -- Display contents of a package                                                                                        

--debug-build                               -- What to do with debug information                                                                                    

--dl-circular                               -- How to handle circular dependencies                                                                                  

--dl-fall-back                              -- When to fall back to installed packages                                                                              

--dl-installed-deps-post                    -- How to handle post dependencies for installed packages                                                               

--dl-installed-deps-pre                     -- How to handle pre dependencies for installed packages                                                                

--dl-installed-deps-runtime                 -- How to handle runtime dependencies for installed packages                                                            

--dl-reinstall                              -- When to reinstall packages                                                                                           

--dl-reinstall-scm                          -- When to reinstall scm packages                                                                                       

--dl-uninstalled-deps-post                  -- How to handle post dependencies for uninstalled packages                                                             

--dl-uninstalled-deps-pre                   -- How to handle pre dependencies for uninstalled packages                                                              

--dl-upgrade                                -- When to upgrade packages                                                                                             

--environment-variable                      -- Display the value of an environment variable for a particular package                                                

--fetch                         -f          -- Only fetch sources; don t install anything                                                                           

--has-version                               -- Check whether the specified atom is installed                                                                        

--help                          -h          -- Display program help                                                                                                 

--info                          -I          -- Display program version and system information                                                                       

--install                       -i          -- Install one or more packages                                                                                         

--list-categories                           -- List available categories                                                                                            

--list-dep-tag-categories                   -- List known dep tag categories                                                                                        

--list-packages                             -- List available packages                                                                                              

--list-repositories                         -- List available repositories                                                                                          

--list-repository-formats                   -- List available repository formats                                                                                    

--list-sets                                 -- List available package sets                                                                                          

--list-sync-protocols                       -- List available sync protocols                                                                                        

--log-level                                 -- Specify the log level                                                                                                

--no-colour                     --no-color  -- Do not use colour                                                                                                    

--no-config-protection                      -- Disable config file protection (dangerous)                                                                           

--owner                         -o          -- Display the owner of a file                                                                                          

--package                                   -- Matches with this package name only                                                                                  

--preserve-world                -1          -- Don t modify the world file                                                                                          

--pretend                       -p          -- Pretend only                                                                                                         

--query                         -q          -- Query for package information                                                                                        

--regenerate-installable-cache              -- Regenerate (non-metadata) cache for installable repositories                                                         

--regenerate-installed-cache                -- Regenerate (non-metadata) cache for installed repositories                                                           

--report                        -r          -- Report the current state of the system                                                                               

--repository                                -- Matches with this repository name only                                                                               

--set                                       -- Matches with this package set name only                                                                              

--show-install-reasons                      -- Show why packages are being installed                                                                                

--sync                          -s          -- Sync all or specified repositories                                                                                   

--uninstall                     -u          -- Uninstall one or more packages                                                                                       

--uninstall-unused                          -- Uninstall unused packages                                                                                            

--update-news                               -- Regenerate news.unread files                                                                                         

--version                       -V          -- Display program version                                                                                              

--with-dependencies                         -- Also uninstall packages that depend upon the target                                                                  

--with-unused-dependencies                  -- Also uninstall any dependencies of the target that are no longer used                               
```

----------

## Bapt

OK je pense que j'ai trouvé, attention au copier coller, j'ai mis une version à dl : _paludis

_paludis_packages

voila

----------

## TrizoLakai

j'ai fais a coup de wget j'ai pareil.

----------

## Bapt

 *TrizoLakai wrote:*   

> j'ai fais a coup de wget j'ai pareil.

 

Tu t'es bien déloggué reloggé ?

----------

## TrizoLakai

Oups   :Embarassed: 

Pardon.

Ça fonctionne niquel, merci beaucoup  :Smile: 

----------

## Babali

Bapt, root a zsh par defaut chez toi ? J'ai pas trop encore ose touche a la conf de root en ce qui concerne le shell.

----------

## Bapt

root a zsh chez moi depuis des lustres quelque soit l'os  :Wink:  je ne me souviens pas avoir eu de problème particulier au contraire. Mes gentoo ont toujours eu root en zsh dès l'installation et ce depuis que je connais gentoo...

j'avais il y a environ 3 ans proposé un virtual/shell pour virer bah des dépendence par défaut, il fallait juste faire du bourne shell pou l'init et portage, mais ça a été refusé  :Sad: 

----------

## SanKuKai

Ah ! C'est vraiment génial ça !   :Very Happy: 

Grand merci pour ton boulot Bapt.   :Wink: 

----------

## Bapt

 *SanKuKai wrote:*   

> Ah ! C'est vraiment génial ça !  
> 
> Grand merci pour ton boulot Bapt.  

 

de rien  :Smile:  c'est pas compliqué à faire et en plus c'est super pratique et ça sert tous les jours  :Smile: 

celui-ci a été beaucoup facile que celui pour portage (sur lequel y a eu pas mal d'aide) : l'expérience et paludis qui fournit tout ce qu'il faut en 2s rendent les choses plus simple  :Wink: 

----------

## Bapt

Voila la completion pour adjutrix. Elle est largement à peaufiner mais elle fonctionne : 

_adjutrix

----------

## Bapt

Les deux fonctions vont être rajoutées au svn de paludis  :Smile:  donc devrait venir avec la prochaine version de paludis...

----------

## Darkael

 *Babali wrote:*   

> Bapt, root a zsh par defaut chez toi ? J'ai pas trop encore ose touche a la conf de root en ce qui concerne le shell.

 

En même temps s'il utilise Paludis, c'est qu'il aime vivre dangeureusement...

Blague à part, j'utilise moi aussi zsh pour root depuis des années (enfin, 2 ans), ça a jamais posé de problèmes.

----------

## truc

 *KarnEvil wrote:*   

> En même temps s'il utilise Paludis, c'est qu'il aime vivre dangeureusement...

 

Rhoo, ce troll enorme   :Laughing:   :Twisted Evil: 

----------

## Bapt

 *KarnEvil wrote:*   

> En même temps s'il utilise Paludis, c'est qu'il aime vivre dangeureusement...
> 
> 

 

ou que j'aime vivre avec mon temps et les technos les plus performantes  :Twisted Evil: 

----------

## Babali

 *Bapt wrote:*   

>  *KarnEvil wrote:*   En même temps s'il utilise Paludis, c'est qu'il aime vivre dangeureusement...
> 
>  
> 
> ou que j'aime vivre avec mon temps et les technos les plus performantes 

 

Tient d'ailleur s'en est ou l'utf-8 et zsh ?  :Wink: 

----------

## geekounet

 *Babali wrote:*   

>  *Bapt wrote:*    *KarnEvil wrote:*   En même temps s'il utilise Paludis, c'est qu'il aime vivre dangeureusement...
> 
>  
> 
> ou que j'aime vivre avec mon temps et les technos les plus performantes  
> ...

 

Ça marche très bien  :Smile: 

----------

## Bapt

Ajour dans le premier post d'un patch pour faire la mise à jour de la completion paludis vers la 0.14.2

----------

