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