Продолжаем знакомство с AppleScript на рабочих и полезных примерах. В прошлый раз мы кратко рассмотрели редактор AppleScript, кинули взглядом на способ интеграции AppleScript с bash/shell командами, ну и сделали небольшой апплет для включения и отключения отображения скрытых/системных файлов и директорий в Finder. В данном маленьком уроке мы сделаем апплет, который, собственно, будет уметь скрывать (или снова отображать) любые файлы или папки. Сказать честно, такой скрипт я уже как-то публиковал, но тогда он позволял скрыть (или снять флаг “скрыто”) только с одного файла или папки за один запуск, что, конечно же, не очень удобно. Сейчас скрипт доработан для работы с большим колличеством файлов/папок одновременно. Ну что ж, приступим. Вставляем данный кусок кода в Редактор AppleScript:
-- при запуске апплета по двойному клику открывается диалоговое окно -- с предложением выбора файлов и папок on run -- < при запуске -- в переменную SelectedFiles заносится массив отмеченных файлов и папок -- параметр multiple selections allowed разрешает выбор одновременно -- нескольких элементов set SelectedFiles to (choose file with multiple selections allowed) -- запускаем цикл, в котором переменной OneFile будет присваиваться -- значение пути к файлу или папке при каждом новом проходе цикла repeat with OneFile in SelectedFiles -- < запускаем цикл -- < выполняем действия с файлом/папкой do shell script "/usr/bin/chflags hidden " & quoted form of POSIX path of OneFile end repeat -- < конец цикла end run -- < конец -- при перетягивании файлов и папок на апплет в переменную -- DroppedFiles заносится массив перетянутых файлов и папок on open DroppedFiles -- < при перетягивании -- запускаем цикл, в котором переменной OneFile будет присваиваться -- значение пути к файлу или папке при каждом новом проходе цикла repeat with OneFile in DroppedFiles -- < запускаем цикл -- < выполняем действия с файлом/папкой do shell script "/usr/bin/chflags hidden " & quoted form of POSIX path of OneFile end repeat -- < конец цикла end open -- < конец
И нажимаем кнопку «Компилировать». Как видно, редактор сам отделил комментарии от рабочего кода при помощи подсветки синтаксиса. Сохраним его в виде приложения: Файл > Экспортировать… > Формат файла: Программа > Сохранить. Мне кажется, что в самом скрипте достаточно комментариев для осознавания того, что в нём происходит, но мне хочется ещё больше «разжевать» происходящее 🙂
Команды on run и end run – это конструкция, код в которой исполняется при обычном запуске апплета (мини-приложения). Далее команда set SelectedFiles to говорит ни что иное, как задать переменной SelectedFiles значение… (choose file with multiple selections allowed) – команда позволяющая открыть диалоговое окно Finder для выбора файлов/папок (выбранные в окне элементы заносятся в переменную SelectedFiles в виде массива), дополнительный параметр with multiple selections allowed активирует возможность одновременного выбора сразу нескольких файлов или папок (без него можно выбрать только один файл или одну папку). Конструкция repeat with…end repeat задаёт цикл, который будет исполняться до тех пор, пока у указанной в этом цикле переменной (в данном случае SelectedFiles) будет хоть один параметр не присвоенный другой переменной – OneFile. Внутри цикла repeat…end repeat можно указывать необходимые действия, в нашем примере мы используем «терминальную» команду ставящую флаг hidden указанному в ней файлу (или папке). Рассмотрим подробнее саму команду:
do shell script "/usr/bin/chflags hidden " & quoted form of POSIX path of OneFile
- do shell script – выполнить shell/bash скрипт (команду), где в кавычках указана сама команда;
- quoted form of POSIX path – команда приобразования пути к указанному в переменной OneFile файлу или папке в текстовом юникод-формате.
То же самое относится и к конструкции on open…end open, только в ней код срабатывает тогда, когда апплет не запускается обычным способом, а когда на него перетягиваются файлы (драг-н-дроп). По аналогии сделаем другой апплет, который будет выставлять флаг nohidden для файлов и папок. То есть будет «включать» отображение для скрытых файлов и папок:
on run -- < при запуске set SelectedFiles to (choose file with multiple selections allowed) repeat with OneFile in SelectedFiles -- < запускаем цикл -- < выполняем действия с файлом/папкой do shell script "/usr/bin/chflags nohidden " & quoted form of POSIX path of OneFile end repeat -- < конец цикла end run -- < конец on open DroppedFiles -- < при перетягивании repeat with OneFile in DroppedFiles -- < запускаем цикл -- < выполняем действия с файлом/папкой do shell script "/usr/bin/chflags nohidden " & quoted form of POSIX path of OneFile end repeat -- < конец цикла end open -- < конец
Ну а теперь, взяв некоторые основы из предыдущего урока, и объединивши их с данным уроком, сделаем универсальный апплет:
on run tell application "Finder" to ¬ display dialog ¬ "Что будем делать? Скрывать или отображать файлы и папки?" with icon 1 with title ¬ "Показать или Спрятать" buttons {"Скрывать", "Отображать", "Ничего"} cancel button 3 if button returned of result = "Скрывать" then set SelectedFiles to (choose file with multiple selections allowed) repeat with OneFile in SelectedFiles do shell script "/usr/bin/chflags hidden " & quoted form of POSIX path of OneFile end repeat else if button returned of result = "Отображать" then set SelectedFiles to (choose file with multiple selections allowed) repeat with OneFile in SelectedFiles do shell script "/usr/bin/chflags nohidden " & quoted form of POSIX path of OneFile end repeat end if end run on open DroppedFiles tell application "Finder" to display dialog ¬ "Что будем делать с выбранным? Скрывать или отображать?" with icon 1 with title ¬ "Показать или Спрятать" buttons {"Скрывать", "Отображать", "Ничего"} cancel button 3 if button returned of result = "Скрывать" then repeat with OneFile in DroppedFiles do shell script "/usr/bin/chflags hidden " & quoted form of POSIX path of OneFile end repeat else if button returned of result = "Отображать" then repeat with OneFile in DroppedFiles do shell script "/usr/bin/chflags nohidden " & quoted form of POSIX path of OneFile end repeat end if end open
На сегодня всё. Все уроки по AppleScript можно найти перейдя по этой ссылке. Задавайте вопросы, делайте предложения и замечания 😉
Дай бог здоровья за on run / on open, а то на macscripter’е все так запутанно, что непонятно для чего сия конструкция была предназначена.
И вам спасибо за отзыв и пожелания 😉
Через двойной клик ранее скрытые файлы не отображаются (даже если AppleShowAllFiles TRUE), а драг-н-дроп не работает, то есть обратно сделать их видимыми можно только через терминал с указанием конкретного пути к файлу.
Спасибо за инфу, перепроверю.