|
回答ありがとうございます。
うすうすできないっぽいことはなんとなくわかってはいました。
標準的な機能をマクロで置き換えるのが縁の下の力持ち的にとても便利なのですが、
他のマクロが起動中だと実質何もできなくなってしまうのがとても痛いので、何かう
まい方法を検討したいです。
前の結果、次の結果は知りませんでした。
知っているけど使っていない便利っぽい機能や(デスクトップ保存とか新しいとこで
はエクスプローラ枠とか)、存在すら知らない機能がいっぱいあるなと驚きます。
参考までにマクロを貼り付けておきます。
このマクロは誰が作成されたものなのかわかりませんが
マクロがわからない友達に改造を依頼されて
それ以降私も愛用しています。
grep 結果が何百もあるときに重宝します。
とりあえずこのマクロに関しては、開始時にキー割り当てを変更して、終了時にキー
割り当てを元に戻す、ということをすればとりあえずはしのげるのかな、という気が
してきました(そんな機能があるのかどうかは調べていません)。
---- macro start ----
//デバック時は、以下の2行のコメントを外すこと
//debuginfo 1;
//#debug = 1;
if(filetype != "grep"){
message "Cannot run outside of a grep search";
endmacro;
}
// >>>> ogata
loaddll macrodir + "\\DengakuDLL.dll";
if (!result) loaddll hidemarudir + "\\DengakuDLL.dll";
// <<<< ogata
//検索関連の設定保護
$BAK_SEARCHBUFFER = searchbuffer;
#BAK_SEARCHOPTION = searchoption;
#BAK_HILIGHTING = foundhilighting;
$BAK_REPLACEBUFFER = replacebuffer;
if(#BAK_HILIGHTING) hilightfound 0;
//メインgrep画面のハンドルを取得
#main = hidemaruhandle(0);
//検索のベースフォルダ
$base = directory + "\\";
//秀丸の検索数
#max = hidemarucount - 1;
//マクロ終了時にビュアー画面を閉じるない場合は1 閉じるなら0
#view_close = 1;
//メイン画面の座標、ウィンドウサイズを保存
#pos_x = windowposx;
#pos_y = windowposy;
#width = windowcx;
#height = windowcy;
//タブモードの場合はループの最大を変更
if(tabmode) #max = tabgrouptotal - 1;
//横に並べるを使う都合上、表示する秀丸以外は最小化する。
//ウィンドウを並べないのなら不要なコード
if(#max > 0){
#cnt = 0;
while(#cnt < #max){
if(tabmode == 0){
#list[#cnt] = hidemaruhandle(#cnt + 1);
}else{
#list[#cnt] = getcurrenttab( true, #cnt + 1);
}
// call DBOUT str(#cnt) + ":" + str(#list[#cnt]);
#cnt = #cnt + 1;
}
//起動した秀丸(grep)以外は最小化
#cnt = 0;
while(#cnt < #max){
setactivehidemaru hidemaruhandle(#list[#cnt]);
showwindow 2;
#cnt = #cnt + 1;
}
setactivehidemaru #main;
}
//ビューア用の秀丸を開く
call openview;
//ウィンドウの並びを設定
//ウィンドウの配置を換えたい場合、このルーチンを書き換えること。
call set_window;
//メインをアクティブ化
setactivehidemaru #main;
//grepの出力形式判定
//フルパス(ネットワークドライブ)かどうか
gofiletop;
searchdown "\\(([0-9]+)\\):(?\\1)", regular;
if(result){
escape;
beginsel;
golinetop2;
$chk_name = gettext(seltopx, seltopy, selendx, selendy);
if(strstr($chk_name, ":\\") == 1 || leftstr($chk_name,2) == "\\\\") $bas
e = "";
}
//先頭の内容を表示
title "EXIT grep View Mode [esc]" + directory2 + "\\" + grepfilebuffer;
gofiletop;
#lineno = lineno;
call grep_view;
//ループでキー入力待ち受け
disablebreak;
while(1){
// >>>> ogata
if (loaddllfile != "") n = dllfunc("SLEEP", 50);
// <<<< ogata
#getkey = keypressed;
//[esc]
if(#getkey == 0x1b){
setactivehidemaru #view;
if(result){
//範囲選択、閲覧モードを解除
escape;
if(browsemode) browsemodeswitch;
}
break;
}
//[up] or [left]
if(#getkey == 0x26 || #getkey == 0x25) movetolineno column, lineno - 1;
//[down] or [right]
else if(#getkey == 0x28 || #getkey == 0x27) movetolineno column, lineno
+ 1;
//[PageUp]
else if(#getkey == 0x21) halfprevpage;
//[PageDown]
else if(#getkey == 0x22) halfnextpage;
//[Enter] 動作しないと思う
else if(#getkey == 0x0D) #ret = 1;
//カーソル位置が変更されていればビューアを更新
if(#lineno != lineno || #ret == 1){
call grep_view;
#lineno = lineno;
}
#ret = 0;
}
//他のウィンドウを復元
#cnt = #max - 1;
while(#cnt > -1){
setactivehidemaru hidemaruhandle(#list[#cnt]);
//念のため明示的に元に戻す
//showwindow 1;
#cnt = #cnt - 1;
}
//ビューア秀丸を復元?
if(#view_close == 1){
setactivehidemaru #view;
if(tabmode){
settabgroup #view, #tg_id;
}else{
setwindowpos #pos_x_1, #pos_y_1, #width_1, #height_1;
}
}else{
setactivehidemaru #main;
closehidemaruforced #view;
}
//
setactivehidemaru #main;
title 0;
//座標、ウィンドウサイズを復元
setwindowpos #pos_x, #pos_y, #width, #height;
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
if(#BAK_HILIGHTING) hilightfound 1;
// >>>> ogata
if (loaddllfile != "") freedll;
// <<<< ogata
endmacro;
//grepの結果から、ファイル名と行番号を取得し、ビューに表示
//"finename(num): "を検索し、行番号とファイル名を取得し表示
grep_view:
disabledraw;
golinetop2;
searchdown "\\(([0-9]+)\\):(?\\1)", regular;
if(result){
#line = val(gettext(foundtopx, foundtopy, foundendx, foundendy));
searchup "(";
if(result){
escape;
beginsel;
golinetop2;
$fname = gettext(seltopx, seltopy, selendx, selendy);
enabledraw;
if(existfile($base + $fname) == 0){
message "Cannot find file. \n" + $base + $fname;
return;
}
setactivehidemaru #view;
if(!result){
//ビュー用の秀丸を開く
call openview;
//ウィンドウの並びを設定
call set_window;
#set_result = true;
$bak_fname = "";
setactivehidemaru #view;
}
if($fname != $bak_fname){
loadfile $base + $fname;
if(browsemode == 0) browsemodeswitch;
}else{
escape;
}
movetolineno 0, #line;
// >>>> ogata
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
if(#BAK_HILIGHTING) hilightfound 1;
selectline;
// <<<< ogata
setactivehidemaru #main;
$bak_fname = $fname;
}
}else{
enabledraw;
}
// >>>> ogata
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
if(#BAK_HILIGHTING) hilightfound 1;
// <<<< ogata
return;
//ビューア用の秀丸を開き、各種設定取得
openview:
newfile;
#view = hidemaruhandle(0);
#pos_x_1 = windowposx;
#pos_y_1 = windowposy;
#width_1 = windowcx;
#height_1 = windowcy;
if(tabmode){
#tg_id = tabgroup;
settabgroup #view, -1;
}
// >>>> ogata
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
if(#BAK_HILIGHTING) hilightfound 1;
// <<<< ogata
return;
//秀丸ウィンドウの表示設定
set_window:
setactivehidemaru #main;
//横に並べる場合
windowhorz;
//縦に並べる場合
//windowvert
//現状の幅のまま、画面の上下に並べる
// ##set_hi = cyworkarea / 2;
// ##set_x = windowposx;
// ##set_w = windowcx;
// setwindowpos ##set_x, 0, ##set_w, ##set_hi;
// setactivehidemaru #view;
// setwindowpos ##set_x, ##set_hi, ##set_w, ##set_hi;
//現状の幅のまま、画面の上下に並べる
// //現在のウィンドウの下に固定幅で配置
// ##set_hi = 350;
// ##set_y = windowposy;
// ##set_x = windowposx;
// ##set_w = windowcx;
// ##set_h = windowcy;
// ##all_hi = windowposy + windowcy + ##set_hi;
// if(cyworkarea < ##all_hi){
// ##set_y = windowposy - (##all_hi - cyworkarea);
// if(##set_y < 0){
// ##set_h = ##set_h + ##set_y;
// ##set_y = 0;
// }
// }
// setwindowpos ##set_x, ##set_y, ##set_w, ##set_h;
// setactivehidemaru #view;
// setwindowpos ##set_x, ##set_y + ##set_h, ##set_w, ##set_hi;
// //現在のウィンドウの下に固定幅で配置
//
setactivehidemaru #main;
return;
//----------------------//
// デバック出力ルーチン
// デバックツールは「DBCon」等を使用する事
//「http://www.htosh.com/」
//----------------------//
DBOUT:
if(#debug == 1 && findwindowclass("DBConClass") != 0) debuginfo $$1 + "\n";
return;
|
|