Scintilla/Autocompletion

Last-modified: 2008-03-02 (日) 09:15:04

自動補完

自動補完は、ユーザのタイプをベースにリストボックスに似たような識別子を表示する。
ユーザは候補をタブキーで選択するか、更に候補を絞るために入力を続けるかする。
候補はSCI_AUTOCSETFILLUPSで定義する。
自動補完はScintilla自身ではなく実装側が起動させる。
例えば、C言語でユーザがfredとだけ入力したとすると、一覧の中へfredを調べ、見つかれば自動補完一覧として提示することができる。
またユーザの入力を監視し、その入力に近い候補を提示したら以後は入力毎に候補の絞り込みを行うこともできる。
さらに別の方法として、一覧表示を呼び出すためのキーを定義しておくといった使い方もある。


ユーザがリストから選定すると、SCN_AUTOCSELECTION通知メッセージをコンテナに送る。
通知から戻るときに、自動補完リストがキャンセルされていないと、Scintillaは選択されたテキストを挿入するだろう。例えば、コンテナによって送られるSCI_AUTOCCANCELである。


自動補完を機能させるには、文書に追加されていく文字を逐一監視していなくてはならない。
SciTEBase.cxxのSciTEBase::CharAdded()関数が自動補完の例となっている。

  • SCI_AUTOCSHOW(int lenEntered, const char *list)
  • SCI_AUTOCCANCEL
  • SCI_AUTOCACTIVE
  • SCI_AUTOCPOSSTART
  • SCI_AUTOCCOMPLETE
  • SCI_AUTOCSTOPS(<unused>, const char *chars)
  • SCI_AUTOCSETSEPARATOR(char separator)
  • SCI_AUTOCGETSEPARATOR
  • SCI_AUTOCSELECT(<unused>, const char *select)
  • SCI_AUTOCGETCURRENT
  • SCI_AUTOCSETCANCELATSTART(bool cancel)
  • SCI_AUTOCGETCANCELATSTART
  • SCI_AUTOCSETFILLUPS(<unused>, const char *chars)
  • SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)
  • SCI_AUTOCGETCHOOSESINGLE
  • SCI_AUTOCSETIGNORECASE(bool ignoreCase)
  • SCI_AUTOCGETIGNORECASE
  • SCI_AUTOCSETAUTOHIDE(bool autoHide)
  • SCI_AUTOCGETAUTOHIDE
  • SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)
  • SCI_AUTOCGETDROPRESTOFWORD
  • SCI_REGISTERIMAGE
  • SCI_CLEARREGISTEREDIMAGES
  • SCI_AUTOCSETTYPESEPARATOR(char separatorCharacter)
  • SCI_AUTOCGETTYPESEPARATOR
  • SCI_AUTOCSETMAXHEIGHT(int rowCount)
  • SCI_AUTOCGETMAXHEIGHT
  • SCI_AUTOCSETMAXWIDTH(int characterCount)
  • SCI_AUTOCGETMAXWIDTH

SCI_AUTOCSHOW(int lenEntered, const char *list)

項目群を表示する。
lenEnteredは入力済みの文字数、listは特定の文字で区切られた単語項目群である。
初期状態の区切り文字は空白であるが、SCI_AUTOCSETSEPARATORおよびSCI_AUTOCGETSEPARATORで変更あるいは取得が可能である。


