HoudahSpotの各種コントロールを行うAppleScriptです。
HoudahSpotは、Spotlightの検索を行うアプリケーションで、AppleScript対応しています。
検索自体は非同期で実行され、検索が終了したかどうかは最前面のドキュメント(front document)のプロパティ「search completed」がtrueになるかどうかをループで確認することになります。このさい、delayコマンドで時間待ちしないと負荷が高くなって全体のパフォーマンスが低下するので、0.1秒ぐらいの時間待ちを行うのが非同期アプリケーションのコントロール時の「お約束」です(Xcodeとか)。
HoudahSpotの検索条件についてはAppleScriptから一切コントロールできないので、HoudahSpot書類に保存しておいてオープンして再検索を行うという利用スタイルを考えているのでしょう。
みどころは、Finderの最前面のウィンドウのパス以下を対象にSpotlight検索するfinder searchコマンド。ちょっと目の付け所がいいと思います。あと、HoudahSpot HelperをオンにするとStatus Bar上にmacOS純正のSpotlightアイコンと同様のアイコンが出てきて検索できます。これもいいと思います。
ただ、わざわざGUIアプリケーションで実行しなくても、AppleScriptから直接Spotlightの機能を呼び出せるので、HoudahSpotを利用する必然性があまり感じられません。
AppleScript名:アプリケーションのプロパティを取得する |
tell application "HoudahSpot" properties –> {frontmost:false, class:application, name:"HoudahSpot", version:"4.3.7"} end tell |
AppleScript名:ドキュメントのプロパティを取得する |
tell application "HoudahSpot" tell document 1 properties –> {modified:false, name:"Untitled", details pane visible:false, search completed:false, selection:{}, search active:false, file:missing value, results view:list view, search pane visible:true, class:document} end tell end tell |
AppleScript名:ドキュメントをかぞえる |
tell application "HoudahSpot" set dCount to count every document –> 1 end tell |
AppleScript名:Windowのプロパティを取得する |
tell application "HoudahSpot" tell window 1 properties –> {zoomable:true, closeable:true, current tab:tab 1 of window id 89717 of application "HoudahSpot", zoomed:false, class:window, index:1, visible:true, sidebar visible:false, name:"Untitled", toolbar visible:true, miniaturizable:true, id:89717, miniaturized:false, resizable:true, bounds:{0, 22, 1407, 797}, document:document "Untitled" of application "HoudahSpot"} end tell end tell |
AppleScript名:WindowのTabをかぞえる |
tell application "HoudahSpot" tell window 1 set tCount to count every tab –> 1 end tell end tell |
AppleScript名:検索を実行 |
tell application "HoudahSpot" search "Piyowolf" –> document "Untitled 3" of application "HoudahSpot" end tell |
AppleScript名:検索結果のプロパティをすべて取得する |
tell application "HoudahSpot" set resList to every result of front document set rList to {} repeat with i in resList set aRes to properties of i log aRes (*class:result, path:/Users/maro/Library/Mail/V4/DA40FA88-F9E4-45A0-A3C9-4DCD4DCE3C38/Sent Messages.mbox/8DD46D63-E6F7-4A3C-81DF-4D4FDBFBE19B/Data/7/9/0/2/Messages/2097257.emlx, id:/Users/maro/Library/Mail/V4/DA40FA88-F9E4-45A0-A3C9-4DCD4DCE3C38/Sent Messages.mbox/8DD46D63-E6F7-4A3C-81DF-4D4FDBFBE19B/Data/7/9/0/2/Messages/2097257.emlx, name: Yasu for Mac*) end repeat end tell |
AppleScript名:検索結果をカウントする |
tell application "HoudahSpot" set resCount to count every result of front document end tell |
AppleScript名:キーワード検索して結果を取得する |
tell application "HoudahSpot" set resDoc to search "AppleScriptObjC" repeat tell resDoc set resC to search completed end tell if resC is equal to true then exit repeat delay 0.1 end repeat set resList to count every result of front document end tell |
AppleScript名:検索結果からフィルタ参照でしぼりこみ |
tell application "HoudahSpot" set resList to every result of front document whose path ends with ".md" end tell |
AppleScript名:検索結果を指定パスに保存する |
set aSavePath to choose file name
tell application "HoudahSpot" save front document in aSavePath end tell |
AppleScript名:保存しておいた検索結果をオープンする |
set aFile to choose file
tell application "HoudahSpot" open aFile end tell |
AppleScript名:キーワードをFinderの最前面のウィンドウのパスを対象に検索 |
tell application "HoudahSpot" set resDoc to finder search "EXIF" repeat tell resDoc set resC to search completed end tell if resC is equal to true then exit repeat delay 0.1 end repeat set resList to count every result of front document end tell |