Renkli çıktıyı html'ye dönüştürme


58

Renkli çıktı sağlayan araçlar var:

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

Soru şudur: Renkli rasgele çıktılarını renkli html dosyasına dönüştürmek nasıl?

Diğer çıktı biçimleri de uygun olabilir (LaTeX harika olurdu). Bence html iyi bir başlangıç ​​noktası, çünkü onu diğer formatlara dönüştürmek kolay.

(Terminal renk kodlarını nasıl tutacağınızı merak etmek için lütfen cevabı takip edin : https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - takımın çözülmesinin beklenmedik bir parçası olduğu )


1
Dwdiff'i seviyorsanız, diff'in çıktısını renklendiren bir sarmalayıcı olan colordiff'i de beğenebilirsiniz. Yıllardır diff = colordiff 'i takdim ettim, hiç problem yaşamadım.
Jonathan Hartley

Yanıtlar:


34

Cevabı bu soruya ne istediğinizi muhtemelen.

Bu, aradığınız dönüşümü yapan araçlara bağlanır:


3
ahaUbuntu da mevcuttur: sudo apt install aha. Ancak, bazı komutların, çıktı bir boru olduğunda renkleri göstermeyeceğini unutmayın. Bu nedenle, aha'ya çıktı gönderirken, komutlarınıza seçenekler eklemeniz gerekebilir. İçin lsya grepolurdu --color=always.
mivk


5

Deneyebilirsin vimile AnsiEsc.vim daha sonra standart çıkışa yönlendirmek, kaçış kodlarla ANSI renkleri görüntülemek için eklenti vim -(eğer aktive ettik emin olun :syntax on). Sonra vim komutuyla HTML dosyasını dönüştürmek: :TOhtml. Üretilen HTML dosyasının renkli çıktısı olmalı.


Kaynak kodunu etkileşimli olmayan bir şekilde html'ye dönüştürmek için aşağıdaki komutu deneyin:

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

Kaynak: :help g:html_no_progress(bir kısmı :help TOhtml).

Not: Kodunu standart girdiden dönüştürmek için -yerine kullanabilirsiniz myfile.c.


Bu benim için işe yaramadı. Komutu açıklarsan yardımı dokunur.
Ken Ingram

Bu komut Vim kılavuzunda, :help TOhtmlveya ile işaretlenmiştir :help g:html_no_progress.
kenorb

Bunu senin yazdığın kafa karıştırıcı. AnsiEsc.vim eklentisini kullanın. Şununla etkinleştir: sözdizimi açık, ardından metni ANSI biçimlendirmesinde doğru şekilde stillendirilmiş olanı görebiliyor musunuz? Bundan sonra, dosyayı kullanarak html olarak kaydedin: TOhtml?
Ken Ingram

1
Adımların nasıl iyileştirileceğine dair herhangi bir öneriniz varsa, geliştirmekten çekinmeyin.
kenorb

2
Onları yorumumda önerdim. Talimatı doğru anladıysam. Sanırım cevabı düzenlememi önerdin? Hangisi iyi. Bunu yapabilirim.
Ken Ingram,

4

Vim kullanabilirsiniz. Bu, diff çıktılarını HTML'ye dönüştürmek için kullandığım bir betiğin parçasıdır.

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

Bundan sonra, CSS'yi ve ünvanı tam olarak istediğim gibi olmalarını sağlamak için sed'i çalıştırıyorum.

* Düzenleme: Renk almak için sözdizimi vurgulamanın açık olması gerektiğini söylemeliydim. Bunu benim .vimrc'imde yapıyorum, ancak buraya eklemek isterseniz, bunun gibi bir satır daha olacaktı.

-c ':syntax on' \

Tamam. Öyleyse, keyfi program çıktısını nasıl dönüştürmek istersiniz, diyelim: grep?
Grzegorz Wierzowiecki

