さよならWindows。
KL編集
ダウンロード編集
概要編集
マクロ | 中身とか注意事項とか |
---|---|
KL.js | Mery組み込みオブジェクトの拡張。 |
global.js | グローバルなメソッドや変数。 |
polyfill.js | Chakraで実装されていないメソッドなどの拡張。 |
ArrExt.js StrExt.js MathExt.js |
それぞれのオブジェクトへのメソッドの追加。 |
WidePop.js | リッチなポップアップ。 |
ComText.js | マッチ結果とテンプレートから文字列を作成する。 |
InsertOption.js | ComText.jsによって作成した文字列を挿入する。 |
InsetSearch.js | ComText.jsによって作成した文字列で検索する。 |
MouseEmurator.js | マウスの操作。 |
Commentize.js | コメント化もしくはコメント解除する。 |
MoveSelection.js | 選択文字列を移動する。 |
Exes | マクロの実行用ファイル。 |
KL.js編集
KLを名前空間として独自のオブジェクトとMery組み込みオブジェクトの拡張を含む。
オブジェクト編集
- KL.Range
- 範囲を表す。
- KL.Coord
- 座標系を表す。
- KL.Dir
- 選択方向を表す。
- KL.Point
- 座標を表す。
メソッド編集
- KL.GetScroll/KL.SetScroll
- スクロール位置の取得/設定。
組み込みオブジェクトの拡張編集
Selection/Document/Editorのラッパ。Mery組み込みのメソッドやプロパティと追加したものを同じ方法で呼び出せる。また一部は組み込みのものを拡張している。
e.g.
let $s=KL.Selection();
$s.Reverse();
$s.Text=$s.GetLeft();
組み込みのSelectionを直接呼び出すにはKL.Selection#Original
か、global.jsのGSO()
を使う。
KL.Editor編集
Original | 組み込みのEditor。 |
Documents | KL.Documents。組み込みのDocumentsではない。 |
ActiveDocument | アクティブな文書のKL.Document。組み込みのActiveDocumentではない。 |
NewFile | 文書を新規作成する。 |
GetDocument | Documentオブジェクトを取得する。 |
KL.Documents編集
他に合わせて用意しているだけで追加したメソッドは存在しない。
KL.Document編集
Original | 組み込みのDocument。 |
Close | 文書を閉じる。組み込みのを追加拡張している。 |
Selection | KL.Selectionを取得。組み込みのSelectionではない。 |
LineEndingChar | 改行文字を取得する。 |
ToSerial | 座標を文頭からの位置に変換する。 |
ToLogical | 座標を論理行座標に変換する。 |
ToView | 座標を表示行座標に変換する。 |
LogicalToView | 論理行座標を表示行座標に変換する。 |
LogicalToSerial | 論理行座標を文頭からの位置に変換する。 |
SerialToLogical | 文頭からの位置を論理行座標に変換する。 |
SerialToView | 文頭からの位置を表示行座標に変換する。 |
ViewToLogical | 表示行座標を論理行座標に変換する。 |
ViewToSerial | 表示行座標を文書先頭からの位置に変換する。 |
Clone | 文書のクローンを作成する。 |
Lines | 行を取得する。 |
KL.Selection編集
Original | 組み込みのDocument。 |
OriginalParent | 親となる組み込みのDocument。 |
Parent | 親となるKL.Documentオブジェクト。 |
SelectLines | 複数の行を選択する。 |
SelectLineRange | 複数の行を選択する。 |
SelectIfEmpty | 選択されていなければ選択する。 |
IsLogicalStart | 論理行頭かどうか判定する。 |
IsLogicalEnd | 論理行末かどうか判定する。 |
IsViewStart | 表示行頭かどうか判定する。 |
IsViewEnd | 表示行末かどうか判定する。 |
IsEOF | 文末かどうか判定する。 |
Inline | 行内選択かどうか判定する。 |
Multiline | 複数行に渡る選択かどうか判定する。 |
WholeLines | 行の全体を選択しているかどうか判定する。 |
GetRange | 選択範囲を取得する。 |
SetRange | 範囲選択する。 |
GetDirection | テキスト選択方向を取得する。 |
SetDirection | テキスト選択方向を設定する。 |
Reverse | 選択範囲を反転する。 |
GetBottomPos | 選択範囲の文末側の位置を取得する。 |
GetTopPos | 選択範囲の文頭側の位置を取得する。 |
GetAnchorPoint | カーソル位置を取得する。 |
GetActivePoint | 選択範囲の開始位置を取得する。 |
GetBottomPoint | 選択範囲の文末側の位置を取得する。 |
GetTopPoint | 選択範囲の文頭側の位置を取得する。 |
GetLeft | 選択範囲より左の文字列を取得する。 |
GetRight | 選択範囲より右の文字列を取得する。 |
Exclude | 選択部分から文末側の改行を除外する。 |
Duplicate | テキスト二重化。 |
Sort | 選択範囲の行または文字列をソートする。 |
DeleteLines | 行を削除する。 |
global.js編集
グローバルに確保したメソッドや変数。KL名前空間下には含まれない。
meGetLineLogical | 論理座標で指定するフラグ。 |
mePosCaret | キャレット位置で指定するフラグ。 |
GEO | 組み込みのEditorオブジェクトを取得する。 |
GDO | 組み込みのDocumentオブジェクトを取得する。 |
GSO | 組み込みのSelectionを取得する。 |
O | OutputBar.Writeへのショートカット。 |
RelativePath | 実行中のスクリプトから相対的にファイルパスを取得する |
polyfill.js編集
ECMAScriptにありChakraでは使用できないものの補完。
- Array.from()
- Array.of()
- Array.prototype.copyWithin()
- Array.prototype.fill()
- Array.prototype.find()
- Array.prototype.findIndex()
- Array.prototype.flat()
- Array.prototype.flatMap()
- Array.prototype.includes()
- Math.trunc()
- Number.isFinite()
- Number.isInteger()
- Number.isNaN()
- Number.parseFloat()
- Number.parseInt()
- Object.is()
- String.fromCodePoint()
- String.prototype.codePointAt()
- String.prototype.endsWith()
- String.prototype.includes()
- String.prototype.padEnd()
- String.prototype.padStart()
- String.prototype.repeat()
- String.prototype.startsWith()
- String.prototype.trimEnd()
Chakraへの追加編集
ArrExt.js編集
unique | 配列から重複を削除する。 |
last | 配列の最後の要素。 |
StrExt.js編集
bracket | 文字列の前後に文字列を挿入する。 |
quote | 「'...'」で囲む。 |
parens | 「(...)」で囲む。 |
braces | 「[...]」で囲む。 |
curls | 「{...}」で囲む。 |
crlf | 改行コードを変換する。 |
insert | 文字列を挿入する。 |
escapeRe | 正規表現で使用される文字をエスケープする。 |
unescapeRe | エスケープされた正規表現で使用される文字を戻す。 |
cpcount | サロゲートペアを考慮して文字列の長さを取得する。 |
cpsplit | サロゲートペアを考慮して文字列を分割する。 |
MathExt.js編集
within | n以上m以下であるか判定する。 |
clamp | 数値を範囲内に収める。 |
WidePop.js編集
リッチなPopupMenu。機能は以下の通り。
- 配列のみでのメニュー定義
- チェックボックス
- ラジオボタン
- チェック、有効・無効の切り換え
- サブメニュー
- 選択時にコマンド実行
- MouseEmurator.jsを利用してメニューの位置を一定にする
e.g.
var menu=[
["a",1,function(pop,me){Alert(me.tags[0]);},null,["A","a"]],
[], //区切り線
["b",20], //チェック済み&ラジオボタンのグループ開始
["c",4], //"b"がチェック済みなのでチェックされない
["d",4], //ラジオボタンのグループ終了
["e",1,function(pop,me){return this.caption},[
["-a",2,"e-a"], //チェックボックス
["-b",1,function(pop,me){return pop.getItemById(me.parent).command()+me.caption}],
["-c",1,"unalbled"]
]],
["f",0] //無効
];
var p=new WidePop(menu);
p.getItemFromPosition(5,2).enabled=false;
p.check(1,function(pos,me){return me.caption=="-a"});
p.create().track(0,true);
Alert(p.getResult().value)
メニューの実体はWidePop#Item
。メニュー定義は引数を同じ順序で格納した配列か、仮引数をキーとした辞書を使う。メニューのタイプは引数flag
で設定する。連続したラジオボタンは自動的に1つのグループになる。
メニュー定義はWidePop
オブジェクトに保存され、後から項目の有効無効などを切り換えたり、複数回実行する事ができる。
ComText.js編集
キャレット行をマッチした情報から条件を満たすテンプレートを取得し、文字列を作成する。
テンプレート編集
{
"entries": [
{
"name":"for",
"template":"for(var {0:8-1,0:8}=0;{0:8-1,0:8}<{s}.length;{0:8-1,0:8}++){\n\t\n}",
"indent":true,
"modes":["JavaScript","C#","C++","Java"],
"conditions":[
{
"type":14,
"text":"for[ijk]$"
}
],
"range":"0"
}
],
"sub":{
"name":"sub",
"comment":"一致するものが無ければ単純に改行する",
"template":"\n"
}
}
- entries
- entry(検索条件とテンプレートのセット)の配列。
- name
- entryの名前。
- template
- テンプレート。「{...}」で囲まれた部分にマッチ結果から文字列を埋め込む事ができる。
- indent
- 文字列の挿入時にインデントするかどうか。
- modes
- entryを使用する編集モード
- conditions
- 検索条件の配列。
- type
- 検索方法(
ComText.SearchTypes
のいずれか)。 - text
- 検索文字列。
- range
- 文字列の挿入位置。
- sub
- 代替entry。
文字列の埋め込み編集
テンプレートの「{<開始位置>,<終了位置>}」は元のテキストの範囲を表し、マッチ結果を利用してその範囲の文字列を埋め込む。
<開始位置>と<終了位置>は共に「<インデックス>:<位置><差分>」「<インデックス>:<位置>」「<位置><差分>」「<位置>」の形式を取る。
<インデックス>はマッチしたentryのconditionsのインデックスを表す。省略した場合は0。
<位置>はマッチした文字列中での位置を表す。ComText.RangeTypes
のいずれかを指定する。
<差分>は<インデックス>と<位置>で特定された位置からの差分を「+<数値>」「-<数値>」の形式で表す。省略した場合は0。
「{<インデックス>}」の形式も使用できる。この場合はマッチ位置の全体を表す。
e.g.
{0:8-1,0:8}
この場合、開始位置は0番目のcondition(0)のマッチ終了位置(8)から1文字戻った(-1)位置を表す。 終了位置は0番目のcondition(0)のマッチ終了位置(8)を表す。
rangeの範囲指定も同じ記法を用いる(「{...}」で囲む必要はない)。
使用例編集
ここでは上記のJSONを使うものとする。
let os=new ComText(path,option).match();
- ComTextのコンストラクタはpathに指定したJSONファイルのentriesをリスト化し、現在の編集モードがmodesにあればそのエントリーを検索に使用する。
ComText#match
で検索を実行する。検索範囲は現在の行に限る。引数にtrue
を指定すると1つのエントリーがマッチした時点で強制終了する。- conditionsの全ての条件にマッチした時のみ、そのエントリーがマッチしたとみなす。typeが14なので「選択位置より前の文字列を正規表現検索」する。textは検索パターンになる。
- マッチが成功すれば、マッチ結果などがコンストラクタの引数
option
のインスタンスとしてComText#options
に追加される。option
にはComText.Option
かそれを継承したオブジェクトを指定する。 option
のインスタンスは必要になった時にマッチ結果とtemplateから文字列を作成する。「{0:8-1,0:8}」の部分には元のテキストの「0番目のconditionsのマッチ終了位置より1文字遡った位置から、conditionsの0番目のマッチ終了位置」までの文字列が埋め込まれる。- どのエントリーもマッチしなかった場合は代わりにsubから
option
のインスタンスを作成する。subが存在しなければComText#options
は空になる。
デフォルトのComText.Option
は文字列の作成までしか行わないので、利用するには別の関数に渡したり、ComText
やComText.Option
を継承したオブジェクトを作る必要がある。
InsertOption.js編集
ComText.Option
の拡張。作成した文字列を挿入するメソッドを持つ。
e.g
let os=new ComText(path,InsertOption).match().options;
if(os.length){
os[0].insert();
}
ComText.Option
はマッチしたエントリーの情報も保持しているので、挿入位置はrangeを使用する。上記のJSONでは「0」だけを指定しているので、「0番目のconditionsのマッチ位置全体」に挿入(上書き)する。- 文字列が複数行の場合にindentを指定していると、2行目以降に1行目に合わせてインデントを追加する。
- テンプレート中の「{s}」「{e}」は挿入後の選択範囲を表す。
InsetSearch.js編集
ComText.jsを利用して選択文字列から作成した文字列で検索する。ComText
の引数option
はデフォルトのままで、ComText
を継承する事で処理を追加している。
e.g
let os=new InsetSearch(path,option).execute();
MouseEmulator.js編集
Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/)を利用してマウスの操作や座標の取得をする。
kili編集
旧版。非推奨。
ダウンロード編集
Events編集
イベントマクロを使いやすく(?)したもの。 大体のメリットとしては、
- ポップアップ地獄を回避。
- イベント編集に必要なファイルは1つだけ。
- 同じ様な処理にファイルを分けなくていい。
- Event.js
- イベントを実行するクラス。イベント名に応じてEventMain.jsの関数を呼び出す。また例外メッセージをアウトプットに投げている。
- EventMain.js
- イベントで実行される関数のファイル。イベントの編集はこのファイルをいじるだけでいい。
- EventTemplate.js
- 1つのファイルで通常とイベントと両方のマクロに利用できるようするテンプレート。
- 「On~」で始まるファイル
- Meryでイベントとして登録するファイル。Event.executeを呼び出すだけ。
- EventMethod.js
- イベント用に作った関数。
ダウンロード編集
覚え書き編集
- OnDocumentCloseで閉じたタブをもう一度開こうとすると
以下のNewFileで開いたタブを閉じるとき、定期的?にonDocumentCloseが呼ばれない。またOpenFileは何回かに一回しか成功しない。
var file="";
Editor.NewFile();
Editor.OpenFile(file,meEncodingUTF16LE,false);
OnModifiedなどでは問題ない。
- コマンドラインオプションからマクロ実行
Window.PromptとWindow.Confirmは実行できない。
- Document.GetLine
デフォルトでは表示行を取得。meGetLineLogicalが未定義なので0を指定する。
- 最初の数
- 行:1 (Document.GetLine)
- 文頭からの位置:0 (Selection.GetActivePos)
- 桁:1 (Selection.GetActivePointX)
- Editor,Document:0 (Editors.Item.Documents.Item)
- Window.Document
Document.NewFile後も更新されない。
Editor.ActiveDocument.NewFile();
Alert(Document.Text);
- Editor.FindInFiles
- ディレクトリ名は最後を"\\"か"\\*"にする。
- アクティブな文書が結果表示で乗っ取られる。
- PopupMenu.Track
- 引数無しだとエラー。0でキャレット位置に表示。mePosMouseは1。
- キャンセルした場合の返り値は0。
- 返り値を変数に入れるなりOutputするなりしないとメニューは表示されない。
- 領域外をクリックしてキャンセルした場合、続けてTrackしていても実行されない。Escでだとされる。
var p=CreatePopupMenu();
p.Add("1");
var x=p.Track(0); //ここでキャンセル
if(x==0){
x=p.Track(0);
}
- Selection.Replace
検索オプションを何も付けたくない場合はflagに0を指定する。
//正規表現を使わず、大文字と小文字を区別せず、カーソル位置の次の一つだけ、単語の途中でもマッチする
Selection.Replace("x","y",0);
検索文字列が0x000aから始まるとき、meFindReplaceRegExpを指定しないと、meReplaceAllがおかしい。
Selection.Replace("\n","",meReplaceAll); //文書全体の最初の1つだけ処理される
Selection.Replace(";\n","",meReplaceAll); //全て処理される
Selection.Replace("\n;","",meReplaceAll); //文書全体の最初の1つだけ処理される
- Document.Text
代入する場合、設定上の改行コードに関わらず、改行記号は文字列中の改行によって変わる。これがSelection.Textだと変わらない。
Document.Text=Document.Text; //改行記号はLFになる
Selection.SelectAll();
Selection.Text=Selection.Text; //元のまま
- Selection.CharLeft,CharRight,LineUp,LineDown
Countが0の時は1と同じ。負の場合、逆方向に移動。
- Selection.Find
正規表現の時meFindReplaceOnlyWordは無効。