[ 新規に投稿する ]

タブモードにて2ファイル間で文字列コピーNo.10303
いちもんじ さん 24/03/14 12:03 [ コメントを投稿する ]
  至極簡単なことなのかもしれないのですが。

a.txtとb.txtという2つのファイルをタブモードで開いています。
b.txtに書かれている文字列(例えば、aaaa)をコピーして
a.txtに貼り付ける
ということをしたいのですが、
マクロはどのように書けばよいのでしょうか?

どなたかご教示ください。
[ ]
RE:10303 タブモードにて2ファイル間で文字列コピーNo.10304
こみやんま さん 24/03/14 17:34 [ コメントを投稿する ]
  これは完全に複写したいということなんでしょうか。

うーん、マクロを実行したとしても複写対象となるウィンドウを選ぶなりなんなりの動作が必要となるので、
-----------------------------------------------
CTRL+A + CTRL+C ⇒ 複写先のタブ選択 ⇒ CTRL+A + CTRL+V
-----------------------------------------------
の作業より手軽で早くなるのか? と言われれば、
「ならないんでないの?」「むしろ操作がどくどくになり戸惑って遅い」
という感想を抱くところですが...


-------------------------------------------------------------
@転写する文字列はたいして大きくないことがわかっている場合。
----------------------- aaaa.mac ----------------------------
// ターゲットとなるファイル名
$target_filename = "b.txt";

$totaltext = gettotaltext();

// 現在のウインドウハンドル
#current_window_handle = hidemaruhandle(0);

// ターゲットとなるファイルのウィンドウがあれば
setactivehidemaru findhidemaru( $target_filename );
if (result) {
    // 全部選んで
    selectall;
    // 貼り付け
    insert $totaltext;
}
setactivehidemaru #current_window_handle;




-------------------------------------------------------------
@転写する文字列は非常に長大な文字列であるケースがある場合。
----------------------- bbbb.mac ----------------------------
// ターゲットとなるファイル名
$target_filename = "b.txt";

js { 
    var totalText = hidemaru.getTotalText() || "";
    var tmpFolder = getenv("TEMP") || getenv("TMP");
    if (tmpFolder) {
        var tmpfileName = tmpFolder + "\\" + "hm_copy_tmp_macro.txt";
        if (tmpFolder) {
            try {
                hidemaru.saveTextFile(tmpfileName, totalText, "utf16");
            } catch(e) {
                // エラーはここに適当に記述
            }
        }
    }
}

// 現在のウインドウハンドル
#current_window_handle = hidemaruhandle(0);

// ターゲットとなるファイルのウィンドウがあれば
setactivehidemaru findhidemaru( $target_filename );
if (result) {
    // プロセスが異なるので改めて定義が必要
    js {
        var tmpFolder = getenv("TEMP") || getenv("TMP");
        if (tmpFolder) {
            var tmpfileName = tmpFolder + "\\" + "hm_copy_tmp_macro.txt";
            try {
             var text = hidemaru.loadTextFile(tmpFolder + "\\" + "hm_copy_tmp_macro.txt", "utf16");
             begingroupundo();
             selectall();
             insert(text);  // jsmodeのinsertは秀丸ネイティブ処理なのでhidemaruGlobal独特の「マクロeval時」独特の「一時変数サイズ制限」を受けない。
             endgroupundo();
                hidemaru.saveTextFile(tmpfileName, "", "utf16"); // createobjectやhidemaru.runProcessとか使ってファイル削除するのおうぎょうなので、とりあえずBOMだけの内容でファイル上書きして最小サイズに
            } catch(e) {
            }
        } 
    }
}
setactivehidemaru #current_window_handle;


みたいになるんじゃないでしょうか。

いずれにしても、「貼り付け対象のウィンドウ選択が手動(この場合、b.txtのファイル名&ウィンドウの部分」なのであれば、
作業として普段のCTRL+C/CTRL+A/CTRL+V などに比べて早くならないでしょう。

ただし、貼り付け先のウィンドウ選択(ファイル名なりなんなり法則なり)が自動なり決め打ちなのであれば、効果はあるかとは思います。
[ ]
RE:10304 タブモードにて2ファイル間で文字列コピーNo.10305
こみやんま さん 24/03/14 17:50 [ コメントを投稿する ]
  たとえば、ウィンドウが2つしかないんです。2つだけ開けるんです、ということであれば、先ほどのを

--------------------------------------------------
$totaltext = gettotaltext();

// 現在のウインドウハンドル
#current_window_handle = hidemaruhandle(0);

// ターゲットとなるファイルのウィンドウがあれば
setactivehidemaru 1;
if (result) {
    // 全部選んで
    selectall;
    // 貼り付け
    insert $totaltext;
}
setactivehidemaru #current_window_handle;
--------------------------------------------------




--------------------------------------------------
js { 
    var totalText = hidemaru.getTotalText() || "";
    var tmpFolder = getenv("TEMP") || getenv("TMP");
    if (tmpFolder) {
        var tmpfileName = tmpFolder + "\\" + "hm_copy_tmp_macro.txt";
        if (tmpFolder) {
            try {
                hidemaru.saveTextFile(tmpfileName, totalText, "utf16");
            } catch(e) {
                // エラーはここに適当に記述
            }
        }
    }
}

// 現在のウインドウハンドル
#current_window_handle = hidemaruhandle(0);

// ターゲットとなるファイルのウィンドウがあれば
setactivehidemaru 1;
if (result) {
    // プロセスが異なるので改めて定義が必要
    js {
        var tmpFolder = getenv("TEMP") || getenv("TMP");
        if (tmpFolder) {
            var tmpfileName = tmpFolder + "\\" + "hm_copy_tmp_macro.txt";
            try {
                var text = hidemaru.loadTextFile(tmpFolder + "\\" + "hm_copy_tmp_macro.txt", "utf16");
                begingroupundo();
                selectall();
                insert(text);  // jsmodeのinsertは秀丸ネイティブ処理なのでhidemaruGlobal独特の「マクロeval時」独特の「一時変数サイズ制限」を受けない。
                endgroupundo();
                hidemaru.saveTextFile(tmpfileName, "", "utf16"); // createobjectやhidemaru.runProcessとか使ってファイル削除するのおうぎょうなので、とりあえずBOMだけの内容でファイル上書きして最小サイズに
            } catch(e) {
            }
        } 
    }
}
setactivehidemaru #current_window_handle;
--------------------------------------------------

にすれば選択する必要がないので、「マクロ実行で転写はされる」かとは思います。

マクロを1回だけ実行したら、以後はこの2つのウィンドウは自動転写だ! ということなら、また全然違った実装にはなるでしょう。
[ ]
RE:10303 タブモードにて2ファイル間で文字列コピーNo.10306
igus さん 24/03/14 20:48 [ コメントを投稿する ]
  //次の秀丸の末尾にコピー

if(!selecting)endmacro;
copy2;setactivehidemaru 1;
begingroupundo;gofileend;
insert "\n";paste;endgroupundo;
[ ]
RE:10303 タブモードにて2ファイル間で文字列コピーNo.10307
いちもんじ さん 24/03/15 11:33 [ コメントを投稿する ]
  ご教示いただいた皆様

私の言葉足らずの書き込みに、意図を汲んでいただきありがとうございました。
また、期待以上の回答をいただき感謝です。
ご教示いただいたマクロを参考にマクロを学習したいと思います。
[ ]

[ 新規に投稿する ]