Получение данных 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, даже если они существуют на монтажном столе. Есть ли другой простой способ получить RTF-текст того, что готово для вставки?

Я попробовал AppleScript, но osascript -e «буфер обмена как« класс RTF »» дает ответ «data RTF 7B тонна закодированного в Hex дерьма 7D» . Может ли AppleScript преобразовать эти шестнадцатеричные данные в текст, с которым я могу играть?

15
задан Carl 30 March 2010 в 12:57
поделиться

2 ответа

Я не вижу способа сделать это изнутри 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-вывод.

15
ответ дан 1 December 2019 в 03:04
поделиться

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

0
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: