Existují nástroje poskytující barevný výstup:
dwdiff -c File1 File2 # Word level diff
grep --color=always # we all know this guy
...
Otázka zní: Jak převést jejich barevný výstup libovolného programu na barevný soubor html?
Vhodné by byly i jiné výstupní formáty (LaTeX by byl skvělý). Myslím, že html je dobrým výchozím bodem, protože je snadné jej převést do jiných formátů.
(Chcete-li vědět, jak uchovávat barevné kódy terminálu, postupujte podle odpovědi: https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ...
- nástroj nbuffer je součástí očekávat )
Odpověď na tato otázka je pravděpodobně to, co chcete.
Odkazuje na tyto nástroje, které provádějí konverzi, kterou hledáte:
Balíček Perl HTML :: FromANSI
aha , program v jazyce C ( github repo )
Nebo jen skript Shell
https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh
Další podrobnosti o tomto skriptu http://pablomarin-garcia.blogspot.com/2011/04/converting-ansi-to-html-how-to-convert.html
Vyzkoušejte vim
s AnsiEsc.vim pluginem pro zobrazení barev ANSI pomocí únikových kódů, poté přesměrujte na standardní výstup na vim -
(ujistěte se, že jste aktivovali :syntax on
). Poté soubor převeďte do HTML příkazem vim: :TOhtml
. Generovaný soubor HTML by měl mít barevný výstup.
Chcete-li zdrojový kód neinteraktivní převést na html, zkuste následující příkaz:
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
Zdroj: :help g:html_no_progress
(část :help TOhtml
).
Poznámka: Můžete použít -
místo myfile.c
, pro převod kódu ze standardního vstupu.
Můžete použít vim. Toto je část skriptu, který používám k převodu rozdílového výstupu do 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
Poté jsem spustil sed, abych změnil CSS a název přesně tak, jak chci.
* Úpravy: Měl jsem zmínit, že pro získání barvy je třeba zapnout zvýraznění syntaxe. Dělám to ve svém .vimrc, ale pokud byste to chtěli přidat sem, byla by to jen další řádka
-c ':syntax on' \
Pro ty, kteří mají příkaz psaný za předpokladu, že piped výstup nebude mít nikdy barvu (např. Některé testovací rámce), může být užitečné použít skriptový nástroj k prvnímu uložení výstupu ansi. To pak lze přenést na aha nebo na jiné zmíněné nástroje.
Aktualizace: Přidal jsem metodu Perl
pomocí modul HTML :: FromANSI z CPAN .. Chcete-li ji nainstalovat, stačí ji rozbalit do a spusťte jako root: Perl -MCPAN -e 'install HTML::FromANSI'
z tohoto adresáře. Konkrétní funkcí, která vyhovuje vašemu požadavku, je skript nazvaný ansi2html
. Je zajímavé, že po překrytí k
v názvech souborů ukazuje stejnou ztrátu barvy, jako skript elisp-Shell ... Zde je příklad použití:
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" |
ansi2html >/tmp/example.html
firefox /tmp/example.html
Zde je výstup html. jak je vidět ve Firefoxu:
Zde je metoda používající emacsskript elisp-Shell ... například s názvem htmlize ... Emacs ano nemusí být spuštěn.
Původně jsem to testoval na černém pozadí, ale všiml jsem si, že z nějakého důvodu bílé pozadí nehraje dobře s jedním ze zavedených Escape Codes, \e[K
, Který se zdá být ERASE_LINE ( Vymažte aktuální řádek terminálového výstupu). Přidal jsem řádek k odstranění tohoto kódu Escape. Nyní pracuje na bílém pozadí.
Zde je příklad barevně zvýrazněného výstupu z kanálu ls
do potrubí grep
pro další barevné zvýraznění.
ls -l --color=always /bin/*k* |
grep --color=always "k\|x\|2010" >/tmp/example
htmlize /tmp/example
firefox /tmp/example.html
toto je skript elsip-Shell
.
#!/bin/sh
":"; exec /usr/bin/emacs -Q --script "$0" -- "[email protected]" # -*-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"))
Zde je ukázka výstupu html ve Firefoxu ... Pokud dostanu čas, podívám se dále na problém překrývajících se kódů ANSI. kde červené k
s překrývají zelené názvy souborů, ale to je pouze kvůli spěšně zvolenému testovacímu regexu pro grep ... (možná to něco ovlivňuje \e[K
...
Toto je jen následek řešení @ user17591 - skriptování vim:
#!/usr/bin/vim -ns
:%s%^+ %+++
:%s%^- %---
:%s%^ %
:set nu
:let html_use_css=1
:so $VIMRUNTIME/syntax/2html.vim
:wq
:qa!
chmod to a
Použití: htmlvim file
(vytvořit soubor.html)