◀ANSI版開発トップへ
  • 2671 お気に入り機能
    • 2672 RE: お気に入り機能
      • 2673 RE2: お気に入り機能
        • 2676 RE3: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
          • 2677 Re4: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
            • 2678 Re5: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
              • 2679 Re6: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
                • 2683 Re7: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
                  • 2684 Re8: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
                  • 2685 Re8: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
          • 2692 ダイレクトタグジャンプ要望
            • 2693 Re: ダイレクトタグジャンプ要望
              • 2700 Re2: ダイレクトタグジャンプ要望
              • 2701 Re2: ダイレクトタグジャンプ要望
                • 2705 Re3: ダイレクトタグジャンプ要望
    • 2737 RE: お気に入り機能
  • [2671] お気に入り機能 みく 2003年04月08日 22:01


    実装してみました。→favorite20030408.zip
    ssrc_2003-04-01 に対する差分です。
    修正量が多いのでバグが取りきれてないと思いますので、バグ出し(要望もあれば)お願いします。

    お気に入りには、最近使ったファイル・フォルダメニューにアイコンが付きます。
    お気に入りの設定は「ツール」→「お気に入りの設定」で行います。
    「最近使ったものリスト」がすべて新しいクラス経由に変わってます。
    すべて(?)の「最近使ったものリスト」の履歴削除も補助機能として付けました。

    #誰かお気に入りアイコンを作っていただけると助かります。
    • [2672] RE: お気に入り機能 みく 2003年04月09日 10:06


      →favorite20030409.zip

      差分ファイルにビットマップファイルが入ってなかった。
      リソースファイルに F_FAVORITE が追加されてなかった。
      メニューアイコンを非表示にしたとき、お気に入りかどうかわからなかった。
      • [2673] RE2: お気に入り機能 みく 2003年04月09日 17:02


        →favorite20030409a.zip

        お気に入り設定画面にフォーカスが戻ったときの警告ダイアログの出方が変だった。
        共通設定で履歴数を変更した直後に並べ替えが発生しなかった。
        その他:開き直すにアイコンがなかった。
        • [2676] RE3: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 みく 2003年04月13日 17:12


          favorite20030413.zip

          ・CDocLineMgr.cpp:FileWrite()の戻り値バグ修正
          ・CShareData.cppの初期化バグ修正
          ・CMRU.cppのソースちょこっと修正
          ・編集中ファイルのDIFF実装(Write時は共通関数を使用)
          ・ダイレクトタグジャンプの実装

          タグジャンプの機能拡張として実装しましたので、
          いままでのタグジャンプ(ファイル名、行番号形式)でタグジャンプできない
          ときに、さらにダイレクトタグジャンプをしようとします。

          タグファイルの作成にはctags.exeが必要です。
          (sakura.exeと同じフォルダに置きます。)
          私は、以下のプログラムで試しました。

          Exuberant Ctags 日本語対応版 5.4J1
          http://hp.vector.co.jp/authors/VA025040/

          まず、検索メニュー→タグファイルの作成でタグファイルを作成します。
          (カレントフォルダのみのタグファイルを作成します。)

          手動で作成するときは、
          ctags.exe --excmd=n -R *
          のように指定してください。
          (結果のタグファイルはソートされていること)

          キーワード上でタグジャンプすると、定義位置へジャンプします。
          複数のジャンプ先がある場合は、ダイアログが出ます。

          タグファイルの検索はカレントフォルダのみですが、
          プログラム内ではフォルダをさかのぼることができるようにしてますので、
          必要な人は設定部分を実装してください。
          • [2677] Re4: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 げんた 2003年04月14日 02:55

            ▼ みくさん
            > ・ダイレクトタグジャンプの実装
            おおー、感激です。欲しかったんですよこれ。
            まだ見てませんが(^^;)
            • [2678] Re5: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 みく 2003年04月14日 20:40

              >タイトル: Re5: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他
              >発言者: げんた
              >▼ みくさん
              >> ・ダイレクトタグジャンプの実装
              >おおー、感激です。欲しかったんですよこれ。
              >まだ見てませんが(^^;)

              私も欲しかったものですから。。。

              一応、今回の機能拡張はこれくらいです。
              バグ報告等お待ちしております。

              質問:
              タグジャンプCEditView_Command.cpp:Command_TAGJUMP():6562行目
              (パッチ当てる前のソースの行数です)でカーソル位置を計算しています。
              他のファイルにタグジャンプしたときの計算をカレントファイルで
              やってるような気がするのですが。

              質問:
              開くダイアログの「ファイルの種類リスト」ですが、
              現在は埋め込みとなっています。これって、
              タイプ別設定から拾ってきたほうがいいと思うのですが
              どうでしょうか。
              #私は "すべて *.*" しか使わないですけど。
              • [2679] Re6: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 みく 2003年04月15日 19:17


                バグ修正→favorite20030415.zip

                ・カーソル位置が保存されなくなっていたのを修正。
                ・タグファイル作成中のメッセージと、終了ダイアログを表示するように。
                ・タグ一覧で選びそうなキーに初期カーソルを合わせるように。
                ・タグのビットマップを若干修正。→誰かきれいなアイコンをお願いします。
                ・makefileにCDlgTagJumpList.objを追加。
                ・MessageBox→MYMESSAGEBOX。
                • [2683] Re7: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 みく 2003年04月17日 12:45


                  →favorite20030417.zip

                  ・正規表現の置換で選択位置挿入を動作するように
                  ・ダイレクトタグジャンプをメニューに入れた

                  →help_src_20030417.zip
                  変更・追加のあったファイルしかありませんので、古いファイルを展開してそこに上書きしてください。

                  ・欠けていた部分を作成
                  ・今回追加になった部分を追加

                  以下は未作成です。
                  HLP000177
                  HLP000217
                  HLP000244
                  HLP000278
                  HLP000303
                  HLP000304
                  HLP000011
                  • [2684] Re8: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 すい 2003年04月18日 12:48

                    みくさん家(http://www.geocities.co.jp/SiliconValley-SanJose/3299/) に
                    バイナリ(s20030417try.zip)が出ていたので早速試して見ましたが...

                    改行の置換が正常に出来なくなっています。。

                    ・置換前:[\r\n]+
                    ・置換後:

                    の正規表現で [すべて置換(A)] すると、全ての改行が削除されるのが期待する
                    動作なのですが、あちこちに改行が残ってしまいます。
                    [すべて置換(A)] じゃなく [置換(R)] を繰り返した場合もおかしいですね。
                    しかも [すべて置換(A)] した場合と [置換(R)] を繰り返した場合とで
                    結果が異なるという。

                    ひょっとして
                    > ・正規表現の置換で選択位置挿入を動作するように
                    あたりでしょうか?
                    だとすると、どういう方法で実装したのでしょうか?まだソース見ていないんですぅ。 m(_ _)m

                    単純に置換後文字列に $& をくっつけてから DLL に渡すようにする、
                    とかじゃ駄目なのかな?(手抜き (;^^;) )

                    ・置換後:abc
                    なら
                    ・始点に挿入 → abc$&
                    ・終点に挿入 → $&abc
                    とか。
                  • [2685] Re8: お気に入り機能、ダイレクトタグジャンプ、DIFF差分他 げんた 2003年04月21日 04:10

                    業務連絡です。

                    すいませんが、みくさんの4/17の変更をリポジトリに入れてしまったので、さらに変更されることがあるのであればそこからの差分でお願いします。

                    私の変更分とマージして次のバージョンにする予定ですが、衝突部分が多いので手で少しずつマージすることにします。ですので、ちょっと時間がかかりそうです。
          • [2692] ダイレクトタグジャンプ要望 げんた 2003年04月25日 01:25

            1.3.9.0でダイレクトタグジャンプ組み込みました。
            で、早速要望です。

            ▼タグファイル作成
            * ディレクトリ以下すべてを選択するオプション
            実際のソースコードは複数ディレクトリに分かれていることが多いですからねぇ。

            * 基準ディレクトリを指定したい
            ディレクトリ以下すべてのtagsを作るときは作成場所を指定したいです。

            * コマンドラインオプションを直接指定したい
            MFCのマクロを解析対象外にするには-Iオプションを指定する必要があります。それをコマンドの中から指定できて、しかも前回のオプションを覚えてくれるといいなぁと。

            ▼タグジャンプ
            ちょっと言語依存になってしまって気持ち悪いのですが、
            A::foo, a->foo(), a.foo のように書かれているときにA/aの型情報(tagsより取得)を用いてfooの型を絞り込むことは難しいでしょうか。
            #よく考えたらaがローカル変数だとアウトですね。
            • [2693] Re: ダイレクトタグジャンプ要望 げんた 2003年04月26日 22:29

              >実際のソースコードは複数ディレクトリに分かれていることが多いですからねぇ。
              ディレクトリ以下すべてでダイレクトタグジャンプできると勘違いしていました。ですが、やはりディレクトリ全体サポートは欲しいです。

              CEditDoc::GetFilePath()で得られるパス名が絶対パス名なのであれば、パス名からディレクトリの深さを計算して、ルートに行き着くまでtagsを探すという方針でどうでしょう?
              • [2700] Re2: ダイレクトタグジャンプ要望 げんた 2003年05月01日 01:37

                >パス名からディレクトリの深さを計算して
                という関数を作ってみました。

                /*! @brief ディレクトリの深さを計算する

                与えられたパス名からディレクトリの深さを計算する.
                パスの区切りは\.ルートディレクトリが深さ0で,サブディレクトリ毎に
                深さが1ずつ上がっていく.

                @param [in] path 深さを調べたいファイル/ディレクトリのフルパス

                @date 2003.04.30 genta 新規作成
                */
                int CalcDirectoryDepth(const char* path)
                {
                int depth = 0;

                // とりあえず\の数を数える
                for( const char *p = path; *p != '\0'; ++p ){
                // 2バイト文字は区切りではない
                if( _IS_SJIS_1(*(unsigned const char*)p)){ // unsignedにcastしないと判定を誤る
                ++p;
                if( *p == '\0' )
                break;
                }
                else if( *p == '\\' ){
                ++depth;
                // フルパスには入っていないはずだが念のため
                // .\はカレントディレクトリなので,深さに関係ない.
                while( p[1] == '.' && p[2] == '\\' ){
                p += 2;
                }
                }
                }

                // 補正
                // ドライブ名はパスの深さに数えない
                if(( 'A' <= (path[0] & ~0x20)) && ((path[0] & ~0x20) <= 'Z' ) &&
                path[1] == ':' && path[2] == '\\' ){
                //フルパス
                --depth; // C:\ の \ はルートの記号なので階層深さではない
                }
                else if( path[0] == '\\' ){
                if( path[1] == '\\' ){
                // ネットワークパス
                // 先頭の2つはネットワークを表し,その次はホスト名なので
                // ディレクトリ階層とは無関係
                depth -= 3;
                }
                else {
                // ドライブ名無しのフルパス
                // 先頭の\は対象外
                --depth;
                }
                }
                return depth;
                }
              • [2701] Re2: ダイレクトタグジャンプ要望 げんた 2003年05月01日 01:39

                みくさんに質問
                CEditView::Command_TagJumpByTagsFile()の中で

                for( j = 0; j < 2; j++ )
                の2回ループは何を意図したものなんでしょう?
                ファイル名の取得もループの内側にあって意図がよくわかりません。
                • [2705] Re3: ダイレクトタグジャンプ要望 みく 2003年05月01日 10:57


                  >の2回ループは何を意図したものなんでしょう?

                  ループは1回させてないので、今となっては意味がありません。

                  ループの終わりのところのコメントアウトを見ればわかりますが、
                  tagsファイルがなかったときに自動生成させてもう一回処理させようとしていたのです。
                  でも、余計なお世話になるのでやめました。
                  きれいに消してもらっても結構です。

                  バグ:
                  同一タグが100個以上あるとき、リストに出るメッセージがカーソル位置に挿入されてしまいます。
                  (多分そんなに同一タグがあることはないと思うけど)
                  その結果、そのメッセージ以降のタグでのタグジャンプが正しくありません(一個ずれる)。
                  CDlgTagJump.cpp:210~221行の処理ブロックを203行の前に移動しないといけません。
    • [2737] RE: お気に入り機能 みく 2003年05月13日 19:05


      >すべて(?)の「最近使ったものリスト」の履歴削除も補助機能として付けました。

      お気に入りは残して履歴を削除するパターンも欲しいと思いました。