|
>マクロでできましたか。
>すごいです。
ありがとうございます。
公開して他人に使ってもらうようなものではないのですが、
話題にした責任上、貼り付けておきますね。
もちろん、間違いなどご指摘は歓迎しますが、
とりあえず動いているので、放置していただいてかまいません。
>同様の要望を他の方からも頂いたことがあり、
>ご意見参考にさせていただきます。
ありがとうございます。
よろしくお願いします。
---
// 折りたたみ状態の保存/再現
// 対象ファイルの末尾に書き込むのでどうだろう。
// -------------------------------------------------------------
Preparation: // 事前の準備
setcompatiblemode 0x0007 ; // 折りたたみ維持、部分編集解除
#cx = x ; #cy =y ; // カーソル位置の座標を記憶
ActionSelect: // 保存か再現か選択
question "折りたたみ保存(Yes)/再現(No)";
if( result == yes ) {
goto SaveCondition ; // 保存 <Yes> なら SaveCondition に
} else {
goto LoadCondition ; // 再現 <No> なら LoadCondition に
}
SaveCondition: // 折りたたみ状態を保存する
// 状態を調べる
#n = 0 ; // 添字変数の初期化
gofiletop ; // ファイルの先頭にカーソル移動
#fp[#n] = -1 ; // #fp[#n] に-1をセット。終了判定用
while ( yes ) {
if ( folded != 0 ) { // その行が折りたたまれていれば
#fp[#n] = y ; // #fp[#n] に行番号を記憶 *行番号は0始まり
#n = #n + 1 ; // #n を + 1
#fp[#n] = -1 ; // 次の #fp[#n] に-1をセット。終了判定用
}
#ln = y ; // 行位置を記憶
nextfoldable ; // カーソルを次の折りたたみ可能行に移動
if ( #ln == y ) { // 行移動に失敗したら(飛ぶ前と同じ行だったら)
break ; // Whileループから脱出
}
}
// データの書き込み
gofileend ; // ファイルの末尾に
insert "\n" ; // 改行を挿入
insert "//** 折りたたみ状態 - マクロ用 **//\n" ; // 識別用の文字列
#n = 0 ; // 添字変数の初期化
while ( #fp[#n] != -1 ) { // #fp[#n] が -1 じゃない間は繰り返す
insert str ( #fp[#n] ) + "\n" ;
#n = #n + 1 ;
}
insert "*****\n" ; // 識別用
message "折りたたみの状態を、保存しました。" ;
goto EndEnd ;
LoadCondition :
// データの読み出し
#n = 0 ; // 添字変数の初期化
gofileend ; // ファイルの末尾へカーソル移動
searchup "//** 折りたたみ状態 - マクロ用 **//" ; // 保存データの先頭へ
if ( result == 0 ) { // 見つからなかったら終了
message "保存したデータが見つからないので、マクロを終了します。" ;
goto EndEnd ;
}
golinetop ; // 見つかったら、行頭に移動
down ; // 下の行へ
while ( yes ) {
golinetop ; // 行頭に移動
beginsel ; // データをクリップボードに
golineend ;
copy ;
beginclipboardread ; // クリップボードの読み出し
$fp[#n] = getclipboard ; // $fp[#n] にデータを格納
if ( $fp[#n] == "*****" ) { // 識別用の文字列に当たったら、
break ; // Whileループから離脱
}
down ; // 下の行へ
#n = #n + 1 ;
}
// 折りたたみの再現
#n = 0 ; // 添字変数の初期化
while ( yes ) {
if ( $fp[#n] == "*****" ) { // 識別用の文字列に当たったら、
break ; // Whileループから離脱
}
moveto 1, val ( $fp[#n] ) ; // 折りたたまれていた行にカーソル移動
fold ; // 折りたたみ処理
#n = #n + 1 ;
}
message "折りたたみの状態を、再現しました。" ;
EndEnd: // 終了処理
moveto #cx, #cy ; // カーソルを元の位置に戻す
endmacro ; // マクロ終了
|
|