現在開いている秀丸を対象にgrepNo.06370
緒方聡 さん 10/07/29 18:06
 
お世話になっています。
題名のような動作をするマクロを作成したいと考えています。

このマクロが期待する動作としては、localgrep のようなダイアログで
オプションを入力し、localgrep のような出力がされることです。

実装方法としては:

1. setactivehidemaru でカレントを切り替えつつ、
localgrep を繰り返し、最後に localgrep の結果を
ひとつにまとめる

2. setactivehidemaru でカレントを切り替えつつ、
gettext またはクリップボード経由でファイル内容を変数化し
HmJre の FindRegular で検索し、最後に検索結果を
localgrep 形式で出力する

3. basename2 ですべてのファイル名を取得し
DLL で HmJre.dll を使用して検索し、結果を
localgrep 形式で出力する

4. basename2 ですべてのファイル名を取得し
外部コンソールアプリを起動し、その結果を
リダイレクトする

というのを考えました。



1 は、実行時に秀丸がパラパラするためいまひとつです。

2 は、1 に比べると localgrep の結果が生成されないため
パラパラ具合は抑えられますが、マクロ変数の 1MB の制限があり
大きなファイルに対して実行できません。

3 と 4 は、動作的にはそれほど変わらないですが、4 なら
もしかすると既存のツールが再利用できるかもしれません。
3、4 に関しては、編集状態のファイルを対象にできない、という
欠点があります。



他に何か良い案はありませんか?
アドバイスお願いします。

[ ]
RE:06370 現在開いている秀丸を対象にgrepNo.06371
山紫水明 さん 10/07/29 22:24
 
 緒方聡さん,

 もしかしたら,ご希望のことを理解していないのかもしれませんが,

>3、4 に関しては、編集状態のファイルを対象にできない、という
>欠点があります。

 内容全部をコピーして新規ファイルに貼り付け,適当な前で保存してその
ファイルを検索の対象にする。(編集中のファイルのクローン作成)
 最後に結果ファイル上のファイル名を修正し,クローンファイルを削除する。

ということではだめでしょうか。

     では, (^^)/~
                                    山紫水明(ユーザー)
                                    SANSHISUIMEI

[ ]
RE:06370 現在開いている秀丸を対象にgrepNo.06372
IKKI さん 10/07/30 11:13
 
こんにちは。IKKI です。いつもお世話になっています。

未保存の編集バッファの内容を検索することは必須要件でしょうか?

●必須であるとき
runex 文か filter 文を使って外部プログラムに渡すのが最善だと思います。
どちらかというと runex 文の方が、Unicode を素直に扱えるのでおすすめです。

●必須でないとき
全保存したあとディスク上の各ファイルに対して grep して結果をマージするか、デ
ィスク上の各ファイルを外部プログラムで処理するのがよさそうです。

[ ]
RE:06371 現在開いている秀丸を対象にgrepNo.06373
緒方聡 さん 10/07/30 11:17
 
山紫水明さん、

> 内容全部をコピーして新規ファイルに貼り付け,適当な前で保存してその
>ファイルを検索の対象にする。(編集中のファイルのクローン作成)
> 最後に結果ファイル上のファイル名を修正し,クローンファイルを削除する。

提案していただいた方法でも可能ですね。

アクティブな秀丸を切り替えずにファイルの内容を取得する、というのが
できればなおよいのですが、たぶん無理ですよね。


[ ]
RE:06372 現在開いている秀丸を対象にgrepNo.06374
緒方聡 さん 10/07/30 11:28
 
IKKI さん、こんにちは

>未保存の編集バッファの内容を検索することは必須要件でしょうか?

最終的に出力結果からタグジャンプで目的の場所に移動したいので
保存されている内容と現在編集中のバッファに差異があると
タグジャンプしたときに残念なことになるので、
できれば編集バッファに対して grep したいですね。

本当に単純に説明すると、すべての秀丸に対して localgrep して
その結果がひとつにまとまる、という感じのものです。

ヘルプを確認しましたが、runex で現在の内容が渡せるんですね、
勉強になりました。

[ ]
RE:06374 現在開いている秀丸を対象にgrepNo.06375
緒方聡 さん 10/07/30 14:06
 
>ヘルプを確認しましたが、runex で現在の内容が渡せるんですね、
>勉強になりました。

プログラム起動引数でファイルの内容を渡すとなると
長さの制限が発生するので、filter の方がよいのかも知れませんね。

[ ]
RE:06375 現在開いている秀丸を対象にgrepNo.06376
IKKI さん 10/07/30 16:04
 
>プログラム起動引数でファイルの内容を渡すとなると

いやいや、標準入力に流し込めば長さ制限ないですよ、たぶん。(^^;

[ ]
RE:06376 現在開いている秀丸を対象にgrepNo.06377
緒方聡 さん 10/07/30 21:52
 
>>プログラム起動引数でファイルの内容を渡すとなると
>
>いやいや、標準入力に流し込めば長さ制限ないですよ、たぶん。(^^;

そうでした、よく見たら標準入力でした。

結局、すべてのバッファを取得するためにアクティブな秀丸を
切り替えなければならないのは、どうしようもないですかね。

windowstate で状態を取得し、とりあえずすべて非表示にして
それからアクティブな秀丸を切り替えながら内容を取得し、
終わったら元の状態に戻す、というのがもっとも現実的な気がします。

マクロの showwindow 文は、結局切り替えながらになっちゃうので
DLL に秀丸のハンドルを渡して、DLL 内で ShowWindow を
行う感じを考えています。

[ ]