搜索
Table_bottom

标签云
Table_bottom

分类
Table_bottom

声明
文章若未特別註明,皆採用 知识共享许可协议 請自覺遵守
Table_bottom

存档
Table_bottom

匆匆过客
28777
Table_bottom

功能
Table_bottom

長終端輸出“截屏”

今天偶然想把兩段終端輸出轉化成圖片發給別人(爲了保留顏色)。然而輸出特別長,一屏不足以顯示下來。於是想有沒有什麼方法可以讓我將終端的完整輸出截出來,畢竟手動一幅幅地裁剪太蠢了。

題目是聯想到一些Android設備上的所謂“長截屏”而取的,意義很是相似。

 

概要

由於沒有找到專門的工具,所以打算自己hack一個出來,故而事情分兩步:

  1. 將命令輸出存下來
  2. 將輸出轉化成圖片

然而在進行第二步的時候發現沒有工具可以一步到位,所以就通過HTML進行中轉。於是最終變成了三步:

  1. 將命令輸出存下來
  2. 將之前保存的輸出轉換成HTML
  3. 將HTML轉換成圖片

第一步:保存輸出

第一步可以直接重定向(加上強制彩色輸出),但我這種懶人使用了script命令。

script可以自動把我所有命令的輸出(帶提示行/prompt)都存下來,而且不用我再去一個個強制彩色輸出。而且啓動它以後會進入專門的環境,於是我可以首先在一個臨時目錄執行script,之後cd到我要執行命令的目錄,最後直接Ctrl+D以免弄亂我的正常目錄。

由於這許多優勢,我傾向於使用script,而不是採取輸出重定向的方案。

第二步:輸出轉HTML

第二步用ansi2html(AUR中有)將輸出轉換成HTML。由於是終端輸出,後面加上--bg=dark參數將背景設爲黑色會更合習慣;由於我的終端模擬器用的配色方案是Tango(我覺得比xterm-256color好看),所以還要加上--palette=tango。最終的命令就是這樣:

ansi2html --bg=dark --palette=tango < typescript > typescript.html

(理論上管道直接到ansi2html的輸入是可行的,但需要手動強制彩色輸出,畢竟多數軟件還是會探測輸出是否是終端的。)

然後可以先找你的瀏覽器看一下輸出是否符合你的預期(主要是配色方案這部分),確定後就可以進行下一步了。

第三步:HTML轉圖片

把HTML轉爲圖片的工具很多,我選了CutyCapt(依然是AUR上有)這麼一個傢伙,畢竟它滿足我目前的所有功能需求,而且用QtWebKit所以體積很小(我本來就有幾乎全套的Qt)。

對於我們的需求,其基本用法是:

CutyCapt --url=http://www.example.org/ --out=localfile.png

然而其默認的字號太小,怎麼看怎麼不舒服,所以我加了200%的縮放--zoom-factor=2。由於全都是文字,所以又加上僅縮放文字的開關--zoom-text-only=on(並沒有什麼卯月系列)。所以最終命令就成了:

CutyCapt --url=file://`pwd`/typescript.html --out=output.png --zoom-factor=2 --zoom-text-only=on

 

大功告成。(並沒有)

 

 

 

 

 

 

之後還需要手動使用圖片處理軟件(剪裁就可以了,所以gwenview足矣)將多餘部分去除。這樣就大功告成,可以拿去浪了。(其實還是有點小問題)

 

 

 

 

 

 

 

懸而未解

  • 經對比發現,輸出中的高亮並不正確,而且似乎沒有加粗。
  • powerline的輸出無法正確呈現。