Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos osx-获取当前桌面编号的脚本_Macos_Lua_Applescript - Fatal编程技术网

Macos 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不再包含空格可

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

我发现了这些问题,但似乎有点过时:

我还发现:
但不幸的是,它不起作用。

自从最新的操作系统版本以来,它不再能够通过脚本访问空间。我唯一发现的是如何通过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
  • 使用
    plutil
    将XML转换为JSON(个人偏好)
  • 并使用
    jq
    提取当前空间uuid,并在空间uuid列表中获取其索引。由于space uuid列表包含Mac OS X仪表板,因此生成的索引正好是当前桌面的编号

注意:这段代码确实获得了我在约塞米蒂的主显示器的桌面编号–我的同事在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