2007/3/21 (水) 02:44:47 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
[4759] GNU GLOBALフロントエンド
maruさんの「外部コマンド実行の機能拡張」スレの後ろにキューイング
させてもらって、、、
gnu globalというtagファイルを使用するgrepツールのフロントエンドを
作成しましたので、ご意見をお願い致します!
Junk/31
  http://sakura.qp.land.to/?Junk%2F31

2007/3/21 (水) 15:08:11 げんた  
INCM1.23c
[4760] RE: GNU GLOBALフロントエンド
Globalのコンパイル済みバイナリも置いていただけませんか?
globalのホームページからwindows版をダウンロードしてもFile not foundなのです.
globalはGPLで,パッチを添付しての配布ならライセンスの問題も特にないと思いますので是非お願いします.

2007/3/21 (水) 15:43:37 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4761] Re2: GNU GLOBALフロントエンド
▼ げんたさん
> Globalのコンパイル済みバイナリも置いていただけませんか?

http://www.tamacom.com/global-j.html
URL置きます。

2007/3/21 (水) 18:57:24 げんた  
INCM1.23c
[4762] Re3: GNU GLOBALフロントエンド
>http://www.tamacom.com/global-j.html
ここから「GNU GLOBALをダウンロードする」へ移動し,そこでWin32用のバイナリをダウンロードすると「ファイルが見つかりません」となるからお願いしたのですが...あれ?今見たらダウンロードできますね.なんだったのだろう.

2007/3/21 (水) 22:07:46 maru  
INCM1.23a
[4763] Re4: GNU GLOBALフロントエンド
>「ファイルが見つかりません」となるからお願いしたのですが...あれ?今見たらダウンロードできますね.なんだったのだろう.

ファイル置き場がgeocitiesなので、最大転送量に達したのかもしれませんね。評価用に、fonさんのglobal-5.3.diffを適用したglobal.exeなどをJunk/31に添付しておきました。

2007/3/21 (水) 22:29:01 maru  
INCM1.23a
[4764] RE: GNU GLOBALフロントエンド
▼ fonさん
global.exeがないときにglobalのダイアログを表示させると悲しい結果になります。
評価中とはいえ、ここだけは取り急ぎ修正したほうが良さそうです。

2007/3/22 (木) 00:27:52 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
[4765] Re2: GNU GLOBALフロントエンド
じゅうじさん、皆さん、早速評価して戴いてありがどうございます!
▼ maruさん
バグの指摘ありがとうございます!かなり致命的でした。。
Junk/31に修正版を置きました。
▼ げんたさん
自分が作ったのよりmaruさん版のglobalの方が、サイズが小さいので
こちらでお願いします。
maruさんのバイナリにpatchをくっつけておきました。

2007/3/22 (木) 08:03:39 げんた  
INCM1.23c
[4766] Re3: GNU GLOBALフロントエンド
maruさんfonさんありがとうございます.私も使用感を試してみました.

Grepと比べて
- 2回目の検索を行ったときに検索結果が前に出てこない
- 検索キーワードが強調されない(検索文字列として扱われない)
のがちょっと違和感があります.

---
globalの -c を使って補完できるとIDE風の使い方ができそうとか言ってみるテスト.

逆参照の一覧がリアルタイムで別のウィンドウに出てくれると幸せになりそうとか言ってみるテスト.
#「別のウィンドウ」が簡単に作れる構造になっていないのはわかっておりますが...
カーソル位置のシンボルの定義位置と参照している場所がそれぞれ別のウィンドウに出せたら...もうすっかり別のソフトです(^^;)

2007/3/23 (金) 00:31:48 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
[4768] Re4: GNU GLOBALフロントエンド
▼ げんたさん
コメントありがとうございます、簡単なやつだけ修正しました。
> Grepと比べて
> - 2回目の検索を行ったときに検索結果が前に出てこない

修正しました。

> - 検索キーワードが強調されない(検索文字列として扱われない)
> のがちょっと違和感があります.

