grep後のプレビュー機能No.20455
daamatsu さん 05/11/19 03:38
 
秀丸をいつも便利に秀丸をプログラム(VHDL,C言語)の開発に使わせてもらっています。
が、同僚が「WZ Editor」というエディタのgrepのプレビュー機能を非常に便利そう
に使っているのを知ってビックリするやら羨ましいやら。プログラムの開発をしてい
ると、grepでフォルダ内の複数ファイルの検索をした後、自分の本当に探している行
を手作業で探すことになるのですが、この際、プレビュー機能があると、いちいちタ
グジャンプでファイルを開いて閉じてという作業を繰り返さなくて良いのでかなり便
利なのです。特にプログラム規模(ファイル数)が大きくなればなるほど、この手間が
煩わしく感じてしまいます。
grepでヒットした行の前後数行(任意に設定可能)をgrep結果ファイルに出力できるマ
クロは見つけたのですが、残念ながら、私の欲張りな要求を満たすものではありませ
んでした。(grep検索結果そのものが膨大になってしまい、目的の行に辿り着くのに
結局時間がかかってしまうので…)
上記の類似機能は既に秀丸に実装済みorマクロが存在するなど情報があれば教えてい
だけませんか?無ければ、実装してもらえれば幸いです。

[ ]
RE:20455 grep後のプレビュー機能No.20462
Iranoan さん 05/11/19 18:22
 
 daamatsu さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> grepでフォルダ内の複数ファイルの検索をした後、自分の本当に探している行
> を手作業で探すことになる
 「タグ・ジャンプ」と「下候補」を使えば、手作業で探す必要はないと思い
ますが...。

> 「WZ Editor」というエディタのgrepのプレビュー機能
 「WZ Editor」が周りに無いので、この機能をもう少し詳しく教えて頂ける
と、マクロで実現できるか等も回答できると思います。言い換えれば、
> grepでヒットした行の前後数行(任意に設定可能)をgrep結果ファイルに出力できるマ
> クロは見つけたのですが、残念ながら、私の欲張りな要求を満たすものではありませ
> んでした。
これがどのマクロで、何が足りなかったのか知りたいと。

[ ]
RE:20462 grep後のプレビュー機能No.20464
daamatsu さん 05/11/20 09:50
 
>「タグ・ジャンプ」と「下候補」を使えば、手作業で探す必要はないと思います
>が...。
もちろん、検索にヒットした単語を順番に追っていくだけなら、それでできるんです
が、「自分の本当に探している」行を探すのはどんな手段を使っても手作業になって
しまいます。私が煩わしいと感じているのは、ファイル数が多くなったときに、タグ
ジャンプを繰り返して複数のファイルを次々と開いては閉じていくという作業です
(複数人でソフトを開発しているとこの作業が結構頻繁に必要になってきます)。WZ E
ditorには、標準でWZ Grepという付属のソフトがついており、そのソフトでは検索結
果の表示ウィンドウが上下に分割されており、上半分で文字通り検索結果を表示し、
その結果の任意の行をクリックするだけで、下半分のウィンドウに該当する行の前後
数行が表示させることができます。
ちなみに、WZ Editorは体験版が無償でDLできます。
でもって、私が試したマクロは、「grep 拡張マクロ Ver.1.18 presented by Iranoa
n」です。って、あなたじゃないですか!?

[ ]
RE:20455 grep後のプレビュー機能No.20465
h-tom さん 05/11/20 10:15
 

h-tom です。

>秀丸をいつも便利に秀丸をプログラム(VHDL,C言語)の開発に使わせてもらっています。
>が、同僚が「WZ Editor」というエディタのgrepのプレビュー機能を非常に便利そう
<省 略>
>上記の類似機能は既に秀丸に実装済みorマクロが存在するなど情報があれば教えてい
>だけませんか?無ければ、実装してもらえれば幸いです。
grepの結果を元に、ファイルのマッチした部分を表示するビュアー的な機能ですよね?
(たしか、そんな機能だったっと思いましたが・・・)

とりあえず、そんなマクロを作ってみました。
プレビューではなく、実際にファイルを開くので、ファイルサイズによってはかなり
遅くなるかも。

grep結果の秀丸で実行してください。
grepの結果と、ビュアー用秀丸を横に並べて表示します。
ESCキーで終了。カーソルキーで移動(表示変更)。
タブモードでも動くようにしたつもりですが、正常に動くかどうかはわかりません。
ビュアー用秀丸の位置を変えたい場合は、サブルーチンの"set_window:"の内容を
適当に編集してください。

