I’m trying to write a script that logs the current app, switches to another app, does some task, and comes back to the original app. This is what I have
set currentApp to my getCurrentApp()
activate application "Safari"
# Some task
activate application currentApp
to getCurrentApp()
set front_app to (path to frontmost application as Unicode text)
set AppleScript's text item delimiters to ":"
set front_app to front_app's text items
set AppleScript's text item delimiters to {""} --> restore delimiters to default value
set item_num to (count of front_app) - 1
set app_name to item item_num of front_app
set AppleScript's text item delimiters to "."
set app_name to app_name's text items
set AppleScript's text item delimiters to {""} --> restore delimiters to default value
set MyApp to item 1 of app_name
return MyApp
end getCurrentApp
The weird thing is that the activate application command works if you type in a string literal, but if you pass it a string variable, it will not activate the application. Any ideas why?
Your script works for me. Activating an application with a string variable has always worked in any version of OSX… so you have some different problem happening. The problem is not in the code you are showing.
Although your code works, you can shorten your getCurrentApp() subroutine like this…
You really don’t even need “as text” in the subroutine if you also remove “application” from the activate line…
So after all is said and done, your code could look like this…
EDIT: Sometimes when you try to get the frontmost application, the applescript that you are running is the frontmost application instead of the app you think is frontmost. It’s very hard to detect when this happens but I suspect this may be happening to you. So here’s a subroutine that I use the get the frontmost app. This ensures that the applescript is not returned as the frontmost app. Give it a try and see if it helps…