Farbausgabe in HTML konvertieren

58

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. )

Grzegorz Wierzowiecki
quelle
1
Wenn Sie dwdiff mögen, mögen Sie vielleicht auch colordiff, einen Wrapper, der die Ausgabe von diff koloriert. Ich habe seit Jahren diff = colordiff, hatte nie Probleme.
Jonathan Hartley

Antworten:

34

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:

user17591
quelle
3
ahaauch 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ür lsoder grepwäre es --color=always.
Mivk
19

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

Dreampuf
quelle
Willkommen bei Unix & Linux Stack Exchange! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
slm
5

Sie können vimmit dem AnsiEsc.vim- Plugin versuchen , ANSI-Farben über Escape-Codes anzuzeigen und dann zur Standardausgabe umzuleiten vim -(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:

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

Quelle: :help g:html_no_progress(Teil von :help TOhtml).

Hinweis: Sie können -anstelle von myfile.c, verwenden, um Code aus der Standardeingabe zu konvertieren.

Kenorb
quelle
Das hat bei mir nicht funktioniert. Es würde helfen, wenn Sie den Befehl erklären würden.
Ken Ingram
Dieser Befehl wurde im Vim-Handbuch erklärt, überprüfen Sie ihn mit :help TOhtmloder :help g:html_no_progress.
Kenorb
Die Art und Weise, wie Sie das geschrieben haben, ist verwirrend. Verwenden Sie das Plugin AnsiEsc.vim. Aktivieren Sie es mit: syntax on, und sehen Sie dann den Text, der in der ANSI-Formatierung richtig formatiert ist? Danach speichern Sie die Datei als HTML mit: TOhtml?
Ken Ingram
1
Wenn Sie Vorschläge zur Verbesserung der Schritte haben, können Sie diese gerne verbessern.
Kenorb
2
Ich habe sie in meinem Kommentar angeboten. Wenn ich die Anleitung richtig verstanden habe. Vermutlich schlagen Sie vor, dass ich die Antwort bearbeite? Welches ist in Ordnung. Ich kann das machen.
Ken Ingram
4

Sie können vim verwenden. Dies ist Teil eines Skripts, mit dem ich Diff-Ausgaben in HTML konvertiere.

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

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

-c ':syntax on' \
user17591
quelle
Okay. Wie möchten Sie also die Ausgabe eines beliebigen Programms konvertieren, sagen wir: grep?
Grzegorz Wierzowiecki
1
Ok, ich habe es zuerst nicht verstanden. Wenn Sie ANSI-Farbcodes konvertieren möchten, ist die Antwort hier wahrscheinlich die, die Sie möchten. Wenn Sie nur einen schnellen Hack benötigen, funktioniert das Erstellen eines sed-Skripts mit mehreren Zeilen, die ANSI-Codes durch HTML ersetzen. So etwas wie 's, ^ [\ [31m, <span style =' color: red '>, gs, ^ [\ [m, </ span>, g' wäre schnell und schmutzig, aber möglicherweise ausreichend.
user17591
Könnten Sie @ user17591 diesen Link als eine weitere Antwort setzen? Ich würde es gerne als Antwort auf meine Frage auswählen und Ihren Ruf verbessern.
Grzegorz Wierzowiecki
Okay. Ich habe einen direkten Link zum Perl-Modul hinzugefügt, damit jeder nachfolgende Benutzer es mit einer geringeren Indirektionsebene finden kann, aber auch einen Link zur ursprünglichen Frage / Antwort zur Attribution.
user17591
@ user17591, schöne lösung! (+1) Ich füge am Ende eine 2 Jahre alte Vimshell-Folgevariante Ihrer Lösung hinzu!
JJoao
3

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:

… | lolcat -f | ansi2html -ip
scruss
quelle
+1 für LaTeX-Ausgabe. Ich würde dir +1 für die lolcatIdee geben, aber ich bin zu beschäftigt zu lachen.
Neil Mayhew
Ja, Debians Paket ansi2html
colorized
1

Update: Ich habe eine perlMethode 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 namens ansi2html. Interessanterweise zeigt es nach der Überlagerung kin den Dateinamen den gleichen Farbverlust wie das Elisp-Shell- Skript ... Hier ein Anwendungsbeispiel:

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

Hier ist die HTML-Ausgabe. wie in Firefox gesehen:

Bildbeschreibung hier eingeben


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, die grepzur weiteren farbigen Hervorhebung weitergeleitet wird.

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

Das ist das elsip-shellDrehbuch.

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

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 ks die grünen dateinamen überlappen, aber das liegt nur an einem hastig gewählten test regex für grep ... (vielleicht hat das etwas \e[Keinfluss ...

Bildbeschreibung hier eingeben

Peter.O
quelle
Klingt gut. Es wäre toll, wenn es für diese Aufgabe ein kleineres Tool gäbe (Emacs benötigt ~ 100 MB).
Grzegorz Wierzowiecki
1

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.

Andrew Stretton
quelle
1

Dies ist nur eine Fortsetzung der @ user17591-Lösung - vim scripting :

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

chmod es und

Verwendung: htmlvim file(um file.html zu erzeugen)

Joao
quelle