Jacob Evans

Paste a URL That's Open in Safari Without Switching to Safari

During the course of my workday, I paste dozens of web links into emails, Slack messages, iMessages, and my personal notes. I hate having to ⌘+Tab to Safari, hunt for the tab I need, click on the address bar, highlight & copy the tab’s URL, and then ⌘+Tab back to the app I was using and paste the link. This sort of context switching often interrupts my writing flow and train of thought.

To make this workflow a little bit easier, I devised a simple, but effective, TextExpander AppleScript snippet to grab and type the URL of the active tab in the front-most Safari window. Here it is:

tell application "Safari" to get URL of front document

This is useful most of the time, however there are instances when I’d like to get a list of all my open Safari tabs and pick the one I’d like to paste. With a little bit of AppleScript and Keyboard Maestro magic, this is pretty easy to accomplish.

Here’s the AppleScript I authored to display a pick list of open Safari tabs, devided by Window. Once a tab is chosen, it outputs the tab's URL:

-- Get a list of tabs in Safari
tell application "Safari"
  set _tabNames to {}
  set _tabURLs to {}
  set _frontTabName to name of front document
  -- Create a list of URLs separated by window
  set _windows to every window whose visible is true
  repeat with _window in _windows
    set end of _tabNames to "----------"
    set end of _tabURLs to ""
    repeat with _tab in _window's tabs
      set end of _tabNames to name of _tab
      set end of _tabURLs to URL of _tab
    end repeat
  end repeat
  set end of _tabNames to "----------"
  set end of _tabURLs to ""
end tell

-- Pick from the list of open tabs and output the choset tab's URL
set _currApp to (path to frontmost application as Unicode text)
tell application _currApp
  choose from list _tabNames with title "Safari Tabs" default items _frontTabName
  if result is not false then
    set _tabChoice to item 1 of result
  end if
  repeat with _i from 1 to the count of _tabNames
    if item _i of _tabNames is _tabChoice then return item _i of _tabURLs
  end repeat
end tell

Keyboard Maestro makes it easy to (1) run this script when a bit of text is typed (in my case .turl) and (2) paste the URL of the selected tab. For reference, here’s a screenshot of the macro I built in Keyboard Maestro:

Keyboard Maestro "Get URL for Safari Tab" Macro

Note: The "Execute AppleScript" action needs to be set to “Type Results” upon successful execution.

Hopefully these two shortcuts, designed to quickly grab a link from Safari, will help you as they have helped me stay in the flow and save a little bit of time in the process.