好的,我希望堆栈溢出是正确的问题:我已经搜索到了很高的范围,到目前为止还没有找到一个好的解决方案。
我正在为命令行和编程新手写一堆文档,包括他们在与终端窗口交互时可能会看到的很好的截图。我正在考虑在重构文本中执行此操作,以便我可以保持版本控制和多格式(以便以后转换为html,latex / pdf等)。有没有什么方法可以将命令/代码/文本/等保存在文档中以进行版本控制,但仍然以自动方式生成用户友好的截图,以包含在最终文档中?作为一个例子,也许在我的标记中我有类似的东西(我对restructuredtext指令还不是很熟悉,但它们看起来非常强大):
.. terminal:: ls_example.png
pre:
/Users/soneil/Documents/test% ls
post:
/Users/soneil/Documents/test% ls
testfile todo.txt
/Users/soneil/Documents/test%
并获取终端窗口的两个屏幕截图,其中包含相应的文本。更复杂的部分是编辑器之类的ansi字符:
.. terminal:: nano_example.png
pre:
/Users/soneil/Documents/test% ls
testfile todo.txt
/Users/soneil/Documents/test% nano todo.txt
post:
(Either the contents of test.txt right here [with or without editor decoration as well,
which could be faked if needed],
or let a script actually run the command and capture the output somehow)
导致类似:
(很抱歉这些链接,我想我的图片声誉还不够,我也没有足够的声誉来发布两个以上的链接)。
我现在正在研究OSX,但我并没有依赖终端应用程序(甚至是OSX,真的)。如果我可以指定窗口的cols / rows也是很好的。涉及编程,imagemagick,ttyrec等的创意解决方案欢迎;我甚至考虑过与Terminal.app的Applecript交互,但收效甚微。我希望用ansi颜色(例如top,htop的视图)和最好是窗口chrome来获得另一端的东西,所以像png这样的栅格格式到目前为止似乎是合乎逻辑的。
呼!谢谢你的时间 -
答案 0 :(得分:0)
您自动生成屏幕截图的想法很棒,但如果您实际将它们作为图像文件执行,那么它就不会那么好,因为人们无法从中复制和粘贴它们。
我建议使用AppleScript和Mavericks终端中的复制格式文本功能来制作终端显示的富文本副本,并将其转换为HTML以包含在文档中。
这是一个红宝石脚本:
#!/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
command = '/bin/ls -G /'
clipboard = `osascript -e '
tell application "Terminal"
set newTab to do script
delay 0.1
do script "#{command}" in newTab
delay 0.1
activate newTab
-- ⌘-A select all
tell application "System Events" to keystroke "a" using command down
-- ⌘-C copy
tell application "System Events" to keystroke "c" using command down
delay 0.1
do script "exit" in newTab
end tell
get the clipboard as «class RTF »
'`
# this returns "«data RTF 7B5C…27D»"; need to strip out the hex data
hex_data = /[A-F0-9]{2,}/.match(clipboard).to_s
data = [hex_data].pack('H*')
converter = IO.popen('textutil -cat html -stdin -stdout', 'w+')
converter.puts data
converter.close_write
puts converter.gets(sep='')
将command
发送到终端,复制终端内容,从剪贴板中抓取终端内容,并将其转换为HTML。
如果您将该输出直接输入浏览器 you get a copy of your terminal, with fonts and colours preserved, all copy-and-pastable:
输出HTML可能有点混乱,但由于它已经是Ruby内部的数据,您可以编写代码来清理它。如果您仍然希望终端输出周围的终端框架,您可以使用CSS。
希望这有帮助!