Получение данных RTF из буфера обмена Mac OS X (буфер обмена) - PullRequest
15 голосов
/ 30 марта 2010

Согласно странице 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 'the clipboard as «class RTF »' дает ответ «data RTF 7B тонна закодированного в Hex дерьма 7D».Может ли AppleScript преобразовать эти шестнадцатеричные данные в текст, с которым я могу играть?

Ответы [ 4 ]

15 голосов
/ 31 марта 2010

Я не вижу никакого способа сделать это из AppleScript, но так как вы все равно работаете в оболочке, я просто постобработаю это: «шестнадцатеричное дерьмо» - это данные RTF, которые вы хотите , Самый простой сценарий, который я могу придумать, это

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 оценивают сценарий, заданный для каждой строки, причем эта строка неявно хранится в $_. (Если вы хотите, чтобы этот скрипт находился в своем собственном файле, просто убедитесь, что строка 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.

9 голосов
/ 20 июня 2013

Я думаю, что по крайней мере на OS X 10.8 это будет работать, если вы скопировали HTML-контент из Chrome:

osascript -e 'the clipboard as "HTML"'|perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
0 голосов
/ 03 июля 2016

Это очень просто с помощью AppleScript (протестировано в 10.11 El Capitan):

set the clipboard to (the clipboard as «class RTF »)

Вы можете создать Сервис через Automator:

  1. Открыть Automator
  2. сделать новый сервис («Dienst» на немецком языке)
  3. добавить "выполнить AppleScript"
  4. ввод: ничего; выход; заменяет выделение

Сценарий:

-- name: convert to RTF
on run {input, parameters}
    set the clipboard to (the clipboard as «class RTF »)
    return the clipboard
end run

Готово. Теперь сохраните новый сервис и попробуйте его: выделите текст, затем перейдите в меню приложений и выберите «Сервисы»> «конвертировать в RTF»

0 голосов
/ 30 марта 2010

я нашел разговор об этом с помощью быстрого поиска в Google

...