カラー出力をHTMLに変換する


58

カラー出力を提供するツールがあります:

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

問題は、任意のプログラムの色付き出力を色付きhtmlファイルに変換する方法ですか?

他の出力形式も適している可能性があります(LaTeXが最適です)。htmlは他の形式に簡単に変換できるため、良い出発点だと思います。

(端末のカラーコードを維持する方法については、回答に従ってください:https : //unix.stackexchange.com/a/10832/9689-... | unbuffer command_with_colours arg1 arg2 | ...ツールのアンバッファー予想の一部です)


1
dwdiffが好きなら、diffの出力を色付けするラッパーであるcolordiffも好きかもしれません。私は何年もdiff = colordiffのエイリアスを作成してきましたが、問題はありませんでした。
ジョナサンハートリー

回答:


34

答えこの質問はあなたが望むものと考えられます。

探している変換を行うこれらのツールにリンクしています。


3
ahaUbuntuでも利用できますsudo apt install aha。ただし、出力がパイプの場合、一部のコマンドは色を抑制することに注意してください。そのため、出力をahaに送信する場合、コマンドにオプションを追加する必要がある場合があります。以下のためlsgrep、それは次のようになります--color=always
mivk

19

Unix&Linux Stack Exchangeへようこそ!これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
slm

5

あなたは試すことができvimAnsiEsc.vimの、その後に標準出力にリダイレクトし、エスケープコードを通じてANSIカラーを表示するプラグインvim -(あなたが起動していることを確認します:syntax on)。次に、vimコマンドでファイルをHTMLに変換します:TOhtml。生成されたHTMLファイルには色付きの出力が必要です。


ソースコードを非対話形式でhtmlに変換するには、次のコマンドを試してください。

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

ソース:(の:help g:html_no_progress一部:help TOhtml)。

注:の-代わりにを使用してmyfile.c、標準入力からコードを変換できます。


これはうまくいきませんでした。コマンドを説明すると助かります。
ケン・イングラム

このコマンドはVimマニュアルで説明されています。:help TOhtmlまたはで確認してください:help g:html_no_progress
ケノーブ

あなたが書いた方法は紛らわしいです。AnsiEsc.vimプラグインを使用します。:syntax onで有効にすると、ANSIフォーマットで適切にスタイル設定されたテキストを見ることができますか?その後、:TOhtml?を使用してファイルをhtmlとして保存します。
ケンイングラム

1
手順を改善する方法について提案があれば、気軽に改善してください。
ケノーブ

2
私はコメントでそれらを提供しました。指示を正しく理解した場合。答えを編集することを提案していると思いますか?大丈夫です。私はそれを行うことができます。
ケン・イングラム

4

vimを使用できます。これは、diff出力を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

この後、sedを実行してCSSとタイトルを希望どおりに変更します。

*編集:色を取得するには、構文の強調表示をオンにする必要があることを述べたはずです。私は.vimrcでそれを行いますが、ここに追加したい場合は、次のような別の行になります

-c ':syntax on' \

OK。それでは、任意のプログラムの出力をどのように変換しますか?
グジェゴシWierzowiecki

1
わかりました、最初は分かりませんでした。ANSIカラーコードを変換したい場合、ここでの答えはおそらくあなたが望むものです。簡単なハックが必要な場合は、ANSIコードをHTMLに置き換える一連の行を含むsedスクリプトを作成するとうまくいきます。's、^ [\ [31m、<span style =' color:red '>、gs、^ [\ [m、</ span>、g']のようなものは高速で汚れますが、おそらく十分です。
user17591

このリンクをもう1つの答えとして@ user17591に入れてもらえますか?私の質問への回答として選択し、あなたの評判を高めたいです。
グジェゴシWierzowiecki

OK。Perlモジュールへの直接リンクを追加して、後続のユーザーが1つ少ないレベルの間接参照でモジュールを見つけられるようにしました。また、帰属の元の質問/回答へのリンクも追加しました。
user17591

@ user17591、素敵なソリューション!(+1)私はあなたのソリューションの2年前のvimshellフォローアップバリアントを追加するだけです!
JJoao

3

ansi2htmlは、PyPIに、。

通常のシェル出力をlolcatを介してansi2htmlを介してパイプすることにより、適度な楽しさを引き出すことができます。何かのようなもの:

… | lolcat -f | ansi2html -ip

LaTeX出力の場合は+1。lolcatアイデアだけで+1を差し上げますが、私は笑いすぎて忙しいです。
ニールメイヒュー

fyi、Debianのcolorized-logsパッケージは互換性のないansi2htmlバイナリ実行可能ファイルをインストールします
-scruss

1

更新:CPANのHTML :: FromANSIモジュールperlを使用してメソッドを追加しました。これをインストールするには、単にディレクトリに抽出し、そのディレクトリからroot:として実行します。リクエストに合った特定の機能は、というスクリプトです。興味深いことに、elisp-shellスクリプトと同じように、ファイル名のオーバーレイ後に同じ色の消失が表示されます。使用例を次に示します。 perl -MCPAN -e 'install HTML::FromANSI'ansi2htmlk

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

これがhtml出力です。Firefoxで見られるように:

ここに画像の説明を入力してください


次に、emacs elisp-shellスクリプトを使用する方法を示します ...例として、htmlizeと呼ばれる... Emacsを実行する必要はありません。

私はもともと黒い背景でテストしましたが、何らかの理由で、導入されたエスケープコードの1つで白い背景がうまく再生さ\e[Kれないことに気付きました。これはERASE_LINE (端末出力の現在の行を消去)のようです。このエスケープコードを削除する行を追加しました。白い背景で動作するようになりました。

以下は、さらに色を強調lsするgrepためにパイプされた色強調出力の例です。

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

これは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"))

Firefoxでのhtml出力のサンプルを次に示します。時間があれば、オーバーレイするANSIコードの問題を詳しく調べます。ここで、赤いksは緑のファイル名と重複していますが、それはgrepのテスト正規表現を急いで選択したためにのみ存在し\e[Kます...

ここに画像の説明を入力してください


いいね。このタスク用の小さなツールがあれば素晴らしいと思います(emacsは約100MBかかります)。
グジェゴシWierzowiecki

1

パイプ出力が色を持たないことを前提に書かれたコマンド(テストフレームワークなど)がある場合は、スクリプトユーティリティを使用して最初にansi出力を保存すると便利です。これは、ahaまたは言及されている他のユーティリティにプッシュできます。


1

これは@ user17591ソリューションのフォローアップです-vim スクリプト

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

chmodそれと

使用法:htmlvim file(file.htmlを生成するため)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.