単語項目群は並べ替えが済んでいるものでなくてはならない。
SCI_AUTOCSETIGNORECASEによって大文字小文字を区別しないように設定されている場合は、検索の前に大文字に変換される。
並べ替えを行った項目群は句読点文字のうち'[', '\', ']', '^', '_', '`'が他の文字の後ろに来ていなくてはならないことになる。

SCI_AUTOCCANCEL

項目群の表示を中断する。
自動補完実行中、どの項目の一部分にも該当しないことになる文字の入力があったときは項目群の表示は消去されるべきである。
たとえば識別子の入力中に'.', '(','['といった文字が来た場合などである。
自動補完を中断する文字の集合はSCI_AUTOCSTOPSで指定できる。

SCI_AUTOCACTIVE

活性化中の自動補完項目群があれば0以外、なければ0を返す。

SCI_AUTOCPOSSTART

SCI_AUTOCSHOWが項目群の表示を開始しているときに、現在位置を返す。

SCI_AUTOCCOMPLETE

自動補完機能を活性化させる。
タブキーと同じ効果を持つ。

SCI_AUTOCSTOPS(<unused>, const char *chars)

引数charsは自動補完項目群表示を自動で中断する文字の一覧になっている文字列である。
エディタを開始した時点では、どの文字も自動中断を行わない設定となっている。

SCI_AUTOCSETSEPARATOR(char separator)

SCI_AUTOCGETSEPARATOR

SCI_AUTOCSHOWで指定する項目群の区切り文字を設定もしくは取得する。
初期設定は空白文字である。

SCI_AUTOCSELECT(<unused>, const char *select)

SCI_AUTOCGETCURRENT

自動補完項目群の中からselectに最初に合致する項目を選択する。
初期状態では大文字小文字を区別するがSCI_AUTOCSETIGNORECASEで区別しないようにもできる。
合致検査はselectと一文字ずつ行われる。
selectが"Fred"であれば"Fred"で始まる項目群の最初にある例えば"Frederick"が合致するものとみなされる。
項目が見つかればこれが選択される。
SCI_AUTOCSETAUTOHIDEで自動消去が有効になっている場合、項目が見つからなければ項目群表示が消去される。
現在選択されている項目はSCI_AUTOCGETCURRENTで取得できる。

SCI_AUTOCSETCANCELATSTART(bool cancel)

SCI_AUTOCGETCANCELATSTART

初期状態では、項目群の表示が行われたときよりもキャレットが後退方向に移動したときにその項目群が取り消されるようになっている。
引数にfalseを与えてSCI_AUTOCSETCANCELATSTARTを呼び出すと、補完対象となる単語の最初の文字より前に戻るまで項目群は取り消されない。

SCI_AUTOCSETFILLUPS(<unused>, const char *chars)

自動補完項目群が活性化しているときに決定を意味する文字を入力すると、現在選択中の項目とそれに続いてその決定を促した文字が入力される。
一般的な決定文字は'(', '[', '.'であるが、使っている言語によりその他の文字も使われる。
初期状態ではこのような決定文字は定義されていない。

SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)

SCI_AUTOCGETCHOOSESINGLE

SCI_AUTOCSETCHOOSESINGLE(1)を実行している場合、項目を一つしか取り得ない状態ならば項目群の表示なしで自動的にその項目が入力される。
初期状態では、項目が一つしかない場合でも項目群の形で表示される。

SCI_AUTOCSETIGNORECASE(bool ignoreCase)

SCI_AUTOCGETIGNORECASE

デフォルトで、リストメンバの文字に一致するのは、大文字と小文字を区別する。
これらのメッセージは、大文字小文字区別をセットおよび取得する。

SCI_AUTOCSETAUTOHIDE(bool autoHide)

SCI_AUTOCGETAUTOHIDE

初期状態では、取りうる項目が無くなってしまった場合は項目群が取り消される。
どの項目にも合致しない入力があった場合がそれである。
autoHideをfalseにすると、このようなときに元の項目群を保持し続ける。
この指定はSCI_AUTOCSELECTにも影響を与える。

SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)

SCI_AUTOCGETDROPRESTOFWORD

項目が選択されるとき、dropRestOfWordが本当に用意ができているなら、キャレットに従うどんな単語文字も、最初に消される。
デフォルトはfalseである。

SCI_REGISTERIMAGE(int type, const char *xpmData)

SCI_CLEARREGISTEREDIMAGES

SCI_AUTOCSETTYPESEPARATOR(char separatorCharacter)

SCI_AUTOCGETTYPESEPARATOR

自動補完項目群は文字列の代わりに画像で表示することもできる。
各画像は整数型で登録され、'?'で区切られた項目群文字列の形で使われる。
"fclose?2 fopen"という文字列は画像番号2を"fclose"の前に表示し、"fopen"の前には画像がないという指定になる。
画像はSCI_MARKERDEFINEPIXMAP用のXPM形式である。
登録した画像はSCI_CLEARREGISTEREDIMAGESで消去できる。
また、上記説明の区切り'?'はSCI_AUTOCSETTYPESEPARATORで変更できる。

SCI_AUTOCSETMAXHEIGHT(int rowCount)

SCI_AUTOCGETMAXHEIGHT

自動補完リストで目に見える列の最大数を取得するか、または設定する。
リストにより多くの列があれば、垂直なスクロールバーが表示される。
デフォルトは5である。

SCI_AUTOCSETMAXWIDTH(int characterCount)

SCI_AUTOCGETMAXWIDTH

完全に見えるようになる最も長い項目の文字数として表現された自動補完リストの全幅を取得するか、または設定する。
ゼロ(デフォルト)であれば、リストの幅は、最も多くの文字と項目に合うように計算される。
有効な幅の中に完全に表示できるというわけではないどんな項目も、省略の存在によって示される。