長終端輸出“截屏”
今天偶然想把兩段終端輸出轉化成圖片發給別人(爲了保留顏色)。然而輸出特別長,一屏不足以顯示下來。於是想有沒有什麼方法可以讓我將終端的完整輸出截出來,畢竟手動一幅幅地裁剪太蠢了。
題目是聯想到一些Android設備上的所謂“長截屏”而取的,意義很是相似。
概要
由於沒有找到專門的工具,所以打算自己hack一個出來,故而事情分兩步:
- 將命令輸出存下來
- 將輸出轉化成圖片
然而在進行第二步的時候發現沒有工具可以一步到位,所以就通過HTML進行中轉。於是最終變成了三步:
- 將命令輸出存下來
- 將之前保存的輸出轉換成HTML
- 將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的輸出無法正確呈現。