A resposta para esta pergunta é provavelmente o que você quer.
Links para essas ferramentas, que fazem a conversão que você está procurando:
-
Pacote Perl HTML :: FromANSI
-
aha , um programa em linguagem C ( repo do github )
Existem ferramentas que fornecem saída colorida:
dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...
A pergunta é: Como converter a saída colorida do programa arbitrário em arquivo html colorido?
Outros formatos de saída também podem ser adequados (o LaTeX seria ótimo). Eu acho que html é um bom ponto de partida, pois é fácil convertê-lo para outros formatos.
(Para curiosos como manter os códigos de cores do terminal, por favor, siga a resposta:
link
... | unbuffer command_with_colours arg1 arg2 | ...
- ferramenta unbuffer faz parte de esperar )
A resposta para esta pergunta é provavelmente o que você quer.
Links para essas ferramentas, que fazem a conversão que você está procurando:
Pacote Perl HTML :: FromANSI
aha , um programa em linguagem C ( repo do github )
Você pode usar o vim. Isso é parte de um script que eu uso para converter a saída do diff em 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
Depois disso, eu corro sed para mudar o CSS e o título para ser exatamente o que eu quero que eles sejam.
* Edit: Eu deveria ter mencionado que para obter cores, você precisa ter o destaque da sintaxe ativado. Eu faço isso no meu .vimrc, mas se você quiser adicionar aqui, seria apenas outra linha como
-c ':syntax on' \
Você pode experimentar o vim
com o plug-in AnsiEsc.vim para visualizar as cores ANSI por meio do escape códigos, em seguida, redirecionar a saída padrão para vim -
, ativar :syntax on
e converter o arquivo para html pelo comando vim: :TOhtml
. O arquivo html gerado deve ter saída colorida.
Para converter código-fonte não interativamente em html, tente o seguinte comando:
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
Ou use -
em vez de myfile.c
para converter o código da entrada padrão.
Atualizar: adicionei um método perl
, usando module HTML :: FromANSI from CPAN .. Para instalá-lo, basta extraí-lo para um diretório e executar, como root: perl -MCPAN -e 'install HTML::FromANSI'
desse diretório. O recurso específico para atender à sua solicitação é um script chamado ansi2html
. Curiosamente, ele mostra a mesma perda de cor após a sobreposição do k
nos nomes dos arquivos, assim como o script elisp-shell ... Aqui está um exemplo de uso:
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" |
ansi2html >/tmp/example.html
firefox /tmp/example.html
Aqui está a saída html. como visto no Firefox:
Aquiestáummétodousandoumscriptemacs
Eu testei originalmente em um fundo preto, mas notei que, por algum motivo, um fundo branco não funciona bem com um dos códigos de escape introduzidos, \e[K
, que parece ser ERASE_LINE (Apagar a linha atual de saída do terminal) . Eu adicionei uma linha para remover este código de escape. Agora funciona para um fundo branco.
Este é um exemplo de saída destacada em cores de ls
sendo canalizada para grep
para realce de cor adicional.
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" >/tmp/example
htmlize /tmp/example
firefox /tmp/example.html
este é o script 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"))
Aqui está um exemplo da saída html, no Firefox ... Se eu tiver tempo, analisarei mais detalhadamente o problema dos códigos ANSI sobrepostos. onde os k
s vermelhos se sobrepõem aos nomes dos arquivos verdes, mas isso está lá apenas por causa de um regex de teste escolhido apressadamente para grep ... (talvez isso seja algo que \e[K
influencia ...
Este é apenas um acompanhamento da @ user17591 solution - script do vim :
#!/usr/bin/vim -ns
:%s%^+ %+++
:%s%^- %---
:%s%^ %
:set nu
:let html_use_css=1
:so $VIMRUNTIME/syntax/2html.vim
:wq
:qa!
chmod e
Uso: htmlvim file
(para produzir file.html)
Para aqueles que têm um comando escrito na suposição de que a saída canalizada nunca terá cor (por exemplo, algumas estruturas de teste), talvez seja útil usar o utilitário de script para salvar primeiro a saída ansi. Isso pode ser empurrado para aha ou para os outros utilitários mencionados.
Tags command-line diff colors output terminal