'Automator + Applescript how to: new Desktop (open Calendar and Reminders in it)

The title is what I'm trying to achieve.

In Automator, I've tried to simply record the actions of opening a new desktop, and then opening the apps in it -- but I get the

The action 'Watch Me Do' encountered an error. Check the actionʼs properties and try running the workflow again

Furthermore, if I do it in this way, the action that is recorded is "Click the Desktop 4 button".

Similarly, I googled and found Applescripts that create specific Desktops (e.g. Desktop 3) but I always have a different amount of Desktops open. So I want the Workflow to simply make a new Desktop regardless of the amount I have open already. Moreover, many of the Applescripts I do find are geared towards Mavericks which still had Spaces and I've got Yosemite.

I can figure out how to make the script open Calendar and Reminders, so the main issue is how to have it open or create a new Desktop.



Solution 1:[1]

Took a while but I came up with this. Works on Mavericks.

on run {input, parameters}
    my openNewSpace()
    my launchApplication("Reminders")
    my launchApplication("Calendar")
end run

on openNewSpace()
    tell application "System Events"
        --mission control starten
        do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
        tell process "Dock"
            set countSpaces to count buttons of list 1 of group 1
            --new space
            click button 1 of group 1
            --switch to new space
            repeat until (count buttons of list 1 of group 1) = (countSpaces + 1)
            end repeat
            click button (countSpaces + 1) of list 1 of group 1
        end tell
    end tell
end openNewSpace

on launchApplication(app_name)
    tell application app_name
        launch
    end tell
end launchApplication

Solution 2:[2]

Works fine on macOS Mojave (10.14.3)

AppleScript:

tell application "System Events"
    tell application "Mission Control" to launch
    tell group 2 of group 1 of group 1 of process "Dock"
        click (every button whose value of attribute "AXDescription" is "add desktop")
        tell list 1
            set countSpaces to count of buttons
            delay 0.5
            click button (countSpaces)
        end tell
    end tell

    delay 0.5
    tell application "Calendar" to launch
    tell application "Reminders" to launch
end tell

JXA:

Application("Mission Control").launch()

var proc = Application("System Events").processes['Dock']
var group = proc.groups[0].groups[0].groups[1]

var bs = group.buttons.whose({ description: "add desktop"})
Application("System Events").click(bs[0])

delay(0.5)
var li = group.lists[0]
Application("System Events").click(li.buttons[li.buttons.length - 1])

delay(0.5)
Application("Calendar").activate()
Application("Reminders").activate()

Solution 3:[3]

This works on my macOS Mojave 10.14.4

If you using other languages you need to replace "add desktop" to your system language.

AppleScript?

tell application "System Events"
tell application "Mission Control" to launch
tell group 2 of group 1 of group 1 of process "Dock"
    click (every button whose value of attribute "AXDescription" is "????")
    tell list 1
        set countSpaces to count of buttons
        delay 0.5
        click button (countSpaces)
    end tell
end tell

Solution 4:[4]

macOS Monterey 12:

tell application "System Events"
    --mission control starten
    tell application "Mission Control" to launch
    delay 0.25
    tell process "Dock"
        set countSpaces to count buttons of list 1 of group 2 of group 1 of group 1
        --new space
        click button 1 of group 2 of group 1 of group 1
        --switch to new space
        repeat until (count buttons of list 1 of group 2 of group 1 of group 1) = (countSpaces + 1)
        end repeat
        click button (countSpaces + 1) of list 1 of group 2 of group 1 of group 1
    end tell
    delay 0.25
    tell application "Calendar" to launch
    tell application "Reminders" to launch
end tell

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Montaldo
Solution 2
Solution 3 Artemis
Solution 4 iHTCboy