osx - 获取当前桌面编号的脚本

时间:2016-01-07 16:10:23

标签: macos lua applescript

有没有办法以编程方式在osx上获取当前的桌面/空间号?

我发现了这个问题,但似乎有点过时了: OSX Lion AppleScript : How to get current space # from mission control?

我也发现了这个: http://www.hammerspoon.org/docs/hs.spaces.watcher.html但不幸的是它不起作用。

2 个答案:

答案 0 :(得分:2)

自最近的OS版本以来,不再可能通过脚本访问空格。我发现的唯一一件事就是如何通过Applescript获取当前空间中桌面图片的名称/路径:

tell application "Finder" to set A to (desktop picture) as string

除此之外,因为Yosemite(至少!)Applescript字典不再包含空间脚本元素。

答案 1 :(得分:0)

在Yosemite中,以下oneliner(基于this answer建立)起作用:

killall Dock \
&& sleep 0.1 \
&& defaults export com.apple.spaces - \
| plutil -convert json - -o - \
| jq '.SpacesDisplayConfiguration."Management Data".Monitors[0] | ."Current Space".uuid as $current_desktop_uuid | [.Spaces[].uuid]|index($current_desktop_uuid)'

(对于包含空格的密钥访问,需要jq 1.5版,可以使用Homebrew进行安装。)

在我的桌面3上,此oneliner将输出:

$ killall Dock && sleep 0.1 && defaults export com.apple.spaces - | plutil -convert json - -o - | jq '.SpacesDisplayConfiguration."Management Data".Monitors[0] | ."Current Space".uuid as $current_desktop_uuid | [.Spaces[].uuid]|index($current_desktop_uuid)'
3

理由:如this answer中所述,桌面及其内容存储在~/Library/Preferences/com.apple.spaces.plist中。但是,更改桌面时不会自动更新此文件。因此,要获取当前的桌面编号,我们

  • 使用killall Dock强制执行桌面属性列表更新。将数据存储到磁盘需要一点时间
  • 等待0.1秒(在我的机器上足够)将文件写入磁盘。
  • 然后使用defaults作为XML导出更新的桌面property list
  • 使用plutil将XML转换为JSON(个人偏好)
  • 并使用jq提取当前空间uuid并在空间uuid列表中获取其索引。由于空间uuid列表包含Mac OS X仪表板,因此生成的索引正好是当前桌面的编号。

注意:此片段确实在Yosemite上获得了我的主显示器的桌面编号 - 我的同事在El Capitan上使用不同的设置对此进行了测试,没有运气。但假设killall Dock仍然有效,JSON输出仍应包含相关信息。