# [BI]Man avec les caractères accentués SI SI

## nemo13

bon c'est brut de fonderie de la part d'un non-codeur

edit : Et si je disais à quoi celà me sert  :Question: 

jusqu'à présent je galerai pour avoir mes lettres accentuées dans toutes les page man (localisé en Fr)

changer la valeur du nroff faisait que les bizarreries d'affichage évoluaient selon la valeur nroff de /etc/man.conf.

avec ce script, je n'ai plus de pb .  :Very Happy:   :Very Happy: 

```

#!/bin/bash

# llfm par nemo13

# dédicacé à Brigitte  ( je suis nul en poèsie ) 

# version-0.0

#          o

# du 2006-01-22

#

# utilisation : rendre la copie de ce fichier exécutable ( chmod -x )

#               le lancer par /bin/bash llfm le_fichier                                          

#

# limitations : je ne traite pas les passage d'option de man

#               il faut déactiver le cache de man : décommentez NOCACHE dans man.conf

#               et celles dont vous allez me faire part.

#*******************************************************************************************

#

# en gros man fait :

#

# (cd /usr/share/man &&

#         (echo ".ll 9.6i"; echo ".nr LL 9.6i"; echo ".pl 1100i"

#         /bin/gunzip -c 'le_chemin/la_page_man.gz'

#         echo ".\\\""

#         echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tascii -c -mandoc | /usr/bin/less

# )

# simple n'est pas ?

#

# problème : nroff n'est pas dynamique et il n'a pas l'air de digérer utf8

#            il est fixé dans /etc/man.conf

#            les pages man n'ont pas toutes le même charset

#            il faudrait donc que nroff varie selon le charset

#

#            yakafokon ;-)

#

# les différentes pages testées à la mimine 

#                                               Tascii       Tlatin1  Tutf8  Tcp1047 ?   absent

#A=`man -w hostname`     # charset=us-ascii     ok           ok       ok    (pas fait)    ok

#A=`man -w netstat`      # charset=us-ascii     ok           ok       ok    (pas fait)    ok

#A=`man -w passwd`       # charset=iso-8859-1   pas accent   beurk    ok    (pas fait)    ok

#A=`man -w man.conf`     # charset=iso-8859-1   pas accent   beurk    ok    (pas fait)    ok

#A=`man -w null`         # charset=utf-8        beurk        ok       beurk (pas fait)    beurk

#A=`man -w unicode`      # charset=utf-8        beurk        beurk    beurk (pas fait)    beurk

#

# la solution : l' iconv qui va bien pour les pages unicodes ;-)

# et Tutf8 pour les autres

#

#

#echo $1        # de la chance ; que de la chance !

A=`man -w $1`   # flagrante la différence entre ' et ` qui a dit: presbyte !!!

#echo $A

#exit

B=`file -iz $A`     # récupération d'informations sur la page man désirée

echo $B             # cà c'est geek à mort! \o/ le hacker \o/

EncodageFichier=`file -iz $A | grep "$1" | awk '{print $3}'` # c'est le 3° champs qui intéresse

#

case $EncodageFichier in

        "charset=us-ascii")  #***********traitement de l'ascii******************

#echo us-ascii nroff avec Tutf8

(cd /usr/share/man &&

         (echo ".ll 9.6i"; echo ".nr LL 9.6i"; echo ".pl 1100i"  # pas la peine de me demander !!

         /bin/gunzip -c $A      #injection de la page man désirée

         echo ".\\\""           # la non plus !!

#injection de la commande adaptée

        echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tutf8 -c -mandoc | /usr/bin/less

)

exit

;;

        "charset=iso-8859-1")  #***********traitement de xx_FR******************

#echo 8859-1 nroff avec Tutf8

(cd /usr/share/man &&

         (echo ".ll 9.6i"; echo ".nr LL 9.6i"; echo ".pl 1100i"

         /bin/gunzip -c $A

         echo ".\\\""

        echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tutf8 -c -mandoc | /usr/bin/less

)

exit

;;

        "charset=utf-8")        #***********traitement de l'unicode******************