1
Tamam, ilk başta anlamadım. Eğer ANSI renk kodlarını dönüştürmek istiyorsanız, o zaman cevap burada ne istediğinizi muhtemelen. Sadece hızlıca kesmek gerekirse, ANSI kodlarını HTML ile değiştiren bir demet satırı içeren sed komut dosyası oluşturmak işe yarar. 'S, ^ [\ [31m, <span style =' color: red '>, gs, ^ [\ [m, </span>, g' gibi bir şey hızlı ve kirli olur, ancak muhtemelen yeterli olur.
user17591,

@ User17591 bu bağlantıyı bir cevap olarak daha koyabilir misiniz? Soruma cevap olarak seçmeyi ve itibarınızı arttırmayı çok isterim.
Grzegorz Wierzowiecki

Tamam. Perl modülüne doğrudan bir bağlantı ekledim, böylece daha sonraki kullanıcılar daha az bir dolaylı indirgeme seviyesi ile bulabilecekler, aynı zamanda öznitelik için orijinal soruya / cevaba bir bağlantı bulabilecekler.
kullanıcı17591,

@ user17591, güzel bir çözüm! (+1) Sonunda, çözümünüzün 2 yaşında bir vimshell takip varyantı ekledim!
JJoao

3

Pypi üzerinde ansi2html.

Bir yoluyla normal kabuk çıkış boru gelen keyfi aşırı miktarda türetilebildiği lolcat ansi2html ile daha sonra. Gibi bir şey:

… | lolcat -f | ansi2html -ip

LaTeX çıkışı için +1. lolcatYalnız fikir için +1 verirdim , ama gülmekle çok meşgulüm.
Neil Mayhew

Bilgin, Debian'ın renklendirilmiş logları paketi uyumsuz bir ansi2htmlikili çalıştırılabilir dosya
yüklüyor

1

Güncelleme: CPAN'dan HTML :: FromANSI modülünüperl kullanarak bir yöntem ekledim. Kurmak için sadece bir dizine çıkartın ve root olarak çalıştırın: o dizindenperl -MCPAN -e 'install HTML::FromANSI' . İsteğinize uygun özel özellik denilen bir komut dosyası ansi2html. İlginçtir ki, elisp-shell betiğinde kolduğu gibi, dosya adlarında üst üste bindikten sonra aynı renk kaybını gösterir ... İşte bir örnek kullanım:

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

İşte html çıktısı. Firefox'ta görüldüğü gibi:

görüntü tanımını buraya girin


İşte bir emacs elisp-shell betiği kullanan bir yöntem ... örneğin, htmlize ... Emacs'ın çalışması gerekmiyor.

Orijinal olarak siyah bir arka plan üzerinde test ettim, ancak bir sebepten dolayı, beyaz arka planın \e[KERASE_LINE (mevcut terminal çıkış satırını sil) gibi görünen , tanıtılan Escape Kodlarından biriyle iyi oynamadığını fark ettim . Bu Escape Kodunu kaldırmak için bir satır ekledim. Şimdi beyaz bir arka plan için çalışıyor.

Burada renk vurgulaması için renklendirilmiş çıktının lsborulanmaya bir örneği verilmiştir grep.

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

bu elsip-shellsenaryo.

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

İşte Firefox'ta html çıktısının bir örneği ... Zaman alırsam, üst üste binen ANSI kodları sorununa daha fazla bakacağım. kırmızıların kyeşil dosya adlarıyla çakıştığı yerlerde , ancak bu sadece grep için aceleyle seçilmiş bir test regex'i nedeniyle var ... (belki de bu \e[Ketkiyi ...

görüntü tanımını buraya girin


Kulağa hoş geliyor. Bu görev için daha küçük bir araç olsaydı harika olurdu (emacs ~ 100MB alır).
Grzegorz Wierzowiecki

1

Borulu çıktının asla renkli olamayacağı varsayımı üzerine yazılmış bir komutu olanlar için (örneğin, bazı test çerçeveleri), önce ansi çıktısını kaydetmek için komut dosyası yardımcı programını kullanmayı yararlı bulabilirsiniz. Bu daha sonra aha'ya veya belirtilen diğer yardımcı programlara itilebilir.


1

Bu sadece @ user17591 çözümünün bir takibi - vim komut dosyası :

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

chmod ve

Kullanım: htmlvim file(file.html üretmek için)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.