Epsalyオブジェクトのメンバー関数は、 次のように、3グループに分類されています。
(1)現編集ウィンドウを対象とする関数 |
(2)全編集ウィンドウ共通の関数 |
(3)プロジェクト関連の関数 |
ここでは、このうち(1)のグループの関数について、詳しく説明します。
関数名 | 概要説明 |
---|---|
MoveTo | 指定位置にカーソルを移動 |
Insert | 挿入(自動字下げなし) |
InsertInd | 挿入(自動字下げあり) |
InsertRect | 矩形状に挿入 |
Overwrite | 上書き |
Replace | 選択範囲のテキストと置換 |
SetSelText | 選択範囲のテキストを設定 |
Enclose | 選択範囲を指定文字列で囲う |
Delete | 指定位置までを削除 |
UndoBlockBegin | 「元に戻す」範囲の開始 |
UndoBlockEnd | 「元に戻す」範囲の終了 |
SelectChars | 文字範囲を選択 |
SelectLines | 行範囲を選択 |
SelectRect | 矩形範囲を選択 |
SelectOff | 範囲選択を解除 |
GetSelType | 範囲選択の形態を取得 |
GetSelCn | 選択範囲の文字コード数を取得 |
GetSelText | 選択範囲の文字列を取得 |
GetSelRange | 選択範囲の情報を取得 |
GetFullCn | 編集テキストの総文字コード数を取得 |
GetFullText | 編集テキストを全て取得 |
GetLineCn | 行の文字コード数を取得 |
GetLineText | 行の文字列を取得 |
GetLineCond | 行の状態を取得 |
GetPartCn | 部分文字コード数を取得 |
GetPartText | 部分文字列を取得 |
GetTerm | 所定区間の文字列を取得 |
GetChar | 文字を取得 |
EvalTxpos | テキスト内の指定位置を評価 |
MaxLineNo | 最大行数(全行数)を取得 |
MaxColumn | 折り返し桁数を取得/設定 |
TabColumn | タブ間隔桁数を取得/設定 |
CharXd | 1桁分の画素数を取得 |
FreeCursor | フリーカーソル状態を設定/取得 |
IME | IMEを操作 |
MarkLine | 行マークを設定/取得 |
SetAnchor | アンカーを設定/解除 |
FindFwd | 順行検索 |
FindBwd | 逆行検索 |
FindAround | 周辺検索 |
MakeFold | 折り畳む |
PresetFold | 折り目を付ける |
OpenFold | 折り畳みを開く |
CloseFold | 折り目を閉じる |
ResetFold | 折り畳みを解除する |
PopupMenu | ポップアップメニューを表示 |
GetEvent | イベント(キー入力等)を取得 |
ExecKeyCmd | 指定キーのコマンドを実行 |
GetKeyCmd | 指定キーのコマンドを取得 |
Sync | テキストエディタとの同期を取る |
Lock | 現対象のテキストをロック |
Unlock | 現対象のテキストのロックを解除 |
GetWindowCond | 現編集ウィンドウの状態(状況)を取得 |
SetWindowCond | 現編集ウィンドウの状態(状況)を設定 |
TintSelText | 選択範囲の着色または着色解除 |
GetTintInfo | 指定位置の着色情報を取得 |
機能: | 指定された位置へカーソルを移動します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置へカーソルを移動します。 本関数の返値は、カーソルの移動先の「文字コードインデックス」になります。 |
用例: |
・第 100 行目へ移動:
・第 200 行、40 桁目へ移動:
・現位置から 3 論理行だけ先へ移動:
・現位置から 1 字前へ移動:
・次の表示行の先頭から 5 単語目へ移動:
・論理行インデックスが 123 の行の行頭へ移動:
・現カーソル行を画面上端から 3 行目にシフト: |
機能: | 指定された文字列を現カーソル位置に挿入します。 |
説明: |
引数 s は、挿入する文字列を指定します。この関数の実行時に、選択範囲があると、
その範囲の文字列が削除されてから、s の文字列が挿入されます。
この挿入では、s の文字列内に改行コードがあっても、
それに対する自動字下げ(オートインデント)は行なわれません。
引数 p は、挿入後のカーソル位置を指定します。p の指定には、次の場合があります。
省略の場合: 挿入文字列の末尾 数値の場合:
p = 0: 挿入文字列の先頭
文字列 s 内で文字列 p が最初に見つかる位置。 本関数の返値は、正常終了の時に、挿入した文字列のコード数になり、不正終了時に、 null になります。 |
用例: |
::Epsaly.Insert( "Hello, world" );
::Epsaly.Insert( "Hello, world\n", 0 );
::Epsaly.Insert( "Hello, @world\r\n", "@" ); |
機能: | 指定された文字列を現カーソル位置に自動字下げを伴って挿入します。 |
説明: |
この関数の引数と返値は、Insert 関数と同じです。 本関数の挿入では、文字列 s 内に改行コードがあると、それに対応する 自動字下げ(オートインデント)が行なわれます。 本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 本挿入が行なわれます。 |
用例: |
次のようなテキストがあるとします。if( A == B ) ┃ X = Y + Z;このテキストの各行は、TAB インデントされていて、┃ は、現カーソル位置を示す ものとします。ここで、 ::Epsaly.InsertInd( "{\r\n\tA = 1;\r\n\tB = 2;\r\n}" ); を実行すると、このテキストは、 if( A == B ) { A = 1; B = 2; }┃ X = Y + Z;となります。ちなみに、 if( A == B ) ┃ X = Y + Z;という状態で、同スクリプトを実行すると、 if( A == B ) { A = 1; B = 2; }┃ X = Y + Z;となります。 |
機能: | 指定された文字列を現カーソル位置に矩形状に挿入します。 |
説明: |
この関数の引数と返値は、Insert 関数と同じです。 本関数の挿入では、文字列 s 内の改行コードを、矩形内の各行の区切りとして扱います。 この改行コードは、実際には挿入されません。 本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 本挿入が行なわれます。 |
用例: |
次のようなテキストがあるとします。ABCDEFGH abcdefgh 12345678ここで、カーソルが、1 行目の E の位置にあるとします。 ::Epsaly.InsertRect( "--X--\n--Y--\n--Z--\n" ); を実行すると、このテキストは、 ABCD--X--EFGH abcd--Y--efgh 1234--Z--5678となります。 |
機能: | 指定された文字列を現カーソル位置に上書きします。 |
説明: |
この関数の引数と返値は、Insert 関数と同じです。 本関数の上書きでは、 単純に上書きする文字と上書きされる文字を1字ごとに入れ替えるのではなく、 基本的に、上書き文字列の書き込みによって、それ以降の文字の表示位置が、 ズレないようになっています。 本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 上書きが行なわれます。 |
用例: |
次のようなテキストがあるとします。あいうえお かきくけこ さしすせそここで、カーソルが、1 行目の「う」の前にあるとします。 ::Epsaly.Overwrite( "-ABC-\r\n-XYZ-" ); を実行すると、このテキストは、 あい-ABC- -XYZ- けこ さしすせそとなります。 |
機能: | 指定された文字列を選択範囲のテキストと置換します。 |
説明: |
この関数の引数と返値は、Insert 関数と同じです。 本関数の実行時点で、矩形範囲が選択されていれば、 本関数は、InsertRect 関数と同じ機能を果たします。 さもなければ、本関数は、Insert 関数と同じ機能を果たします。 |
用例: |
次のように矩形範囲選択されたテキストがあるとします。111222333 AAABBBCCC アアアイイイウウウここで、 ::Epsaly.Replace( "--X--\n--Y--\n--Z--\n" ); を実行すると、このテキストは、次のようになります。 111--X--333 AAA--Y--CCC アアア--Z--ウウウ |
機能: | 指定された文字列を選択範囲のテキストとして設定します。 |
説明: |
引数 s は、挿入する文字列を指定します。 本関数では、基本的に、挿入された文字列が、選択状態になります。 なお、引数 s は、空文字列でも構いませんが、非文字列の場合は不正になります。
本関数の実行時に、選択範囲がある場合:
選択範囲の文字列が、s の文字列に置き換わります。 その際、範囲選択の形態と方向は、変わりません。 矩形範囲が選択されていると、その範囲内の各行の選択部は、 文字列 s 内の各改行コードで区切られる部分に置き換わります。 この改行コードは、区切りの役目を果たすだけで、 実際に挿入されるわけではありません。 本関数の実行時に、選択範囲がない場合: 引数 s の文字列が現カーソル位置に単純に挿入されます。 その時、その文字列は、文字範囲選択された状態になります。 本関数の返値は、正常終了の時に、挿入した文字列のコード数になります。 不正終了時は、null になります。 |
用例: |
次のように、矩形範囲選択されているテキストがあるとします。111222333 AAABBBCCC アアアイイイウウウここで、 ::Epsaly.SetSelText( "--X--\n--Y--\n--Z--\n" ); を実行すると、矩形選択範囲が次のように変わります。 111--X--333 AAA--Y--CCC アアア--Z--ウウウ また、次のような範囲選択されていないテキストがあるとします。 AAA┃BBBここで、┃ は、現カーソル位置を示します。この時、 ::Epsaly.SetSelText( "--X--" ); を実行すると、このテキストは次のようになります。
AAA--X--┃BBB
|
機能: | 選択範囲のテキスト部を指定文字列で囲います。 | ||||||||||||
説明: |
引数 a は、左側の囲い文字列を指定します。
引数 b は、右側の囲い文字列を指定します。 いずれの引数も省略時には、空文字列に扱われます。
文字範囲が選択されている場合:
選択範囲の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。 行範囲が選択されている場合:選択範囲の各行の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。 矩形範囲が選択されている場合:選択範囲の各行の選択部の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。 範囲選択されていない場合:現カーソル位置に、a と b の文字列が挿入されます。
本関数は、正常終了時に、挿入した文字列の総コード数を返します。
不正終了時には、null を返します。
| ||||||||||||
用例: |
範囲選択の形態が違う場合に、 ::Epsaly.Enclose( "≪-", "-≫" ); を実行した時、各結果がどうなるかを以下に示します。 文字範囲選択時:
|
機能: | 現カーソル位置から指定位置までの範囲を削除します。 |
説明: |
本関数が削除する範囲は、 現カーソル位置から 引数で指定された位置まで になります。 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。 引数なしにコールされた場合、選択範囲が削除されます。 引数も選択範囲もない場合は、特に何も行なわれません。 引数があって、選択範囲もある場合、まず範囲選択が解除されてから、 本来の削除が行なわれます。 本関数は、正常終了時に、null 以外の値を返します。 不正終了時には、null を返します。 |
用例: |
・選択範囲を削除: ::Epsaly.Delete(); ・現カーソル位置から行末までを削除: ::Epsaly.Delete( 'LineEnd ); ・現カーソル行を削除: ::Epsaly.MoveTo( 'LineTop ); ::Epsaly.Delete( 'LineLim ); ・現カーソル位置からテキスト先頭までを削除: ::Epsaly.Delete( 'TextTop ); ・100 行目から 200 行目までを削除: ::Epsaly.MoveTo( 100'LineNo, 'LineTop ); ::Epsaly.Delete( 200'LineNo, 'LineLim ); ・現カーソル位置から次の1字を削除: ::Epsaly.Delete( 1'DKn ); |
機能: | 「元に戻す」範囲( Undo ブロック )を開始します。 |
説明: |
編集テキストの内容を、スクリプトで変更した場合でも勿論、手動で変更した場合と同様に、
「元に戻す( Undo )」で復元することができます。
「元に戻す」範囲( Undo ブロック )を設定しておくと、
その範囲内で行なわれた一連の変更は、1回の「元に戻す( Undo )」でまとめて
復元できるようになります。
「元に戻す」範囲は、UndoBlockBegin() 関数の実行で開始し、UndoBlockEnd() 関数の実行で 終了します。この両関数は基本的に、ペアーで使います。この範囲が終了せずに、 スクリプトが終了しても、この範囲は自動的に終了します。 この範囲は、入れ子にはできません。 |
用例: |
編集テキストに対して、以下の ・・・・・ のところで行なった変更は、 1回の「元に戻す( Undo )」で、まとめて復元されます。 ::Epsaly.UndoBlockBegin(); ・・・・・ ::Epsaly.UndoBlockEnd(); |
機能: | 「元に戻す」範囲( Undo ブロック )を終了します。 |
説明: | UndoBlockBegin() 関数参照。 |
用例: |
次のスクリプトは、丸括弧付きの通し番号を、現カーソル行以降の 10 行の行頭に
付加しますが、このスクリプトで行なわれた変更は、
1回の「元に戻す( Undo )」で、全部まとめて復元されます。
scope ::Epsaly { .UndoBlockBegin(); .MoveTo( 'LineTop ); for( i = 1 ; i <= 10 ; i++ ) { .Insert( "(%i)"'fmt(i), 0 ); .MoveTo( +1'LLn ); } .UndoBlockEnd(); } |
機能: | 指定位置から現カーソル位置までの文字範囲を選択します。 |
説明: |
本関数が選択する文字範囲は、 始点: 引数で指定された位置 終点: 現カーソル位置 になります。 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。 本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。 引数なしにコールされた場合、現カーソル位置が、文字選択範囲の始点と終点になります。 これは、空の文字範囲が選択されている状態です。 本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。 本関数が正常終了すると、文字範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、文字範囲選択の始点は、変わりませんが、 その終点が、カーソルの移動先に変わります。 この状態は、範囲選択を解除すれば、解除されます。 |
用例: |
・行頭から現カーソル位置までを選択: ::Epsaly.SelectChars( 'LineTop ); ・テキスト末尾から現カーソル位置までを選択: ::Epsaly.SelectChars( 'TextEnd ); ・現カーソル位置を始点に文字範囲選択を開始: ::Epsaly.SelectChars(); // 以降、カーソル移動で、文字範囲選択の終点を変える |
機能: | 指定行から現カーソル行までの行範囲を選択します。 |
説明: |
本関数が選択する行範囲は、 開始: 引数で指定された位置の行 終了: 現カーソル位置の表示行 になります。 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。 本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。 引数なしにコールされた場合、現カーソル位置の表示行のみが選択され、 これが、行選択範囲の開始行と終了行になります。 本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。 本関数が正常終了すると、行範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、行選択範囲の開始行は、変わりませんが、 その終了行が、カーソルの移動先の行に変わります。 この状態は、範囲選択を解除すれば、解除されます。 |
用例: |
・テキスト先頭から現カーソル行までを選択: ::Epsaly.SelectLines( 'TextTop ); ・現カーソル行以降の3論理行を選択: ::Epsaly.SelectLines( 3'LLn ); ・100 〜 200 行を選択: ::Epsaly.MoveTo( 100'LineNo ); ::Epsaly.SelectLines( 200'LineNo ); ・現カーソル位置を起点に行範囲選択を開始: ::Epsaly.SelectLines(); // 以降、カーソル移動で、行範囲選択の終了行を変える |
機能: | 指定位置から現カーソル位置までの矩形範囲を選択します。 |
説明: |
本関数が選択する矩形範囲は、 始点: 引数で指定された位置 終点: 現カーソル位置 になります。 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。 引数で指定される位置が、改行コード以降になる場合は、 フリーカーソル状態にしておく必要があります。 本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。 引数なしにコールされた場合、現カーソル位置が、矩形選択範囲の始点と終点になります。 これは、空の矩形範囲が選択されている状態です。 本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。 本関数が正常終了すると、矩形範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、矩形範囲選択の始点は、変わりませんが、 その終点が、カーソルの移動先に変わります。 この状態は、範囲選択を解除すれば、解除されます。 |
用例: |
・テキスト先頭から現カーソル位置までの矩形範囲を選択: fs = ::Epsaly.FreeCursor(1); // 現フリーカーソル状態取得 ::Epsaly.FreeCursor(1); // フリーカーソルON ::Epsaly.SelectRect(); // 現位置が矩形範囲選択の始点 ・・・・・ // 矩形範囲選択の終点へカーソル移動 ・・・・・ // 矩形選択範囲に対する何かの操作 ::Epsaly.FreeCursor(fs); // フリーカーソル状態の復元 |
機能: | 範囲選択を解除します。 |
説明: |
本関数は、範囲選択を解除した後、その直前の範囲選択状態を示す値を返します。
この値は、GetSelType() 関数の返値と同様です。 |
機能: | 範囲選択の形態を返します。 |
説明: |
本関数は、現在の範囲選択の形態を示す次の数値を返します。 =0: 範囲選択なし =1: 文字範囲選択中 =2: 行範囲選択中 =3: 矩形範囲選択中 |
機能: | 選択範囲の全テキスト部、または、指定行の選択部の文字列のコード数を返します。 |
説明: |
引数 Li には、対象とする行の表示行インデックスを
指定します。 Li が省略時、選択範囲の全テキスト部のコード数を返します。 Li の値が選択範囲内の場合、その表示行の選択部のコード数を返します。 Li の値が選択範囲外の場合、0 を返します。 Li が不正時、null を返します。 |
注意: |
返値は、本エディタの内部文字コードでのコード数になります。 矩形選択範囲の全テキスト部が対象の場合( Li 省略時 )、 その範囲内の各行の選択部の末尾に改行コード (CR+LF) を付加したコード数を返します。 つまり、 返値 = 矩形選択範囲の全テキスト部自身のコード数 + 矩形選択範囲の表示行数 × 2 になります。 矩形選択範囲の指定行内の選択部が対象の場合( Li 指定時 )、 その選択部自身(その末尾に改行コードを付加しない)のコード数を返します。 |
機能: | 選択範囲の全テキスト部、または、指定行の選択部の文字列を返します。 |
説明: |
引数 Li には、対象とする行の表示行インデックスを
指定します。 Li が省略時、選択範囲の全テキスト部の文字列を返します。 Li の値が選択範囲内の場合、その表示行の選択部の文字列を返します。 Li の値が選択範囲外の場合、空文字列を返します。 Li が不正時、null を返します。 |
注意: |
矩形選択範囲の全テキスト部が対象の場合( Li 省略時 )、
その範囲内の各行の選択部の末尾に改行コード (CR+LF) を付加した文字列を返します。 矩形選択範囲の指定行内の選択部が対象の場合( Li 指定時 )、 その選択部自身(その末尾に改行コードを付加しない)の文字列を返します。 |
用例: | ・選択範囲をコンソールウィンドウにプリント: print ::Epsaly.GetSelText(); ・選択範囲をクリップボードにコピー: ::Clipboard.SetText( ::Epsaly.GetSelText() ); ・選択範囲の「英小文字→英大文字」変換: ::Epsaly.SetSelText( ::Epsaly.GetSelText()'upper ); ・選択範囲内の空白を除去: ::Epsaly.SetSelText( ::Epsaly.GetSelText() 'subst( "[ \t ]", "" ) ); ・選択範囲の各行頭に引用符を付加: ::Epsaly.SetSelText( ::Epsaly.GetSelText() 'subst( "@(.*\n|.+$)", "> @1" ) ); |
機能: | 選択範囲の情報を取得します。 | ||||||||||||||||||||||
説明: |
引数 S には、取得情報の種別を指定します。 本関数は、下表の通り、S の値に応じて、選択範囲に関する情報を返します。
この返値は、2項値になります。2項値は、多重代入で取得します。例えば、次のようにします。 ( MinVLi, MaxVLi ) = ::Epsaly.GetSelRange( 0 ); これで、選択範囲の最小と最大の表示行インデックスが、それぞれ、
MinVLi と MaxVLi という変数に代入されます。
( MinXs, LimXs ) = ::Epsaly.GetSelRange( 1 );
上表で、「最小」「最大」「上限」の関係は、次の通りです。
「始点」は、その範囲選択の開始点でアンカー的ですが、「終点」は、
現カーソル位置に対応した流動的な端点です。そのため、これらの値の大小関係は、
範囲選択の状態に依存します。 引数 Li は、S=1 または S=2 の時に、選択範囲内の特定の行だけの情報を取得する場合に、 その行の表示行インデックスを指定します。 これ以外の場合、Li の指定は不用です。 | ||||||||||||||||||||||
補説: |
範囲選択されていない時、本関数は、null を返します。 引数 S が省略された場合、S = 0 として扱います。 引数 Li の指定が不正(選択範囲外等)の時、null を返します。 S = 1, 4 の場合、本関数は、X座標を返しますが、行範囲選択時には、 あまり意味はありません。 |
機能: | 現編集テキストの総文字コード数を取得します。 また、全表示行の各文字コード数を配列として取得することができます。 |
説明: |
本関数は、引数の有無とは無関係に、現編集テキストの総文字コード数を返します。 引数 lnsz の指定がある場合、本関数は、その引数で指定された箱(変数)に、 全表示行の各文字コード数を要素値とする純粋配列を設定します。 この配列の要素のデータ型は、'USHORT になります。また、 この配列のインデックスは、表示行インデックスに対応します。 なお、この配列は、引数 lnsz が箱の指定として無効な時には、設定されません。 ちなみに、各表示行の文字コード数は、GetLineCn() 関数で 取得できますが、全表示行の文字コード数を一気に取得する場合は、本 GetFullCn() を使う方が、 遥かに高速で便利です。 |
用例: |
次のスクリプトは、現テキストの文字コード数をプリントします。
次のスクリプトを実行すると、LineCn という名前の箱(変数)に、
全表示行の各文字コード数を要素とする純粋配列が設定されます。 |
機能: | 現編集テキストの全文字列を取得します。 |
用例: |
次のスクリプトは、現編集テキスト内にある各英数単語の出現頻度をカウントして、
その結果をプリントします。
txbuf = ::Buffer(); txbuf.Write( ::Epsaly.GetFullText() ); txbuf.Seek(0); count'cbox!; for( v = txbuf.Find( $"\w+" ) ; v >= 0 ; v = txbuf.FindNext() ) { word = txbuf.FoundText(); if( count[ word ]'exist? ) count[ word ]++; else count[ word ] = 1; } count'qsort; for( p := count'first ; p'ref? ; p := count'next ) print p : "\t" : p'name; |
機能: | 指定された位置の行の文字コード数を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置にある行の 文字列の文字コード数を返します。 この行が論理行か表示行かは、引数の指定に依存します。 この行の末尾が改行コードなら、その文字コード数も含みます。 |
用例: |
・現カーソル行の文字コード数を取得:
・次の表示行の文字コード数を取得:
・2行前の論理行の文字コード数を取得: MaxSize = 0; N = ::Epsaly.MaxLineNo(1); for( i = 0 ; i < N ; i++ ) { CurSize = ::Epsaly.GetLineCn( i'LLi ); if( MaxSize < CurSize ) MaxSize = CurSize; } print MaxSize; |
機能: | 指定された位置の行の文字列を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置にある行の文字列を返します。 この行が論理行か表示行かは、引数の指定に依存します。 この行の末尾が改行コードなら、それも含めて返します。 |
用例: |
・現カーソル行の文字列を取得:
・次の論理行の文字列を取得:
・3行前の表示行の文字列を取得: 'match( "ABC" ); N = ::Epsaly.MaxLineNo(1); for( i = 0 ; i < N ; i++ ) { T = ::Epsaly.GetLineText( i'LLi ); if( T'match >= 0 ) print T :- ; } |
機能: | 指定された行の状態を取得します。 |
説明: |
引数 t には、取得する状態の種別を、下表の数値で指定します。0 変更の有無 1 折り返し行か否か( 論理行の場合は、折り返し行の有無 ) 2 マークの有無 3 折り畳みの中にある行か否か 4 折り畳みで隠された行か否か 5 空行(改行だけの行)か否か 6 空白行(空または空白だけの行)か否か 7 インデント(字下げ)の桁数 8 論理行内の表示行数(=折り返し回数+1) 9 論理行内の相対表示行インデックス( 論理行の場合、常に 0 ) 10 折り畳み段数( >0: 折り畳み深さ、<0: 展開レベル、= 0: 解除 ) 11 対象行を含む折り畳み部の表示行数 12 〃 折り畳み部内での対象行の相対表示行インデックス 13 〃 折り畳み部の総表示行数 14 〃 折り畳み部の総論理行数 15 〃 折り畳み部の総文字コード数引数の ... には、「編集テキスト内の位置を 規定するリレー型関数」を使って、対象行を指定します。 なお、対象行が論理行か表示行かは、この指定に依存します。 引数 t の指定が、有無、〜か否か、の場合、結果は、それぞれ、1 か 0 で返します。 引数 t が省略時、0 の指定と解釈します。引数 t が不正時、-1 を返します。 |
用例: |
・100 行目が変更されているか否か:
・現カーソル行が折り畳み行か否か:
・次の外見行が空行か否か:
・2行前の論理行の折り返し行数: M = 0; N = ::Epsaly.MaxLineNo( 0 ); for( i = 0 ; i < N ; i++ ) { if( ::Epsaly.GetLineCond( 2, i'VLi ) ) M++; } print M; |
機能: | 指定された位置から現カーソル位置までの文字コード数を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置から現カーソル位置までの間にある文字列の 文字コード数を返します。 |
用例: |
・現カーソル位置から行末までの文字コード数を取得:
・現カーソル位置からテキスト先頭までの文字コード数を取得:
・現カーソル位置から前の論理行の 8 桁目までの文字コード数を取得: |
機能: | 指定された位置から現カーソル位置までの文字列を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置から現カーソル位置までの間にある文字列を 返します。 |
用例: |
・現カーソル位置から行頭までの文字列を取得:
・現カーソル位置からテキスト末尾までの文字列を取得:
・現カーソル位置から次の論理行の 8 桁未満までの文字列を取得: |
機能: | 指定された位置にある所定区間の文字列を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 |
用例: |
・現カーソル位置にある所定区間の文字列を取得:
・現在の行頭から 8 桁目にある所定区間の文字列を取得: |
機能: | 指定された位置にある1字の文字列を取得します。 |
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。 本関数は、この引数で指定された位置にある1字の文字列を返します。 この位置がテキスト末尾の場合は、空文字列を返します。 |
用例: |
・現カーソル位置の1文字(の文字列)を取得:
・現カーソル行の行頭の1文字(の文字列)を取得: |
機能: | テキスト内の指定位置を返します。 | ||||||||||||||||||||||||||
説明: |
本関数の引数は、「編集テキスト内の位置を
規定するリレー型関数」を使って指定します。
本関数は、この引数列で規定された最終位置を返します。
この最終位置が、何の値になるかは、最後の引数に使われたリレー型関数に依存します。
その対応は、下表のようになります。
| ||||||||||||||||||||||||||
用例: |
・表示行インデックス i を論理行インデックス j に変換:
・論理行インデックス i を外見行インデックス j に変換:
・現カーソル行の次の表示行の行頭から 2 単語目の桁位置:
・100 行目の行頭から 12 字目の文字コードインデックス: | ||||||||||||||||||||||||||
補説: |
単に、現カーソル位置を取得するだけなら、本関数を使わなくても、
次のようにできます。
・現カーソル行の論理行インデックス:
・現カーソル行の外見行インデックス: |
機能: | 編集テキストの最大行数(全行数)を取得します。 |
説明: |
引数 t は、次の値で行の単位を指定します。 =0: 表示行 =1: 論理行 =2: 外見行 引数 t が省略された場合、環境設定の行番号欄で選ばれている方(表示行か論理行の どちらか)になります。 |
用例: |
次のスクリプトは、現編集テキストの論理行数をプリントします。 print ::Epsaly.MaxLineNo(1); |
機能: | 1行の最大桁数(折り返し桁数)を設定/取得します。 |
説明: |
引数 n には、折り返し桁数を指定します。
この値の指定の仕方で、次のような動作が可能です。なお、いずれの場合でも、
折り返し桁数が変わった時には、画面が更新されます。
また、返値は、本関数実行後の折り返し桁数になります。
n > 0 の時: 折り返し桁数が、n の値に設定されます。設定可能な範囲は、20 〜 1024 桁です。 n = 0 の時:現環境設定の値に合わせて折り返すように設定されます。 n < 0 の時:n の値に関係なく、現ウィンドウ幅に合わせて折り返すように設定されます。 n 省略時:折り返し桁数は設定せずに、現在の折り返し桁数を返します。 |
用例: |
次のスクリプトを実行すると、現編集テキストは、80 桁目で折り返します。 ::Epsaly.MaxColumn( 80 ); 次のスクリプトを実行すると、現編集テキストの折り返しは、現環境設定の桁数に戻ります。 ::Epsaly.MaxColumn( 0 ); |
機能: | タブ間隔の桁数を設定/取得します。 |
説明: |
引数 N には、タブ間隔の桁数を指定します。
この値の指定の仕方で、次のような動作が可能です。なお、いずれの場合でも、
タブ間隔の桁数が変わった時には、画面が更新されます。 N > 0 の時: 全タブ間隔を N 桁に設定します。設定可能な範囲は、2 〜 80 桁です。 もし、N の値がこの範囲外なら、この範囲でカットされます。 N ≦ 0 の時:タブ間隔を、現環境設定の桁数に設定します(戻します)。 N が純粋配列の時:各タブ間隔の桁数を順に、その各要素の数値に設定します。 なお、この純粋配列は、1次元の LONG 形式が必須です。 N がコンテナ箱の時:各タブ間隔の桁数を順に、その箱の中の各数値に設定します。 N 省略時:タブ間隔は設定せずに、現在のタブ間隔の桁数を返します。 返値は、正常終了時、本関数実行後のタブ間隔の桁数になります。 これには、次の2通りの場合があります。 全タブ間隔で同じ桁数の場合: その桁数の整数値を返します。 各タブ間隔で個別桁数の場合:その各桁数の整数値を要素とする純粋配列を返します。 なお、異常終了時、返値は、null になります。 |
用例: |
全タブ間隔を 8 桁に設定:
タブ間隔を、現環境設定に戻す:
各タブ間隔を 10,8,12,4 桁に設定: |
参考: | 「タブ桁の一時変更」を行なう TabColumn.mc( 実用スクリプト集 )は、 本関数の使用例として非常に参考になります。 |
機能: | 1桁あたりの画素数を返します。 |
補説: | 本関数は、'Xc, 'Xd を 使う時などに必要になることがあります。 |
用例: | ::Epsaly.MoveTo( ( ::Epsaly.CharXd() * 20 )'Xc ); |
機能: | フリーカーソル状態を設定/取得します。 |
説明: |
引数 s に応じて、フリーカーソル状態は、次のようになります。 s ≠ 0: ON s = 0: OFF s 省略: 現状のまま 返値は、本関数実行後のフリーカーソル状態を示します。 =0: OFF =1: ON |
用例: |
次のスクリプトは、選択範囲の各行(または現在行)の 80 桁目に縦の罫線文字「│」を挿入します。 80 桁未満で改行されている行にも対応できるように、 各行の 80 桁目へのカーソル移動は、フリーカーソル ON 状態で行なっています。 なお、本スクリプトの実行時には、折り返し桁が 81 桁以上になっている必要があります。 'AddScope( ::Epsaly ); if( GetSelType() > 0 ) // 範囲選択あり? { ( MinLi, MaxLi ) = GetSelRange( 0 ); SelectOff(); } else // 範囲選択なし? MinLi = MaxLi = 'VLi; // 現在行 fc = FreeCursor(); // 現フリーカーソル状態を保管 FreeCursor(1); // フリーカーソル ON 状態にする UndoBlockBegin(); for( Li = MinLi ; Li <= MaxLi ; Li++ ) { MoveTo( Li'VLi, 80'Column ); Insert( "│" ); } UndoBlockEnd(); FreeCursor( fc ); // 元のフリーカーソル状態に戻す |
機能: | IMEを操作します。 |
説明: |
引数 cmd は、IMEの操作を以下の数値で指定します。
返値は、次のようになります。 |
補説: |
再変換の対象文字列は、次のようになります: |
用例: |
・IMEを ON に設定:
・IMEの再変換を起動: |
機能: | 行マークを設定/取得します。 |
説明: |
引数 t は、下表の数値で、行マークの操作を指定します。0 通常マークを解除 1 通常マークを設定 2 通常マークの設定状態を反転 3 通常マークを全て解除 4 一時マークを解除 5 一時マークを設定 6 一時マークの設定状態を反転 7 一時マークを全て解除 -1 現在の行マーク状態を取得
引数 t が省略時は、-1 の指定として解釈します。 返値は、以下の数値で、本関数実行後の対象行のマーク設定状態を示します。 0 両マークとも無し 1 通常マークのみ有り 2 一時マークのみ有り 3 両マークとも有 -1 引数不正 or エラー |
用例: |
・現カーソル行に通常マークを設定:
・論理行インデックスが 120 の行に一時マークを設定:
・全ての一時マークを解除:
・230 行目の行マークの設定状態を取得: |
機能: | アンカーを設定/解除します。 |
説明: |
アンカーとは、編集テキスト内の任意の位置に設定できる目印です。
この位置は後で随時参照できます。
なお、この目印は、内部的に存在するだけで、表示はされません。
引数 i が、0 〜 31 の時、それぞれ、0 〜 31 番のアンカーの位置を、
引数の ... で規定される位置に設定します。
設定されたアンカーは、'AP という関数で参照できます。 引数 ... では、「編集テキスト内の位置を 規定するリレー型関数」を使って、アンカーの設定位置を指定します。 アンカーの設定で、引数 ... を省略すると、現カーソル位置が設定されます。 なお、アンカーの解除の時には、引数 ... の指定は不要です。 返値は、当該アンカーの前の設定位置の文字コードインデックスになります。 |
用例: |
・現カーソル位置に1番のアンカーを設定:
・論理行インデックスが 120 の行頭に5番のアンカーを設定:
・0番のアンカーを解除: |
機能: | 現カーソル位置から指定文字列を指定モードで順行検索します。 |
説明: |
引数 string と mode は、SetFindCond 関数と同じです。 string の指定がない時、現在の検索文字列が使用されます。 mode の指定がない時、現在の検索モードが使用されます。 同じ検索条件で何回も検索する場合は、最初に SetFindCond 関数で検索条件を設定しておいて、各回の検索では、 本関数を引数なしでコールする方が、毎回本関数で同じ検索条件を指定してコールする よりも速くなります。 引数 type は、置換のための検索を行なわせる時に、1 を指定します。 この引数は省略または 0 の指定で、通常の検索になり、置換のための検索は行ないません。 ちなみに、置換条件の設定は、SetReplCond 関数で行ないます。 引数 hist は、string が指定された場合、今回の検索条件(検索文字列と検索モード)を、 履歴に保存しない時に、真値(1)を指定し、履歴に保存する時に、偽値(0)を指定するか省略します。
本関数は、検索結果を示す整数値を返します。 |
用例: |
・現検索条件で順行検索を実行:
・"ABC" を順行検索して選択:
・"ABC" を含む行を順行検索:
・一連の空白行を順行検索して選択: |
機能: | 現カーソル位置から指定文字列を指定モードで逆行検索します。 |
説明: | 本関数の引数と返値は、FindFwd 関数と同じです。 両関数の違いは、検索方向が逆になる以外、特にありません。 |
用例: |
・現検索条件で逆行検索を実行:
・"XYZ" を逆行検索して選択:
・空白を含まない行を逆行検索: |
機能: | 現カーソル位置周辺において指定文字列を指定モードで検索します。 |
説明: |
本関数の引数 string, mode と返値は、FindFwd 関数と同じです。
但し、本関数では、検索条件が検索履歴に登録されません。 検索する周辺範囲は、引数の bln と fln で指定します。 引数 bln は、現在行から周辺範囲の最小行までの相対行数(表示行単位)を指定します。 この値が 0, -1, ... の時、周辺範囲の最小行はそれぞれ、現在行, 前行, ... となります。 この引数が省略時は、0 として扱います 引数 fln は、現在行から周辺範囲の最大行までの相対行数(表示行単位)を指定します。 この値が 0, +1, ... の時、周辺範囲の最大行はそれぞれ、現在行, 次行, ... となります。 この引数が省略時は、0 として扱います。 |
補説: |
本関数の検索で一致する文字列部分は、その先頭から末尾までのどこかに、現カーソル位置が 必ず含まれます。 |
用例: |
現在行において現在位置の前後で漢字とひらかなから成る文字列部を選択: |
機能: | 指定された行範囲を折り畳みます。 |
説明: |
引数 ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、折り畳み範囲の開始行を指定します。 引数 ln は、折り畳み範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。 本関数は、これらの引数で指定された行範囲を折り畳みます。 但し、各種の制約上、実際に折り畳まれるのは、 その指定範囲と若干異なる場合があります。 この詳細は、下記の「補説」で説明しています。 返値は、実際に折り畳んだ外見行数になります。なお、異常終了時は、-1 が返ります。 |
補説: |
現状、折り畳みは、論理行単位で、 2行以上の外見行に対してだけで行なえます。 そのため、引数で指定された行範囲が、この制約に合わない場合、次のように補正されます。 まず、折り畳みの開始行が、既に折り畳まれている中にある行に指定された場合、 実際の開始行は、その行が含まれる折り畳み行(外見行)に補正されます。 次に、折り畳み範囲の行数は、外見行単位で指定しますが、 その行範囲が、論理行単位になっていない場合、実際の行範囲は、 その指定範囲を含む最小の論理行単位の範囲に補正されます。 なお、補正された最終の行範囲に、外見行が2行以上なければ、折り畳みは行なわれません。 |
用例: |
・100 行目以降 20 行分の外見行範囲を折り畳む:
・現カーソル行以降 10 行分の外見行範囲を折り畳む:
・現カーソル行以前 10 行分の外見行範囲を折り畳む: |
機能: | 指定された行範囲に折り目を付けます。 |
説明: |
引数 ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、折り目を付ける範囲の開始行を指定します。 引数 ln は、折り目を付ける範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。 本関数は、これらの引数で指定された行範囲に折り目を付けます。 但し、各種の制約上、実際に折り目が付けられるのは、 その指定範囲と若干異なる場合があります。 これは、基本的に、折り畳みの範囲と同様です。 この詳細は、MakeFold() 関数の「補説」で説明しています。 返値は、実際に折り目を付けた外見行数になります。なお、異常終了時は、-1 が返ります。 |
用例: |
・200 行目以降 40 行分の外見行範囲に折り目を付ける:
・現カーソル行以降 30 行分の外見行範囲に折り目を付ける: |
機能: | 指定の行範囲内にある各折り畳み行を指定段数だけ展開します。 |
説明: |
引数 ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、展開範囲の開始行を指定します(「補注」参照)。 引数 ln は、展開範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。 引数 dv は、展開する折り畳みの段数を指定します(「補注」参照)。 本関数は、指定された行範囲内にある各折り畳み行を 指定段数だけ展開します。 返値は、この展開で増えた外見行数になります。なお、異常終了時は、-1 が返ります。 |
補注: |
引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。 引数 dv = 1 の時、指定行範囲内にある各折り畳み行だけが展開されます(その中にある 折り畳み行は展開されません)。 dv = 2 の時、各折り畳み行とその直下の各折り畳み行だけが展開されます。 以降、dv >= 3 の時も同様です。 dv 省略時は、全段、つまり、指定行範囲内にある全ての折り畳み行が、展開されます。 |
用例: |
・100 行目以降 20 行分の外見行範囲内にある折り畳みを1段展開:
・現カーソル行以降 50 行分の外見行範囲内にある折り畳みを全段展開: |
機能: | 指定の行範囲内にある折り畳み展開部を指定段数まで折り畳み直します。 |
説明: |
引数 ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、対象範囲の開始行を指定します(「補注」参照)。 引数 ln は、対象範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。 引数 dv は、折り畳み直す段数を指定します(「補注」参照)。 ln の絶対値 ≧ 2 の時、本関数は、対象範囲内に完全に含まれている各折り畳み展開部の 最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけ折り畳み直します。 なお、対象範囲内に部分的にしか含まれていない展開部は対象外になります。 ln の絶対値 ≦ 1 の時、本関数は、対象範囲(開始行の1行)を含む折り畳み展開部の 最内段(上記参照)から順に外側の段に向かって、指定段数だけ折り畳み直します。 返値は、実際に折り畳んだ外見行数になります。なお、異常終了時は、-1 が返ります。 |
補注: |
引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。 引数 dv = 1 の時、対象の折り畳み展開部の最内段だけが折り畳み直されます。 dv = 2 の時、最内段とその次に外側の展開部が折り畳み直されます。 以降、dv >= 3 の時も同様です。 dv 省略時は、対象範囲内にある全ての深さの折り畳み展開部が、 折り畳み直されます。 |
用例: |
・100 行目以降 20 行分の外見行範囲内にある折り畳み展開部を1段閉じる:
・現カーソル行以降 30 行分の外見行範囲内にある折り畳み展開部を2段閉じる:
・現カーソル行を含む折り畳み展開部を全段閉じる: |
機能: | 指定の行範囲内にある折り畳みを指定段数まで解除します。 |
説明: |
引数 ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、対象範囲の開始行を指定します(「補注」参照)。 引数 ln は、対象範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。 引数 dv は、解除する段数を指定します。なお、dv 省略時は、全段の指定になります。「補注」参照。 ln の絶対値 ≧ 2 の時、本関数は、指定行範囲内に含まれる各折り畳み行を指定段数だけ解除します。 また、その行範囲内に完全に含まれている各折り畳み展開部の 最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけその折り目を消します。 なお、対象行範囲内に部分的にしか含まれていない展開部の折り目は消しません。 ln の絶対値 ≦ 1 の時、本関数は、指定行範囲の開始行が折り畳み行なら、その行の折り畳みを 指定段数だけ解除します。さもなくて、その開始行が折り畳み展開部上なら、 その行を含む最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけその折り目を消します。 返値は、この解除によって増えた外見行数になります。なお、異常終了時は、-1 が返ります。 |
補注: |
引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。 解除対象が折り畳み展開部の場合: 1段の解除では、対象の折り畳み展開部の最内段だけの折り目を消します。 2段の解除では、最内段とその次に外側の展開部の折り目を消します。 以降、3段以上の時でも同様です。 全段の解除では、対象の折り畳み展開部の全ての折り目を消します。 解除対象が折り畳み行の場合: 1段の解除では、その折り畳み行だけの折り畳みを解除します。 2段の解除では、その折り畳み行自身とその中の1段だけの折り畳みを解除します。 以降、3段以上の時でも同様です。 全段の解除では、その折り畳み行自身とそれに含まれる全ての折り畳みを解除します。 |
用例: |
・100 行目以降 20 行分の外見行範囲内にある折り畳みを1段解除:
・現カーソル行以降 30 行分の外見行範囲内にある折り畳みを2段解除:
・現カーソル行の折り畳みを全段解除: |
機能: | ポップアップメニューを表示します。 |
説明: |
引数 pos は、ポップアップメニューの表示位置を規定します。
この値が 0 なら、現マウス位置付近に表示され、1 なら、現カーソル位置付近に表示され、
1 なら、現編集ウィンドウの中央に表示されます。 引数 item 以降は、メニュー項目を規定する任意個数の引数になります。 メニュー項目として、文字列を指定した場合、それがメニュー項目名になります。 null を指定した場合、セパレータになります。 階層構造のメニューの場合、サブメニュー節として、 その中のメニュー項目を含む複合箱を、引数に指定します。 その際、その複合箱の名称が、そのサブメニュー節の名称になります。 但し、その複合箱の名称が無い場合、階層化されずに、その中の各項目は現階層に追加されます。 上記以外の種類の引数は、無視されますが、エラーになりません。 本関数の返値は、何番目のメニュー項目が選ばれたかを示す番号になります。 最初の項目が選ばれた時は 1 に、2番目の項目の時は 2 に、以降同様、になります。 セパレータとサブメニュー節が選ばれることはないので、 これは番号順位の対象ではありません。 階層構造のメニューでは、各節において、その節と同位の次項目よりも、 その節内の項目の方が、先番になります。 メニュー項目が選ばれなかった場合(例えば、ESC キー押下等でキャンセルされた場合)、 返値は、0 になります。 本関数が正常に終了しなっかた場合は、null が返ります。 |
用例: |
(1) ポップアップメニューを現マウス位置付近に表示
id = ::Epsaly.PopupMenu( 0, "項目1", "項目2", "項目3", null, // セパレータ "項目4" ); print id;(2) 階層構造のポップアップメニューを現カーソル位置付近に表示 [ "項目3" ] = { "項目A", "項目B", null, "項目C" }; id = ::Epsaly.PopupMenu( 1, "項目1", "項目2", [ "項目3" ], // サブメニュー項目 "項目4" ); print id;(3) 名前の無い複合箱に入れたメニュー項目の表示例 [ "" ] = // 名前の無い複合箱に入れたメニュー項目 { "項目3", "項目4", "項目5" }; id = ::Epsaly.PopupMenu( 1, "項目1", "項目2", [ "" ], // この中のメニュー項目は現階層に追加される "項目6" ); print id; |
注意: | 現状、スクリプト内であるスレッドがポップアップメニューを表示しても、 他のスレッドに実行権は譲渡されません。 |
機能: | キー入力、マウスクリック等のイベントを取得します。 |
説明: |
編集ウィンドウ内で発生したキー入力やマウスクリック等の
イベントは、通常、その内部で処理されます。
ところが、本関数を1度実行すると、その種のイベントは、
それ専用のFIFO( First-In First-Out: 先入れ先出し)型バッファに
格納されるようになります。
この状態は、現スクリプトが終了するまで続きます。
本関数は、このFIFOからイベントを1つ取り出して返します。 引数 ex が、省略/不正、または、偽と評価される値に指定された場合、 各イベントは、FIFOに格納されるだけで、そのイベントに対応する 本来の処理は行なわれません。 一方、引数 ex に、真と評価される値が指定された場合、 各イベントは、FIFOに格納されると同時に、それに対応する本来の処理も 行なわれます。 引数 msec には、イベント取得時の最大待ち時間(単位:ミリ秒)を指定します。 この値が 0 以下の場合は、待たずにその取得結果を即時に返します。 この引数が省略された場合は、イベントが取得されるまで待ち続けます。 イベントが正常に取得できた場合、本関数は、その内容を示す「イベント値」を 返します。これは、非0の整数値、または、文字列になります(詳細下記参照)。 本関数が、待ち時間なし( msec <= 0 )でコールされた時、イベントがなければ、 整数値の 0 が返されます。待ち時間あり( msec > 0 )でコールされた時、 その時間が経過してもイベントが入力されなかった場合は、null が返されます。 本関数が返す「イベント値」は、次のようになります。 整数の場合: Bit31-24: イベント種別 = 0: イベント無し = 1: キー押下 = 2: キー離し = 3: マウスボタン押下 = 4: マウスボタン離し = 5: マウスボタンダブルクリック =11: 音声認識終了 Bit23-16 : 未使用(全ビット0) Bit15-0 : イベントコード キーイベントの場合 Bit15: オートリピート状態 Bit12: Altキー状態 Bit11: Ctrlキー状態 Bit10: Shiftキー状態 Bit7-0: 仮想キーコード マウスイベントの場合 Bit4: 中ボタン状態(現状対象外) Bit3: Ctrlキー状態 Bit2: Shiftキー状態 Bit1: 右ボタン状態 Bit0: 左ボタン状態(現状対象外) 上記規定以外のビットは全て0 文字列の場合: キーボードから入力された文字列 ・文字キーからはその1文字の文字列 ・IME入力からは変換確定後の文字列このイベント関連のマクロ定義は、インクルード フォルダ 内の Event.mh というファイルにあります。 上記で、「仮想キーコード」というのは、キーボードの各キーを識別する ための Windows 共通のコードです。この関連のマクロ定義は、インクルード フォルダ 内の GkLib\GkKey.mh にあります。 本関数ではまた、音声認識された文字列を取得するようになっています ( Dictate() 関数参照 )。 その場合、返値は、2項になります。その第1項は、その文字列自身で、 第2項は、整数値になります。これらは、例えば、次のようにして取得します。 ( ev, tv ) = ::Epsaly.GetEvent();第2項の整数値(上式で tv に代入される値)は、現状、0x0800???? になります。 本関数の返値が、音声認識の文字列でなければ、返値の第2項は無いので、 上式のようにした場合、tv の値は null になります。これによって、 返値が文字列の場合、キー入力の文字列なのか、音声認識の文字列なのかを、 区別できます。 なお、音声認識の終了は、前述の「イベント値」に、それを示すコードがあるので、 それで認知できます。 |
注意: | 現状、マウスの左ボタンは、常時、通常操作が行なえるように、 イベントの取得対象にはなっていません。 |
補説: | スクリプト内で、あるスレッドがイベント取得の待機状態になると、 他に実行可能なスレッドがあれば、そのうちの最高優先順位のスレッドに 実行権が譲渡されます。 |
用例: |
次のスクリプトは、イベントを取得して、適当な文字列に変換して、 現カーソル位置に挿入する、という操作を、 ESC キーが押されるまで、続けます。 'AddScope( ::Epsaly ); UndoBlockBegin(); Insert( "Event Input Start\r\n" ); for( ;; ) { ev = GetEvent(); // イベント入力まで待機 switch( ev'type ) { case "integer": s = "0x" + ev'x(8); break; case "string": s = ev'quote; break; default: continue; } Insert( s + "\r\n" ); if( ev == 0x01`00`00`1B ) // ESC キー? break; } Insert( "Event Input End\r\n" ); UndoBlockEnd(); マルチスレッドで、イベント取得を行なう 例は、スクリプト標準フォルダ 内 の AutoScroll.mc にあります。 |
機能: | 指定されたキーに割り当てられているコマンドを実行します。 |
説明: |
引数の key には、キーコードを指定します。この値のビット構成は、次のようになります。
Bit7-0: 仮想キーコード Bit10: Shiftキー状態( =0: OFF, =1: ON ) Bit11: Ctrlキー状態 ( 同上 ) Bit12: Altキー状態 ( 同上 ) このキーコード関連のマクロ定義は、本エディタのインストール フォルダ 内の Include\GkLib\GkKey.mh に あります。
本関数の返値は、実行されたコマンドの識別値になります。
この値は、現状、どのインクルードファイルにもマクロ定義されていませんが、
EditCmds.mh を見れば分かります。 |
用例: |
#include <GkLib\GkKey.mh> ::Epsaly.ExecKeyCmd( #KCF_CTRL + `V` ); |
機能: | 指定されたキーに割り当てられているコマンドを取得します。 |
説明: |
引数の key には、キーコードを指定します。この値のビット構成は、次のようになります。
Bit7-0: 仮想キーコード Bit10: Shiftキー状態( =0: OFF, =1: ON ) Bit11: Ctrlキー状態 ( 同上 ) Bit12: Altキー状態 ( 同上 ) このキーコード関連のマクロ定義は、本エディタのインストール フォルダ 内の Include\GkLib\GkKey.mh に あります。
本関数は、指定されたキーに割り当てられているコマンドの識別値を返します。
但し、そのコマンドが無い場合には、0 以下の整数値を返します。 |
補説: |
本関数が返すコマンドの識別値は、現状、どのインクルードファイルにもマクロ定義されていませんが、
EditCmds.mh を見れば分かります。 |
機能: | テキストエディタとの同期を取るための機能を提供します。 |
説明: |
スクリプトの実行対象の編集ウィンドウで、例えば、ファイルを「開く」ダイアログ ボックスを表示している時には、スクリプトからのカーソル移動やテキスト編集等の コマンドは、受け付けられません。というよりも、その実行で例外が発生します。 この Sync 関数を使えば、テキストエディタがスクリプトからのコマンドを 受け付けられる状態になるまで待つことができます。また、待たずに、その状態を 取得することもできます。
引数の msec には、最大待ち時間(単位はミリ秒)を指定します。
msec の値が 0 以下なら、待たずに、現状態を即時に返します。
msec の指定がない場合、テキストエディタがコマンドの受け付け可能になるまで待ち
続けます。但し、同期不能の場合は、その状態を即時に返します。 |
用例: |
例えば、「名前を付けて保存」のダイアログボックスを、 #FileSaveAsDialog; のマクロの実行で表示させた場合、スクリプトに制御が戻るのは、 そのダイアログボックスが閉じられてからではなく、その表示直後になります。 そのため、テキストエディタ関連のコマンドでなければ、 このダイアログボックス表示中でも実行可能ですが、 このダイアログボックスが閉じられるのと同期して、何かを行ないたい場合は、 その前に、 ::Epsaly.Sync(); を実行しておく必要があります。 |
補説: | スクリプト内で、あるスレッドが Sync() を実行して待機状態になると、 他に実行可能なスレッドがあれば、そのうちの最高優先順位のスレッドに 実行権が譲渡されます。 |
機能: | 現対象のテキストをロックします。 |
説明: |
スクリプトの実行対象の編集テキストは、通常、 スクリプトの実行中でも手動で操作できるようになっています。 この Lock 関数を実行すると、その対象のテキストをロックして、 スクリプト以外では、何も操作できなくします。 このロックは、カウンタで管理されています。 このカウンタは、最初は0に初期化されていて、Lock() を実行すると1つ増加し、 Unlock() を実行すると1つ減少します。このカウンタの値が、1以上か否かで、 ロックの ON/OFF が制御されます。このカウンタの値は、負にはなりません。 スクリプトの実行が終了すると無条件に、このカウンタは0にリセットされて、 ロックは解除されます。 プログラムミス等で、万が一、ロックしたまま、スクリプトの実行が終らなくなってしまった場合、 Breakキー(Ctrl+Pauseキー)の操作で、スクリプトを強制終了させることができます。 |
用例: | ::Epsaly.Lock(); |
機能: | 現対象のテキストのロックを解除します。 |
説明: | Lock 関数の説明参照。 |
用例: | ::Epsaly.Unlock(); |
機能: | 現操作対象の編集ウィンドウの状態(状況)を取得します。 |
説明: |
引数 type には、取得する状態(状況)の種別を指定します。
これには、今のところ、次の4種類があります。type = 1: 現カーソルの矩形(スクリーン座標系) 2: 現編集ウィンドウの矩形(スクリーン座標系) 3: 現編集ウィンドウのタイトル 4: ウィンドウ描画更新可否状態( =0:禁止, =1:許可 ) 5: 現編集ウィンドウの視点( = 0 〜 3 ) 6: 現編集ウィンドウのステータスバーの第1区画の文字列本関数の返値は、矩形の場合、多項になります。 具体的には、各種別で、次のように取得します。 ( Xo, Yo, Xd, Yd ) = .GetWindowCond( 1 ); ( Xo, Yo, Xd, Yd ) = .GetWindowCond( 2 ); title = .GetWindowCond( 3 ); state = .GetWindowCond( 4 ); viewpt = .GetWindowCond( 5 ); msg = .GetWindowCond( 6 );ここで、Xo, Yo は、矩形の左上隅のX座標とY座標、 Xd, Yd は、矩形の幅と高さ、の整数値になります。 title は、文字列になります。 state は、真偽値( = 1 or 0 )になります。 viewpt は、整数値になります。 msg は、文字列になります。 |
機能: | 現操作対象の編集ウィンドウの状態(状況)を設定します。 |
説明: |
引数 type には、設定する状態(状況)の種別を指定します。
これには、今のところ、次の4種類があります。 type = 3: 現編集ウィンドウのタイトル 4: ウィンドウ描画更新可否状態( =0:禁止, =1:許可 ) 5: 現編集ウィンドウの視点( = 0 〜 3 ) 6: 現編集ウィンドウのステータスバーの第1区画の文字列引数 s には、type に対応する値を指定します: ウィンドウタイトルの場合、その文字列を指定します。 可否状態の場合、その真偽値( 1 or 0 )を指定します。 視点の場合、その整数値( 0 〜 3 )指定します。 ステータスバーの場合、その文字列を指定します。
本関数の返値は、正常終了時、各 type に応じて、次のようになります。 |
補説: |
現編集ウィンドウのタイトルとステータスバーの文字列は、本関数で変更しても、 スクリプトが終了した時点で、元の内容に戻ります。 ウィンドウ描画更新可否状態は、スクリプトの一連の処理の途中で画面が 逐次更新されないようにする場合に、その間だけ一時的に禁止します。 こうしておくと、画面更新処理の時間が省かれるので、実行時間が短縮されます。 この禁止状態を解除すると、その時点で、それまでに変更されていた内容が 一気に描画されます。 なお、この禁止状態は、スクリプトで解除していなくても、 スクリプトが終了した時点で、自動的に解除されます。 |
用例: |
::Epsaly.SetWindowCond( 3, "〜〜 実行中 〜〜" ); ::Epsaly.SetWindowCond( 4, 0 ); // ウィンドウ更新一時禁止 |
機能: | 選択範囲を、指定の着色番号の形態に着色します。 または、選択範囲の着色を解除します。 |
説明: |
引数 i には、着色番号を指定します。 この値が 1 〜 31 の時、その番号に対応する着色形態で着色します。 この値が 0 の時、選択範囲の着色を解除します。 この値が上記以外または省略時、本関数は特に何もしません。 本関数の返値は、次のようになります。 = +1: 正常終了, = 0 : 無処理, = -1: エラー なお、選択範囲は、本関数の実行後も、そのままになっています。 着色結果は、範囲選択を解除しないと、見られません。 |
用例: |
::Epsaly.TintSelText( 5 ); // 選択範囲を 5 番目の形態で着色 ::Epsaly.TintSelText( 0 ); // 選択範囲の着色を解除 |
機能: | 引数で指定された位置の着色情報を取得します。 | ||||||
説明: |
引数の ... は、「編集テキスト内の位置を
規定するリレー型関数」を使って、着色情報を取得する位置を指定します。 引数 s は、以下のように、どちらの着色情報を取得するかを指定します。 =0: 汎用の着色情報(デフォールト) =1: 字句強調の着色情報 引数 s の省略時は、=0 として扱われます。 本関数が返す着色情報は、次の3種類の整数値になります。
( Id, Cn, Ci ) = ::Epsaly.GetTintInfo(); これで、現カーソル位置にある着色区間の着色番号、長さ、位置が、 それぞれ、Id, Cn, Ci という変数に代入されます。 | ||||||
用例: |
現編集テキスト内にある全ての汎用着色区間を列挙: LimCi = ::Epsaly.GetFullCn(); for( Ci = 0 ; Ci < LimCi ; Ci += Cn ) { ( Id, Cn, Ci ) = ::Epsaly.GetTintInfo( Ci'Ci ); if( Id != 0 ) // 着色あり? print Id, Cn, Ci; }なお、サンプルスクリプトの EnumTints.mc は、各着色区間の文字列もプリントします。 | ||||||
補説: | 着色番号に対応する着色形態(文字色、背景色、スタイル)は、GetTintSpec() 関数で取得できます。 |