Conversión de salida coloreada en html

Hay herramientas que proporcionan salida de color:

dwdiff -c File1 File2 # word level diff grep --color=always # we all know this guy ... 

La pregunta es: ¿cómo convertir su salida de color de un progtwig arbitrario en un file html coloreado?

Otros formattings de salida también podrían ser adecuados (LaTeX sería genial). Creo que html es un buen punto de partida, ya que es fácil convertirlo a otros formattings.

(Para saber cómo conservar los códigos de color de la terminal, por favor, siga la respuesta: https://unix.stackexchange.com/a/10832/9689 ... | unbuffer command_with_colours arg1 arg2 | ... – la herramienta unbuffer es parte de la expectativa )

La respuesta a esta pregunta es probablemente lo que quieres.

Se vincula a estas herramientas, que hacen la conversión que estás buscando:

  • Paquete de Perl HTML :: FromANSI

  • aha , un progtwig de lenguaje C ( github repo )

Puedes usar vim. Esto es parte de un script que uso para convertir la salida de diff a 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 

Después de esto, ejecuto sed para cambiar el CSS y el título para que sea exactamente lo que quiero que sean.

* Editar: Debería haber mencionado que para get color, debe tener encendido el resaltado de syntax. Lo hago en mi .vimrc, pero si quisieras agregarlo aquí sería otra línea como

 -c ':syntax on' \ 

Puede probar vim con el complemento AnsiEsc.vim para ver los colors ANSI a través de los códigos de escape, luego networkingireccionar la salida estándar a vim - , activar :syntax on y convertir el file a html mediante el command vim :TOhtml . El file html generado debería tener salida coloreada.

Para convertir el código fuente de forma no interactiva en html, intente con el siguiente command:

 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 

O use - lugar de myfile.c , para convertir el código de la input estándar.

ansi2html , en pypi.

Uno puede get cantidades desmesuradas de disfrute de la producción regular de conchas a través de lolcat y luego a través de ansi2html. Algo como:

 … | lolcat -f | ansi2html -ip 

Actualización: He agregado un método perl , usando el module HTML :: FromANSI de CPAN . Para instalarlo, simplemente extráigalo a un directory y ejecútelo como root: perl -MCPAN -e 'install HTML::FromANSI' desde ese directory La característica particular para satisfacer su request es un script llamado ansi2html . Curiosamente, muestra la misma pérdida de color después de la superposition k en los nombres de file, al igual que el script elisp-shell … Aquí hay un ejemplo de uso:

 ls -l --color=always /bin/*k* | grep --color=always "k\|x\|2010" | ansi2html >/tmp/example.html firefox /tmp/example.html 

Aquí está la salida html. como se ve en Firefox:

enter image description here


Aquí hay un método que usa una secuencia de commands elisp-shell de emacs … para el ejemplo, llamado htmlize … Emacs no necesita ejecutarse.

Originalmente lo probé sobre un background negro, pero noté que por alguna razón, un background blanco no funciona bien con uno de los códigos de escape introducidos, \e[K , que parece ser ERASE_LINE ( borra la línea actual de la terminal salida) . He agregado una línea para eliminar este Código de escape. Ahora funciona para un background blanco.

Aquí hay un ejemplo de salida de color resaltado de ls se canaliza a grep para resaltar más colors.

 ls -l --color=always /bin/*k* | grep --color=always "k\|x\|2010" >/tmp/example htmlize /tmp/example firefox /tmp/example.html 

este es el elsip-shell .

 #!/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")) 

Aquí hay una muestra de la salida html, en Firefox … Si tengo time, analizaré más a background el problema de los códigos ANSI superpuestos. donde los k rojos se superponen con los nombres verdes, pero eso solo está ahí debido a una testing rápida de regex para grep … (tal vez eso sea algo \e[K influye …

enter image description here

Esto es solo un seguimiento de la solución @ user17591 – vim scripting :

 #!/usr/bin/vim -ns :%s%^+ %+++ :%s%^- %--- :%s%^ % :set nu :let html_use_css=1 :so $VIMRUNTIME/syntax/2html.vim :wq :qa! 

Chmod y

Uso: htmlvim file (para producir file.html)

Para aquellos que tienen un command que está escrito bajo el supuesto de que la salida canalizada nunca tendrá color (por ejemplo, algunos frameworks de testing), puede ser útil usar la utilidad de script para save primero la salida ansi. Esto puede ser enviado a aha o a las otras utilidades mencionadas.