
Если я вырежу HTML из окна мессенджера Pidgin, я могу легко вставить его дословно в новое HTML-сообщение в Thunderbird. Все форматирование (шрифты, цвета и т. д.) сохраняется, так что, похоже, в моем буфере обмена Ubuntu 13.10 должен быть где-то исходный HTML.
Но я хотел бы подправить исходный HTML-код.
Как мне на самом деле получить исходный HTML-код, если он находится в буфере обмена? Я бы хотел просто вставить его в текстовый файл, поработать над разметкой в Vim или где-то еще, а затем использовать этот исходный HTML-код на веб-странице или передать его в Thunderbird "Вставка → HTML".
Хм, может быть что-то вродеВставитьImg(упоминается вПеренос графики из буфера обмена на диск?), но использовать request_rich_text()
вместо request_image()
? Я бы не отказался от использования небольшого скрипта Python в тех редких случаях, когда мне нужно получить исходный HTML-код из буфера обмена.
На самом деле содержимое буфера обмена может оказаться «форматированным текстом».
Скрипт 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
Я понимаю, к чему ты клонишь. Попробуй вставить во что-то, что принимает wysiwyg, отредактировать там, а затем скопировать-вставить в 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()
Это позволяет выполнить полный цикл редактирования, изменяя буфер обмена «на месте».
Я использую его, чтобы компенсировать раздражающее отсутствие функции HTML-редактора в Thunderbird:
- выбрать всев ctrl+aокне составления сообщения
- ctrl+c
- запустите указанный выше скрипт, который откроет редактор –
- внесите изменения в исходный HTML-код
- сохранить и выйти
- ctrl+vв окне создания сообщения перезаписывает весь контент вашей версией, отредактированной в формате HTML.
решение4
ЕстьОтветпри котором напрямую используется xclip
утилита:
xclip -selection clipboard -o -t text/html
Я считаю, что сейчас это самый простой и надежный вариант, поскольку GTK3/Python3, похоже, внес некоторые изменения, которые нарушили первоначальный ответ.