Search code examples
macoswindowapplescriptforeground

Applescript - Bring window to foreground


I have an application with several windows opened at the same time. I'd like to bring a specific window to foreground (I know its title).

At the moment I'm using a combination of keys to achieve this task but I'd like to try something different since I'm experiencing some problems with this approach.

tell application "System Events"
    set frontmost of process "appIT" to true
    keystroke "1" using command down
    delay 0.2
end tell

Solution

  • If your application is scriptable and allows setting the index of a window, you can do the following (based on an answer in How do I make a Safari window active using AppleScript (elegantly)?)

    to raiseWindow of theApplicationName for theName
        tell the application named theApplicationName
            activate
        set theWindow to the first item of ¬
            (get the windows whose name is theName)
        if index of theWindow is not 1 then
                set index to 1
                set visible to false
                set visible to true
            end if
        end tell
    end raiseWindow
    

    The toggling of the visibility is necessary to deal with some weirdness that occurs with switching applications. If you don't toggle the visibility, the window won't be the first when you switch away from and back to the application. Unfortunately, this toggling shrinks the window to the dock then restores it, a very dramatic UI disruption.

    Here's another way I've found to deal with the weirdness:

    to raiseWindow2 of theApplicationName for theName
        tell the application named theApplicationName
            activate
        set theWindow to the first item of ¬
            (get the windows whose name is theName)
            if the index of theWindow is not 1 then
                set the index of theWindow to 2
            tell application "System Events" to ¬
                tell application process theApplicationName to ¬
                    keystroke "`" using command down
            end if
        end tell
    end raiseWindow2