比較についてNo.38588
izoka さん 20/12/07 18:15
 
いつもお世話になっております。
比較の機能追加していただき便利に使用させていただいているのですが
更に以下の追加を検討願えないでしょうか。

1.一周する(検索と同様のイメージで)。

2.比較ファイル間で差異として対応ハイライトになっているものを
 キー割り当てでコマンドすることで、一方から他方へ置き換え挿入。
 (作り込んだハイライト下でマージ作業が出来ると嬉しいため)

[ ]
RE:38588 比較についてNo.38592
秀丸担当 さん 20/12/08 13:19
 

次/前の比較結果で一周できる機能もあったらいいということで、ご意見参考にさせ
ていただきます。
現状でやるとしたら、マクロでやる方法が考えられます。
以下のマクロをマクロ登録して、例えばF4とShift+F4に割り当てるといいです。

//次の比較結果(一周する)
#x=x;
#y=y;
nextresult 0x0001;
if(x==#x&&y==#y){
    gofiletop;
    nextresult 0x0001;
}
endmacro;

//前の比較結果(一周する)
#x=x;
#y=y;
prevresult 0x0001;
if(x==#x&&y==#y){
    gofileend;
    prevresult 0x0001;
}
endmacro;

作り込んだハイライトというのがどういうものかわからないですが、比較結果のカ
ラーマーカーが付いたもので、対応するものとして判断されているものをコピーする
マクロを試しに作ってみました。
やってみたところでは、空白が無視する指定にしていると都合が悪いのと、同じとみ
なされているものが自分が考えているものと違う場合もあるので、どうしても人の目
でよく注意する必要がありそうでした。

//カーソル位置の比較結果の強調を相手にコピー
if(compfilehandle==0){
    message "比較結果の相手が無いです";
    endmacro;
}
#id=val("0x"+getcolormarker(0x0008,diff));
if(#id==0){
    #id=val("0x"+getcolormarker(0x0008|0x0040,diff));
}
while(1){
    if(#id==0){
        break;
    }
    prevcolormarker 0x01|0x04|0x08,#id,diff;
    beginsel;
    nextcolormarker 0x02|0x04|0x08,#id,diff;
    endsel;
    copy;

    #handle1 = hidemaruhandle(0);
    #handle2 = compfilehandle;
    setactivehidemaru #handle2;
    if(hidemaruhandle(0)!=#handle2){
        message "比較結果の相手が見つかりません";
        break;
    }

    prevcolormarker 0x01|0x04|0x08,#id,diff;
    if(result==false){
        nextcolormarker 0x01|0x04|0x08,#id,diff;
        if(result==false){
            message "対応する比較結果がありません";
            setactivehidemaru #handle1;
            break;
        }
    }
    beginsel;
    nextcolormarker 0x02|0x04|0x08,#id,diff;
    endsel;
    delete;
    paste;
    setactivehidemaru #handle1;
    break;
}
endmacro;

[ ]
RE:38592 比較についてNo.38595
izoka さん 20/12/08 16:23
 
マクロの作成、ありがとうございます。

一周する、意図していた動作ができました。
少し編集させていただき、これで当面対応しようと思います。
(登録マクロ数減らしとエラー殺し)

//一周する
disableerrormsg;
if (iskeydown(0x10)){ //shift押下検出 前の比較
 #x=x;#y=y;
 prevresult 0x0001;
 if(x==#x&&y==#y){
  gofileend;
  prevresult 0x0001;
 }
} else {  //次の比較
 nextresult 0x0001;
 if(code==eof){
  gofiletop;
  nextresult 0x0001;
 }
}
enableerrormsg;
endmacro;




比較結果のカラーマーカーが付いたもので、対応するものとして判断されているもの
をコピーするマクロ
こちらも意図した機能にかなり近いことを確認しました。
このマクロをベースにアレンジしていこうと思います。
(作り込んだハイライト、については単に好みの強調表示環境で作業したいというだ
けになります)

ありがとうございました。

[ ]
RE:38595 比較についてNo.38598
izoka さん 20/12/08 17:33
 
上記に貼り付けたマクロは偶々正常に動作していただけのようです。
修正して使用していきます。

正式な採用をお待ちしております。

[ ]