Я новичок в Applescript и написал сценарий для безопасного удаления файлов, в результате чего открывается диалоговое окно выбора файла и подтверждения, а затем вытирает файл. Однако, когда я пытался добавить функции перетаскивания, он не работает, как все говорят, что это должно. Значок никогда не выделяется (указывает, что перетаскивание работает), а Finder просто копирует файл в папку приложения, а не перетаскивает его в приложение!Applescript drag and drop не работает
Вот оригинальный сценарий, который работает отлично (сохранить как «Wipe File.app»):
on run
set the_file to choose file with prompt "Select the file to wipe:"
wipe_file(the_file)
end run
to wipe_file(file_to_wipe)
set file_to_wipe to POSIX path of file_to_wipe
set ok_to_wipe to display dialog "Are you sure you want to wipe \"" & file_to_wipe & "\"?" buttons {"Cancel", "OK"} default button "Cancel"
set ok_to_wipe to button returned of ok_to_wipe
if (ok_to_wipe = "OK") then
tell application "Terminal"
activate
do script "set prompt='';cls;srm -v \"" & file_to_wipe & "\""
delay 3
close front window
set still_active to count windows
if still_active = 0 then
quit
end if
end tell
end if
end wipe_file
Затем я добавил следующее к вершине. Запуск сценария по-прежнему работает с диалоговым окном выбора файла, но система никогда не позволяет перетаскивать мышью!
on open the_files
repeat with the_file in the_files
wipe_file(the_file)
end repeat
end open
Везде, где я смотрел (Google, переполнение стека), все говорят, что этот подход должен работать, но это не так. Я даже попытался удалить блок on run...
, оставив только on open...
, но тогда скрипт ничего не делает.
EDIT
Если создать новый сценарий с выше содержанием, и сохранить его в качестве приложения, а затем скопировать его в папку Applications, и вставить пользовательский значок на него, перетаскивание работает. Однако старый сценарий, который изначально не имел поддержки «на открытом», по-прежнему не работает даже после того, как в скрипт была добавлена поддержка «открыто». Итак, теперь я думаю, что Apple должна установить какой-то специальный атрибут, чтобы указать, что скрипт поддерживает перетаскивание и по какой-то причине (потому что у него его не было при первом сохранении?) Apple не установила этот атрибут для моего файла , Глядя на Get Info и Show Package Contents для обоих приложений, есть некоторые странные различия:
- Вновь созданный (рабочий) приложение является только 693 KB, но старый (предположительно идентичны, но сломана) один 9,4 MB!
- В папке «Содержание/MacOS» новое (рабочее) приложение имеет файл «капелька», а старый (сломанный) имеет файл «апплет».
Первый из них странный, и заставило меня подумать о некотором повреждении файла, но второй из них явно является магическим параметром, который Apple использует для перетаскивания. Я проверил, что если я удалю блок «on open» из рабочего скрипта и сохраню его, Apple сделает не, обновите значок сценария, чтобы удалить стрелку «drop», и вы все равно можете перетаскивать на него файлы, но Ничего не произошло.
Так что кажется, что Apple решает, поддерживает ли сценарий перетаскивание или не первый раз, когда он сохраняет сценарий, а после этого вы получаете неправильные результаты, если не сохранить новый скрипт!
Причина, я открыл окно в терминале, и использовал многословный вариант для СУР, так что я могу видеть прогресс, как она идет. У меня есть «задержка 3», так что я увижу результаты в течение 3 секунд после ее завершения, прежде чем она закроет окно. – GTB
Я попробовал свой скрипт (сохранен как приложение на рабочем столе), и он работал для перетаскивания, хотя у него не было окна подтверждения. Затем я скопировал и вставил свой скрипт поверх вас, и он также работал для перетаскивания, с подробным окном подтверждения! Но это точная текстовая копия скрипта, который не работает, но не в папке «Приложения» и без специального значка. Позвольте мне поэкспериментировать с: а) копированием рабочего скрипта в приложения; б) поместить пользовательский значок на рабочий скрипт, чтобы увидеть, если он сломается (я подумал о пользовательском значке, когда увидел специальную стрелку «drop» на значке скрипта). – GTB
Спасибо за помощь, это была не настоящая проблема, но это привело меня к обнаружению проблемы (см. Мой отредактированный вопрос). По-видимому, Apple решает, когда вы сначала сохраняете файл, будь то «апплет» или «капелька», в зависимости от наличия «on open», и после этого он не изменит его, даже если вы отредактируете содержимое для добавления или удалите блок «на открытом»! Кроме того, теперь я включил ваш блок «цитата» и «попытаюсь ... исправить попытку» в свой первоначальный скрипт. – GTB