如何在两台 Mac 之间同步自定义快捷方式

如何在两台 Mac 之间同步自定义快捷方式

有没有办法在两台 Mac 之间同步自定义快捷方式(通用和特定应用程序,即 Xcode)?

答案1

使用 dropbox+符号链接

Dropbox 在两台机器之间同步文件夹和文件,并在云端创建备份。符号链接使您能够创建指向机器上需要存储/放置在 Dropbox 文件夹以外的其他文件夹和文件的链接。有点像 Windows 上的桌面快捷方式。将两者结合使用将使您能够在两台机器之间同步任何媒体,而不仅仅是您的 Dropbox 文件夹。

安装 Dropbox 后,打开终端

ln -s /用户/你的用户名/folderIWantToSync /用户/你的用户名/Dropbox/folderIWantToSyncTo

文件夹 IWantToSync 可能是键盘快捷键首选项文件。不确定它在哪里,但如果您在两台计算机上都执行此操作,则该文件将在两台计算机之间保持同步,因此您的键盘快捷键(我相信这是您所指的快捷键类型)在两台计算机上将相同。

下面的链接向您展示如何使用符号链接设置 dropbox。http://iboughtamac.com/2010/05/05/symlinks-dropbox-awesome/

答案2

下面是一个 Python 脚本,它将保存快捷方式并在使用 调用时将它们转储到 JSON 文件中save,然后使用 加载相同的 JSON 文件(可能在不同的 Mac 上)load

import os
import sys
import json
from argparse import ArgumentParser

from AppKit import NSUserDefaults

defaults = NSUserDefaults.standardUserDefaults()
allDomains = defaults.persistentDomainNames()
global_defaults_name = "pbs"
global_defaults = defaults.persistentDomainForName_(global_defaults_name)
filename = os.path.join(os.path.dirname(__file__), "mac-shortcuts.json")
NSUserKeyEquivalents = "NSUserKeyEquivalents"


def save():
    apps = []

    for domainName in allDomains:
        domain = defaults.persistentDomainForName_(domainName) or {}
        keys = domain.get(NSUserKeyEquivalents)
        if keys:
            apps.append(
                {
                    "domainName": domainName,
                    "keys": [
                        {"action": action, "key": key} for action, key in keys.items()
                    ],
                }
            )

    services = []

    for key, value in global_defaults.get("NSServicesStatus", {}).items():
        if "key_equivalent" in value:
            services.append({"action": key, "key": value.get("key_equivalent")})

    with open(filename, "w") as f:
        json.dump({"app": apps, "service": services}, f, indent=2)


def load():
    with open(filename, "r") as f:
        configuration = json.load(f)

    for app in configuration["app"]:
        key_equivalents = {
            NSUserKeyEquivalents: {
                each["action"]: each["key"] for each in app["keys"]
            }
        }
        defaults.setPersistentDomain_forName_(key_equivalents, app["domainName"])

    services = {
        "NSServicesStatus": {each["action"]: {"key_equivalent": each["key"]}}
        for each in configuration["service"]
    }
    defaults.setPersistentDomain_forName_(services, global_defaults_name)


parser = ArgumentParser()
parser.set_defaults(func=parser.print_usage)
sub = parser.add_subparsers()
sub.add_parser("save").set_defaults(func=save)
sub.add_parser("load").set_defaults(func=load)
parser.parse_args(sys.argv[1:]).func()

(这比保存到 Dropbox 更好,因为在后台运行的守护进程可能会随机重写这些文件;这会使用系统defaults通过现有的各种缓存来写入。)

相关内容