これ、今の構造だと【Global】用ウィンドウの操作は、プロセスが
変わるので、::SendMessage()を使うのだと思うのですが、
DispatchEvent()のところで、どういう風に実装すればいいのか、
それから共有メモリの使い方等、よく分かっていないので、道しる
べみたいなものを教えていただけますか?

> globalの -c を使って補完できるとIDE風の使い方ができそう
この-c意味が分からず無視してました。目から鱗、便利そうですね!
他のオプションも見直したところ、-iの誤解に気づきました。
誤:「条件を含まない」→正:「大小文字区別なし」

> 逆参照の一覧がリアルタイムで別のウィンドウに出てくれると幸せ
> #「別のウィンドウ」が簡単に作れる構造になっていないのは...

なんですよね。。検索が早いのでctagsのようにフロート・ウィンド
ウに表示という方法もありだとは思いますが、どちらにせよちょっと
腰を落ち着けてやんなきゃかな、といったところです。

> カーソル位置のシンボルの定義位置と参照している場所がそれぞ
>れ別のウィンドウに出せたら...もうすっかり別のソフトです(^^;)

サイドバーじゃなくて、独立プロセスのサイドウィンドウを実装して
各種機能を非同期で動かしたいというのを、随分前に言ってたのは
忘れてませんが、イベントをやり取りするところで、ポリシーとか
方法が分からず頓挫しています。。

2007/3/23 (金) 07:37:27 げんた  
INCM1.23c
[4769] Re5: GNU GLOBALフロントエンド
>> - 検索キーワードが強調されない(検索文字列として扱われない)
>> のがちょっと違和感があります.

>これ、今の構造だと【Global】用ウィンドウの操作は、プロセスが
>変わるので、::SendMessage()を使うのだと思うのですが、

あー,なるほど.
Grepでは新しいプロセスの方がGrepしていて,今回の実装はウィンドウ自体は出力のみの使用という違いがあるんですね.

>> globalの -c を使って補完できるとIDE風の使い方ができそう
>この-c意味が分からず無視してました。目から鱗、便利そうですね!

補完処理そのものを何らかのインターフェースを決めて汎用的な物にできれば良いのかも.
補完処理をマクロにやらせることもできないかなぁ.と書くとまた話がそれてしまいますけどね.

>> カーソル位置のシンボルの定義位置と参照している場所がそれぞ
>>れ別のウィンドウに出せたら...もうすっかり別のソフトです(^^;)

>独立プロセスのサイドウィンドウを実装して各種機能を非同期で

現状のように応答を待ち続ける構造では文字入力を阻害してしまいますよね.
文字入力と並行して動き,かつ処理が中断できる仕組みが必要なのかな.

2007/4/7 (土) 18:52:44 げんた  
INCM1.23c
[4791] RE: GNU GLOBALフロントエンド
編集中のファイルのある場所(カレントディレクトリ)以外で実行するとうまく動きませんね.
GLOBALを使うときに実行ディレクトリを指定する必要がありますが,Ctagのように編集中のファイルの場所から順に親ディレクトリを探し,GTAGSが見つかった場所を起点にするところを自動化して欲しいです.

あと,結果を相対パスで出力するとGTAGSのある場所からのパスで出るのでそのままではタグジャンプできなかったり.

2007/4/7 (土) 23:26:21 げんた  
INCM1.23c
[4792] RE2: GNU GLOBALフロントエンド
多少わかってきました.

1. GLOBALは必ずカレントディレクトリからGTAGを作成する
→カレント以外で作成する場合(Updateも同様)は実行前にカレントディレクトリの移動が必要
移動しているはずなのにどうもうまく動かないのは??

2. Read Openできないファイルがあると,そこでタグ生成が止まってしまう.
→Visual Studioの*.ncbファイル

3. 候補が出ないケース★問題4
→候補数==0と認識されている.
全くデータが読めていない.(ReadFileを一度も通らない)
これはループから抜けられない現象(★問題3)と関係がありました.

MsgWaitForMultipleObjectsでメッセージを受けてしまうと,そのメッセージを処理するまで永遠にメッセージが来たとの通知しか来ないみたいです.元々のコードは::BlockingHook( m_hWnd ) でメッセージを処理していたのに,そこをコメントアウトしたので先に進まなくなっていました.

