Я пишу сервис, используя Automotor. Он получает no input
в any application
.
Все, что он делает, это запускает этот простой скрипт:
on run {input, parameters}
--FIRST BLOCK
tell application "System Events"
set app_name to name of the first process whose frontmost is true
end tell
--SECOND BLOCK
if (do shell script "defaults read com.apple.finder AppleShowAllFiles") is equal to "0" then
do shell script "defaults write com.apple.finder AppleShowAllFiles 1"
else
do shell script "defaults write com.apple.finder AppleShowAllFiles 0"
end if
--THIRD BLOCK
do shell script "killall Finder"
delay 0.5
--FOURTH BLOCK
if (app_name is equal to "Finder") then
tell application "Finder"
activate
end tell
end if
end run
Я проведу вас через это шаг за шагом:
первый блок: получить имя текущего переднего приложения и сохранить его в переменной app_name
.
Второй блок: включение или выключение переменной скрытых файлов в зависимости от ее значения.
третий блок: запустите killall Finder
, чтобы перезапустить Finder, включив переключатель из второго блока. Пауза 0.5
сек, как-то это необходимо (не знаю зачем, но без этого следующая инструкция будет проигнорирована).
Четвертый блок: проверьте, какой была переменная app_name
. Если он равен Finder
, это означает, что Finder был активен при запуске скрипта, поэтому активируйте Finder еще раз (killall Finder
оставляет его в фоновом режиме).
Проблема. Все работает так, как ожидалось, но есть одно но: при использовании этой службы в Finder Finder больше не активируется.
Кто-то может возразить, что с кодом в четвертом блоке должно быть что-то не так, но я немного поэкспериментировал, чтобы показать, что все работает так, как ожидалось:
Когда я заменяю equal
на not equal
и запускаю скрипт из любого приложения, кроме Finder, Finder ДЕЙСТВИТЕЛЬНО активируется, как и должно быть.
Таким образом, кажется, что проблема возникает только тогда, когда скрипт запускается, когда Finder находится впереди.
(Вот что должна делать служба: из любого приложения переключать видимость скрытых файлов в Finder. Когда Finder был впереди, он должен быть впереди после выполнения скрипта, когда другое приложение было впереди, это приложение должен быть впереди.)
Я на Льве.