Il existe des outils fournissant une sortie colorée:
dwdiff -c File1 File2 # Word level diff
grep --color=always # we all know this guy
...
La question est: Comment convertir leur sortie colorée d'un programme arbitraire en fichier html coloré?
D'autres formats de sortie pourraient également convenir (LaTeX serait génial). Je pense que le HTML est un bon point de départ, car il est facile de le convertir dans d'autres formats.
(Pour savoir comment conserver les codes de couleur des terminaux, veuillez suivre la réponse: https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ...
- tool nbuffer fait partie de expect )
La réponse à cette question est probablement ce que vous voulez.
Il est lié à ces outils, qui effectuent la conversion que vous recherchez:
Paquet Perl HTML :: FromANSI
aha , un programme en langage C ( github repo )
Ou tout simplement un script Shell
https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh
Plus de détails sur ce script http://pablomarin-garcia.blogspot.com/2011/04/converting-ansi-to-html-how-to-convert.html
Vous pouvez essayer vim
avec le plugin AnsiEsc.vim pour afficher les couleurs ANSI via les codes d'échappement, puis rediriger vers la sortie standard vers vim -
(assurez-vous d'avoir activé :syntax on
). Convertissez ensuite le fichier en HTML par la commande vim: :TOhtml
. Le fichier HTML généré doit avoir une sortie colorée.
Pour convertir le code source de manière non interactive en html, essayez la commande suivante:
vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
La source: :help g:html_no_progress
(partie de :help TOhtml
).
Remarque: vous pouvez utiliser -
à la place du myfile.c
, pour convertir le code de l'entrée standard.
Vous pouvez utiliser vim. Cela fait partie d'un script que j'utilise pour convertir la sortie diff en HTML.
vim -n \
-c ':%s%^+ %+++ ' \
-c ':%s%^- %--- ' \
-c ':%s%^ % ' \
-c ':set nu' \
-c ':let html_use_css=1' \
-c ':so $VIMRUNTIME/syntax/2html.vim' \
-c ':wq' -c ':qa!' $input > /dev/null 2> /dev/null
Après cela, j'ai exécuté sed pour changer le CSS et le titre pour qu'ils soient exactement ce que je veux qu'ils soient.
* Modifier: j'aurais dû mentionner que pour obtenir la couleur, vous devez activer la coloration syntaxique. Je le fais dans mon .vimrc, mais si vous vouliez l'ajouter ici, ce serait juste une autre ligne comme
-c ':syntax on' \
Pour ceux qui ont une commande écrite en supposant que la sortie canalisée n'aura jamais de couleur (par exemple, certains frameworks de test), il peut être utile d'utiliser l'utilitaire de script pour enregistrer d'abord la sortie ansi. Cela peut ensuite être poussé vers aha ou les autres utilitaires mentionnés.
Mise à jour: J'ai ajouté une méthode Perl
, en utilisant module HTML :: FromANSI de CPAN .. Pour l'installer, il suffit de l'extraire dans un répertoire et de l'exécuter en tant que root: Perl -MCPAN -e 'install HTML::FromANSI'
à partir de ce répertoire. La particularité de répondre à votre demande est un script appelé ansi2html
. Chose intéressante, il montre la même perte de couleur après la superposition k
dans les noms de fichiers, tout comme le script elisp-Shell ... Voici un exemple d'utilisation:
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" |
ansi2html >/tmp/example.html
firefox /tmp/example.html
Voici la sortie html. comme vu dans Firefox:
Voici une méthode utilisant un emacs script elisp-Shell ... pour l'exemple, appelé htmlize ... Emacs n'a pas besoin d'être en cours d'exécution.
Je l'ai testé à l'origine sur un fond noir, mais j'ai remarqué que pour une raison quelconque, un fond blanc ne fonctionne pas bien avec l'un des codes d'échappement introduits, \e[K
, qui semble être ERASE_LINE (Effacer la ligne actuelle de sortie du terminal) . J'ai ajouté une ligne pour supprimer ce code d'échappement. Cela fonctionne maintenant pour un fond blanc.
Voici un exemple de sortie en surbrillance de couleur de ls
en cours de redirection vers grep
pour un surlignage de couleur supplémentaire.
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" >/tmp/example
htmlize /tmp/example
firefox /tmp/example.html
c'est le elsip-Shell
script.
#!/bin/sh
":"; exec /usr/bin/emacs -Q --script "$0" -- "$@" # -*-emacs-LISP-*-
(require 'ansi-color) (require 'htmlize)
(find-file (setq path-in (cadr argv)))
(ansi-color-apply-on-region (point-min) (point-max))
(switch-to-buffer (buffer-name (htmlize-buffer)))
(write-file (concat path-in ".html"))
Voici un exemple de la sortie html, dans Firefox ... Si j'ai le temps, je vais approfondir le problème des codes ANSI superposés. où les k
rouges chevauchent les noms de fichiers verts, mais ce n'est là qu'en raison d'une expression de test choisie à la hâte pour grep ... (c'est peut-être quelque chose \e[K
influences ...
Ceci est juste un suivi de la solution @ user17591 - scriptage vim:
#!/usr/bin/vim -ns
:%s%^+ %+++
:%s%^- %---
:%s%^ %
:set nu
:let html_use_css=1
:so $VIMRUNTIME/syntax/2html.vim
:wq
:qa!
chmod et
Utilisation: htmlvim file
(pour produire file.html)