どうせメッセージを処理しないのでWaitForMultipleObjectsに書き換えたら1文字目からきちんと候補が出るようになりました.
(1つなのでWaitForSingleObjectでもいいんですけど)

4. CmdExePrep() ★問題1
CreatePipeにハンドルの参照を渡している
→CmdExePrepの最初の2つはoutパラメータ
→参照かポインタにしないと,受け取れません

5. CDicMgr::HokanSearchGtags
CDicMgrが名前とは裏腹に何もmanageしていないのがそもそも問題ですが...
CDicMgr::HokanSearchGtags()を通す意味が全然無いみたい.

CDicMgr, CHokanMgr, CEditViewの役割をもう一度考え直す必要がありそうですね.

6. CheckExe
パスが通ったところに置くのはだめなの?

手直ししたもの(デバッグコード含む)を
http://sakura.qp.land.to/?Junk%2F31 に gtags_2007-04-07_assist1.zip として貼り付けました.

2007/4/9 (月) 20:02:13 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
[4793] Re3: GNU GLOBALフロントエンド
▼ げんたさん
> 1. GLOBALは必ずカレントディレクトリからGTAGを作成する
> →カレント以外で作成する場合(Updateも同様)は実行前にカレントディレクトリの移動が必要
> 移動しているはずなのにどうもうまく動かないのは??

こちらではうまくいっているように見えます。テストが足りないのかな。
コメント頂いているように、Globalダイアログのフォルダのフィールドで、globalコマンドのカレントを指定しています。
また-lオプションで、カレント以下のファイルを検索に行きます。
GTAGSを複数のフォルダに作成した場合、フォルダ階層を上へ辿り、最初に見つけたGTAGSから検索します。そこに目的の単語が入っていなくても、それ以上の階層のGATAGSは探しにいかないようです。(ctagsと違う)
+C:\
  +folder1
    -GTAGS1
    -file1.c <--カレントをfolder1にするとGTAGS1が検索される
    +folder2
      -GTAGS2
      +folder3
        -file2.c <--カレントがfolder1か3かで検索GTAGSが変わる

> 2. Read Openできないファイルがあると,そこでタグ生成が止まってしまう.
> →Visual Studioの*.ncbファイル

コレ、いい回避方法ありますかね。。

> 3. 候補が出ないケース★問題4
ありがとうございます。Hokan機能も実用レベルになって、ちょっと感動。

> 4. CmdExePrep() ★問題1
> CreatePipeにハンドルの参照を渡している

修正ありがとうございます、ショボすぎました・・

> 5. CDicMgr::HokanSearchGtags
> CDicMgr::HokanSearchGtags()を通す意味が全然無いみたい.

ひとまずHokanSearchGtags()を削除しました。

> 6. CheckExe
> パスが通ったところに置くのはだめなの?

とりあえず、いいアイデアが思いつかなくて保留です。

> 手直ししたもの(デバッグコード含む)を
> http://sakura.qp.land.to/?Junk%2F31 に...

丁寧なレビューありがとうございました!
げんたさんの修正のほかに、以下のアイテムを追加してv0.7版で同じ場所に登録しました。

v0.7 現行版 Rev.1076ベース
 1.(5) 冗長関数HokanSearchGtags()を削除
 2.globalコマンドの正規表現オプションは最後に付与すべきだった
 3.「候補が見つかりませんでした」のメッセージ追加
 4.出力結果表示にパーティションを追加
残問題:
 1.(1) カレント移動しているのにGTAGSがうまく作られない
 2.(2) ReadOpenできないファイルがあると、そこでタグ生成が止まってしまう
 3.(6) CheckExeでパスが通ったところに置く場合をケアしていない
 4.検索結果のハイライト

2007/5/4 (金) 01:55:13 maru  
INCM1.23a
[4798] Re4: GNU GLOBALフロントエンド
>> 6. CheckExe
>> パスが通ったところに置くのはだめなの?

