🐰
検索文字列をアプリ間で共有する(macOS)
macOSには、検索フィールドに入力した文字列をアプリ間で共有する仕組みが備わっています。これに対応しているアプリでは、他のアプリの検索フィールドに入力した文字列を直接自身のアプリでも反映することができます。もちろん、アプリ内の複数の検索フィールドの同期にも使用可能です。
仕組みとしては、単に専用のNSPasteboardを使って文字列をグローバル検索バッファを読み書きするだけなのですが、対応するかどうかはそのアプリ次第な上、現代ではその存在をほとんど知られていないため、その紹介も兼ねてこの資料を公開します。
グローバル検索バッファの読み書き方法
NSPasteboardNameFind
(ObjC) もしくはNSPasteboard.Name.find
(Swift)を使って、ペーストボードと文字列を直接やり取りします。タイミングは任意ですが、基本的にはアプリがアクティブになった時と、アプリ側で検索フィールドの編集が確定した時で良いでしょう。
// Get the find string from the global find buffer.
let findPBoard = NSPasteboard(name: .find)
let findString = findPBoard.string(forType: .string)
// Set the find string to the global find buffer.
let findString = "hello"
let findPBoard = NSPasteboard(name: .find)
findPBoard.clearContents()
findPBoard.setString(findString, forType: .string)
デモプロジェクトを用意したので、詳しい挙動はこちらを確認してください。SafariやXcode、CotEditorなどのグローバル検索バッファ対応アプリと並べて操作してみてください。
Discussion