# [ZSH] configuration poussée

## Bapt

http://baptux.free.fr/zshconf-20080211.tar.bz2

A la demande de plusieurs, voici ma conf zsh mise à jour, n'hésitez pas à me faire des retours

----------

## geekounet

Intéressant, je vais y regarder  :Smile: 

En ce qui me concerne, ma conf est  là  :Wink:  (je la donne puisque plusieurs personnes me l'ont déjà demandé pour en copier des bouts  :Razz: )

----------

## ercete

merci a vous !

----------

## ercete

j'en profite parce que c'eszt pas trop OFF :

la version de zsh actuellement installée est la 4.2 je crois, qui si ma mémoire est bonne ne supporte pas l'UTF8

mon admin réseau me fait la gueule et veut pas m'installer la devel (CentOS stable).

Vous pensez que c'est possible de l'installer en user et de faire un chsh vers mon home ?

----------

## Bapt

Une petite nouveauté que je souhaite faire partager (ça fera partie d'une prochaine release de ma conf)

Bref jusque là j'avais une petite fonction precmd qui me permettait de modifier pour mes titres xterm et autres terms sans problèmes.

Mais je viens de tombé sur une truc génialissime au fur et à mesure de mes périgrination sur le grand ternet dont je vous fait part.

```
function title() {

        # escape '%' chars in $1, make nonprintables visible

        a=${(V)1//\%/\%\%}

        # Truncate command, and join lines.

        a=$(print -Pn "%40>...>$a" | tr -d "\n")

        case $TERM in

                screen)

                print -Pn "\e]2;$a @ $2\a" # plain xterm title

                print -Pn "\ek$a\e\\"      # screen title (in ^A")

                print -Pn "\e_$2   \e\\"   # screen location

                ;;

                xterm*|rxvt)

                print -Pn "\e]2;$a @ $2\a" # plain xterm title

                ;;

        esac

}

function precmd() {

        title "zsh" "%m(%55<...<%~)"

}

function preexec() {

        title "$1" "%m(%35<...<%~)"

}

```

ainsi le fonction m'affiche la commande en cours sur sur la bar des titres de mon terminal, ainsi que le nom de la machine et le path jusque là c'est beau et tout va bien, mais en plus, si je suis dans un screen, elle fait le même genre de choses sur les titres de mon screen !!! Bref que tu bonheur.

Pour ceux qui utilisent ma conf, j'ai rajouté cela dans mon .zshfunctions

----------

## geekounet

Pour set les différents titles de screen, j'ai aussi un truc du genre dans ma conf zsh  :Smile:  Et également pour l'affichage du programme en cours dans le titre, j'ai une fonction spéciale (récupérée sur le wiki) qui gère les cas où on ferai un fg  :Wink: 

Mais je vais y regarder à ton truc, ya des subtilités que je saisis pas encore dans la syntaxe, et ça m'a l'air plus classe  :Smile: 

----------

## julroy67

Justement en parlant de ZSH, on peut me dire si c'est normal ce comportement ?

```

17:45 root@Gentoo-Tux /home/julroy# emerge -av =media-libs/alsa-lib-1.0.14a-r1

zsh: media-libs/alsa-lib-1.0.14a-r1 not found

```

Avec Bash cette commande passe pourtant correctement   :Rolling Eyes: 

----------

## geekounet

 *julroy67 wrote:*   

> Justement en parlant de ZSH, on peut me dire si c'est normal ce comportement ?
> 
> ```
> 
> 17:45 root@Gentoo-Tux /home/julroy# emerge -av =media-libs/alsa-lib-1.0.14a-r1
> ...

 

```
setopt noequals
```

Parce que le = est par défaut interprété comme un which intégré, dans le genre :

```
pierre@Hoth:pts/1 ~ % echo =ls

/usr/bin/ls
```

 :Wink: 

----------

## julroy67

Ah oui normal donc, merci bien geekounet. Et pour pallier à ce problème vous faites comment ? Parce passer par bash pour installer une version précise, c'est pas « propre ».   :Laughing: 

----------

## Oni92

 *julroy67 wrote:*   

> Ah oui normal donc, merci bien geekounet. Et pour pallier à ce problème vous faites comment ? Parce passer par bash pour installer une version précise, c'est pas « propre ».  

 

```
emerge -av \=media-libs/alsa-lib-1.0.14a-r1
```

----------

## geekounet

 *julroy67 wrote:*   

> Ah oui normal donc, merci bien geekounet. Et pour pallier à ce problème vous faites comment ? Parce passer par bash pour installer une version précise, c'est pas « propre ».  

 

Je te l'ai donné plus haut  :Rolling Eyes: 

```
% setopt noequals
```

----------

## julroy67

Oups pardon geekounet, j'avais pas vu   :Embarassed:  , et il y a l'autre solution qui est pas mal non plus. Bon eh bien merci à vous.  :Smile: 

----------

## babykart

l'autre solution sans avoir 

```
setopt noequals
```

c'est 

```
# emerge -av '=bash-2.05b-r11'
```

d'ailleurs la completion y marche trés bien car elle te rajoute bien le ' de fin...

----------

## Bapt

 *babykart wrote:*   

> d'ailleurs la completion y marche trés bien car elle te rajoute bien le ' de fin...

 

J'en est vraiment chié pour faire les fonctions de completions portage (c'est une de mes première fonctions chiadée !! (Je ne savais même pas que ça marchait correctement avec les '  :Smile: )

----------

## babykart

 *Bapt wrote:*   

>  *babykart wrote:*   d'ailleurs la completion y marche trés bien car elle te rajoute bien le ' de fin... 
> 
> J'en est vraiment chié pour faire les fonctions de completions portage (c'est une de mes première fonctions chiadée !! (Je ne savais même pas que ça marchait correctement avec les ' )

 

je ne sais plus si je t'ai 'officielement' remercié, mais au cas ou, milles merci pour le job que tu fais sur zsh-completion...

j'en profite pour glisser mon zprofile encore qu'il n'est pas de moi (je ne sais plus de qui d'ailleurs...   :Embarassed:   )

```
[[ -e "/etc/profile.env" ]] && source /etc/profile.env

#077 would be more secure, but 022 is generally quite realistic

umask 022

if [[ "$USER" == root ]]; then

        export PATH="/bin:/sbin:/usr/bin:/usr/sbin:${ROOTPATH}"

else

        export PATH="/bin:/usr/bin:${PATH}"

fi

unset ROOTPATH

# Alias

alias ls="ls --color=auto"

alias ll="ls -alih"

alias rm="rm -i"

alias mv="mv -i"

alias pico="nano -w"

#alias \.="pwd"

#alias \.\.="cd .."

# Completion emerge

autoload -U compinit promptinit

compinit

promptinit; #prompt gentoo

# Prompt coloré

autoload -U colors

colors

host_color="green"

path_color="blue"

date_color="yellow"

date_format="%H:%M:%S"

date="%{$fg[$date_color]%}%D{$date_format}"

if [ "$USER" = "root" ]

then

        host_color="red"

        host="%{$fg[$host_color]%}%n@%m"

else

        host="%{$fg[$host_color]%}%n@%m"

fi

cpath="%{$fg[$path_color]%}%~"

end="%{$reset_color%}"

PS1="$host $cpath %#$end "

RPS1="$date$end"

# Aide

#unalias run-help

#autoload run-help

# Cache de completion

zstyle ':completion::complete:*' use-cache 1

# history settings

HISTFILE=~/.zshhistory

HISTSIZE=3000

SAVEHIST=3000
```

PS - il nécéssite de commenter les dernières lignes du fichier /etc/profile à partir de

```
if [ -n "${BASH_VERSION}" ] ; then

...
```

c'est pas super propre mais je l'aime bien mon zsh comme ça  :Wink: 

d'ailleurs bapt je vais reprendre la fonction pour les commandes complètes + path pour les shell... ça va bien me servir...

----------

## Bapt

Juste une remarque 

autoload -U compinit promptinit

compinit

promptinit; #prompt gentoo

ne sert à rien dans ton cas car tu surcharge le prompt avec PS1 et RPS1.

donc tu peux peux les enlever.

De plus promptinit n'initialise aucun prompt, il faut passer par la commande prompt avec comme argument le prompt que tu désire.

----------

## ercete

Je me suis enfin décidé à m'installer zsh en Userspace contre l'avis de mes supérieurs. J'ai peur qu'il le prennent mal, si je ne réponds pas d'ici 2heures, prévenez la brigade criminelle !

Petite remarque Bapt : 

Ton thème perso Bapt n'est pas présent dans ton archive.

Du coup lorsqu'on lance zsh, il crache le "Usage" de prompt.

Au passage je découvre le fonctionnement des thèmes, je crois que je vais m'en construire un sur-mesure ^^

Ciao

----------

## Bapt

Si si il est bien présent, il est dans .zsh/functions/prompt_bapt_setup

----------