>とりあえず、いいアイデアが思いつかなくて保留です。


CreateProcessの第2引数で実行ファイルを指定したときは、親プロセスのディレクトリ・カレントディレクトリ・環境変数パスなどなどを順に実行ファイルを探してくれると思うので、同じロジックを通すために実際に実行して有無を確認するのはだめなのですか。
サンプルでは'--help'を付加して実行していますが、'--version'のほうが良いかも。

fonさんのv081からの差分を作成するのが面倒だったのでsvn1080のパッチですが、junk/31に添付しました。
サンプルパッチ:GnuGlobal20070504_v082.zip
※ctagsのタグファイル作成部分など、関連部分に若干手を入れる必要があるようです。

>> 3. 候補が出ないケース★問題4
>ありがとうございます。Hokan機能も実用レベルになって、ちょっと感動。

実際に使ってみると結構良いです。ついでに>>web:276のキーワードヘルプと同時に使うと選択中の候補に合わせてDoxygenコメントがポップアップされて便利でした。このDoxygenキーワードヘルプをもう少し手軽に更新できないかなぁ。

2007/5/9 (水) 20:18:21 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
[4807] Re5: GNU GLOBALフロントエンド
▼ maruさん
> fonさんのv081からの差分を作成するのが面倒だったのでsvn1080のパッチですが、junk/31に添付しました。
> サンプルパッチ:GnuGlobal20070504_v082.zip

いろいろ手を入れていただいてありがとうございます!

> >Hokan機能も実用レベルになって、ちょっと感動。
> ついでに>>web:276のキーワードヘルプと同時に使うと選択中の候補に合わせてDoxygenコメントがポップアップされて便利でした。このDoxygenキーワードヘルプをもう少し手軽に更新できないかなぁ。

キーワードヘルプ自動生成スクリプトはカッコいいですね〜
確かにもう少し敷居が下がるといいですね〜。けど皆目見当つかず・・

自分の場合は、コンパイラのオプションと正規表現を駆使して、コメントなどを抽出しています。
gccだと、ヘッダファイルは↓のオプションから。
 -E -P     :型・マクロ定義の出力(マクロ展開が見れて便利)
 -E -dM    :define値定義の出力(実際の値が分かって便利)
Cソースは全部を1ファイルに纏めちゃってから、(^[\t].*)→(blank)あたりから頑張って法則見つけて作ったり(もっといい方法がありそうですね)。
って、全然スレッド違いですけど。

2007/4/16 (月) 20:47:45 fon  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
[4794] Re:GNU GLOBALフロントエンド
Globalダイレクトタグジャンプ機能を追加しました。
CTAGSダイレクトタグジャンプ(F12キー)のように、直接ジャンプできます。

当初、Ctags,Gtagsを統合したダイレクトタグジャンプを作りましたが(#if 0コメント部)、同じ名前の関数名と変数名があった場合、Gtagsでは関数定義しか検出されないため、Ctagsと分離しました。
※sakuraProjectの例:Gtags,Ctagsそれぞれで、Reset関数のタグジャンプを試してみてください。
> Junk/31
>   http://sakura.qp.land.to/?Junk%2F31

2007/5/3 (木) 00:54:53 maru  
INCM1.23a
[4797] Re2:GNU GLOBALフロントエンド
Global検索結果ウィンドウで相対パス表示のとき、ジャンプ先もそのウィンドウのカレントディレクトリからの相対パスになってしまうようです。
たとえばRev.1073とRev.1080の2セットのワーキングコピーを持っていて1073側の編集ファイルから1080側の検索した結果ウィンドウがあったとすると、検索結果は確かに1080のものですがジャンプ先は相対位置の1073配下になってしまうなど。
従来のGrep結果ウィンドウ(出力形式がファイル毎のとき)と表示は似ていますが、ジャンプの挙動が異なるので、違和感を感じます。
こういう細かい調整は、もう少しあとの段階かもしれませんが、忘れないうちに報告だけ。

あと、対象ファイル名にホワイトスペースを含む場合、GTAGファイル作成時に怒られますね。

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.010]