Получение данных RTF из картона Mac OS X (буфер обмена)
В соответствии со страницей man
для pbpaste
,
-Prefer {txt | rtf | ps}
tells pbpaste what type of data to look for in the pasteboard
first. As stated above, pbpaste normally looks first for plain
text data; however, by specifying -Prefer ps you can tell
pbpaste to look first for Encapsulated PostScript. If you spec-
ify -Prefer rtf, pbpaste looks first for Rich Text format. In
any case, pbpaste looks for the other formats if the preferred
one is not found. The txt option replaces the deprecated ascii
option, which continues to function as before. Both indicate a
preference for plain text.
Однако (по моему опыту, по крайней мере, с 10.6 Snow Leopard), pbpaste -Prefer rtf
никогда, никогда не отказывается от данных RTF, даже когда он существует на картоне. Есть ли еще один простой способ получить текст RTT, готовый для вставки?
Я попробовал AppleScript, но osascript -e 'the clipboard as «class RTF »'
дает ответ «data RTF 7B
тонны хеш-кодированного дерьма 7D»
. Может AppleScript преобразовать эти hexdata в текст, который я могу играть с?
Ответы
Ответ 1
Я не вижу никакого способа сделать это изнутри AppleScript, но поскольку вы все равно работаете в оболочке, я бы просто обработал его: "hex-encoded crap" - это данные RTF, которые вы хотите, Простейший script, о котором я могу думать,
perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
Объяснение: substr($_,11,-3)
отбрасывает биты «data RTF
и »\n
(каждый из байков состоит из двух байтов); pack("H*", ...)
упаковывает шестнадцатеричные кодированные данные в поточный поток; unpack("C*", ...)
распаковывает байтовый поток в массив значений символов; print chr foreach ...
преобразует каждое целое число в массив в соответствующий символ и печатает его; и параметры -ne
оценивают значение script для каждой строки, причем эта строка неявно сохраняется в $_
. (Если вы хотите, чтобы script в своем собственном файле, просто убедитесь, что строка shebang #!/usr/bin/perl -ne
.) Затем, запустив
osascript -e 'the clipboard as «class RTF »' | \
perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
даст вам исходный RTF-выход.
Ответ 2
Я думаю, что по крайней мере на OS X 10.8 это сработает, если вы скопировали HTML-контент из Chrome:
osascript -e 'the clipboard as "HTML"'|perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
Ответ 3
я нашел , об этом быстро просмотрев поиск
Ответ 4
Это очень легко с помощью AppleScript (проверено в 10.11 El Capitan):
set the clipboard to (the clipboard as «class RTF »)
Вы можете создать службу через Automator:
- открыть Automator
- сделать новый сервис ( "Dienst" на немецком языке)
- добавить "выполнить AppleScript"
- вход: ничего; вывод; заменяет Selection
Script:
-- name: convert to RTF
on run {input, parameters}
set the clipboard to (the clipboard as «class RTF »)
return the clipboard
end run
Готово. Теперь сохраните новую службу и попробуйте: выберите текст, затем перейдите в Меню приложений и выберите "Услуги" > "Преобразовать в RTF"