[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: colorisation d'un diff



On 2004-08-23 11:48:38 +0200, Daniel Déchelotte wrote:
> Visiblement wdiff n'est pas tres connu.

Je l'avais testé, mais comme il n'était pas capable de donner un
contexte, je l'avais laissé tombé. À la rigueur, c'est peut-être
corrigeable avec un wrappeur (écrit en perl, par exemple). Et puis
il ne fonctionne qu'avec des fichiers, i.e. impossible d'utiliser
la forme <(...) en ligne de commande pour faire de la substitution
de processus.

Autre problème: il écrit [mot effacé] [mot corrigé] à la suite rendant
le nouveau texte plus difficile à lire. Mais bon, c'est peut-être une
question d'habitude (et ça va mieux avec les couleurs).

> Je devine d'apres la description de son paquet qu'il utilise diff
> puis raffine les differences au mot par mot.

Oui, c'est marqué dans le man qu'il utilise diff.

> En tout cas, il trouve les differences a l'echelle du mot (quelle
> que soit sa methode pour le faire).

Il y a aussi docdiff qui le fait, et qui a également ses problèmes.

> Tu veux des couleurs ? Il faut ruser un petit peu :
> 
> wdiff -w $(echo -e "\\033[31;1m") -x $(echo -e "\\033[0m") -y $(echo -e "\\033[32;1m") -z $(echo -e "\\033[0m") fichier1 fichier2
> 
> Le texte supprime est en rouge, le texte insere en vert. Si tu veux
> utiliser less derriere, utilise son option "--raw" pour conserver les
> couleurs. Ou bien :
> 
> PAGER="less --raw" wdiff -a -w $(echo -e "\\033[31;1m") -x $(echo -e "\\033[0m") -y $(echo -e "\\033[32;1m") -z $(echo -e "\\033[0m") fichier1 fichier2

J'utilise en permanence l'option -R (je suppose que les options -r
et -R remplacent l'ancien --raw). Mais elle est très rudimentaire,
et non utilisable quand la couleur s'étend sur plusieurs lignes
(problème avec le scrolling vers le haut notamment). Je pense que
c'est difficilement corrigeable dans less, car cela demande de
mémoriser les couleurs. Un wrappeur devrait pouvoir contourner le
problème, à condition que l'utilisateur ne change pas la largeur
du terminal une fois la commande lancée.

En résumé, il faudrait écrire un wrappeur qui:
  _ ajoute une option de récursivité,
  _ utilise des fichiers temporaires si besoin est,
  _ et après l'appel de wdiff, applique un filtre lié aux couleurs
    (à chaque fin de ligne du terminal, fait un sgr0; à chaque début
    de ligne du terminal, remet la couleur si besoin est; enlève les
    lignes du fichier qui ne contiennent pas de changement de couleur,
    éventuellement en laissant des lignes de contexte).

-- 
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17,
Championnat International des Jeux Mathématiques et Logiques, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA



Reply to: