Согласно странице 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, даже если они существуют на монтажном столе. Есть ли другой простой способ получить RTF-текст того, что готово для вставки?
Я попробовал AppleScript, но osascript -e «буфер обмена как« класс RTF »»
дает ответ «data RTF 7B
тонна закодированного в Hex дерьма 7D»
. Может ли AppleScript преобразовать эти шестнадцатеричные данные в текст, с которым я могу играть?
Я не вижу способа сделать это изнутри AppleScript, но, поскольку вы все равно работаете в оболочке, я бы просто обработал это: «хрень в шестнадцатеричной кодировке» - это данные RTF, которые вам нужны. Самый простой сценарий, который я могу придумать, - это
perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
Объяснение: substr ($ _, 11, -3)
удаляет «RTF данных
и » \ n
бит (каждая гильмета по два байта); pack ("H *", ...)
упаковывает данные в шестнадцатеричном формате в байтовый поток; unpack ("C *", ...)
распаковывает байтовый поток в массив символьных значений; print chr foreach ...
преобразует каждое целое число в массиве в соответствующий ему символ и печатает его; а параметры -ne
оценивают сценарий, указанный для каждой строки, причем эта строка неявно сохраняется в $ _
. (Если вы хотите, чтобы этот сценарий был в отдельном файле, просто убедитесь, что строка 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-вывод.
я нашел разговор об этом с помощью быстрого поиска в google