Es gibt Tools für die farbige Ausgabe:
dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...
Die Frage ist: Wie konvertiert man die farbige Ausgabe eines beliebigen Programms in eine farbige HTML-Datei?
Andere Ausgabeformate könnten ebenfalls geeignet sein (LaTeX wäre großartig). Ich denke, HTML ist ein guter Ausgangspunkt, da es einfach ist, es in andere Formate zu konvertieren.
(Für neugierige Informationen zur Aufbewahrung der Terminal-Farbcodes folgen Sie bitte der Antwort:
https://unix.stackexchange.com/a/10832/9689
... | unbuffer command_with_colours arg1 arg2 | ...
- Tool- Unbuffer ist Teil von expect. )
Antworten:
Die Antwort auf diese Frage ist wahrscheinlich, was Sie wollen.
Es enthält Links zu diesen Tools, mit denen Sie die gewünschte Konvertierung durchführen können:
Perl-Paket HTML :: FromANSI
aha , ein Programm in C-Sprache ( Github Repo )
quelle
aha
auch ist in Ubuntu:sudo apt install aha
. Beachten Sie jedoch, dass einige Befehle Farben unterdrücken, wenn die Ausgabe eine Pipe ist. Wenn Sie also eine Ausgabe an aha senden, müssen Sie Ihren Befehlen möglicherweise Optionen hinzufügen. Fürls
odergrep
wäre es--color=always
.Oder einfach nur ein Shell-Skript
https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh
Weitere Details zu diesem Skript finden Sie unter http://pablomarin-garcia.blogspot.com/2011/04/converting-ansi-to-html-how-to-convert.html
quelle
Sie können
vim
mit dem AnsiEsc.vim- Plugin versuchen , ANSI-Farben über Escape-Codes anzuzeigen und dann zur Standardausgabe umzuleitenvim -
(stellen Sie sicher, dass Sie aktiviert haben:syntax on
). Dann konvertiert die Datei in HTML durch vim Befehl::TOhtml
. Die generierte HTML-Datei sollte eine farbige Ausgabe haben.Führen Sie den folgenden Befehl aus, um den Quellcode nicht interaktiv in HTML zu konvertieren:
Quelle:
:help g:html_no_progress
(Teil von:help TOhtml
).Hinweis: Sie können
-
anstelle vonmyfile.c
, verwenden, um Code aus der Standardeingabe zu konvertieren.quelle
:help TOhtml
oder:help g:html_no_progress
.Sie können vim verwenden. Dies ist Teil eines Skripts, mit dem ich Diff-Ausgaben in HTML konvertiere.
Danach starte ich sed, um das CSS und den Titel so zu ändern, dass sie genau so sind, wie ich sie haben möchte.
* Bearbeiten: Ich hätte erwähnen sollen, dass die Syntax-Hervorhebung aktiviert sein muss, um Farbe zu erhalten. Ich mache das in meiner .vimrc, aber wenn Sie es hier hinzufügen möchten, wäre es nur eine andere Zeile wie
quelle
ansi2html , auf pypi.
Man kann übermäßig viel Freude daran haben, wenn man die reguläre Shell-Ausgabe durch lolcat und dann durch ansi2html leitet. So etwas wie:
quelle
lolcat
Idee geben, aber ich bin zu beschäftigt zu lachen.ansi2html
Update: Ich habe eine
perl
Methode hinzugefügt , die das Modul HTML :: FromANSI aus CPAN verwendet . Um es zu installieren, extrahieren Sie es einfach in ein Verzeichnis und führen es als root aus:perl -MCPAN -e 'install HTML::FromANSI'
aus diesem Verzeichnis. Die Besonderheit, die zu Ihrer Anfrage passt, ist ein Skript namensansi2html
. Interessanterweise zeigt es nach der Überlagerungk
in den Dateinamen den gleichen Farbverlust wie das Elisp-Shell- Skript ... Hier ein Anwendungsbeispiel:Hier ist die HTML-Ausgabe. wie in Firefox gesehen:
Hier ist eine Methode, die ein Emacs- Elisp-Shell-Skript verwendet ... für das Beispiel mit dem Namen htmlize ... Emacs muss nicht ausgeführt werden.
Ich habe es ursprünglich auf einem schwarzen Hintergrund getestet, aber ich habe festgestellt, dass aus irgendeinem Grund ein weißer Hintergrund nicht gut mit einem der eingeführten Escape-Codes zusammenpasst
\e[K
, der ERASE_LINE (Erase the current line of terminal output) zu sein scheint . Ich habe eine Zeile hinzugefügt, um diesen Escape-Code zu entfernen. Es funktioniert jetzt für einen weißen Hintergrund.Hier ist ein Beispiel für eine Ausgabe mit farbigen Hervorhebungen
ls
, diegrep
zur weiteren farbigen Hervorhebung weitergeleitet wird.Das ist das
elsip-shell
Drehbuch.Hier ist ein Beispiel für die HTML-Ausgabe in Firefox ... Wenn ich Zeit habe, werde ich das Problem der überlagernden ANSI-Codes genauer untersuchen. wo die roten
k
s die grünen dateinamen überlappen, aber das liegt nur an einem hastig gewählten test regex für grep ... (vielleicht hat das etwas\e[K
einfluss ...quelle
Für diejenigen, die einen Befehl haben, der unter der Annahme geschrieben ist, dass die über Pipes übertragene Ausgabe niemals Farbe hat (z. B. einige Test-Frameworks), kann es nützlich sein, das Skript-Dienstprogramm zu verwenden, um zuerst die Ansi-Ausgabe zu speichern. Dies kann dann an aha oder die anderen genannten Dienstprogramme weitergeleitet werden.
quelle
Dies ist nur eine Fortsetzung der @ user17591-Lösung - vim scripting :
chmod es und
Verwendung:
htmlvim file
(um file.html zu erzeugen)quelle