利用者:黄身

提供: MeryWiki
移動先: 案内検索

思いつくままに作ってるので、役に立つかどうかは二の次三の次。

覚え書き[編集]

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は無効。


マクロファイル[編集]

全てBitBucketで公開中。

マクロ 中身とか注意事項とか
KILI KILI.js KILI.code.js ArrayEx.js StringEx.js NumberEx.js WidePop.js MouseEmurator.js Include.js
Commentize.js コメント化もしくはコメント解除する。
LoopyBookmark.js 最後のブックマークまで来たら最初のブックマークへ移動する。
FillSearch.js 選択文字列をテンプレートにはめ込んで検索する。
Event BitBucket

KILI.js[編集]

グローバルに用意しているのはこの「KILI」名前空間と次の項に挙げたいくつかのみ。

クラス[編集]

Point
座標を表す。今のところx,yが含まれているだけ。
Range
選択範囲を表す。
Direction
選択方向を表す。
Coordinate
座標系を表す。
LineMode
単位として扱う行を表す。

グローバルなもの[編集]

あまりにもよく使ってるので特別にグローバルに用意。よほどの事がない限りこれ以上増やさない。

GDO Documentを取得。
GEO Editorを取得。
GSO Selectionを取得。
O OutputBar.Writeln()へのショートカット。
Seiko 時間を計測する。
meGetLineLogical 有りそうで無い変数。
mePosCaret 有りそうで無い変数。

KILI.selex[編集]

Selection拡張。KILI.editと違い、文書は編集されない。

位置を判定するもの
atLogicalHead 論理行頭
atLogicalEnd 論理行末
atViewHead 表示行頭
atViewEnd 表示行末
atEOF 文末
位置を取得するもの
getRange 選択範囲
getBottomPos 文末側位置
getTopPos 文頭側位置
getAnchorPoint 選択終了位置
getActivePoint 選択開始位置
getBottomPoint 文末側位置
getTopPoint 文頭側位置
getLogicalHeadPos 全ての論理行頭
getLogicalEndPos 全ての論理行末
getWrapPos 全ての折り返し位置
getViewHeadPos 全ての表示行頭
getViewEndPos 全ての表示行末
文字列を取得するもの
getLeft 選択範囲より左
getRight 選択範囲より右
座標を変換するもの
logicalToView 論理行→表示行
logicalToPos 論理行→文頭から
posToLogical 文頭から→論理行
posToView 文頭から→表示行
viewToLogical 表示行→論理行
viewToPos 表示行→文頭から
選択するもの
selectLine 複数行
selectLines 複数行
selectIfEmpty 選択されていなければ選択
setRange 範囲
reverse 反転
excludeBreak 改行を除外
選択状態を判定するもの
inline 行内
multiline 複数行
wholeLines 行全体
getDirection 選択方向
検索するもの
search 検索
searchTextLines 行を検索
count マッチ数

KILI.edit[編集]

Selection拡張。KILI.selexと違い、文書は編集される。

duplicate 二重化
sort 並べ替え
deleteLines 行削除
deleteAll 文字列を全て削除
deleteAllTextLines 文字列を含む行を削除
breakAll 文字列を改行に変換

KILI.docex[編集]

Document拡張。Editorの領分と思われるものも含む。
あまり仕様が固まってないので激変の可能性あり。

all 全て取得
newFile 新規作成
clone 複製
cloneStyle スタイルを指定して複製
getINI 設定ファイルを取得
forceClose 強制的に閉じる
getScroll スクロール位置を取得
setScroll スクロール位置を指定
getBreakCode 改行コードを取得

KILI.code.js[編集]

文字・コードポイントの相互変換とその表現を扱う。Unicodeのみが対象。

decode 文字列→コードポイント
encode コードポイント→文字列
decodeAll 全ての形式→文字列
decodeSurrogate サロゲートペア→コードポイント
encodeSurrogate コードポイント→サロゲートペア
fromCharCode 0x10000以上にも対応したString.fromCharCode
fromEntity 数値実体参照→文字列
toEntity 文字列→数値実体参照
fromOnig 鬼車形式→文字列
toOnig 文字列→鬼車形式
fromRegex 正規表現形式→文字列
toRegex 文字列→正規表現形式
fromUnicode Unicode形式→文字列
toUnicode 文字列→Unicode形式

組み込みオブジェクト拡張[編集]

名前の衝突に注意。特にStringExはincludeライブラリのStringExと衝突しています。

Array[編集]

clone 値渡し
compact 空白、null、undefinedを削除
remove 削除
indexOf 検索
insert 挿入
last 最後の要素を取得
select 条件指定して検索
selectIndex 条件指定してインデックスを検索
pickup インデックス指定で取り出す
siblings 指定したプロパティの値を取得
unique 重複削除

Number[編集]

clamp 範囲内に収める
within 範囲内にあるか判定
padding 桁揃え
toHexString 十六進数表記

String[編集]

