The Problem: Scripts often target the current document window of an application. This is usually easily handled with something like…
Tell application "Finder" to get window 1
The problem with this approach is that it returns a useless window if the wrong kind of window is in front. In the Finder, this will often be a Get Info window, folder options window, or preferences. Some applications have special classes of windows to make this easier, but many do not. To find the frontmost window of these applications, you need to do this manually.
To make this work, you need to loop through your windows until you find one of the right type. You could do this by the name of the window (e.g. find Finder windows whose names don’t contain “Finder Preferences”), but that requires you to catalog the names of every non-standard window, and can cause problems if, for example, you have a folder named “Finder Preferences.”
A better approach is to identify a property that only the right kind of windows contain. So, for Finder windows, you can look for the folder of the window, as in…
Tell application "Finder" set theFolder to (path to desktop folder as alias) repeat with i from 0 to (count of windows) try get folder of window i set theFolder to result as alias exit repeat end try end repeat end tell
In this code, the “try” handler gracefully handles windows without the “folder” property. Likewise, by setting theFolder to the Desktop to begin with, it also handles the situation where there are no open windows.
Using this technique, the following script will open the current Finder window in a new tab in the frontmost Terminal window. If there isn’t a terminal window available, it opens a new window. The code gets pretty involved for the Terminal (including having to go to UI scripting to make a new tab), but it avoids the pitfalls of multiple open windows in each application, not all of which are useful folder or terminal windows.
on run get quoted form of POSIX path of my getCurrentFolder() my termScriptInNewTab("cd " & result) end run on termScriptInNewTab(cmd) tell application "Terminal" activate set termWins to count of windows set frontWin to 0 repeat with i from 1 to (count of windows) try set tabCount to count of tabs of window i set frontWin to i exit repeat end try end repeat if frontWin is 0 then do script cmd else set frontmost of window frontWin to true tell application "System Events" to tell (first application process whose name is "Terminal") to keystroke "t" using {command down} set xi to 0 repeat until (count of tabs of window 1) is (tabCount + 1) if xi ≤ 4 then -- don't wait more than one second delay 0.25 else set xi to -1 exit repeat end if end repeat if xi is not -1 then do script cmd in (last tab of window 1) else do script cmd end if end if end tell end termScriptInNewTab on getCurrentFolder() tell application "Finder" set theFolder to (path to desktop folder as alias) repeat with i from 0 to (count of windows) try get folder of window i set theFolder to result exit repeat end try end repeat return theFolder as alias end tell end getCurrentFolder
Extra credit: How can you adapt the termScriptInNewTab handler to run the command in the first tab that isn’t busy, rather than a new tab?