#echo utf8 iconv en 8859 nroff sans T

(cd /usr/share/man &&

         (echo ".ll 9.6i"; echo ".nr LL 9.6i"; echo ".pl 1100i"

         /bin/gunzip -c $A

         echo ".\\\""

 echo ".pl \n(nlu+10") | /usr/bin/gtbl | iconv -f utf-8 -t iso-8859-1 | /usr/bin/nroff -c -mandoc | /usr/bin/less

)

exit

;;

        *)

echo "flûte encodage inconnu"

exit

;;

esac

#

exit

#       petit panel d'essais

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tascii -c -mandoc | /usr/bin/less

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tlatin1 -c -mandoc | /usr/bin/less

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tutf8 -c -mandoc | /usr/bin/less

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tcp1047 -c -mandoc | /usr/bin/less

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -c -mandoc | /usr/bin/less

# echo ".pl \n(nlu+10") | /usr/bin/gtbl | iconv -f utf-8 -t iso-8859-1 | /usr/bin/nroff -c -mandoc | /usr/bin/less

#

```

Last edited by nemo13 on Mon Jan 23, 2006 7:27 pm; edited 2 times in total

----------

## nemo13

Y'aurait-il une âme charitable qui me dise comment fait-on pour éviter

les retour à la ligne intempestifs ??

merci

----------

## truc

```
echo -n "blabla"
```

 devrait normalement faire l'affaire

----------

## nemo13

bonsoir,

je ne suis mal exprimé, les retours intempestifs sont sur le script

que j'ai posté .Du  moins c'est je que je vois sur mon écran donc je ne peux pas savoir ce que les éventuels lecteurs voient !

#injection de la commande adaptée

  exemple :

```
 

        echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -Tutf8 -c -mandoc | /usr/bin/less  
```

doit être sur une seule ligne et apparement

le  /usr/bin/less est sur la ligne suivante.

édit : désolé c'est un artéfact d'affichage car avec un copier/coller à la souris

c'est pil-poil

voili-voilà

----------

## olivier elmekki

Bonjour.

  Euh, tu es bien sûr que cela est nécessaire? Pour ma part, j'ai juste modifié /etc/man.conf en mettant, à la ligne de nroff:

```
NROFF           /usr/bin/nroff -Tlatin1 -c -mandoc
```

  et j'ai mis ensuite, dans mon bashrc:

```
LESSCHARSET="latin1"
```

  Bon, d'accord, ca ne fait pas vraiment de l'UTF-8, mais tu as les accents simplement, et puis les mans d'un systême ne sont pas voués à être lus sur un autre  :Wink: 

----------

## nemo13

 *olivier elmekki wrote:*   

> 
> 
>   Euh, tu es bien sûr que cela est nécessaire? 

 

1) Merci d'avoir lu

2) Pourquoi faire simple quand on peux faire compliqué ?  :Cool: 

serieusement , c'est juste pour montrer que si la "fonction" man était recodée,

l'utilisateur final n'aurait pas besoin de bidouiller de-ci de-là pour avoir de zolis

caractères accentués

A+:jlp

----------

## ghoti

 *nemo13 wrote:*   

> si la "fonction" man était recodée, l'utilisateur final n'aurait pas besoin de bidouiller de-ci de-là pour avoir de zolis caractères accentués

 

En effet !

Merci d'avoir démystifié quelque peu cette épineuse question du transposage de caractères !

----------

## k-root

voici une version un peu modifier.

on peut spécifier une section maintenant.   :Cool: 

```
#!/bin/sh

#

# llfm is a simple rtfm frontend.

#

# dédicacé à Brigitte  ( je suis nul en poèsie )

#

# auteurs:    nemo13

# contribution:   k-root 

# 

# version-0.0a   2006-02-15

#      - on peut maintenant specifier une section.

#

# version-0.0   2006-01-22

#      - 

# utilisation :

#      1) rendre le script exécutable ( chmod +x llfm.sh )

#      

#      2) placer le dans votre $PATH ( /opt/bin )

#         ou creer un alias ( alias uman="~/bin/llfm.sh" )