crlf 改行コード変換
cut 分割
unhead 文字列で始まらないようにする
untail 文字列で終わらないようにする
dquote 「"」で囲む
squote 「'」で囲む
enclose 囲む
enclosed 文字列で囲まれているか判定
insert 挿入
repeat 繰り返し
startsWith 文字列で始まっているか判定
endsWith 文字列で終わっているか判定
escape エスケープ
unescape エスケープを戻す
escapeRegExp 正規表現用エスケープ
unescapeRegExp 正規表現用エスケープを戻す
head 文字列で始まるようにする
tail 文字列で終わるようにする
onigFind 鬼車で検索(KILI.js内に記載)

InsetText.js[編集]

キャレット行の検索結果に基づいてテンプレートから文字列を作成・挿入する。 SSnippet.js・Blockize.js・SmartBreak.jsを統合して一から作り直したもの。 検索条件やテンプレートはJSONで指定する。

機能
  • 複数条件での検索
    • 検索範囲をキャレット行・キャレット位置に基づいて指定可能
  • 編集モードによる絞り込み
  • テンプレートへの検索マッチやキャレット前後・選択部分などの埋め込み
    • 一部分だけも可能
  • インデントの考慮
  • 選択範囲とは違う範囲への挿入
  • 挿入後の選択範囲指定
  • 一致するエントリーが無い場合の代替テンプレート
検索方法

否定検索も可能。

  • 先頭・末尾に一致
  • 選択位置の直前・直後に一致
  • 選択位置より前・後の文字列に一致
  • 選択文字列に一致
  • 選択位置より前・後の文字列の長さが一致
  • 選択文字列の長さが一致
  • 選択位置より前・後の文字列に含まれる
  • 選択文字列に含まれる
  • 選択位置より前・後の文字列を正規表現検索
  • 選択文字列を正規表現検索する
  • 行全体の長さが一致する
  • 行全体に含まれる
  • 行全体を正規表現検索する

e.g.

var g=new InsetText(ScriptFullName.split("\\").slice(0,-1).join("\\")+"\\insettext.json").match(false).generated[0];
if(g){
	g.insert();
}
{
	"entries": [
		{
			"name":"for",
			"comment":"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"
		},
		{
			"name":"block",
			"comment":"ブロックを作成",
			"template":"\n\t{0:7,0:8-1}{s}\n}",
			"indent":true,
			"modes":["JavaScript"],
			"conditions":[
				{
					"type":3,
					"text":"{"
				}
			],
			"range":"0"
		},
		{
			"name":"block",
			"comment":"ブロックを作成(キャレットより後に}があれば利用する)",
			"template":"\n\t{0:8,1:8-1}{s}\n",
			"indent":true,
			"modes":["JavaScript"],
			"conditions":[
				{
					"type":3,
					"text":"{"
				},
				{
					"type":15,
					"text":"[^\\}]*\\}"
				}
			],
			"range":"0:8,1:8-1",
			"weight":1
		},
		{
			"name":"block comment",
			"comment":"ブロックコメント",
			"template":"\n* {4,6}{s}",
			"indent":true,
			"modes":["JavaScript"],
			"conditions":[
				{
					"type":14,
					"text":"^/?\\*"
				},
				{
					"type":-11,
					"text":"*/"
				}
			],
			"range":"4,6",
			"weight":1
		},
		{
			"name":"trim",
			"comment":"右トリム",
			"template":"",
			"conditions":[
				{
					"type":15,
					"text":"[\\s]+$",
					"spaces":true
				}
			],
			"range":"0"
		},
		{
			"name":"indent",
			"comment":"Python用インデント"
			"template":"\n\t",
			"indent":true,
			"modes":["Python"],
			"conditions":[
				{
					"type":3,
					"text":":"
				}
			]
		}
	],
	"sub":{
		"name":"sub",
		"comment":"一致するものが無ければ単純に改行する",
		"template":"\n"
	}
}

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],	//次のflagが0なのでここでグループ終了
	["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)

MouseEmulator.js[編集]

Mouse.dll(http://ja.syoubook.info/wsh/wsftemplate/)を利用してマウスの操作や座標の取得をする。

Event関連マクロファイル群[編集]

イベントマクロを使いやすく(?)したもの。 大体のメリットとしては、

  • ポップアップ地獄を回避。
  • イベント編集に必要なファイルは1つだけ。
  • 同じ様な処理にファイルを分けなくていい。
Event.js
イベントを実行するクラス。イベント名に応じてEventMain.jsの関数を呼び出す。また例外メッセージをアウトプットに投げている。
EventMain.js
イベントで実行される関数のファイル。イベントの編集はこのファイルをいじるだけでいい。
EventTemplate.js
1つのファイルで通常とイベントと両方のマクロに利用できるようするテンプレート。
「On~」で始まるファイル
Meryでイベントとして登録するファイル。Event.executeを呼び出すだけ。
EventMethod.js
イベント用に作った関数。

古いもの・非推奨[編集]

KeyList.js
簡単なJSON形式のファイル読み書き。あまり汎用には使えない。

InsetText.jsに統合したもの[編集]

SSnippet.js
キャレット直前の文字列をキーとして補完する。
Blockize.js
選択部分をテンプレートにはめ込んだブロックを挿入する。
SmartBreak.js
ちょっと賢く改行する。

WidePop.jsに統合したもの[編集]

SimplePM.js
テキストと実行コマンドのみからなる単純なPopupMenu。
WidePM.js
いろいろできるPopupMenu。
スポンサーリンク