OVH Cloud OVH Cloud

colorisation d'un diff

8 réponses
Avatar
Vincent Lefevre
colordiff est capable de coloriser la sortie d'un diff, mais
fonctionne par lignes, i.e. la colorisation s'effectue sur des
lignes entières. Y aurait-il un utilitaire capable de coloriser
unqiuement les changements dans la ligne (tout en gardant le
même 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


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

8 réponses

Avatar
yoann
Vincent Lefevre a écrit :
colordiff est capable de coloriser la sortie d'un diff, mais
fonctionne par lignes, i.e. la colorisation s'effectue sur des
lignes entières. Y aurait-il un utilitaire capable de coloriser
unqiuement les changements dans la ligne (tout en gardant le
même contexte)?



je croix que diff fonctionne par ligne, il cherche des différences ligne par
ligne et ne cherche pas à savoir ce qui a changé sur les lignes en question.

ça me semble un peu dure à faire, à moins de recoder diff en rajouter un module
de recherche de différence caractère par caractère (ou mot par mot) dans les
lignes qui diffère.

Yoann


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Michel Petit
Vincent Lefevre a écrit :
colordiff est capable de coloriser la sortie d'un diff, mais
fonctionne par lignes, i.e. la colorisation s'effectue sur des
lignes entières. Y aurait-il un utilitaire capable de coloriser
unqiuement les changements dans la ligne (tout en gardant le
même contexte)?




Oui, meld (dans le paquet du même nom).

Cdlt.

--
Michel


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
Vincent Lefevre writes:

colordiff est capable de coloriser la sortie d'un diff, mais
fonctionne par lignes, i.e. la colorisation s'effectue sur des
lignes entières. Y aurait-il un utilitaire capable de coloriser
unqiuement les changements dans la ligne (tout en gardant le
même contexte)?



emacs fait ça (emacs fait tout).
M-x ediff-files


Léo.
Avatar
JusTiCe8
Bonjour,

Vincent Lefevre a écrit :

colordiff est capable de coloriser la sortie d'un diff, mais
fonctionne par lignes, i.e. la colorisation s'effectue sur des
lignes entières. Y aurait-il un utilitaire capable de coloriser
unqiuement les changements dans la ligne (tout en gardant le
même contexte)?





il y a aussi tkdiff qui indique les différences dans les lignes.

J8.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
Bonjour,

On 2004-08-23 07:04:48 +0200, Michel Petit wrote:
Vincent Lefevre a écrit :
>colordiff est capable de coloriser la sortie d'un diff, mais
>fonctionne par lignes, i.e. la colorisation s'effectue sur des
>lignes entières. Y aurait-il un utilitaire capable de coloriser
>unqiuement les changements dans la ligne (tout en gardant le
>même contexte)?

Oui, meld (dans le paquet du même nom).



Ça ne me convient pas:
_ Je ne veux pas d'un truc graphique: je travaille très souvent à
distance, et de plus, ça permettrait d'utiliser cette commande
avec Subversion (option --diff-cmd).
_ Je voudrais une sortie similaire à diff (contexte ligne seulement,
et pas de fichiers côte à côte à cause des problèmes de largeur de
ligne). Je n'ai pas trouvé d'option pour modifier ça.
_ Ne fonctionne que sur des fichiers (donc impossible d'utiliser des
trucs similaires à des pipes, contrairement à diff/colordiff).
_ Son diff est un diff glouton, qui ne recherche pas les différences
minimales. Par exemple si on a une ligne A remplacée par 2 lignes
B et C, et que A est très similaire à C, alors meld ne va pas le
voir dans la colorisation par mots.

On 2004-08-23 07:50:52 +0200, Leopold BAILLY wrote:
emacs fait ça (emacs fait tout).
M-x ediff-files



Non, ça ne répond pas à ma question: ediff-files colore par ligne
uniquement. En plus, il ne fonctionne que sur des fichiers. Et en
fait, je voudrais avoir quelque chose en ligne de commande et non
interactif.

On 2004-08-23 08:22:50 +0200, JusTiCe8 wrote:
il y a aussi tkdiff qui indique les différences dans les lignes.



Mêmes remarques que les 3 premiers points de meld. 4e point OK, mais
contrairement à meld, pas de wrapping possible (si les lignes sont
trop longues), semble-t-il.

--
Vincent Lefèvre - 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


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Daniel Déchelotte
Vincent Lefevre a écrit :

| colordiff est capable de coloriser la sortie d'un diff, mais
| fonctionne par lignes, i.e. la colorisation s'effectue sur des
| lignes entières. Y aurait-il un utilitaire capable de coloriser
| unqiuement les changements dans la ligne (tout en gardant le
| même contexte)?

Visiblement wdiff n'est pas tres connu. Je devine d'apres la description
de son paquet qu'il utilise diff puis raffine les differences au mot par
mot. En tout cas, il trouve les differences a l'echelle du mot (quelle
que soit sa methode pour le faire).

Tu veux des couleurs ? Il faut ruser un petit peu :

wdiff -w $(echo -e "33[31;1m") -x $(echo -e "33[0m") -y $(echo -e "33[32;1m") -z $(echo -e "33[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 "33[31;1m") -x $(echo -e "33[0m") -y $(echo -e "33[32;1m") -z $(echo -e "33[0m") fichier1 fichier2

(Ca merite certainement un alias.)

Enjoy :)

--
Daniel Déchelotte
http://yo.dan.free.fr/


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yves Rutschle
On Mon, Aug 23, 2004 at 09:19:42AM +0200, Vincent Lefevre wrote:
> Oui, meld (dans le paquet du même nom).

Ça ne me convient pas:
_ Je ne veux pas d'un truc graphique: je travaille très souvent à
distance, et de plus, ça permettrait d'utiliser cette commande
avec Subversion (option --diff-cmd).
_ Je voudrais une sortie similaire à diff (contexte ligne seulement,
et pas de fichiers côte à côte à cause des problèmes de largeur de
ligne). Je n'ai pas trouvé d'option pour modifier ça.
_ Ne fonctionne que sur des fichiers (donc impossible d'utiliser des
trucs similaires à des pipes, contrairement à diff/colordiff).
_ Son diff est un diff glouton, qui ne recherche pas les différences
minimales. Par exemple si on a une ligne A remplacée par 2 lignes
B et C, et que A est très similaire à C, alors meld ne va pas le
voir dans la colorisation par mots.



vimdiff a b colore les changements à l'intérieur des
lignes, n'est pas graphique, cherche les différences
minimales, MAIS affiche les fichiers côte à côte et ne
semble fonctionner que sur des fichiers.

La recherche pour le diff parfait continue donc...

Y.



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
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 "33[31;1m") -x $(echo -e "33[0m") -y $(echo -e "33[32;1m") -z $(echo -e "33[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 "33[31;1m") -x $(echo -e "33[0m") -y $(echo -e "33[32;1m") -z $(echo -e "33[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 - 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


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact