最終更新日:2013/02/03

NandemoSearchHistory - Finder、Mac App Store、iTunesなど検索履歴が付かないアプリケーションに検索履歴を表示できるようにするアプリケーション

NandemoSearchHistoryとは

EverSearchHistoryを作って、他のアプリケーションをよく見たらOS標準のアプリケーションでも検索履歴がないものがたくさんありました。思い返すとMac App Storeでよくチェックするアプリケーションや検索ワードがあるのですが、それも毎回単語を打ち込んで見ていました。

そこで、EverSearchHistoryの汎用版を使ったらいろいろなアプリケーションに検索履歴が付いて便利になるんじゃないかな、と思い作ってみました。

辞書など検索フィールドには履歴が表示されないアプリケーション、再起動したら履歴が消えてしまうアプリケーションなどでも便利に使えると思います。

仕様はEverSearchHistoryと全く同じで、特定の文字を入力すると履歴がポップアップメニューで表示されて、選択したら入力します。

基本的な動作の動画

できることまとめ

下記のできることはすべて起動しているアプリケーションの存在している検索フィールドが対象です。

開発環境

Mac OS X 10.6.8

動作環境

10.6以降が必要です。

10.7ではテストしていませんが、動くような気がします。

動作原理

動作原理は非常に簡単でAXObserverAddNotificationで検索フィールドのテキストを監視して、変更されたら記憶、特定の文字を入力したらメニューを表示しています。

使い方

  1. 「ユニバーサルアクセス」環境設定で「補助装置にアクセスできるようにする」にチェックを入れます。
  2. NandemoSearchHistory.appを起動します。
  3. デフォルトでは「^」もしくは「^」を先頭に入力すると履歴メニューが表示されます。設定が正規表現になっているのは、日本語入力時に全角が入力されてもメニューが表示されるように複数の文字を指定できるようにするためです。文末に特定の文字が来た時なども設定できます。
  4. メニューは上下の矢印キーで選択、リターンキーで確定できます。
  5. escキーでメニューを閉じることができます。
  6. 起動直後はメニューが表示されないことがありますが、ちょっと待ってから文字を入力し直すと表示されるようです。
  7. 起動中にFinderでNandemoSearchHistory.appを再度Finderで開くと設定ウインドウを表示します。
  8. 設定のアプリケーションの指定はすべて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
^もしくは^
(^[\^^]$)

仕様、バグ

対象の検索フィールドの指定方法

デフォルトで次の値で検索フィールドを探すようになっています。これでほぼすべての検索フィールドを探せると思います。

* AnyRole (AXToolbar|AXSplitGroup|AXGroup|AXScrollArea|AXTabGroup) AXSubrole AXSearchField

* AnyRole (AXToolbar|AXSplitGroup|AXGroup|AXScrollArea|AXTabGroup) AXDescription (?i)(search|検索)

* AnyRole (AXToolbar|AXSplitGroup|AXGroup|AXScrollArea|AXTabGroup) AXRoleDescription (?i)(search|検索)

「Auto Detect Focused Search Field」がオンの場合、上記以外に次のTextFieldの履歴を記録します。

AXTitle、AXHelpが(?i)(search|検索)

プログラムの手抜きのため、設定がテキスト形式となっております。

基本形は下記の通りです。

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」の物がサービスメニューから実行した時に使用される設定です。

コメント

1.1.0

今更だけど、Safariでいろいろ検索している履歴が残ったら便利だろうと思ったのでいろいろやってみました。

最初「Treat Safari's All TextField As SearchField」を付けてみたのですが、残ってほしくないものまで残るので、これはダメそうでした。

とりあえず、titleとplaceholderに「検索」と指定してあるinputは履歴を記録できるようにしたのですが、その他未指定のものはいい方法がわかりませんでした。どうしても履歴を残したいならUserScriptで次のようなJavaScriptを実行してinputに「検索」を付けると表示できるようになると思います。

e = document.getElementById('q'); e.blur(); e.setAttribute('placeholder','検索');

Googleの検索後の検索フィールドは履歴が表示できないのですが、次のようなUserScriptで履歴を表示できるようになりました。


// ==UserScript==
// @name           NandemoSearchHistory Helper
// @namespace      NandemoSearchHistory
// @include        http*://*.google.co.jp/*
// @include        http*://*.google.com/*
// ==/UserScript==
(function () {

	if (document.forms.length) {
		var e = document.forms[0].q;
		if (e) {
			e.setAttribute('placeholder', '検索');
		}
	}
})();

1.0.0

MenuBarAppleScriptのソースを使用して、アプリケーションごとに個別に設定しなくてもほぼすべての検索フィールドを自動で探せるようになったと思います。

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がもっと便利になるのに期待です。

ダウンロード

NandemoSearchHistory1.1.0 開発中
・検索フィールドの探し方をさらに改良。Dockに表示されないアプリケーションでも動くようになった。
・Safariの一部検索フォームの履歴を記録できるようになった。
例:GoogleやYouTubeの最初の検索フォーム。
詳しく:inputにtitle又はplaceholderに「検索」が指定してあるものの履歴を記録します。
・Google ChromeのアドレスバーからのGoogle検索の履歴を記録、表示できるようになった。
・設定「Treat Safari's All TextField As SearchField」を追加。オンにするとパスワード等全部記録するようになります。
配布停止中
NandemoSearchHistory1.0.0.zip
・検索フィールドの探し方を改良。デフォルト設定でほぼすべての検索フィールドを探せるようになったと思います。
NandemoSearchHistory0.8.1.zip
・Javaプラグインなど特殊なプロセスが起動している時に動かない問題を修正
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にあったバグをいくつか修正