#

#

# limitation :

#      seules les options nom et section sont traitées, la présence 

#      d'autres options provoque un appel à man

#

#

DEBUG=false

if [ $# = 0 ]; then

   # pas d'arguments

   echo "Quelle page désirez-vous consulter ?"

   exit

fi

for arg; do

   if echo $arg |egrep -q '^-'; then

      # appel direct de man

      echo `man $*`

      exit

   fi

done

# recherche du chemin de la page de man

manPagePath=`man -w $*| head -n 1` 

if [ ! -d $manPagePath  ] ;  then

   # on a trouver une page, c'est le 3° champs qui nous intéresse   

   EncodageFichier=`file -iz $manPagePath | awk '{print $3}'`

else

    exit

fi

ICONV="cat"

NROFF="/usr/bin/nroff -Tutf8 -c -mandoc"

case $EncodageFichier in   

   "charset=utf-8")

   ICONV="iconv -f utf-8 -t iso-8859-1 "

   NROFF=" /usr/bin/nroff -c -mandoc"

   ;;       

   

   *)

   ;;   

esac

cd /usr/share/man && (echo ".ll 9.6i .nr LL 9.6i .pl 1100i"; /bin/gunzip -c $manPagePath; echo ".\\\".pl \n(nlu+10") |$ICONV | $NROFF | /usr/bin/less -is

if $DEBUG; then

echo "manPagePath= $manPagePath ($EncodageFichier)

NROFF= $NROFF

ICONV= $ICONV"

fi

exit

```

----------

## nemo13

 *k-root wrote:*   

> voici une version un peu modifiée.
> 
> on peut spécifier une section maintenant. 
> 
> 

 

Merci pour la contribution

A part y corriger quelques fautes d'orthographe , j'aurai du mal à y reconnaitre mon bricolo du départ

A+:jlp

----------

## Mickael

 *olivier elmekki wrote:*   

> Bonjour.
> 
>   Euh, tu es bien sûr que cela est nécessaire? Pour ma part, j'ai juste modifié /etc/man.conf en mettant, à la ligne de nroff:
> 
> ```
> ...

 

Salut, la solution d'Olivier qui concerne le man.conf ne fonctionnait pas par contre la ligne NROFF qui me permet d'avoir de jolis accents avec les pages man est celle-ci : 

```
NROFF iconv -f utf8 -t iso8859-1 | /usr/bin/nroff -Tlatin1 -c -mandoc
```

astuce tirée ICI. 

Le pourquoi du comment...et je ne sais pas  :Confused:   mais j'ai les accents  :Wink: 

----------

## olivier elmekki

Bonjour,

  Je suis en train de rechercher la documentation qui m'avait donné cette astuce. Je l'avais faite une fois sur une systeme perso, puis une autre fois sur ma gentoo actuelle, et je ne pense pas avoir fait autre chose que modifier la ligne nroff et la variable $LESSCHARSET :s

  En attendant, j'ai trouvé un truc qui pourrait t'intéresser, même si la solution proposé se rapproche de celle de Némo:

http://www.linuxfromscratch.org/hints/downloads/files/man-i18n.txt

  Je te poste l'ensemble de cette section de mon man.conf si tu veux comparer, mais encore une fois, je ne me souviens pas avoir modifié autre chose que nroff...

```
TROFF      /usr/bin/groff -Tps -mandoc

NROFF      /usr/bin/nroff -Tlatin1 -c -mandoc

JNROFF      /usr/bin/groff -Tnippon -mandocj

EQN      /usr/bin/geqn -Tps

NEQN      /usr/bin/geqn -Tlatin1

JNEQN      /usr/bin/geqn -Tnippon

TBL      /usr/bin/gtbl

# COL      /usr/bin/col

REFER      /usr/bin/refer

PIC      /usr/bin/pic

VGRIND      

GRAP      

PAGER      /usr/bin/less -is

BROWSER      /usr/bin/less -is

HTMLPAGER   /bin/cat

CAT      /bin/cat

```

edit: voici les deux liens sur lesquels je m'étais appuyé:

