秀丸マクロの型
それぞれ
「コピー&ペースト」してそのまま使えるようにしています。そのため、ブラウザーだと少しレイアウトが崩れて見えると思います。
ここでは、私が秀丸マクロのプログラムで良く使う常套手段をリストアップしています。
だいたい、10個以上もプログラムを書いていると似たような部分はたくさん出てきます。そこで、その部分を
「型」として、いつも
「コピー&ペースト」するようになってくるわけですね。
そうやって、私の作った秀丸マクロに良く出てくる
「型」をここにまとめておきました。
● 「開始処理~終了処理」の型
//----------------------------------------------------------------------
// 開始処理
disableinvert; //囲選択のときの反転表示を禁止
disabledraw; //画面の書き換えを禁止
:
:(処理)
:
//----------------------------------------------------------------------
// 終了処理
enableinvert; //囲選択のときの反転表示禁止を解除
enabledraw; //画面の書き換えを許可
endmacro; //マクロの終了
「囲選択のときの反転表示を禁止」と「画面の書き換えを禁止」をおこなうことによって秀丸マクロの動きが高速になります。
終了処理は実はおこなわないでも秀丸が勝手に解決するらしいのですが、自分が何をやっているのかを明示的にするために私は敢えて書くようにしています。
● 「作業ウィンドウの作成」+「開始処理~終了処理」の型
//----------------------------------------------------------------------
// 現在の秀丸ウィンドウを捕捉
#handleRes = hidemaruhandle(0); //handleを取得
//----------------------------------------------------------------------
// 開始処理
openfile "/(1600,1600,100,100) /d"+directory3;
#handleWork = hidemaruhandle(0); //handleを取得
showwindow 0; //ウィンドウ非表示
disableinvert; //囲選択のときの反転表示を禁止
disabledraw; //画面の書き換えを禁止
:
:(処理)
:
//----------------------------------------------------------------------
// 終了処理
setactivehidemaru #handleRes; //結果出力ウィンドウへ移動
closehidemaruforced #handleWork;//作業ウィンドウを強制終了
enableinvert; //囲選択のときの反転表示禁止を解除
enabledraw; //画面の書き換えを許可
endmacro; //マクロの終了
#handleWorkという作業ウィンドウを作成します。このウィンドウ上で文章の切った貼ったをおこないます。結構使える「型」です。
● 「新しいウィンドウの作成」の型
1. openfile "/(1600,1600,100,100) /d"+directory3;
2. openfile "/h";
3. newfile;
3種類挙げていますので、それぞれについて説明します。
1.は見えない場所にウィンドウを開いています。
2.は秀丸エディタがステルスモードになり、画面から見えなくなる&マクロの実行が非常に高速になります。ただし、動作が不安定になることもあるそうです。
3.は無条件で新規ウィンドウを作成します。というのも、openfileでは、変更されていない(真っ白けの)新規ウィンドウ上だと、新しいウィンドウは開かないからです。「えっ?」と思われるかもしれませんがそうなんです。なので、絶対新しいウィンドウを作りたいときは3を使います。
それぞれ使用用途に合わせて使い分けてください。
● 「現在オープンしている全ウィンドウのハンドルを取得」の型
//----------------------------------------------------------------------
// ハンドルリスト作成
#handleFindNo = hidemarucount;
#a = 0;
while( #a < #handleFindNo ) {
#handleFind[#a] = hidemaruhandle(#a);
#a = #a+1;
}
現在開いているウィンドウ全てに処理をおこないたいときは、まずその全てのウィンドウのハンドルを取得しなければなりません。
ハンドルとは、ウィンドウの識別票だと思ってください。Windowsプログラミングでは、各ウィンドウはハンドルという固有の数字を割り当てられています。出席番号みたいなものです。
この「数字 = ハンドル」を変数に確保しておくことによって、全ウィンドウを操作できるようになるわけです。
色々操作した後、最初のウィンドウに戻りたいときがあると思いますので、次にその「型」を示しておきます。
● 「現在の秀丸ウィンドウを捕捉~復帰」の型
//----------------------------------------------------------------------
// 現在の秀丸ウィンドウを捕捉
#handleNow = hidemaruhandle(0); //handleを取得
:
:(処理)
:
//----------------------------------------------------------------------
// 現在の秀丸ウィンドウに復帰
setactivehidemaru #handleNow; //現在ウィンドウへ移動
最初に現在のウィンドウのハンドルを取得しておき、最後にそのウィンドウに戻れば終了です。
● 「現在オープンしている全ウィンドウに対して処理」の型
//----------------------------------------------------------------------
// 全ウィンドウに対して処理
#a = 0;
while( #a < #handleFindNo ){
setactivehidemaru #handleFind[#a]; //対象ウィンドウへ移動
:
:(処理)
:
#a = #a+1;
}
全ウィンドウに対して次々と同じ処理をしていきます。「型」さえ覚えれば非常に簡単な処理です。
● 「クリップボードから単語を取得」の型
//----------------------------------------------------------------------
// クリップボードから単語を取得
beginclipboardread;
#ClipNo = 0;
$Name[#ClipNo] = getclipboard;
$LastChech = rightstr( $Name[#ClipNo], 1 );
if( $LastChech == "\n" ){
#LastLen = strlen( $Name[#ClipNo] )-1;
$Name[#ClipNo] = leftstr( $Name[#ClipNo],#LastLen );
}
while( $Name[#ClipNo] != "" ) {
#ClipNo = #ClipNo + 1;
$Name[#ClipNo] = getclipboard;
// 終末改行チェック
$LastChech = rightstr( $Name[#ClipNo], 1 );
if( $LastChech == "\n" ){
#LastLen = strlen( $Name[#ClipNo] )-1;
$Name[#ClipNo] = leftstr( $Name[#ClipNo],#LastLen );
}
}
クリップボード経由で改行区切りの単語リストを取得したいときに使う「型」です。私の作った「カウント&グラフ化」などのマクロで時々使っています。
りんご
ぶどう
バナナ
といった改行区切りの単語をクリップボードに入れておけば、それを一気に $Name[ ]
配列に格納していきます。
さて、それぞれの
「型」では、あまりプログラム自体のことには触れませんでした。
プログラムの各命令は、秀丸エディタの
「マクロヘルプ」に載っています。熟読して各命令の概要を各自掴んでください。
ここでは、その中で
「秀丸マクロ」固有でちょっと分かりにくいけど、知ってないとプログラムを書きにくい
「型」をいくつか載せています。参考にしていただければと思います。