ウィンドウ分割の保存と復元方法についてNo.38282
レモン さん 20/06/30 13:08
 
【秀丸エディタ】 Version 8.93 (32bit)
【OS】 Windows 10 Pro (64bit、バージョン2004/OSビルド 19041.329)

ヘルプと当フォーラムを調べてみましたが解決方法が見当たりませんので
お伺いします。
ウィンドウを上下に分割して編集することが多いのですが、ウィンドウ分
割の状態を保存して復元する方法はございますか。デスクトップ保存と
デスクトップ復元を試してみましたがウィンドウの分割は保存されません。
もしマクロなどで保存と復元が可能でしたら、その方法をご教示くだされ
ば幸いです。

[ ]
RE:38282 ウィンドウ分割の保存と復元方法No.38283
秀丸担当 さん 20/06/30 16:35
 

ウィンドウ分割の状態は、確かにデスクトップ保存では保存されないです。
マクロでやるとしたら、情報の取得はsplitstate, splitmode, splitposキーワード
があります。
分割を実行したり設定するには、split文, setsplitinfo文, splitswitch文がありま
す。

例えば以下のようなマクロで一応できました。
分割側のカーソル位置の情報取得が面倒で、ちょっとのつもりがけっこう長くなって
しまいました。
デスクトップ保存対象ファイルの全部ではなく1つのファイルだけです。
V7.xxの古い方式は対応していないです。

//INIファイル名 例:c:\test\test.mac.ini
$ini = currentmacrofilename+".ini";
$sec = filename;

if(splitstate!=0){
    question "分割状態を\n"+$ini+"\nに保存します。";
    if(result==false){
        endmacro;
    }
    #splitstateOrg = splitstate;
    writeininum $ini, $sec, "splitmode", splitmode;
    writeininum $ini, $sec, "splitstate", splitstate;
    writeininum $ini, $sec, "splitpos", splitpos;

    call SetSplitState 1;
    writeininum $ini, $sec, "screentopy1", screentopy;
    writeininum $ini, $sec, "lineno1", lineno;

    call SetSplitState 2;
    writeininum $ini, $sec, "screentopy2", screentopy;
    writeininum $ini, $sec, "lineno2", lineno;

    call SetSplitState #splitstateOrg;

} else {
    #splitstate = getininum( $ini, $sec, "splitstate" );
    if( #splitstate == 0 ) {
        message "記憶された情報がありません";
        endmacro;
    }
    question "分割状態を\n"+$ini+"\nから復元します。";
    if(result==false){
        endmacro;
    }
    #splitstate = getininum( $ini, $sec, "splitstate" );
    #splitmode = getininum( $ini, $sec, "splitmode" );
    #splitpos = 0; //ウィンドウサイズが違う可能性で境界線は復元しない
    //境界線も復元する場合  #splitpos = getininum( $ini, $sec, "splitpos" );
    split #splitmode, 1, #splitpos;
    call SetSplitState 1;
    disabledraw;
    movetolineno 1, getininum( $ini, $sec, "lineno1" );
    enabledraw getininum( $ini, $sec, "screentopy1" );

    call SetSplitState 2;
    disabledraw;
    movetolineno 1, getininum( $ini, $sec, "lineno2" );
    enabledraw getininum( $ini, $sec, "screentopy2" );

    call SetSplitState #splitstate;
}
endmacro;

SetSplitState:
    if( splitstate == 1 && ##1 == 2 ) { //上・左
        splitswitch; //2にする
    } else if( splitstate == 2 && ##1 == 1 ) {  //下・右
        splitswitch; //1にする
    }
    return;

[ ]
RE:38283 ウィンドウ分割の保存と復元方法No.38284
レモン さん 20/06/30 16:43
 
マクロをどうもありがとうございます。おかげさまで望みが叶いました。
取り急ぎお礼申し上げます。

[ ]