http://www.linuxfromscratch.org/lfs/view/stable/chapter06/man.html   (pour nroff)

http://archives.linuxfromscratch.org/mail-archives/lfs-dev/2001-April/013255.html (pour lesscharset)

----------

## nemo13

bonsoir,

Ouille , je déchaine les foules   :Cool:   :Cool:   :Cool:   ( zut les césars c'était hier ).

Ma proposition de solution est tordue car tous les fichiers de "man françisé" n'ont pas le même

encodage (dans mon post du début je donne quelques exemples )

je ne crois donc pas qu'on puisse avoir une seule écriture de la ligne nroff !

dans  la page :http://www.linuxfromscratch.org/hints/downloads/files/man-i18n.txt

il est dit: *Quote:*   

> 
> 
> 2) Make sure that all installed manual pages are in ISO-8859-1 encoding.
> 
> This means that one has to remove all manual pages for languages that cannot

 

le pb est qu'avec la gentoo tes pages man peuvent évoluer et rien ne te garantie qu'elles resteront en iso-8859-1

c'est donc pour cela que j'ai essayé d'avoir un décodage de man qui " s'adapte" au codage de la page

c'est tout ce que je sais faire ,n'étant pas codeur.

voili--voilà

----------

## nemo13

 *MickTux wrote:*   

> par contre la ligne NROFF qui me permet d'avoir de jolis accents avec les pages man est celle-ci : 
> 
> ```
> NROFF iconv -f utf8 -t iso8859-1 | /usr/bin/nroff -Tlatin1 -c -mandoc
> ```
> ...

 

Bonsoir,

