Если я вырежу какой-нибудь HTML из окна мессенджера Pidgin, я могу легко вставить его дословно в новое HTML-письмо в Thunderbird. Все форматирование (шрифты, цвета и т. Д.) Сохраняются, поэтому кажется, что в моем буфере обмена настольных компьютеров Ubuntu 13.10 где-то должен быть источник HTML.
Но я бы хотел настроить источник HTML.
Как я могу получить источник HTML, если он находится в буфере обмена? Я хотел бы просто выбросить его в текстовый файл, поработать с разметкой в Vim или чем-то еще, а затем использовать этот источник HTML на веб-странице или передать его в Thunderbird «Вставить → HTML».
Хм, может быть что-то вроде PasteImg (упоминается в Получение графики из буфера обмена на диск? ), но с использованием 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 из буфера обмена).
Найденный им! Вот то, как достигнуть источник HTML, когда существуют некоторые на Вашем буфере обмена:
#!/usr/bin/env python
import gtk
print (gtk.Clipboard().wait_for_contents('text/html')).data
Это помогло.
Это не работало на меня. Мой обратный вызов никогда не вводился.
Я вижу то, что Вы пытаетесь достигнуть. Попытайтесь вставить во что-то, что берет WYSIWYG, отредактируйте его там, затем скопируйте вставку в Thunderbird?
, Возможно, bluegriffon или libreoffice писатель будет работать.
Вот модификация Вашего сценария, который на самом деле позволяет редактирование 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()
Это делает полный цикл редактирования, изменяя буфер обмена “ в place”.
я использую его для восполнения раздражающего отсутствия Thunderbird функции HTML-редактора:
Я действительно не использую Thunderbird, но необходимо быть в состоянии использовать расширение, чтобы помочь отредактировать источник в Thnderbird - например:
https://addons.mozilla.org/en-us/thunderbird/addon/edit-html-source / <глоток> не обновленный целую вечность глоток>
https://addons.mozilla.org/en-us/thunderbird/addon/stationery /
Существует ответ в https://stackoverflow.com/questions/3261379/getting-html-source-or-rich-text-from-the-x-clipboard, который непосредственно использует xclip
утилита:
xclip -selection clipboard -o -t text/html
я нахожу это самым легким и самым надежным теперь, так как GTK3/Python3, кажется, представил некоторые изменения, которые повредили исходный ответ.
Чтобы получить исходный HTML-код «форматированного текста»:
# Get the HTML source to stdio
xclip -selection clipboard -t text/html -o
У вас есть несколько ЦЕЛЕЙ, например text/plain (по умолчанию), чтобы получить только отображаемый текст. .
Я работаю с простым/текстовым содержимым буфера обмена, используя xsel
:
xsel -b | something | something_else | xsel -b
Довольно полезно, например, для изменить список на TOP n случаев с сортировкой | уникальный -c | сортировать -рн | головка -20
.
В вашем случае измените первый xsel -b
на указанную выше команду xclip
.