如果我从 Pidgin 即时通讯窗口剪切一些 HTML,我可以轻松地将其逐字粘贴到 Thunderbird 中的新 HTML 电子邮件中。所有格式(字体、颜色等)都保留了下来,因此看来我的 Ubuntu 13.10 桌面剪贴板中一定有 HTML 源代码。
但我想调整 HTML 源代码。
当 HTML 源代码在剪贴板中时,我如何才能获取它?我只想将其放入文本文件中,在 Vim 或其他程序中处理标记,然后在网页中使用此 HTML 源代码或将其提供给 Thunderbird 的“插入 → HTML”。
嗯,也许是这样的粘贴图片(提及于将剪贴板上的图形传输到磁盘吗?),但使用request_rich_text()
而不是request_image()
? 当我偶尔想从剪贴板获取 HTML 源代码时,我不会介意使用一个小的 Python 脚本。
剪贴板中的内容实际上可能是“富文本”。
Python 脚本来自这个答案输出
Current clipboard offers formats: ('TIMESTAMP', 'TARGETS', 'MULTIPLE',
'SAVE_TARGETS', 'COMPOUND_TEXT', 'STRING', 'TEXT', 'UTF8_STRING', 'text/html',
'text/plain')
事实证明我的 Pidgin 日志是 HTML 格式的,所以这是获取这HTML 源代码,完全绕过剪贴板。我仍然对原始问题的答案感兴趣(如何从剪贴板检索 HTML)。
答案1
答案2
我明白你的意思。尝试粘贴到支持所见即所得格式的内容中,在那里编辑,然后复制粘贴到 Thunderbird 中?
也许 bluegriffon 或 libreoffice writer 会起作用。
答案3
这是对脚本的修改,它实际上允许編輯直接访问 html。
它还可以处理字符编码问题:如果您回复使用 Windows 的用户的电子邮件,则编码很可能停留在 UTF-16,这不利于编辑。您可能需要安装chardet
模块在 Python 中。
'vi'
用您选择的文本编辑器替换subprocess.call(...
。
#!/usr/bin/env python
import gtk
import chardet
import os
import getopt
import subprocess
dtype = 'text/html'
htmlclip = gtk.Clipboard().wait_for_contents(dtype).data
encoding = chardet.detect(htmlclip)['encoding']
# Shove the clipboard to a temporary file
tmpfn = '/tmp/htmlclip_%i' % os.getpid()
with open (tmpfn, 'w') as editfile:
editfile.write(htmlclip.decode(encoding))
# Manually edit the temporary file
subprocess.call(['vi', tmpfn])
with open (tmpfn, 'r') as editfile:
htmlclip = editfile.read().encode(encoding)
# Put the modified data back to clipboard
gtk.Clipboard().set_with_data(
[(dtype,0,0)],
lambda cb, sd, info, data: sd.set(dtype, 8, htmlclip),
lambda cb, d: None )
gtk.Clipboard().set_can_store([(dtype,0,0)])
gtk.Clipboard().store()
这将完成一个完整的编辑循环,“就地”修改剪贴板。
我用它来弥补 Thunderbird 缺少 html 编辑器功能的缺点:
- 全选在ctrl+a邮件撰写窗口中
- ctrl+c
- 运行上述脚本,打开一个编辑器 -
- 对 html 源代码进行修改
- 保存并退出
- ctrl+v在撰写窗口中用您编辑的 html 版本覆盖全部内容。
答案4
有一个答案直接使用该xclip
实用程序:
xclip -selection clipboard -o -t text/html
我发现它现在是最简单和最可靠的,因为 GTK3/Python3 似乎引入了一些破坏原始答案的变化。