利用者:黄身

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

イベント発生順

一文字入力
  1. (OnModified)
  2. OnCaretMoved
  3. OnChanged
  4. OnChar
BackSpace/Undo
  1. OnCaretMoved
  2. OnChanged
Redo
  1. (OnModified)
  2. OnCaretMoved
  3. OnChanged
Delete
  1. OnChanged
選択範囲が変わった
  1. OnSelChanged
  2. OnCaretMoved
変更されている状態からファイル保存
  1. OnFileSaving
  2. OnFileSaved
変更されていない状態から上書き保存
  1. OnChar
名前を付けて保存
  1. OnFileSaving
  2. OnFileSaved
  3. OnModeChanged
貼り付け/切り取り
  1. (OnModified)
  2. OnCaretMoved
  3. OnChanged
文書を閉じた
  1. (OnFileSaving)
  2. OnDocumentClose
  3. (OnFileSaved)
  4. OnDocumentSelectChanged
新規作成
  1. OnModeChanged
  2. OnDocumentSelectChanged
折り返しを変更(実際に表示が変更されるときのみ)
  1. OnCaretMoved
  2. OnChanged
行ジャンプ
  1. OnCaretMoved
検索
  1. OnSelChanged
  2. OnCaretMoved
置換
  1. (OnModified)
  2. OnSelChanged
  3. OnCaretMoved
  4. OnChanged
色の反転を変更
  1. OnModeChanged
フォントを変更
  1. OnChanged
マクロ->編集

なし

分割
  1. OnChanged
  2. (OnCaretMoved)
分割を解除

なし

検索/置換/印刷プレビューウィンドウを表示
  1. OnKillFocus
検索/置換ウィンドウを閉じる
  1. OnFocus
文字コード変更
  1. OnModeChanged
  2. OnCaretMoved
  3. OnChanged
改行コード変更

なし

タブを無効にする
  1. OnKillFocus
  2. OnFocus
タブを有効にする

なし

全画面表示切り替え
  1. OnFocus

マクロファイル

全てBitBucketで公開中。

マクロ 中身とか注意事項とか
KILI KILI.js KILI.code.js ArrayEx.js StringEx.js NumberEx.js WidePop.js MouseEmurator.js Include.js
SSnippet.js キャレット直前の文字列をキーとして補完する。
Blockize.js 選択部分をテンプレートにはめ込んだブロックを挿入する。
Commentize.js コメント化もしくはコメント解除する。
SmartBreak.js ちょっと賢く改行する。
LoopyBookmark.js 最後のブックマークまで来たら最初のブックマークへ移動する。
FillSearch.js 選択文字列をテンプレートにはめ込んで検索する。
Event BitBucket

KILI.js

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

クラス

Point
座標を表す。今のところx,yが含まれているだけ。
Range
選択範囲を表す。
Direction
選択方向を表す。
Coodinate
座標系を表す。
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内に記載)

SimplePM.js

非推奨 テキストと実行コマンドのみからなる単純なPopupMenu。

e.g.

var menu=[
	["a",function(){Alert("a");}],	//関数を実行する
	[],	//区切り
	["b",[
		["b-a",function(){return ["b","a"];}],	//配列を返す
		["b-c","b-c"]	//文字列を返す
	]]
]
var p=new SimplePM();
p.create(menu);
p.track();
create
メニューを作成。
getCommand
IDの項目のコマンドを返す。
getId
メニューの位置からIDを取得。

e.g.(冒頭の続き)

p.getText(p.getId("2-1"));	//"b-c"
getParentId
親メニューのIDを取得する
getPopup
PopupMenuを取得する
getResult
前回の実行結果を返す
getText
IDの項目のテキストを返す
track
メニューを表示、コマンドを実行する

WidePM.js

非推奨 いろいろできるPopupMenu。

SimplePMとの違い
  • IDが指定できる。
  • チェック状態、有効・無効を変更できる。
  • チェックボックスやラジオボタンとして使える。
  • 項目を差し替えられる。
  • 直接コマンドを実行できる。
  • MouseEmurator.jsを利用。チェックボックス利用時にメニューの位置がずれていかない。

SimplePMと共通のメソッドは省略。

getCheckbox
チェックボックスとなっている項目とチェック状態を取得する
getChecked
チェックされている項目のIDを取得する
getRadioGroup
IDの項目の属するラジオボタングループを取得する
modify
メニューの一部を変更する
check
項目のチェックを切り換える
available
項目の有効・無効を切り換える
isChecked
IDの項目がチェックされているかどうかを取得する
isAvailable
IDの項目が有効かどうかを取得する
isCheckBox
IDの項目がチェックボックスかどうかを取得する
isRadioButton
IDの項目がラジオボタンかどうかを取得する
execute
コマンドを実行する

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)

KeyList.js

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

MouseEmulator.js

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

SSnippet.js

キャレット直前の文字列をキーとして補完する。

  • 補完前に内容を確認できる。
  • また補完後指定位置にキャレットを移動できる。
  • 候補が複数の場合、ポップアップから選択する。

SmartBreak.js

ちょっと賢く改行する。

  • 開き括弧の直後で改行した場合にブロック(次行インデント+閉じ括弧)を作成する。
  • 行コメント内の場合、次行も行コメントにする。
オプション
  • 編集モードの指定。
  • 追加しないものを選択できる(行コメント、ブロック、行コメント中のブロック、元々のインデント、ブロック内のインデント)。
  • キャレットより右のテキストの配置を設定できる(そのまま、次行に追加、最後、削除)。

Event関連マクロファイル群

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

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