1

Я пытаюсь создать апплет, который принимает выбранные элементы в Finder и создает список ссылок RTF в буфере обмена, используя AppleScript.

Код является:

tell application "Finder" to set s to selection
set r to "{\\rtf1"
repeat with i in s
    set t to "Download " & name of i
    set p to POSIX path of (i as text)
    set sed to "echo " & quoted form of p & " | sed s_/Users/0/Dropbox/Public_http://dl.dropbox.com/u/DBid_"
    set l to (do shell script sed) & "?dl"
    set r to r & "{\\field{\\*\\fldinst{HYPERLINK \"" & l & "\"}}{\\fldrslt " & t & "}}\\par "
end repeat
set r to r & "}"
set fc to "echo " & quoted form of r & " | pbcopy"
do shell script fc

Все прекрасно работает, кроме финального "echo" для "pbcopy".

Обратные слеши искажаются и интерпретируются как escape-коды вместо кодов RTF!

Я попытался скопировать окончательное значение var fc вручную и вставить его в Terminal, и это сработало отлично.

Но когда он прибывает из AppleScript, «\» отправляется как «\\», и это нарушает коды RTF.

Спасибо за любую помощь!

3 ответа3

3

Я нашел решение в этой теме: http://macscripter.net/viewtopic.php?id=26498

tell application "Finder" to set s to selection
set r to "\"{\\rtf1"
repeat with i in s
    set t to "Download " & name of i
    set p to POSIX path of (i as text)
    set sed to "echo " & quoted form of p & " | sed s_/Users/0/Dropbox/Public_http://dl.dropbox.com/u/DBid_"
    set l to (do shell script sed) & "?dl"
    set r to r & "{\\field{\\*\\fldinst{HYPERLINK \"" & l & "\"}}{\\fldrslt \"" & t & "\"}}\\par "
end repeat
set r to r & "}\""
do shell script "/bin/bash -c 'echo " & r & " | pbcopy'"
0

Таким образом, проблема заключалась в том, что sh echo по умолчанию интерпретирует escape-последовательности в одинарных кавычках.

(do shell script "echo " & quoted form of "\\t") is tab → true

Любой из них должен сохранить буквальную обратную косую черту:

  • do shell script "shopt -u xpg_echo; echo " & quoted form of "\\t"
  • do shell script "/bin/echo " & quoted form of "\\t"
  • do shell script "bash -c \"echo " & quoted form of "\\t" & "\""

(echo -E не доступно)

0

Вам нужно использовать pbcopy для копирования текста в буфер обмена? AppleScript имеет возможность сделать это самостоятельно, используя что-то вроде этого:

set the clipboard to r

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .