|
ユーザーのアルビレオです。
goupdateup/goupdatedown を使ったマクロを書こうとしたら、けっこう複雑なの
で嫌になりました(笑
そこで強引だけどシンプルなまったく別のアプローチでやってみます。
「変更があったか」ではなく「保存されているファイルと違いがあるか」をチェ
ックしているので goupdateup/goupdatedown とは挙動が違いますが、その違い
を気にしなくてもいい用途なら実用十分かなと。
カーソル位置は元の場所に戻していますが、テキストはスクロールしてしまうこ
とがあるかもしれません。それはあきらめてください。
//呼び出しサンプル
setcompatiblemode 0x2a;//同じファイルを開いたときのダイアログを出さない
disabledraw;
call isLineModified;//チェックルーチンを呼ぶ
enabledraw;
if(##return == -1)
message "ファイルオープン失敗";
else if(##return == 1)
message "変更あり";
else
message "変更なし";
endmacro;
//チェックルーチン本体
isLineModified:
// 元のカーソル位置を記録
##x = x;
##y = y;
##ln = lineno;
movetolineno 1,##ln;//行の先頭へ移動
##traget_h = hidemaruhandle(0);//ウィンドウハンドルを記録
//同じファイルをリードオンリー&ステルスで開く
openfile "/r /h " + filename;//本当は文字コードも指定した方がいいかも
if(!result) return -1;//ファイルオープン失敗
movetolineno 1,##ln;//元テキストと同じ位置へ移動
compfile ##traget_h;//元テキストと比較
if(result && lineno == ##ln)
##r = 1;//現在行で相違点があった
else
##r = 0;//まったく相違がないか、違いがあったのは別の行
setactivehidemaru ##traget_h;//元テキストのウィンドウに戻る
closehidemaru 1;//比較用ファイルを閉じる
moveto ##x,##y;//カーソルを元の位置に
return ##r;//結果を返す
|
|