A l'insu de mon plein gré, je ne suis pas un spécialiste du transcodage ; mon explication risque donc d'être fort foireuse ( là c'est du bottage en touche de 1°   :Razz:   )

A priori groff ne saurait pas traiter les encodages multi-octet , ors utf8 est multi-octets ( 2 ) donc si l'on balance de l'utf8 dans groff , ben il fait la geule .

par contre la transformation utf8 -> iso-8859-1 faite par iconv revient en gros à passer un encodage de 2 octets à un encodage sur 1 octet donc groff ne plante plus.

mon 0,0005 cents   :Wink: 

(mais que donnerait une page de man avec le caractère ¤ ?   :Wink:   )

----------

## Mickael

 *Quote:*   

> (mais que donnerait une page de man avec le caractère ¤ ?  )

 

Si tu as un exemple nemo13, je teste de suite.

----------

## nemo13

 *MickTux wrote:*   

>  *Quote:*   (mais que donnerait une page de man avec le caractère ¤ ?  ) 
> 
> Si tu as un exemple nemo13, je teste de suite.

 

ben je n'en connais pas mais à minima pour afficher le caractère ¤ il faut du latin9 ( iso-8859-15 )

donc à priori le iconv -f utf8 -t iso8859-1 devrait se vautrer.

A+ Bonne nuit.

----------

## nemo13

Aie la cadence des mises à jour.

Allez pour faire suite à :ceci

voici la nouvelle mouture ( encore merci à K.root )

```
#!/bin/sh

#

# llfm is a simple rtfm frontend.

#

# dédicacé à Brigitte

#

#      auteurs:   nemo13

# contribution:   k-root

#

#

##################################################################

#

# version-0.1    2006-03-01

#      - la fonction iconv devient -t iso-8859-15 car sinon elle

#         plante sur le symbole ¤ ( Euro )

#         ( mais la glyphe est encore incorrecte ( une contrib ? )

#

# version-0.0a   2006-02-15

#      - on peut maintenant spécifier une section.

#

# version-0.0   2006-01-22

#      -

#

#################################################################

#

# utilisation :

#      1) rendre le script exécutable ( chmod +x llfm.sh )

#      

#      2) placer le dans votre $PATH ( /opt/bin )

#         ou créer un alias ( alias uman="~/bin/llfm.sh" )

#

#

# limitation :

#      seules les options nom et section sont traitées, la présence

#      d'autres options provoque un appel à man

#

#

DEBUG=false

if [ $# = 0 ]; then

   # pas d'arguments

   echo "Quelle page désirez-vous consulter ?"

   exit

fi

for arg; do

   if echo $arg |egrep -q '^-'; then

      # appel direct de man

      echo `man $*`

      exit

   fi

done

# recherche du chemin de la page de man

manPagePath=`man -w $*| head -n 1`

if [ ! -d $manPagePath  ] ;  then

   # on a trouvé une page, c'est le 3° champs qui nous intéresse   

   EncodageFichier=`file -iz $manPagePath | awk '{print $3}'`

else

    exit

fi

ICONV="cat"

NROFF="/usr/bin/nroff -Tutf8 -c -mandoc"

case $EncodageFichier in   

   "charset=utf-8")

   ICONV="iconv -f utf-8 -t iso-8859-15 "

   NROFF=" /usr/bin/nroff -c -mandoc"

   ;;       

   

   *)

   ;;   

esac

cd /usr/share/man && (echo ".ll 9.6i .nr LL 9.6i .pl 1100i"; /bin/gunzip -c $manPagePath; echo ".\\\".pl \n(nlu+10") |$ICONV | $NROFF | /usr/bin/less -is

if $DEBUG; then

echo "manPagePath= $manPagePath ($EncodageFichier)

NROFF= $NROFF

ICONV= $ICONV"

fi

exit
```

Pour la suite je crois que c'est nroff qui va nous taquiner les méninges

----------

## nemo13

Bon pour nroff je crois que c'est tout vu ( du moins à mon niveau )

 *Quote:*   

> DESCRIPTION
> 
>        The  nroff script emulates the nroff command using groff.  Only ascii, latin1, utf8, and cp1047 are valid arguments for
> 
>        the -T option, selecting the output encoding emitted by grotty, groff's TTY output device.  If  an  invalid  or  no  -T
> ...

 

 Et comme j'ai tout défini en utf8 

 Et comme nroff marche pas en utf8

voili-voilà  :Crying or Very sad:   :Crying or Very sad: 

----------

## Deusexodus

Maintenant : à cette date le problème se résout avec un :

```
NROFF           /usr/bin/nroff -Tutf8 -c -mandoc
```

dans le fichier /etc/man.conf (cherchez la ligne ou il y a NROFF et remplacez).

Voila si ça peux servir à quelqu'un.

@+

----------

## Temet

Bah, quand je fais un "man cp", ça marche pas.

----------

## kwenspc

 *Temet wrote:*   

> Bah, quand je fais un "man cp", ça marche pas.

 

non plus   :Confused: 

au lieu d'avoir ça: 

```
A(C)ventuellement
```

j'ai ça: 

```
Ã©ventuellement
```

----------

## Temet

Et la méthode du iconv me plante le man de mplayer :/

----------

## titoucha

J'utilise la valeur ci-desous pour NROFF (c'est la valeur par défaut)

```
NROFF           /usr/bin/iconv -c -t iso8859-15 | /usr/bin/nroff -mandoc -c
```

man cp et man mplayer passent bien.

----------

## Temet

Oui moi aussi, avec le man mplayer, ça me virer carrément tous les caractères accentués lol

Du coup, ça passe... il manque juste une lettre sur 5 quoi  :Very Happy: 

----------

## Ezka

Ben moi j'ai tout en utf8 ... et j'ai aussi des pb d'accents avec les pages man localisés.

Par contre la pages man de mplayer marchent trés bien avec les accents et tout ...

----------

## Deusexodus

 *titoucha wrote:*   

> J'utilise la valeur ci-desous pour NROFF (c'est la valeur par défaut)
> 
> ```
> NROFF           /usr/bin/iconv -c -t iso8859-15 | /usr/bin/nroff -mandoc -c
> ```
> ...

 

J'avais finalement des problème avec les autres man. Donc j'ai pris cette technique en sachant que ça fait comme Temet le dis : les caractère accentué sont enlevé "vidéo" deviens "vido".

Peut mieux faire, c'est dommage qu'on puisse pas appliquer alternativement utf8 et iso... sur les man particuliers.

@+

----------

