February 2012

Find Safari Tabs with AppleScript

If you sometimes find yourself with so many tabs in Safari that you can't find things and end up opening them again in a new tab, this script can help.

It asks for a search term, which it matches against the name (title) of every open tab, as well as the URL. If it finds one match, it raises that window to the top and switches to that tab. If it finds multiple matches, it offers you a list of matches that you can select from.

set question to display dialog ("Find Safari tab:") default answer ""

set searchpat to text returned of question

tell application "Safari"

set winlist to every window

set winmatchlist to {}

set tabmatchlist to {}

set tabnamematchlist to {}

repeat with win in winlist

set ok to true


set tablist to every tab of win

on error errmsg

--display dialog name of win as string

set ok to false

end try

if ok then

repeat with t in tablist

if searchpat is in (name of t as string) then

set end of winmatchlist to win

set end of tabmatchlist to t

set end of tabnamematchlist to (id of win as string) & "." & (index of t as string) & ".  " & (name of t as string)

--display dialog name of t as string

else if searchpat is in (URL of t as string) then

set end of winmatchlist to win

set end of tabmatchlist to t

set end of tabnamematchlist to (id of win as string) & "." & (index of t as string) & ".  " & (name of t as string)

--display dialog name of t as string

end if

end repeat

end if

end repeat

if (count of tabmatchlist) = 1 then

--display dialog "one!"

set w to item 1 of winmatchlist

set t to item 1 of tabmatchlist

set current tab of w to t

set index of w to 1

else if (count of tabmatchlist) = 0 then

display dialog "No matches"


set whichtab to choose from list of tabnamematchlist with prompt "The following tabs match, please select one:"

set AppleScript's text item delimiters to "."

if whichtab is not equal to false then

set tmp to text items of (whichtab as string)

set w to (item 1 of tmp) as integer

set t to (item 2 of tmp) as integer

set current tab of window id w to tab t of window id w

set index of window id w to 1

end if

end if

end tell

To set this up, look in Applications, then Utilities, and run "AppleScript Editor". Cut and paste the program above into a new window there and save it as "Find Safari Tab" (or whatever name you like), and place it in your home directory, under Library/Scripts. Then in the AppleScript Editor Preferences, check the box "Show Script menu in menu bar (I also uncheck "Show Computer scripts", which would show lots of system scripts you might not want). You'll get a script menu in your menubar with your new script in it. Just select it to run it.

This script has a younger brother which does roughly the same thing for Terminal windows and tabs: Find Terminal Sessions.

And if you're wondering how I converted the AppleScript Editor formatted program into HTML, I also do that with software. I can convert any copied text that has formatting into HTML.

Reader Comments (Experimental. Moderated, expect delays. Posts may be edited or ignored. I reserve the right to remove any or all comments, at any time.)


At 2017/05/09 11:27
Bob wrote:

What a great idea - been wanting to do something like this for a very long time. YEARS!!!

I then used this to create a service which allows a keyboard shortcut to be assigned to it and now anytime I need I just type in the shortcut and enter a string and get a list of Safari tabs that I can select from and bam - I'm where I wanted to be. So handy and so easy to use.

Thanks so much - you made my time in Safari so much more enjoyable.

At 2017/08/30 18:59

Thanks, this is great (for a tab sprawler like me)!

I combined it with Safari>Debug>Miscellaneous flags>Show web process IDs in page titles.

Now I can also easily remedy PIDs that Activity Monitor identifies as not responding.

OSX 10.11.6 (15G1611), Safari 11.0 (11604.

At 2017/09/26 10:05
Xiang wrote:

This is a very important feature that Safari has been missing. Vim-emulation plugins for other browsers all allow searching through tabs with just one single key, e.g. Vimperator or cVim. If there could be a shortcut set to invoke this, it would be even better. Seems that one can indeed assign a shortcut to launch Applescript as described at for example here: https://apple.stackexchange.com/questions/175215/how-do-i-assign-a-keyboard-shortcut-to-an-applescript-i-wrote

End Comments

Add a comment

More Mac OS X Stuff

Tom Fine's Home Send Me Email