我正在使用自动机编写服务。它接收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
当我从任何不是 Finder 的应用程序中替换not equal
并运行脚本时,Finder 会按应有的方式被激活。
所以似乎只有当Finder在前面时触发脚本时才会出现问题。
(这是服务应该做的:从任何应用程序中,切换 Finder 中隐藏文件的可见性。当 Finder 在前面时,它应该在执行脚本后在前面,当另一个应用程序在前面时,这个应用程序应该还在前面。)
我在狮子。