grepdialog2マクロでアウトプット枠へ出力No.28760
K2man さん 10/08/06 14:38
 
お世話になります。
題名の通りなのですが、マクロヘルプを見たところ、
「grepdialog2」マクロでアウトプット枠への出力を
行いたい場合のパラメータが見あたりません。

仕様外なのでしょうか?
「grepdialog2」以外のマクロを使っての実現方法はございますか?

秀丸 Ver8.01 32bit版 です。



[ ]
RE:28760 grepdialog2マクロでアウトプッNo.28763
K2man さん 10/08/06 16:17
 
  自己レスですが。。。。

(1)マクロでgrepしようとした場合のアウトプット枠への出力は
   ダイアログの出力先を確認したところ不可能っぽい事が判明しました。
   「ぽい」というのはドロップダウンリスト「出力先」の文字列が全て表示されていないた
めです。
   ※"(アウトプット枠は無効)(マ"で途切れている。

  マクロヘルプにアウトプット枠は無効である旨の記載をした方が良いかと思います。

(2)仕様外という判断の下、下記マクロを作成してみました。

   grep結果を一度クリップボードに送ってそこから1行づつ読んで出力するようにし
ました。
  結果的には、思い通りの出力結果でしたが、アウトプット枠からタグジャンプさせようと
  マウスでクリックすると出力内容が消えたり右スクロールバーが移動不可になったりします。
  タグジャンプもできません。

  何か常駐物が関係しているのか不明です。


〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
START:
 #Sourcehandle = hidemaruhandle(0);
 copyword;
 beginclipboardread;
 $word = getclipboard;
 grepdialog2 $word,"*.c;*.cpp;*.h;*.hpp","",word,subdir;
//grepをアクティブ
 #Grephandle = hidemaruhandle(0);
 setactivehidemaru #Grephandle;
//全選択してコピー
 selectall;
 copy;
//grepウィンドウ強制終了(自分自身はclosehidemaruforcedは使えないので、grep元ウィンド
ウをアクティブにしてから)
 setactivehidemaru #Sourcehandle;
 closehidemaruforced #Grephandle;
//アウトプット枠出力準備
 loaddll "HmOutputPane.dll";
//アウトプット枠内容消す
 #ret=dllfunc("Push",hidemaruhandle(#Sourcehandle));
//クリップボードから1行ずつ読んでアウトプット枠へ出力
 beginclipboardread;
 $word = getclipboard;
 while( $word != "" )
 {
     #ret=dllfunc("Output",hidemaruhandle(#Sourcehandle),$word);
     $word = getclipboard;
 }
 freedll;

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
  このマクロを実行する前であれば、メニューから[検索]-[grepの実行...]を行って
も正常に出力されます。

 ご確認願いします。
 

[ ]
RE:28763 grepdialog2マクロでアウトプッNo.28765
K2man さん 10/08/06 16:26
 
連続投稿すみません!!

アウトプット枠クリアの箇所を
"Push"ではなく下記のヘルプの例をそのまま流用したら
全てうまくいきました。

#h=dllfunc("GetWindowHandle",hidemaruhandle(#Sourcehandle));
#ret=sendmessage(#h,0x111/*WM_COMMAND*/,1009,0);//1009=クリア

ということは"Push"の処理に何かおかしい箇所があるのでしょうか?

[ ]
RE:28765 grepdialog2マクロでアウトプッNo.28768
秀丸担当 さん 10/08/06 16:35
 

まず、grepdialog2等のgrep系の文では、ご指摘の通り現在のところアウトプット
枠は指定できないようになっています。
アウトプット枠は非同期で動くため、grep結果を処理する従来のマクロが動かな
くなってしまうためです。
今回書いていただいたマクロも、もし「アウトプット枠」を指定できてしまうと
マクロ内で結果の取得ができないと思います。
もし可能にするとしたら何らかの別の仕組みが必要だと思いますが、現在のとこ
ろありません。

ダイアログの出力先には「(アウトプット枠は無効)(マクロ中)」と書かれていま
すが、コンボボックスをドロップダウンしないと切れてしまっています。
ドロップダウンすると幅が広がって見えるはずなのですが、広がらないとしたら
何か不具合があるのかもしれません。
ヘルプは不十分でした。
マクロヘルプ、秀丸ヘルプとも追記させていただきます。

アウトプット枠の内容をクリアするには、書かれている通り、HmOutputPane.dll
のコマンドをsendmessageする方法でできます。
Push関数は、一時的に内容を退避してあとでPopされることが前提の関数で、Push
されたままの状態のことが想定されていませんでした。
Pushされたままだとその後の表示がおかしくなっていました。
おかしくならないように次のバージョンで修正させていただきます。

[ ]
RE:28768 grepdialog2マクロでアウトプッNo.28770
K2man さん 10/08/06 16:48
 
ご確認ありがとうございました。

ドロップダウンリストの件はドロップダウンしても
途切れていますね。。。。

[ ]
RE:28770 grepdialog2マクロでアウトプッNo.28771
秀丸担当 さん 10/08/06 17:14
 

>ドロップダウンリストの件はドロップダウンしても
>途切れていますね。。。。

そうでしたか。
こちらで確認している限りでは広がっているのですが、なぜか広がらない場合も
あるようです。

本題とは外れるので調査の必要は無いかもしれませんが、参考までにWindowsの
バージョンや、もし何か関連していそうな常駐系のソフトがあると思わしいよう
でしたら教えていただけると助かります。

[ ]
RE:28771 grepdialog2マクロでアウトプッNo.28775
K2man さん 10/08/06 18:15
 
>本題とは外れるので調査の必要は無いかもしれませんが、参考までにWindowsの
>バージョンや、もし何か関連していそうな常駐系のソフトがあると思わしいよう
>でしたら教えていただけると助かります。

タスクトレイでの終了できる常駐系は全て終了させましたが、
現象は変わりませんでした。
残ったのはウィルスバスターだけです。

タスクマネージャでの終了は知識がないのでやっていません。

また、Winodws XP sp3です。


[ ]
RE:28775 grepdialog2マクロでアウトプッNo.28779
秀丸担当 さん 10/08/09 11:23
 

>タスクトレイでの終了できる常駐系は全て終了させましたが、
>現象は変わりませんでした。
>残ったのはウィルスバスターだけです。
>
>タスクマネージャでの終了は知識がないのでやっていません。
>
>また、Winodws XP sp3です。

詳しい情報ありがとうございます。
もし他の方からも報告ある場合の参考にさせていただきます。

[ ]