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上订阅系统更改?_Macos - Fatal编程技术网

如何在MacOS上订阅系统更改?

如何在MacOS上订阅系统更改?,macos,Macos,我正在帮助某人编写一个Emacs插件,让Emacs在系统配色方案更改时自动更改其主题 目前,它的工作方式是轮询系统的颜色方案。我们更希望它订阅更新,类似于Linux上的DBus如何允许您使用其信号进行pubsub MacOS上有什么方法可以订阅而不是轮询吗?假设此插件正在运行AppKit上下文-即,它插入的主应用程序基于AppKit-然后您可以通过键值观察NSApplication对象的有效外观: [NSApp addObserver:self forKeyPath:@"effe

我正在帮助某人编写一个Emacs插件,让Emacs在系统配色方案更改时自动更改其主题

目前,它的工作方式是轮询系统的颜色方案。我们更希望它订阅更新,类似于Linux上的DBus如何允许您使用其信号进行pubsub


MacOS上有什么方法可以订阅而不是轮询吗?

假设此插件正在运行AppKit上下文-即,它插入的主应用程序基于AppKit-然后您可以通过键值观察
NSApplication
对象的
有效外观

[NSApp addObserver:self
        forKeyPath:@"effectiveAppearance"
           options:NSKeyValueObservingOptionInitial
           context:someValueUniqueToYourClass];
您需要在类中实现
-observeValueForKeyPath:ofObject:change:context:
,才能接收更改通知

更改时,您可以调用:

NSAppearanceName* match = [NSApp.effectiveAppearance bestMatchFromAppearancesWithNames:
                               @[NSAppearanceNameAqua, NSAppearanceNameDarkAqua]];
if ([match isEqual:NSAppearanceNameDarkAqua])
     // switch Emacs to dark mode
else
     // switch Emacs to light mode

你能展示一些你如何检索系统配色方案的代码吗?