//デバック時は、以下の2行のコメントを外すこと
//debuginfo 1;
//#debug = 1;

if(filetype != "grep"){
    message "grep 以外では実行できません。";
    endmacro;
}
//検索関連の設定保護
$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 "grep View Mode [esc]で終了 grep " +  directory2 + "\\" + grepfilebuffer;
gofiletop;
#lineno = lineno;
call grep_view;
//ループでキー入力待ち受け
disablebreak;
while(1){
    #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;
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 "ファイルが見つかりません。\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;
            selectline;
            setactivehidemaru #main;
            $bak_fname = $fname;
        }
    }else{
        enabledraw;
    }
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;
    }
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;

[ ]
RE:20464 grep後のプレビュー機能No.20466
アルビレオ さん 05/11/20 11:35
 
ユーザーのアルビレオです。

>WZ Editorには、標準でWZ Grepという付属のソフトが

WZ Editor本体とは別のプログラムになっているのなら、むしろ秀丸エディタか
らWZ Grepを起動するマクロを書いてしまうのがスマートなんじゃないかと思い
ます。
たぶんWZ Editorとの連携のためにコマンドラインで検索文字列を渡すことがで
きるようになっている気がするし。

あー、でもWZ Grep側から秀丸エディタを起動できるかどうかわかりませんね。
WZ Grepに「タグジャンプで起動するエディタ」を指定する機能があると嬉しい
んだけど、さすがにそれは期待できませんかね?

[ ]
RE:20465 grep後のプレビュー機能No.20467
daamatsu さん 05/11/20 12:02
 
h-tomさん、
早速試させていただきました。
機能的には、かなり当方の要望を反映されたものになっており、感謝感激です。
ソース上でココを変更すればどうなるかってのがある程度コメントされているあたり
が有難いです。(今は時間が取れませんが、そのうちマクロの書き方を勉強するつも
りなので、その際には参考にさせていただきます)
さらに、要望(わがまま?)を言わせていただけるなら、

@「カーソルキーで移動(表示変更)」と同等動作がマウス(左クリック)でも行いた
いです。
A本マクロを実行中、ファンがCPUの温度上昇を検出してうるさく回転し始めるので
すが、相当な付加がかかっているんでしょうか?
(カーソルキー操作時はしょうがないにしても、マウス・キーボード操作を止めて5分
間放置しても本マクロ実行中はファンは回転し続けてしまうのが気になります。
「ループでキー入力待ちうけ」の頻度が高すぎるのかな?)
Bファイルサイズに関しては、当方の場合あまり問題にはなりませんでした。
(ファイルサイズは通常約10kB、最大でもせいぜい100kB。)
Cgrepした後、手動でマクロを実行しなくても、このマクロが自動で[若しくはgrep
機能と合体して]実行されれば最高!
(キー割当てしてしまえば、ボタン一つで済むので本件に関しては必要度低いです。)

以上、感想と要望です。ご検討いただければ幸いです。

[ ]
RE:20467 grep後のプレビュー機能No.20468
h-tom さん 05/11/20 13:57
 

h-tom です。

>@「カーソルキーで移動(表示変更)」と同等動作がマウス(左クリック)でも行いた
>いです。
これは無理です。クリックしたことはわかるのですが、何処をクリックしたかが、
マクロではわからない為です。

>A本マクロを実行中、ファンがCPUの温度上昇を検出してうるさく回転し始めるので
>すが、相当な付加がかかっているんでしょうか?
>(カーソルキー操作時はしょうがないにしても、マウス・キーボード操作を止めて5分
>間放置しても本マクロ実行中はファンは回転し続けてしまうのが気になります。
>「ループでキー入力待ちうけ」の頻度が高すぎるのかな?)
キーの入力検出で、思いっきりループさせている為、CPUが100%になっていると思い
ます。
田楽dllを使って負荷を軽減させることは可能かな?

>Cgrepした後、手動でマクロを実行しなくても、このマクロが自動で[若しくはgrep
>機能と合体して]実行されれば最高!
>(キー割当てしてしまえば、ボタン一つで済むので本件に関しては必要度低いです。)
以下内容を、先ほどのマクロの先頭に追加するればいいです。
grepdialog;
if(filetype == "new"){
    exit;
    endmacro;
}

[ ]
RE:20468 grep後のプレビュー機能No.20469
daamatsu さん 05/11/20 15:38
 
daamatsuです。

>これは無理です。クリックしたことはわかるのですが、
>何処をクリックしたかが、マクロではわからない為です。
一旦諦めて、本体側のバージョンアップ(マクロ部分orGREP機能自体)を気長に待ちま
す。
ソフト開発担当者様、よろしくお願いします。

