macos - 如何在 MacOS 上订阅系统更改?
问题描述
我正在帮助某人编写一个 Emacs 插件,以便在系统配色方案更改时让 Emacs 自动更改其主题。
目前它的工作方式是轮询系统的配色方案。我们希望它改为订阅更新,类似于 Linux 上的 DBus 允许您使用其信号进行 pubsub。
MacOS 上是否有某种方式可以订阅而不是轮询?
解决方案
假设这个插件正在运行一个 AppKit 上下文——也就是说,它所插入的主应用程序是基于 AppKit 的——那么你可以键值观察对象effectiveAppearance
的: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
推荐阅读
- javascript - 由于另一个选项而更改选择选项
- xamarin.forms - 使用 fody 实时验证按钮
- c - 微控制器的环形缓冲区
- javascript - 通过按下动画屏幕上的按钮滚动 - React Native
- math - LaTeX - 十进制到二进制转换方案
- asp.net-mvc - 我想在编辑表单时填写下拉列表
- c# - 从具有相同属性值的集合中选择对象
- fonts - 如何将位图字体 (.Fon) 转换为 TrueType 字体 (.ttf)?
- javascript - 我想使用节点 js 检查我的文件夹中是否存在扩展名为 .mp4 的文件
- android - android 上的 react-navigation/native goBack 错误