有没有办法以编程方式在osx上获取当前的桌面/空间号?
我发现了这个问题,但似乎有点过时了: OSX Lion AppleScript : How to get current space # from mission control?
我也发现了这个: http://www.hammerspoon.org/docs/hs.spaces.watcher.html但不幸的是它不起作用。
答案 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
强制执行桌面属性列表更新。将数据存储到磁盘需要一点时间defaults
作为XML导出更新的桌面property list,plutil
将XML转换为JSON(个人偏好)jq
提取当前空间uuid并在空间uuid列表中获取其索引。由于空间uuid列表包含Mac OS X仪表板,因此生成的索引正好是当前桌面的编号。 注意:此片段确实在Yosemite上获得了我的主显示器的桌面编号 - 我的同事在El Capitan上使用不同的设置对此进行了测试,没有运气。但假设killall Dock
仍然有效,JSON输出仍应包含相关信息。