最終更新日:2012/07/16
NandemoSearchHistory - Finder、辞書、Evernoteなど検索履歴が付かないアプリケーションに検索履歴を表示できるようにするアプリケーション
NandemoSearchHistoryとは
EverSearchHistoryを作って、他のアプリケーションをよく見たらOS標準のアプリケーションでも検索履歴がないものがたくさんありました。思い返すとMac App Storeでよくチェックするアプリケーションや検索ワードがあるのですが、それも毎回単語を打ち込んで見ていました。
そこで、EverSearchHistoryの汎用版を使ったらいろいろなアプリケーションに検索履歴が付いて便利になるんじゃないかな、と思い作ってみました。
仕様はEverSearchHistoryと全く同じで、特定の文字を入力すると履歴がポップアップメニューで表示されて、選択したら入力します。
基本的な動作の動画
できることまとめ
下記のできることはすべて起動しているアプリケーションの存在している検索フィールドが対象です。
- 検索履歴が付かないアプリケーションの検索フィールドに検索履歴を付ける
- 他のアプリケーションの検索履歴から入力、検索できる
- 検索履歴から選んだ物を他のアプリケーションの検索フィールドに入力して検索できる
- サービスメニューから指定した複数のアプリケーションの検索フィールドに入力して検索できる
開発環境
Mac OS X 10.6.8
動作環境
10.6以降が必要です。
10.7ではテストしていませんが、動くような気がします。
動作原理
動作原理は非常に簡単でAXObserverAddNotificationで検索フィールドのテキストを監視して、変更されたら記憶、特定の文字を入力したらメニューを表示しています。
使い方
- 「ユニバーサルアクセス」環境設定で「補助装置にアクセスできるようにする」にチェックを入れます。
- NandemoSearchHistory.appを起動します。
- デフォルトでは「^」もしくは「^」を先頭に入力すると履歴メニューが表示されます。設定が正規表現になっているのは、日本語入力時に全角が入力されてもメニューが表示されるように複数の文字を指定できるようにするためです。文末に特定の文字が来た時なども設定できます。
- メニューは上下の矢印キーで選択、リターンキーで確定できます。
- escキーでメニューを閉じることができます。
- 起動直後はメニューが表示されないことがありますが、ちょっと待ってから文字を入力し直すと表示されるようです。
- 起動中にFinderでNandemoSearchHistory.appを再度開くと設定ウインドウを表示します。
- 設定のアプリケーションの指定はすべてBundle Identifierで行います。取得にはおまけの「Copy App BundleIdentifier.app」などを使って下さい。
アプリケーション独自の仕様
- Evernote
- エンターキーを押して入力を確定して、テキストが全部選択された時の、query stringを記録します。
- Ver 0.1.3
- ^もしくは^
- (^[\^^]$)
- Ver.0.1.2
- スペース(全角、半角) x 2
- (^[ ]{2}$)
- Ver.0.1.1
- スペース(全角、半角)
- (^[ ]$)
- Ver 0.1.0
- ^もしくは^
- (^[\^^]$)
仕様、バグ
- 設定ウインドウが表示されていると、メニューが変なところに出るようです。
- 矢印キーでメニュー操作ができない時があります。ことえりの文字パレット等ののフローティングウインドウが表示されている時等。
- 入力した単語はエンターを押さなくても記憶していきます。できるかぎり、入力途中のものは記憶しないようにしてみましたが、入力途中の中途半端なものが記憶されたり、逆に消えて欲しくないのが消えてしまう場合もあるかもしれません。
- 検索ワードをdeleteで削除して短くなった時は記憶しません。
- 検索ワードをスペースで区切った時は、新しく記憶します。
- NandemoSearchHistoryの起動時とウインドウ作成時に、検索フィールドを探して、見つかれば履歴を表示できるようにします。それ以外の時に検索フィールドをウインドウに表示しても履歴は表示できません。ツールバーを隠す等して、検索フィールドを見えなくして、再度表示した時も履歴は表示できなくなります。「Auto Detect Focused Search Field」をオンにすると検索フィールドにフォーカスがきた時にチェックするように登録します。なお、Multi Searchは登録されている検索フィールドでのみ動作するので、「Auto Detect Focused Search Field」で認識される前の物は対象になりません。
- Finderなど一部のアプリケーションではテキストを検索フィールドに設定しても検索が更新されない場合があります。「Careful Set Text to Search Field」をオンにすると検索フィールドにフォーカスを移してからテキストを設定するようになり、検索が始まるようになる場合があります。
対象の検索フィールドの指定方法
プログラムの手抜きのため、設定がテキスト形式となっております。
基本形は下記の通りです。
com.apple.finder AXRole AXToolbar AXRole AXGroup AXSubrole AXSearchField
*にするとすべてのアプリケーションが対象となります。
* AXRole AXToolbar AXRole AXGroup AXSubrole AXSearchField
値は正規表現なので次のように書くこともできます。「を検索」の前は「プレイリスト」や「ミュージック」など変わりますが、これで対応できます。
com.apple.iTunes AXDescription を検索$
区切りはすべてタブです。半角スペースではないので注意して下さい。色分けされて表示されます。
具体的な書き方は次の通りです。
最初にアプリケーションのBundle Identifierを書きます。*ですべてのアプリケーションが対象になります
次に対象の検索フィールドまでの属性とその値を書いていきます。起点となるのはウインドウです。上記例の場合、ウインドウ内のAXRoleがAXToolbarのパーツ内のAXRoleがAXGroupのパーツ内のAXSubroleがAXSearchFieldのUIパーツが対象となります。AXGroupは複数ある場合が多いですが、全部の子どもにAXSearchFieldが無いか調べます。複数見つかった場合は、最初のUIパーツを対象とします。
値は正規表現です。
上記例のツールバーに検索フィールドがあるパターンがほとんどなのでToolBarSearchFieldと省略して書けるようになっています。
ウインドウに直接検索フィールドがあるパターンもあり、それはWindowSearchFieldと省略して書けます。
UIパーツの構成はUIElementInspectorで調べることができます。「Download Sample Code」をダウンロードするとアプリケーションが入っています。
#から始まる行はコメントです。
「Auto Detect Focused Search Field」をオンにすると検索フィールドにフォーカスが付いた時に自動的に登録します。登録されるまではMulti Searchの対象とならないので、Multi Searchを使う人はできるだけ上の設定で指定しておきましょう。
「Multi Search」について
履歴のテキストを複数の別のアプリケーションの検索フィールドに入力して検索することができます。
NandemoSearchHistoryが認識してるアプリケーションへ送るメニュー項目は自動的に作成されます。
また、サービスメニュー「Multi Search with NandemoSearchHistory」からも上記機能を実行できます。サービスメニューに表示されない場合は、システム環境設定のサービスメニューのところで表示するように設定して下さい。
Muliti Searchでできないこと
- 起動してないアプリケーションには入力しません。
- すでに存在しているウインドウの認識済みの検索フィールドにしか入力できません
- 対象検索フィールドが一個も無い場合はメニューに表示されません
- 一つのアプリケーションに対象の検索フィールドが複数ある場合はメインウインドウ(そのアプリケーションで最前面のウインドウ)の検索フィールドにのみ入力します。メインウインドウに検索フィールドが無い場合は入力しません。対象の検索フィールドが一つの場合は、メインウインドウでなくてもその検索フィールドに入力します。
Muliti Searchの設定方法
対象のアプリケーションのグループをBundle Identifierで指定します。
例:
FinderとiTuensで検索 com.apple.finder com.apple.iTunes
「FinderとiTuensで検索」を選択するとFinderとiTunesの検索フィールドに入力して検索します。その際最初に指定してあるFinderがアクティブになります。
メニュータイトルが「ServiceMenu」の物がサービスメニューから実行した時に使用される設定です。
コメント
0.8.0
最近はあるのが当然となっているので意識しないうちに使ってる感じです。
現在の自分の検索フィールドの設定は次の通りです。参考にして下さい。
* ToolBarSearchField
* WindowSearchField
com.apple.iTunes AXDescription を検索$
com.apple.Safari AXRole AXToolbar AXRole AXGroup AXRole AXSplitGroup AXSubrole AXSearchField
com.kapeli.dash AXRole AXSplitGroup AXSubrole AXSearchField
0.1.0
これでもっとMacがもっと便利になるのに期待です。
ダウンロード
- NandemoSearchHistory0.8.0.zip
- ・他のアプリケーションで検索するMulti Search機能を追加。
- ・履歴を選択して検索フィールドに設定後にリターンキーを入力するようにした。これによりApp Storeなどリターンキーを押す必要があったアプリケーションでも履歴を選択するだけで検索を開始します。
- ・設定「Careful Set Text to Search Field」を追加。Multi Searchで他のアプリケーションからFinderで検索した時に検索が始まらない場合があるのが、(たぶん)常に検索が始まるようになります。
- ・設定「Auto Detect Focused Search Field」を追加。検索フィールドにフォーカスが付いた時に履歴を付けるように登録します。
- NandemoSearchHistory0.2.0.zip
- ・iTunesで表示されない場合があるのは、検索モードによってAXDescriptionが違うからだったのでその対策として値は正規表現で比較するようにした。
- ・*ですべてのアプリケーションを対象とするようにした。大抵のアプリケーションで個別に設定しなくても動くようになったと思う。
- ・他のアプリケーションの履歴も表示できるサブメニューを追加。全アプリの最近のものが入っています。
- ・Targetの設定のデフォルト値が変わっています。変更済みで、デフォルトに戻したい場合はRevertボタンを押して下さい。
- NandemoSearchHistory0.1.4.zip
- ・Evernoteのquery stringメニューを選択しても入力されなかったのを修正。
- NandemoSearchHistory0.1.3.zip
- ・履歴表示テキストのスペース x 2回は辞書.appだと入力できないので、また「^」か「^」に変更。なかなか固定化されないです…。
- ・Evernoteのquery stringは別枠で記録するようにした。「★」のサブメニューです。
- ・細かい修正いろいろ。
- NandemoSearchHistory0.1.2.zip
- ・Evernoteでエンターキーを押して入力を確定して、テキストが全部選択された時の、query stringを記録するようにした(AppleScript使用)。
- ・Evernoteで属性選択時に半角スペースが入力されるようで、履歴メニューが表示されるので、メニューを表示文字を「スペース x 2」に変更。
- NandemoSearchHistory0.1.1.zip
- ・良く考えたら通常スペースから始まる検索ワードは無いから、スペースを履歴メニュー表示にしたらいいと思いついたので、デフォルトの履歴メニュー表示キーを半角スペース、全角スペースに変更。
- NandemoSearchHistory0.1.0.zip
- ちょっとだけテストして大丈夫そうだった。
- EverSearchHistoryにあったバグをいくつか修正