当我在 Mac 上创建新工作区时,如何 运行 脚本?

how can I run a script when I create a new workspace on my Mac?

我想在我的作品space自动创建时添加一个便利贴,但我不知道我创建新作品时发生了什么space?

我可以使用 applescript 或 Hammerspoon 吗?

据我所知,没有可以创建新 桌面 的本机 键盘快捷键 Mission ControlStickies 都没有 AppleScript Dictionary 及其进程 has scripting terminology 属性 设置为 false。因此,UI Scripting 解决方案是可行的,尽管可能不太受欢迎,而且我知道的唯一方法是 vanilla AppleScript.

以下是在 macOS High Sierra 下测试的,其中 macOS defaults 键盘快捷键显示Mission Control,即Control–向上箭头 ⌃↑).此设置位于:

系统偏好设置 > 键盘 > 快捷方式 > 任务控制 > [√] 任务控制 ⌃↑

以下 示例 AppleScript code 假定上述设置为真并已启用:

创建一个新桌面并将焦点设置到它:

tell application "System Events"
    key code 126 using control down -- # Control-Up Arrow 
    delay 0.25
    tell group 2 of group 1 of group 1 of application process "Dock"
        click (every UI element whose description is "add desktop")
        delay 0.25
        click last UI element of list 1
    end tell
end tell
  • 请注意,delay 命令 可能需要针对您的系统进行调整,和/或额外的 delay 命令 可能需要也可能不需要。适当调整和add/removedelay命令

这是简单的部分。 Stickies 的问题是用它创建的笔记不是 pin-able 特定桌面,因此虽然您可以通过编程方式在新桌面上创建新笔记,但它不会留在那里,下次您打开 Stickies ,所有笔记都将位于打开即时贴的活动桌面上。那么,在新创建的桌面上创建新笔记真的有什么意义吗?我的直觉说不!

也就是说,下面的 example AppleScript code 确实完成了这些步骤并且是仅包含在内是因为它是您问题的一部分,但在我看来它不切实际并且是徒劳的练习。

创建一个新的桌面,将焦点设置到它,并创建一个新的即时贴:

if running of application "Stickies" then
    tell application "Stickies" to quit
    delay 0.5
end if
tell application "System Events"
    key code 126 using control down -- # Control-Up Arrow 
    delay 0.25
    tell group 2 of group 1 of group 1 of application process "Dock"
        click (every UI element whose description is "add desktop")
        delay 0.25
        click last UI element of list 1
    end tell
    tell application "Stickies" to activate
    delay 1
    keystroke "n" using command down
    delay 0.25
    keystroke "This is a new Stickies note on a new Desktop."
end tell 
  • 请注意,delay 命令 可能需要针对您的系统进行调整,和/或额外的 delay 命令 可能需要也可能不需要。适当调整和add/removedelay命令

注意: 示例 AppleScript 代码 就是这样,不使用任何 错误处理 ,仅用于展示完成任务的多种方法之一。用户始终有责任 add/use 适当地 错误处理 作为 needed/wanted。请注意,使用 try 命令 作为 错误处理程序 对于 UI 非常方便脚本.