Macos osx-获取当前桌面编号的脚本
有没有办法通过编程方式在osx上获取当前的桌面/空间号 我发现了这些问题,但似乎有点过时: 我还发现:Macos osx-获取当前桌面编号的脚本,macos,lua,applescript,Macos,Lua,Applescript,有没有办法通过编程方式在osx上获取当前的桌面/空间号 我发现了这些问题,但似乎有点过时: 我还发现: 但不幸的是,它不起作用。自从最新的操作系统版本以来,它不再能够通过脚本访问空间。我唯一发现的是如何通过Applescript获取当前空间中桌面图片的名称/路径: tell application "Finder" to set A to (desktop picture) as string 除此之外,由于Yosemite(至少!)Applescript dictionary不再包含空格可
但不幸的是,它不起作用。自从最新的操作系统版本以来,它不再能够通过脚本访问空间。我唯一发现的是如何通过Applescript获取当前空间中桌面图片的名称/路径:
tell application "Finder" to set A to (desktop picture) as string
除此之外,由于Yosemite(至少!)Applescript dictionary不再包含空格可编写脚本的元素。在Yosemite中,以下oneliner(内置)可以工作: (对于包含密钥访问的空白,需要
jq
1.5版,可使用安装,例如…)
在我的桌面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
理由:如中所述,桌面及其内容存储在~/Library/Preferences/com.apple.spaces.plist
中。但是,更改桌面时不会自动更新此文件。因此,要获取当前的桌面号码,我们需要
- 使用
强制桌面属性列表更新。数据存储到磁盘需要一段时间,因此killall Dock
- 等待0.1秒(在我的机器上足够长的时间),以便将文件写入磁盘
- 然后使用
将更新后的桌面导出为XML默认值
- 使用
将XML转换为JSON(个人偏好)plutil
- 并使用
提取当前空间uuid,并在空间uuid列表中获取其索引。由于space uuid列表包含Mac OS X仪表板,因此生成的索引正好是当前桌面的编号jq
注意:这段代码确实获得了我在约塞米蒂的主显示器的桌面编号–我的同事在El Capitan上用不同的设置测试了它,但没有成功。但是假设
killall Dock
仍然有效,JSON输出应该仍然包含相关信息。这与Lua有什么关系?谢谢解释。我觉得它很有用。我用包含桌面编号的文件名替换了所有桌面上的墙纸,并且您的脚本在一个屏幕上运行良好。但是,它不支持多个外部屏幕。它总是在主屏幕上显示壁纸的名称。你知道怎么修吗?不知道,而且我只有一个27英寸的显示器,所以我甚至无法测试和找到它。很抱歉
$ 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