Chuyển đổi đầu ra màu thành html


58

Có các công cụ cung cấp đầu ra màu:

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

Câu hỏi là: Làm thế nào để chuyển đổi đầu ra màu của chương trình tùy ý thành tệp html màu?

Các định dạng đầu ra khác cũng có thể phù hợp (LaTeX sẽ rất tuyệt). Tôi nghĩ html là điểm khởi đầu tốt, vì thật dễ dàng để chuyển đổi nó sang các định dạng khác.

(Đối với tò mò làm thế nào để giữ các mã màu thiết bị đầu cuối, hãy làm theo câu trả lời: https://unix.stackexchange.com/a/10832/9689 ... | unbuffer command_with_colours arg1 arg2 | ... - Công cụ unbuffer là một phần của mong đợi )


1
Nếu bạn thích dwdiff, bạn cũng có thể thích colordiff, một trình bao bọc tô màu đầu ra của diff. Tôi đã bí danh diff = colordiff trong nhiều năm, không bao giờ có bất kỳ vấn đề.
Jonathan Hartley

Câu trả lời:


34

Câu trả lời cho câu hỏi này có lẽ là những gì bạn muốn.

Nó liên kết đến các công cụ này, công cụ chuyển đổi mà bạn đang tìm kiếm:


3
ahacũng có sẵn trong Ubuntu : sudo apt install aha. Nhưng lưu ý rằng một số lệnh sẽ triệt tiêu màu khi đầu ra là một đường ống. Vì vậy, khi gửi đầu ra đến aha, bạn có thể cần thêm tùy chọn vào các lệnh của mình. Cho lshoặc grepnó sẽ được --color=always.
mivk

19

Chào mừng bạn đến với Sàn giao dịch Unix & Linux! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
slm

5

Bạn có thể thử vimvới plugin AnsiEsc.vim để xem màu ANSI thông qua mã thoát, sau đó chuyển hướng đến đầu ra tiêu chuẩn vim -(đảm bảo bạn đã kích hoạt :syntax on). Sau đó chuyển đổi tệp sang HTML bằng lệnh vim : :TOhtml. Tệp HTML được tạo phải có đầu ra màu.


Để chuyển đổi mã nguồn không tương tác thành html, hãy thử lệnh sau:

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

Nguồn: :help g:html_no_progress(một phần của :help TOhtml).

Lưu ý: Bạn có thể sử dụng -thay vì myfile.c, để chuyển đổi mã từ đầu vào tiêu chuẩn.


Điều này đã không làm việc cho tôi. Nó sẽ giúp nếu bạn sẽ giải thích lệnh.
Ken Ingram

Lệnh này đã được giải thích trong hướng dẫn sử dụng Vim, kiểm tra bằng :help TOhtmlhoặc :help g:html_no_progress.
kenorb

Cách bạn viết thật khó hiểu. Sử dụng plugin AnsiEsc.vim. Kích hoạt nó bằng: cú pháp trên, và sau đó bạn có thể thấy văn bản được tạo kiểu đúng theo định dạng ANSI? Sau đó, lưu tệp dưới dạng html bằng cách sử dụng: TOhtml?
Ken Ingram

1
Nếu bạn có bất kỳ đề xuất nào về cách cải thiện các bước, vui lòng cải thiện.
kenorb

2
Tôi đã đề nghị họ trong nhận xét của tôi. Nếu tôi hiểu hướng dẫn chính xác. Tôi đoán bạn đang đề nghị tôi chỉnh sửa câu trả lời? Cái nào cũng được. Tôi có thể làm điều đó.
Ken Ingram

4

Bạn có thể sử dụng vim. Đây là một phần của tập lệnh tôi sử dụng để chuyển đổi đầu ra khác sang 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

Sau này, tôi chạy sed để thay đổi CSS và tiêu đề chính xác như những gì tôi muốn.

* Chỉnh sửa: Tôi nên đã đề cập rằng để có được màu sắc, bạn cần phải bật đánh dấu cú pháp. Tôi làm điều đó trong .vimrc của tôi, nhưng nếu bạn muốn thêm nó vào đây thì nó sẽ chỉ là một dòng khác như

-c ':syntax on' \

Đồng ý. Vì vậy, làm thế nào bạn muốn chuyển đổi đầu ra của chương trình tùy ý, giả sử: grep?
Grzegorz Wierzowiecki

1
Ok, lúc đầu tôi không hiểu. Nếu bạn muốn chuyển đổi mã màu ANSI, thì câu trả lời ở đây có lẽ là những gì bạn muốn. Nếu bạn chỉ cần một bản hack nhanh, thì việc tạo một tập lệnh sed với một loạt các dòng thay thế mã ANSI bằng HTML sẽ hoạt động. Một cái gì đó như 's, ^ [\ [31m, <span style =' color: red '>, gs, ^ [\ [m, </ span>, g' sẽ nhanh và bẩn, nhưng có thể đủ.
dùng17591

Bạn có thể @ user17591 đặt liên kết này như một câu trả lời nữa không? Tôi muốn chọn nó làm câu trả lời cho câu hỏi của tôi và nâng cao danh tiếng của bạn.
Grzegorz Wierzowiecki

Đồng ý. Tôi đã thêm một liên kết trực tiếp đến mô-đun Perl để bất kỳ người dùng tiếp theo nào cũng có thể tìm thấy nó với một mức độ ít hơn, nhưng cũng là một liên kết đến câu hỏi / câu trả lời ban đầu để ghi nhận.
dùng17591

@ user17591, giải pháp hay! (+1) Tôi vừa kết thúc thêm một biến thể theo dõi vimshell 2 năm tuổi của giải pháp của bạn!
JJoao

3

ansi2html , trên pypi.

Người ta có thể lấy được một lượng thái quá hưởng thụ từ đường ống đầu ra vỏ thường xuyên qua lolcat sau đó thông qua ansi2html. Cái gì đó như:

… | lolcat -f | ansi2html -ip

+1 cho đầu ra LaTeX. Tôi sẽ cho bạn +1 cho lolcatý tưởng một mình, nhưng tôi quá bận rộn để cười.
Neil Mayhew

fyi, gói nhật ký màu của Debian cài đặt một ansi2htmltệp thực thi nhị phân không tương thích
kiểm tra

1

Cập nhật: Tôi đã thêm một perlphương thức, sử dụng mô-đun HTML :: FromANSI từ CPAN .. Để cài đặt nó, chỉ cần giải nén nó vào một thư mục và chạy, như root: perl -MCPAN -e 'install HTML::FromANSI'từ thư mục đó. Tính năng đặc biệt phù hợp với yêu cầu của bạn là một tập lệnh được gọi ansi2html. Thật thú vị, nó cho thấy sự mất màu tương tự sau khi được phủ lên ktrong tên tệp, cũng như tập lệnh elisp-shell ... Đây là một ví dụ sử dụng:

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

Đây là đầu ra html. như đã thấy trong Firefox:

nhập mô tả hình ảnh ở đây


Đây là một phương thức sử dụng tập lệnh elac -shell emacs ... ví dụ, được gọi là htmlize ... Emacs không cần phải chạy.

Ban đầu tôi đã thử nó trên nền đen, nhưng tôi nhận thấy rằng vì một số lý do, nền trắng không chơi tốt với một trong các Mã thoát được giới thiệu \e[K, dường như là ERASE_LINE (Xóa dòng đầu ra hiện tại) . Tôi đã thêm một dòng để loại bỏ Mã thoát này. Bây giờ nó hoạt động cho một nền trắng.

Dưới đây là một ví dụ về đầu ra lsđược tô sáng màu từ đường ống đến grepđể làm nổi bật màu hơn nữa.

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

đây là elsip-shellkịch bản

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

Đây là một ví dụ về đầu ra html, trong Firefox ... Nếu tôi có thời gian, tôi sẽ xem xét thêm về vấn đề mã ANSI. trong đó các màu đỏ kchồng lên các tên tập tin màu xanh lá cây, nhưng điều đó chỉ có ở đó vì một chế độ thử nghiệm được chọn vội vàng cho grep ... (có lẽ đó là một cái gì đó \e[Kảnh hưởng ...

nhập mô tả hình ảnh ở đây


Nghe hay đấy. Sẽ thật tuyệt nếu có công cụ nhỏ hơn cho nhiệm vụ này (emacs mất ~ 100MB).
Grzegorz Wierzowiecki

1

Đối với những người có lệnh được viết dựa trên giả định rằng đầu ra đường ống sẽ không bao giờ có màu (ví dụ: một số khung kiểm tra), bạn có thể thấy hữu ích khi sử dụng tiện ích tập lệnh để lưu đầu ra ansi. Điều này sau đó có thể được đẩy đến aha hoặc các tiện ích khác được đề cập.


1

Đây chỉ là phần tiếp theo của giải pháp @ user17591 - kịch bản vim :

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

chmod nó và

Cách sử dụng: htmlvim file(để sản xuất file.html)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.