>キーの入力検出で、思いっきりループさせている為、CPUが100%になっていると思い
>ます。
>田楽dllを使って負荷を軽減させることは可能かな?
具体的にどうすれば良いのか教えてもらえませんか?

>以下内容を、先ほどのマクロの先頭に追加するればいいです。
>  <省略>
先頭に追加して所望の動作を確認できました。
有難うございます。


[ ]
RE:20469 grep後のプレビュー機能No.20470
h-tom さん 05/11/20 19:09
 

h-tom です。

>>キーの入力検出で、思いっきりループさせている為、CPUが100%になっていると思い
>>ます。
>>田楽dllを使って負荷を軽減させることは可能かな?
>具体的にどうすれば良いのか教えてもらえませんか?
grepダイアログを開く事も含め、田楽DLLでループ時の負荷低減もおこないました。
修正箇所は少ないですが、まとめて最期にのせます。

田楽DLLは以下の場所から入手してください。
 http://www.ceres.dti.ne.jp/~sugiura/
田楽DLLは、
・マクロと同じ場所
・マクロフォルダ
・秀丸と同じフォルダ
のいずれかに置いてください。

キー待ち受けループ内にある
    if(#dengaku) #n = dllfunc("SLEEP",100);
にある、100を大きくしていくと、負荷が少なくなりますが、キー入力に対する
反応は鈍くなります。環境に合わせて調整して下さい。

//ビュアー機能付きGrep
grepdialog;
//キャンセル時は終了
if(filetype == "new"){
    exit;
    endmacro;
}
//デバック時は、以下の2行のコメントを外すこと
//debuginfo 1;
//#debug = 1;

if(filetype != "grep"){
    message "grep 以外では実行できません。";
    endmacro;
}

//田楽DLLをロード
#dengaku = 1;
loaddll currentmacrodirectory + "\\dengakudll.dll";
if (!result) loaddll macrodir + "\\dengakudll.dll";
if (!result) loaddll "dengakudll.dll";
if (!result) #dengaku = 0;

//検索関連の設定保護
$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 "grep View Mode [esc]で終了 grep " +  directory2 + "\\" + grepfilebuffer;
gofiletop;
#lineno = lineno;
call grep_view;
//ループでキー入力待ち受け
disablebreak;
while(1){
    #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;
    //田楽DLLがある場合、負荷低減の為、waitをかける。
    if(#dengaku) #n = dllfunc("SLEEP",100);
}

//他のウィンドウを復元
//ウィンドウを並べないなら不要なコード
#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;
//田楽DLLの解放
freedll;
title 0;
//座標、ウィンドウサイズを復元
setwindowpos #pos_x, #pos_y, #width, #height;
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
if(#BAK_HILIGHTING) hilightfound 1;
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 "ファイルが見つかりません。\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;
            selectline;
            setactivehidemaru #main;
            $bak_fname = $fname;
        }
    }else{
        enabledraw;
    }
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;
    }
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;

[ ]
RE:20470 grep後のプレビュー機能No.20471
daamatsu さん 05/11/20 22:15
 
daamatsuです。

>grepダイアログを開く事も含め、田楽DLLでループ時の負荷低減もおこないました。
>修正箇所は少ないですが、まとめて最期にのせます。
早速、田楽DLLをインストールして試しました。
かなり快適ですね!!
後は、マウスのクリックに対応すれば言うことなしなんですが、
こればっかりは仕方が無いので、秀丸開発担当者様の対応を気長に待ちます。
(秀丸開発担当者様、grep結果のプレビュー機能を標準機能として実装することも含
めて、宜しくご検討お願いします)

h-tom様、そしてレスをくれた皆様、どうも有難う御座いました。
最後に、秀丸マクロを学習するのに、数ある参考書orURLの中からお勧めのものがあ
れば教えてもらえないでしょうか?
ちなみに、当方VHDL(ちょっとマイナー?)ならほぼ使いこなせますが、C言語はポイ
ンタが未だに…って感じのレベルです。

[ ]
RE:20471 grep後のプレビュー機能No.20473
秀丸担当 さん 05/11/21 10:58
 

>(秀丸開発担当者様、grep結果のプレビュー機能を標準機能として実装することも含
>めて、宜しくご検討お願いします)

grep機能のプレビューについて、次のソフトのネタとしてgrep機能を強化したも
のを作ろうかという案もあるので、参考にしたいと思います。

