0

I often have Safari open while working on a project in Xcode, looking up stuff on Stack Overflow and the like. A few times, I've searched something in to the web address/search engine field of Safari, and a word or two from what I typed in and it will be entered into the Search Navigator in Xcode, even though I didn't type it in there. It doesn't do it every time.

EDIT: Text entered in through the Search Navigator can pop up in Safari too.

This doesn't cause any problems, but the words it picks don't seem to have any relevance, and I'm curious as to why this oddity is happening.

I'm running Xcode 4.6.3, Safari 6.0.3, and Mac OS X 10.8.4

Is this a glitch? A half-baked feature?

4

1 回答 1

1

您所看到的是正在运行的 OS X 全局查找粘贴板。在调用私有类 NSFindPanel 的任何地方(通常与文本字段一起),都会调用这个全局粘贴板,并为“查找”元数据提供一个单一的中央位置,其中包括最近的查询:

除了通过查找粘贴板传递搜索字符串外,NSTextView 的标准查找面板还传递搜索选项元数据,包括区分大小写和子字符串匹配选项。此元数据作为全局查找粘贴板上的 NSFindPanelSearchOptionsPboardType 值存储在属性列表中。因此,第三方应用程序可以在此属性列表中存储额外的密钥,以根据需要传达额外的元数据,以支持许多第三方应用程序的“查找”面板共有的各种搜索选项。

来自developer.apple.com 上 NSTextField 文档中的“查找面板搜索元数据”部分

我相信设计意图是,如果您在一个应用程序中执行了搜索,那么您在另一个应用程序中执行相同搜索的可能性相当高,因此全局查找粘贴板充当查找之间的同步机制不同应用程序上的字段。对于那些来自其他操作系统的人来说,这似乎是一种非常奇怪的行为,因为应用程序的查找功能在很大程度上被沙箱化到他们自己的进程中——最近的搜索词是特定于应用程序的搜索词,而不是这个全局共享的空间。

就复制而言,您始终可以通过将文本复制到剪贴板,然后将其粘贴到“查找”字段中来触发报告的行为。当您从应用程序切换到应用程序时,全局查找粘贴板将更新查找 NSFindPanel。这就是为什么你看到它在 Xcode 和 Safari 之间双向运行的原因——因为两者都使用 NSFindPanel,两者都引用全局查找粘贴板并在下次获得焦点时同步。

不幸的是,这不是一种用户可配置的设置。所有 NSFindPanel 都具有这种行为,并且没有可以设置的系统偏好设置或默认偏好设置来更改行为。考虑在 bugreport.apple.com 上向 Apple 提交问题

于 2013-08-10T06:37:33.073 回答