В AppleScript нет способа «ждать изменения буфера обмена», поэтому вам придется «опрашивать» буфер обмена через регулярные промежутки времени.
repeat
петля с паузой
set oldvalue to missing value
repeat
set newValue to the clipboard
if oldvalue is not equal to newValue then
try
if newValue starts with "http://" then
tell application "Safari" to make new document with properties {URL:newValue}
end if
end try
set oldvalue to newValue
end if
delay 5
end repeat
Некоторые могут использовать do shell script "sleep 5"
вместо delay 5
; У меня никогда не было проблем с delay
, но я никогда не использовал его в таких программах, как эта.
В зависимости от модуля запуска, используемого для запуска этой программы, такой сценарий может «связать» приложение и помешать запуску других программ (некоторые средства запуска могут одновременно запускать только одну программу AppleScript).
Приложение «Оставайся открытым» с обработчиком idle
Лучшая альтернатива - сохранить вашу программу как «Оставайтесь открытым» (в диалоговом окне «Сохранить как…») и использовать обработчик idle
для периодической работы.
property oldvalue : missing value
on idle
local newValue
set newValue to the clipboard
if oldvalue is not equal to newValue then
try
if newValue starts with "http://" then
tell application "Safari" to make new document with properties {URL:newValue}
end if
end try
set oldvalue to newValue
end if
return 5 -- run the idle handler again in 5 seconds
end idle