一个小的工具,帮助同步Mac OS X PLIST文件(用于大多数MAC应用程序的偏好)无缝地,以一种可以被Git跟踪的方式。

prefsync的Python项目详细描述


有助于同步mac os x plist文件的一个小工具(用于首选项 对于大多数Mac应用程序)无缝地,以Git可以跟踪的方式。

#背景

我们很多人在github上上传 [点文件](http://en.wikipedia.org/wiki/Configuration_file) ([这是我的](https://github.com/asmeurer/dotfiles)。这是个很好的方法 共享配置,用git跟踪它,通过符号链接,它可以 不错的半手动同步方案。

这个技巧在mac os x首选项中效果不太好。问题是 从MacOSX10.4开始,[plist文件](http://en.wikipedia.org/wiki/Plist)是 默认情况下是二进制的,这使得用git跟踪它们非常困难。

此文件的典型解决方案是将plist文件符号链接到dropbox和 据我所知,这是可行的。但是你失去了分享你的 设置,也许最重要的是,用git跟踪它们。

好消息是实际上可以使用二进制plist文件,并且 自动将它们前后转换为人类可读的(和git 可跟踪)XML,使用MacOSX附带的一些工具。

#用法

usage: prefsync [-h] [-t THROTTLE_INTERVAL] PREFFILE DEST

例如

prefsync ~/Library/Preferences/preferencefile.plist preferencefile.xml

-t标志设置同步文件的限制间隔(秒)。这个 默认值为10秒。

#安装

您可以使用conda安装它

conda install -c asmeurer prefsync

或使用pip

pip install prefsync

或者来自git源代码

python setup.py install

或者您也可以在结账时使用

python -m prefsync

安装后,使用命令prefsync

#工作原理

其实很简单。这项繁重的工作是由手术为我们完成的 它提供的系统和工具。主要工具是 [冥王星](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/plutil.1.html), 它允许将二进制plist文件转换为xml plist文件和xml plist 文件返回二进制文件,然后[启动](http://en.wikipedia.org/wiki/Launchd), 它提供了在文件更改时自动运行脚本的工具。

不过,也有一些陷阱。

首先,如果你这样做,它将永远循环运行,因为一旦 二进制文件被更新,它将写入xml版本,这将 注册为更改,使其写入二进制plist,依此类推。

当 它是写入的,如果文件具有该属性,则忽略这些文件(因此 其他事物的改变将被记录)。如果有什么东西 保留这些属性。在我的测试中,他们没有,但是你可以很容易的测试 如果您的程序是通过运行来实现的

xattr -w test:Test test ~/Library/Preferences/preferencefile.plist

然后,对首选项进行更改,并查看属性是否仍然存在

xattr ~/Library/Preferences/preferencefile.plist

其次,在MacOSX10.9中,首选项被缓存,这意味着即使 程序被关闭,plist文件被写入,它将被重写 如果缓存未打开,则重新打开时的原始首选项 脸红了。

解决这个问题很容易:我们只需打电话

defaults read com.reversedns.preference

(其中com.reverse dns.preference是首选项文件的反向dns 有疑问)。这会刷新缓存。

最后,在 程序正在运行。你可以关闭并重新打开程序, 但当您这样做时,它可能会写入首选项,覆盖 变化。

因此,建议高度跟踪git中的xml更改,以便 如果它们被覆盖,就很容易恢复。强制更改为 要写入二进制文件,最简单的方法是关闭程序,确保 XML更改是相同的(即,关闭程序不会导致 要写入并同步到XML的首选项),然后触摸XML 文件。

注意,每个方向的同步可能需要10秒 默认发生。您可以通过设置 运行预同步。

#有问题

根据 [本页](http://managingosx.wordpress.com/2006/05/10/launchd-gotcha/) launchd将停止监视路径,如果它ceaSES存在。你可以重置 通过注销并重新登录或重新启动来处理。你也可以 尝试使用launchctl,尽管这可能不可靠。

#待办事项

目前没有简单的方法删除同步。最好的方法是打开 登录并删除不再要同步的首选项的同步。成为 一定要同时删除binarytoxmlxmltobinary。你需要注销 然后重新登录或重新启动以使更改生效。

#致谢

当使用launchd(旧的、免费的)时,lingon程序是非常宝贵的 版本很好)。

stackoverflow和mac os x提示帮助我调试了一些奇怪的东西 当你想让它工作的时候。

#许可证

麻省理工学院(见许可文件)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Webstart“javaws open”标志不适用于多个参数   java ArrayList声明和处理   获取数组中值的百分比(Java)   java将ArrayList转换为字符串以存储在共享首选项中   Java8Lambdas与泛型的结合使用   Scala数组到Java   如何使用java知道webcontainer的路径?   java使用“收集”和“合并”的组背后的算法是什么   java OSGi:在两个不同的包中具有相同的包路径   java混淆了swt画布。重画   java正则表达式,用于5位数逗号分隔的值,例如047000480004900   使用HttpClient显示非ASCI字符的java   水塔计算程序Java中球体体积的计算   java根据给定值调整框架中所有组件的大小   java Builder类中的其他方法(lombok注释)