Показать/скрыть Finder и создать новое окно, если его нет, с помощью AppleScript

Я хотел бы создать AppleScript для запуска с помощью ключевой команды в Keyboard Maestro, которая позволяет мне напрямую переключать отображение или скрытие окон Finder. И если при переключении на отображение Finder, если нет существующих окон, создайте его и откройте в моем домашнем каталоге.

Следующий AppleScript работает. Тем не менее, похоже, существует состояние гонки между активацией искателя и обнаружением открытых окон с if not (window 1 exists), следовательно, delay 0.5.

Проблема (которая, как я думаю, является состоянием гонки при обнаружении наличия существующего окна Finder) приводит к тому, что этот сценарий часто создает новые окна Finder, когда они уже существовали. if not (window 1 exists) не всегда понимает правильно.

Буду признателен за любые мысли, поправки или подтверждения того, что это именно так, как есть!

tell application "System Events"
    set activeApp to name of application processes whose frontmost is true

    if ((activeApp as string) is equal to "Finder") then
        set visible of process "Finder" to false
    else
        tell application "Finder"
            activate
            delay 0.5
            if not (window 1 exists) then
                make new Finder window
                set thePath to POSIX file "/Users/jon"
                set the target of the front Finder window to folder thePath
            end if
        end tell
    end if
end tell

person jondkinney    schedule 10.06.2020    source источник


Ответы (2)


Пожалуйста, попробуйте этот более простой синтаксис, он использует только Finder терминологию

tell application "Finder"
    if frontmost then
        set visible of process "Finder" to false
    else
        if (count windows) is 0 then reveal home
        activate
    end if
end tell

Редактировать:

Чтобы запустить макрос Keyboard Maestro, откройте редактор Keyboard Maestro, выберите макрос, а затем выберите «Копировать как» > «Копировать UUID» в меню «Правка».

Затем в AppleScript напишите

tell application "Keyboard Maestro Engine" to do script "<Script-UUID>"

замена <Script-UUID> скопированным реальным UUID

person vadian    schedule 10.06.2020
comment
vadian, я бы использовал open вместо reveal, так как это будет работать как code в OP. - person user3439894; 10.06.2020
comment
vadian - после того, как откроется главное окно, как я могу ввести следующую ключевую команду: cmd+ctrl+opt+shift+d? Это комбинация в Keyboard Maestro, которая размещает окно с определенными размерами и в определенном месте на экране. Я пытался использовать системные события и нажатие клавиш, но, похоже, он выполняется, даже если открытие дома не требуется. Чтобы уточнить, я хотел бы размещать только новые окна. Если окон больше 0, просто показать их. - person jondkinney; 10.06.2020

В конечном итоге мне нужно было активировать Finder перед запуском команды count windows, иначе я получил бы несогласованные подсчеты окон. Иногда это было бы 0, даже если окно уже было открыто. Этот код работает хорошо для меня до сих пор.

tell application "Finder"
    if frontmost then
        set visible of process "Finder" to false
    else
        activate
        if (count windows) is 0 then
            open home
            tell application "Keyboard Maestro Engine" to do script "<Script-UUID>"
        end if
    end if
end tell
person jondkinney    schedule 10.06.2020