秀丸エディタの標準機能としてやる場合、実際の見せ方をどうしたほうがいいで
しょうか。
秀見えのように部分的なプレビューができればいいでしょうか。

あるいは、h-tomさんの作っていただいたマクロのように、実際にファイルを開
きつつ、フォーカスのあるウィンドウはgrep結果のままで、カーソル移動やクリ
ックで移動できて、編集したいときにすぐ編集できるというスタイルがいいでし
ょうか。

または、タブモードで、強調表示一覧の枠のように枠の中にgrep結果を表示でき
て、枠の中のクリックで開いているファイルが切り替わるというようなことがで
きたらいいとも思います。

[ ]
RE:20473 grep後のプレビュー機能No.20479
ENCODINGSHIFTJIS さん 05/11/21 14:53
 
横から

ビュアー(読取り)の速さ重視で、編集書き換え禁止が望ましいです。
カーソルは見えて、文字列選択コピーはできたほうがよいです

========= その他
現状のマクロ機能では、
面の属性がわからない→プレビュー画面を把握できない。
したがって、
readonlyloadfile  書換え禁止でファイルを閉じて開く
を使えない。
マクロをまたがる文字列変数にハンドルを記憶させるのも大掛かりですし。

その他
閲覧モード:カーソルの動きが不完全
以下のような、カーソル行を画面中央にするのは上書き禁止モードが必要です。

// -- // 閲覧モードではカーソルの動きが不完全?、中心が出ない
#X=x;
#Y=y;
 goscreentop; #TY=y;
 goscreenend; #EY=y;
#MOVEY=#Y-(#TY+#EY)/2;

     if(#MOVEY<0) while(#MOVEY<0){#MOVEY=#MOVEY+1;rolldown;}
else if(#MOVEY>0) while(#MOVEY>0){#MOVEY=#MOVEY-1;rollup;}

moveto #X,#Y;

[ ]
RE:20473 grep後のプレビュー機能No.20484
daamatsu さん 05/11/22 07:01
 
>秀丸エディタの標準機能としてやる場合、実際の見せ方をどうしたほうがいいでし
>ょうか。
ファイルサイズやマシンパワーそして使い方など、環境は様々だと思うのですが、
私の個人的な意見としては、
@プレビューでは上書き禁止。
(プレビューで編集できてしまうと、私の頭が混乱してしまうから。(^_^;) )
(別途タグジャンプをするという操作をユーザにさせることによって、編集している
ことを潜在的に意識させることができますし…)
A部分的なプレビュー[表示範囲に制限あり]ではなく、マウスかキーボードでスク
ロールさせればファイル全体が見たい。
(部分的プレビューだと、if分が深く入り込んでいる場合などに条件を見れなくてモ
ドカシイ思いをしそうだから)
(最初に該当ファイルの全体を読み込む or 実際に画面に表示させるときに少しずつ
ファイルを読み込む のどちらにするかはファイルサイズによると思いますが、私の
場合は最初にファイル全体を読み込む方がいいです。ユーザが選択可能になればベス
トと思います)
B>カーソルは見えて、文字列選択コピーはできたほうがよいです。
(上の書き込みにもありますが、私の場合、代入元の変数をいじっているのはどこだ?と
grepを繰り返すときに便利そうだから)

始めにも書きましたが、環境や使い方によって望むものは違うと思うので、
あくまで、いちユーザの意見と受け取っていただきたく思います。
他に、いちユーザの声で良ければ何なりとお訊ねください。

[ ]
RE:20484 grep後のプレビュー機能No.20486
秀丸担当 さん 05/11/22 10:21
 

>始めにも書きましたが、環境や使い方によって望むものは違うと思うので、
>あくまで、いちユーザの意見と受け取っていただきたく思います。
>他に、いちユーザの声で良ければ何なりとお訊ねください。

ご意見ありがとうございます。
今後のネタとして参考にしたいと思います。

[ ]
RE:20473 grep後のプレビュー機能No.20489
Iranoan さん 05/11/22 11:41
 
 秀丸担当さん今日は、Iranoan です。
> 秀見えのように部分的なプレビューができればいいでしょうか。
>
> あるいは、h-tomさんの作っていただいたマクロのように、実際にファイルを開
> きつつ、フォーカスのあるウィンドウはgrep結果のままで、カーソル移動やクリ
> ックで移動できて、編集したいときにすぐ編集できるというスタイルがいいでし
> ょうか。
 私は部分的なプレヴューで十分で、速度が速い方がよいです。
 もし実際にファイルを開くなら、履歴に加えないオプションが欲しいですね。

[ ]