タブモードにて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_tm
p_macro.txt", "utf16");
             begingroupundo();
             selectall();
             insert(text);  // jsmodeのinsertは秀丸ネイティブ処理なのでhidem
aruGlobal独特の「マクロeval時」独特の「一時変数サイズ制限」を受けない。
             endgroupundo();
                hidemaru.saveTextFile(tmpfileName, "", "utf16"); // createob
jectや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は秀丸ネイティブ処理なのでhi
demaruGlobal独特の「マクロeval時」独特の「一時変数サイズ制限」を受けない。
                endgroupundo();
                hidemaru.saveTextFile(tmpfileName, "", "utf16"); // createob
jectや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
 
ご教示いただいた皆様

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

[ ]