オートコンプリート設定の詳細
設定ダイアログのSettings::setupにあるオートコンプリートの設定が複雑化してしまってるので解説します。
まず、大雑把に3つの手段に分かれます。
- 前方一致 (デフォルト)
- 部分一致
- 複合一致 (AND, OR, NOT等)
そこに、2つの状況が組み合わさります。
- Migemoを使うかどうか
- パス(ITEMIDLIST含む)のみか
概念としては12の組み合わせがありえますが、ダイアログの使い勝手と、その組み合わせの需要を考えると、全てのスクリプトを用意するのは得策とは言えません。
そこで、まず、基本の4スクリプトがあり:
- PartialMatchAutocomplete (部分一致)
- PartialMatchAutocompleteIfPath (部分一致パスのみ)
- MigemoMatchAutocomplete (Migemo使用の部分一致)
- MigemoMatchAutocompleteIfPath (Migemo使用の部分一致パスのみ)
さらに、複合一致にするかをMigemo使用時かどうかだけで分けた2つがあります:
- MigemoGrouping
- WithoutMigemoGrouping
適当に表にすると、こんな感じになります。
登録アイテムの一致 | パスの一致 | 有効にするスクリプト |
---|---|---|
前方 | 前方 | 無し |
前方 | 部分 | PartialMatchAutocompleteIfPath |
部分 | 部分 | PartialMatchAutocomplete |
前方 | Migemo部分 | MigemoMatchAutocompleteIfPath |
部分 | Migemo部分 | PartialMatchAutocomplete & MigemoMatchAutocompleteIfPath |
Migemo部分 | Migemo部分 | MigemoMatchAutocomplete |
前方 | Migemo複合 | MigemoMatchAutocompleteIfPath & MigemoGrouping |
部分 | Migemo複合 | PartialMatchAutocomplete & MigemoMatchAutocompleteIfPath & MigemoGrouping |
複合 | Migemo複合 | WithoutMigemoGrouping & MigemoMatchAutocompleteIfPath & MigemoGrouping |
Migemo複合 | Migemo複合 | MigemoMatchAutocomplete & MigemoGrouping |
複合一致をMigemoで分けているため、不可能な組み合わせがあります。
Migemoを使うかどうかが両方同じ場合に複合一致を一方に使うことが出来ません。
とはいえ、複合一致は部分一致の増強版のようなものなので、こういうのはどうでもいいと考えています。需要のありそうなものは、"前方 & 複合"ぐらいのはずです。
この問題の簡単な回避方法として、Migemoを有効にしながらも、Migemoを使用しないというものがあります。
Migemoを使用する最低文字数の設定は、Virtual.AutoCompleteSetListWithMigemoLeastLengthにします。
siteinit.giraffeで
Virtual.AutoCompleteSetListWithMigemoLeastLength.= 0
とすれば一文字目からMigemoが使用されます。複合一致時は、例えば"a bc def"という文字列だと、この数値が1の場合、aにはMigemoが使用されません。
この数値を-1uにでもしておけば使用されることはありません。
設定ダイアログによる設定は大雑把にしかできません。
細かいことを可能にするほど、一つの設定を達成するためのスクリプトの組み合わせが増え、このダイアログの主目的である簡便さが損なわれることになります。
Migemo前方一致は、関数は用意されていますが、需要が無いと考えられるのでスクリプトが用意されていません。
Giraffe:List:AutoComplete:MigemoPrefixMatchがそれです。使いたい場合は、MigemoMatchAutocompleteを複製して、その中のGiraffe:List:AutoComplete:MigemoPartialMatchと置き換えるといいでしょう。
重要なのは、どういう使用方法を想定しているかということです。自分を例にしますと。
遅いPC(Tualatin Celeron 1.2A)を使っていた頃は、速度と利便性から、登録アイテムは前方一致とSpaceAsWildcharによる単方向AND一致にして、パスのみをMigemo複合一致としていました。
有効にしていたスクリプトは:
- MigemoMatchAutocompleteIfPath
- MigemoGrouping
と、なります。
PCが新しく(Conroe Celeron 420)なってからは、登録アイテムを全キャッシュし、WithoutMigemoGroupingを使っています。まるで整理しないので登録アイテムが700個ほどありますが、快適に利用できています。
有効にしているスクリプトは:
- PartialMatchAutocomplete
- MigemoMatchAutocompleteIfPath
- MigemoGrouping
- WithoutMigemoGrouping
と、なりました。
PartialMatchAutocompleteは、それが無くともWithoutMigemoGroupingは有効ですが、複合一致は入力文字列が解釈不能な場合に、複合一致OFFとして振舞うので、その場面に対する設定となります。
登録アイテムにMigemoを使わないのは、日本語で登録してないという単純な理由です。スタートメニューの登録アイテム化は邪魔になるのでしてません。
少し別の話になりますが、単純な前方一致以外で使う場合、ListTextOverrideEditTextは必須です。いちいちリストから選択することになるという、これ無しでの使用は想定していません。