Okay, I've worked it out and it works perfectly with no requirement for window actions. I created an AppleScript:
tell application "Safari"
repeat with w in windows
set mt to (tabs of w whose URL contains "https://mail.google.com/")
if mt ≠ {} then exit repeat
end repeat
if mt = {} then
if not (exists window 1) then
make new document with properties {URL:"https://mail.google.com"}
else
set mt to make new tab in window 1 with properties {URL:"https://mail.google.com"}
set the current tab of window 1 to mt
end if
else
set mt to item 1 of mt
set the current tab of w to mt
set the index of w to 1
end if
activate -- needed if not activated otherwise
end tell
Then:
1. I export the script as an app. In the dialog I set it to stay open.
2. I run the app.
3. I use the standard rcmd method to assign M to that application.
4. I quit the app.
5. I export the script as an app again. In the dialog I *do not* set it to stay open.
And done! Now I rcmd-M and if there is a mail.google.com tab, Safari switches to it and jumps to the front. If there is not a mail.google.com tab, the frontmost window gets a new tab set to mail.google.com. I haven't tested yet what happens if there is no window. It
should create one with mail.google.com. I'll test that in a minute and if it doesn't work I'll correct it and update here.