◀ANSI版開発トップへ
  • 4298 キーワードヘルプ拡張
    • 4312 Re:キーワードヘルプ拡張
      • 4319 Re2:キーワードヘルプ拡張
        • 4320 Re3:キーワードヘルプ拡張
          • 4321 Re4:キーワードヘルプ拡張
        • 4322 Re3:キーワードヘルプ拡張
          • 4323 Re4:キーワードヘルプ拡張
            • 4324 Re5:キーワードヘルプ拡張
              • 4327 Re6:キーワードヘルプ拡張
                • 4328 Re7:キーワードヘルプ拡張
                  • 4329 Re8:キーワードヘルプ拡張
                • 4353 Re7:キーワードヘルプ拡張
                  • 4373 Re8:キーワードヘルプ拡張
                    • 4374 Re9:キーワードヘルプ拡張
                      • 4386 Re10:キーワードヘルプ拡張
                        • 4389 Re11:キーワードヘルプ拡張
                          • 4392 ソースコード [Re12:キーワードヘルプ拡張]
                    • 4391 Re9:キーワードヘルプ拡張
                    • 4393 Re9:キーワードヘルプ拡張
  • [4298] キーワードヘルプ拡張 fon 2006年03月13日 22:49

    ■1.5.9.90beta版 「マウスオーバでキーワードヘルプ」表示パッチ
     ブリーフケース/Developer/Source
     →sdiff_2006-02-19_KeyWordHelpExt.zip
      入れ込みキーワード:2006.03.12 fon

    ■機能紹介
    ・FireDictionary風のツールチップ表示方法に拡張。
     サクラ標準のキーワードヘルプ機能に、マウスオーバで単語抽出して
     キーワード検索する機能を追加。
     ・[メニュー]->[設定]->[共通設定]->[支援]に
      「マウスオーバで検索」のチェックボタンを追加。
     ・[メニュー]->[設定]->[共通設定]->[キー割り当て]の種別[支援]に
      「マウスオーバでキーワードヘルプ」を追加。

    ■判っている不具合:
    1.マウスカーソルが貼り付き状態になる。
    2.行の認識がずれている?ためか、違う訳を出すことがある。
    3.カーソルを移動させた後、再度クリックしないと反応しなくなる。
    4.辞書が大きいのか、実装が悪いのか、若干もっさりする。

    ■作成にあたり
    サクラのキーワードヘルプを使ったことがなかったのですが、使ってみ
    ると非常に便利でしたので、どうせならマウスオーバでも反応すれば
    もっと便利かと思い、作成を試みました。
    結果は上記不具合があって、うまくいっていません。
    完全でない状態でのupで恐縮ですが、このような機能をサクラに追加
    していただけないでしょうか?
    • [4312] Re:キーワードヘルプ拡張 fon 2006年03月19日 23:37

      どうも賛同が得られないっぽいですので、再度見直しで・・

      ■1.5.9.91beta版 「カーソル位置の単語を辞書検索」パッチ
       ブリーフケース/Developer/Source
       →sdiff_2006-03-17_CaretWordSearch.zip
        入れ込みキーワード:2006.03.19 fon

      ■機能紹介
      ・キーワードヘルプをFireDictionary風のツールチップ表示方法に拡張。
       サクラのキーワードヘルプ機能で、範囲選択しなくてもカーソル位置の
       単語をキーワード検索するように拡張。
       ・[メニュー]->[設定]->[共通設定]->[支援]に
        「カーソル位置の単語を辞書検索」のチェックボタンを追加。
       ・[メニュー]->[設定]->[共通設定]->[キー割り当て]の種別[支援]に
        「カーソル位置の単語を辞書検索」を追加。
      ・範囲選択した語句がキーワード辞書にあった場合、キーワード辞書に
       タグジャンプする機能を右クリックに追加。
       ・(範囲選択が辞書ヒット)...[右クリック]->[キーワード辞書を開く]

      ■「マウスオーバでキーワードヘルプ」との違い
      1.5.9.90beta版 「マウスオーバでキーワードヘルプ」表示パッチとの差分
      (sdiff_2006-02-19_KeyWordHelpExt.zip)
       1.マウスオーバでの単語検索を、キャレット位置の単語検索に変更
       2.マウスカーソルの張り付き解消
       3.行認識異常の修正
       4.その他パッチ入れ込みミス修正
      • [4319] Re2:キーワードヘルプ拡張 fon 2006年03月21日 00:20

        何か一人でやってますが・・
        2箇所バグってましたので、その修正版をupしました。
        メインへの組み込みの方、是非ご検討お願いします!

        ■1.5.9.91beta版 「カーソル位置の単語を辞書検索」パッチ
         ブリーフケース/Developer/Source
         →sdiff_2006-03-17_CaretWordSearch_v2.zip
          入れ込みキーワード:2006.03.19 fon

        ■履歴
        2006/03/20
        「CaretWordSearch」→「CaretWordSearch_v2」の差分
        1.行内の文字列にタブ(\t)が入っていると検出位置がずれるのを修正
        2.右クリックメニューのキーワード説明コピーと「辞書を開く」の
         動作が同じになっていたのを修正
        3.サクラ再起動でDialog中の「カーソル位置の単語を辞書検索」チェック
         が外れるが、実使用上問題なしで、逃げ
        • [4320] Re3:キーワードヘルプ拡張 げんた 2006年03月21日 12:56

          >何か一人でやってますが・・
          いやいや,つまらないから無視している訳じゃなくて...
          見たいんですがSubversionの方でちょっとしばらく手一杯なので.
          (こちらが出来ないとだれもソースを変更できないですから)
          • [4321] Re4:キーワードヘルプ拡張 fon 2006年03月21日 13:13

            > Subversionの方でちょっとしばらく手一杯なので.
            ぐへ。し、失礼しました、一人で突っ走っていたようです・・
            タブ一覧の方もソース見直し中です。
        • [4322] Re3:キーワードヘルプ拡張 ryoji 2006年03月21日 17:00

          > 3.サクラ再起動でDialog中の「カーソル位置の単語を辞書検索」チェック
          >  が外れるが、実使用上問題なしで、逃げ
          CShareData::ShareData_IO_Common() での IOProfileData() とか、
          CShareData::Init()でのデフォルト値設定が抜けてるみたいな。
          • [4323] Re4:キーワードヘルプ拡張 げんた 2006年03月22日 00:09

            >CShareData::ShareData_IO_Common() での IOProfileData() とか、
            >CShareData::Init()でのデフォルト値設定が抜けてるみたいな。
            CShareData.hの構造体を変更した場合は必ずCShareData.cppの
            const unsigned int uShareDataVersion = 64;
            の値を変更(+1)してください.

            --- 以下辛口批評

            CMemoryは文字列を保持するクラスなので,文字列処理とは関係のないメンバーを入れないで欲しい
            今回の場合は行番号を返すための引数を1つ追加すればOKでは?

            case F_CLICK_KEY_SEARCH:
            Command_ClickKeySearch();
            検索をするわけではなくて設定を変えるだけなので
            ToggleKeySearch()とかいう名前の方がよいのではないか.
            それと,「カーソル位置の単語を辞書検索」という機能名も実体を表していない.
            特定のキーを押すとその場でPopupする印象を受ける.
            (ところで元々のキーワードヘルプ機能の動作がどういう物でしたっけ?)

            また,設定変更で共通設定を書き換えているが,これだと設定が全てのウィンドウへ行き渡る反面,最後の設定が保存されて次回起動時に残ってしまう.必ず起動時はONとかOFFとかいうことが出来なくなる.
            (以前挿入/上書き設定を同様に保存していたら,気付かずに上書きモードにしたまま戻せなくなる人が出た)

            CEditView::OnTimer()で
            cmemCurText.SetData()では長さを指定しているので終端の\0は不要.よってpszBufも不要.

            あと,辞書が十万行もあるのに単純サーチで大丈夫なんでしょうか.
            FireDictonaryにInspireされただけで別に英単語という訳ではないのかな?
            • [4324] Re5:キーワードヘルプ拡張 ryoji 2006年03月22日 01:49

              げんたさんほど中身読んでないので、機能面だけコメント追加します。
              > それと,「カーソル位置の単語を辞書検索」という機能名も実体を表していない.
              > 特定のキーを押すとその場でPopupする印象を受ける.
              > (ところで元々のキーワードヘルプ機能の動作がどういう物でしたっけ?)
              当初目論みの、マウスオーバー位置のキーワードをヘルプ表示するほうが魅力的な気がしますね。
              現在のは、従来機能と比べて選択するかどうかの違いだけですし。
              ずっと同じ内容のヘルプがマウスカーソルに追従されてもかえって邪魔だったりとか。
              • [4327] Re6:キーワードヘルプ拡張 fon 2006年03月23日 00:21

                ■1.5.9.91beta版 「キャレット位置の単語を辞書検索」パッチ3
                 ブリーフケース/Developer/Source
                 →sdiff_2006-03-17_CaretWordSearch_v3.zip

                >CMemoryは文字列を保持するクラスなので,文字列処理とは関係のないメンバーを入れないで欲しい
                メンバ変数とGet/Set I/Fを削除し、CDicMgr::Searchにint*の引数を追加。影響箇所も追加修正。

                >case F_CLICK_KEY_SEARCH:、Command_ClickKeySearch();
                >設定を変えるだけなので、ToggleKeySearch()とかいう名前の方がよいのではないか.
                まんまイタダキました。

                >「カーソル位置の単語を辞書検索」という機能名も実体を表していない.
                正確性を期すために「キャレット位置の単語を辞書検索」にしてみました。もっと良い名前あります?

                >特定のキーを押すとその場でPopupする印象を受ける.
                >(ところで元々のキーワードヘルプ機能の動作がどういう物でしたっけ?)
                文字列を範囲選択すると、逐次キーワード辞書検索し、ヒットしたらToolTipで表示します。

                >設定変更で共通設定を書き換えているが,最後の設定が保存されて次回起動時に残ってしまう.
                >(以前挿入/上書き設定を同様に保存していたら,気付かずに上書きモードにしたまま戻せなくなる人が出た)
                ryojiさん、げんたさんの情報を元に修正を行い、初期値が消えなくなりました。
                その上で、上記問題を加味して修正をコメントアウトしました。

                >CEditView::OnTimer()でcmemCurText.SetData()では長さを指定しているので終端の\0は不要.よってpszBufも不要.
                CMemory::SetData内のEmpty()の後、なぜかバッファが解放されてしまうため、現行コードを維持。
                同じコードが、CEditView::CreatePopUpMenu_Rにもありましたが、現状維持で。

                >あと,辞書が十万行もあるのに単純サーチで大丈夫なんでしょうか.
                >FireDictonaryにInspireされただけで別に英単語という訳ではないのかな?
                GENE95で試したところ、500MHz程度のPCでも実時間(1秒以内)には返事が来ています。
                ただ、次の理由でやっぱり見直しが必要と考えています。(ちなみにマウスオーバだと、コピペなど他の操作もモッサリ重くなってしまいました。バグもあったんで、再度見直してみます>ryojiさん)
                経緯:
                キーワードヘルプを知る→FireDictionary風にしたら便利だった→ソースコードに転用してみると更に便利(車輪の再発明?)
                →CVSで共有したところ格段に便利(ナレッジ・データベース風)→辞書が煩雑に、巨大化する一方。
                #現在タイプ別に辞書を設定できますが、ほんとにやりたいのはprojectやテーマごとだと思いますので、複数の辞書を随時切り替えできるI/Fが必要と考えました。
                イメージ:plusImage.bat をパッチし、設定->タイプ別設定->辞書ファイルタブ をご覧ください(面倒で済みません)
                正規表現キーワードのパクリですが、辞書ON/OFF、検索優先順位、FilePath、説明、などの設定をテキスト保存して使うイメージです。
                一人で実装し切れる自信がありませんので、まずはってことで今回のパッチで賛同が得られたら、実現に近づくかなと思った次第です。
                長々済みません、ryojiさん、げんたさん、コメントありがとうございます!(今後もお願いします
                • [4328] Re7:キーワードヘルプ拡張 げんた 2006年03月23日 01:33

                  >>「カーソル位置の単語を辞書検索」という機能名も実体を表していない.
                  >正確性を期すために「キャレット位置の単語を辞書検索」にしてみました。もっと良い名前あります?
                  これって...検索する機能じゃなくてクリック検索の有効・無効を切り替える機能ですよね?
                  今の名前だと実行したときにキャレットがある位置で検索実行と読めますが,勘違いしてます?

                  >>CEditView::OnTimer()でcmemCurText.SetData()では長さを指定しているので終端の\0は不要.よってpszBufも不要.
                  >CMemory::SetData内のEmpty()の後、なぜかバッファが解放されてしまうため、現行コードを維持。
                  >同じコードが、CEditView::CreatePopUpMenu_Rにもありましたが、現状維持で。
                  ん.これは私の勘違いですか.すいません.机上レビューしただけでデバッガで動かしていないので...すいません.
                  • [4329] Re8:キーワードヘルプ拡張 fon 2006年03月23日 22:57

                    おかしい箇所を修正し、v4として差し替えup致しました。

                    > >>「カーソル位置の単語を辞書検索」という機能名も実体を表していない.
                    > >正確性を期すために「キャレット位置の単語を辞書検索」にしてみました。もっと良い名前あります?
                    > これって...検索する機能じゃなくてクリック検索の有効・無効を切り替える機能ですよね?
                    > 今の名前だと実行したときにキャレットがある位置で検索実行と読めますが,勘違いしてます?
                    おっしゃる通りです。DialogのCheckBoxの方の名前に固執していました。
                    キー割り当ての名前を「キャレット位置辞書検索機能ON/OFF」としました。(文字数ギリ)

                    > 机上レビューしただけでデバッガで動かしていないので...
                    いえ、有難いことです。こちらも既存コード部ということで油断していました。

                    ■1.5.9.91beta版 「カーソル位置の単語を辞書検索」パッチ
                     ブリーフケース/Developer/Source
                     →sdiff_2006-03-17_CaretWordSearch_v4.zip
                      入れ込みキーワード:2006.03.19 fon
                • [4353] Re7:キーワードヘルプ拡張 fon 2006年03月30日 23:20

                  > 正規表現キーワードのパクリですが、辞書ON/OFF、検索優先順位、
                  > FilePath、説明、などの設定をテキスト保存して使うイメージです。
                  の機能を実装しました。
                  ■1.5.9.91beta版 「キーワードヘルプ拡張」パッチ
                   ブリーフケース/Developer/Source
                   →sdiff_2006-03-17_KeyDictSelect.zip
                    入れ込みキーワード:
                     2006.03.24 fon --Caret位置単語のKeywordHelp機能, 辞書を開く
                     2006.03.30 fon --KeywordHelpの複数辞書選択Dialog
                  ■新機能紹介
                  ・タイプ別設定に複数のキーワード辞書選択を行う辞書ファイルタブを追加。
                   ・[メニュー]->[設定]->[タイプ別設定]->[辞書ファイル]タブを追加し、
                    複数の辞書の登録・入れ替え等に対応。
                  ※上記に加え、CaretWordSearch_v4までの機能も盛り込み。
                   (上記機能による修正があるためマージしています。)

                  ■作成にあたり
                  キーワードヘルプの複数辞書化が出来るとProjectやテーマごとのキーワードを
                  容易に扱えるようになり便利だろう、ということで実装しました。
                  期待した動作になっているつもりですが、どうでしょうか?
                  (現状、オリジナルのキーワードヘルプ機能も、優先度低のORで使えます)

                  後はやっぱりげんたさんご指摘のように、パフォーマンスの問題が気になります。
                  アルゴリズム等に絡んで大幅な改修、ということになると恐らく手が出ませんが、
                  いいアイデアがあれば、併せてお願いします。
                  #そのまま修正版を出して頂けたら、さらに嬉しいです!
                  • [4373] Re8:キーワードヘルプ拡張 fon 2006年04月05日 00:41

                    ■1.5.9.91beta版 「キーワードヘルプ拡張」パッチ
                     ブリーフケース/Developer/Source
                     →sdiff_2006-03-17_KeyDictSelect_v3.zip

                    ■v1からの差分
                    1.インポート/エクスポート処理の追加
                      Import_KeyDict、Export_KeyDict
                    2.「辞書ファイルの概要」の長さを50に減らした
                      DICT_ABOUT_LEN=50
                    3.「辞書ファイルの概要」の文字列が折り返した際、
                     2行目が中途半端に見えてしまうのを修正
                      IDC_LABEL_KEYDICT_ABOUTの文字の高さを10→8に。
                    4.「更新」ボタン押下した際に、辞書1行目の内容が更新されないのを修正
                    5.検索・表示オプションとして、「ヒットした次の辞書も検索」を追加
                      通常ヒットしたら検索終了となるが、全部の辞書を一通りナメて全て表示する。
                      ※ただし、同一辞書内の重複は、最初の1件だけ表示
                    6.表示オプションとして、「キーワードも表示」を追加
                      キャレット位置の単語検索の場合などで、どの単語の意味を表示しているのか明示するため。
                    7.検索オプションとして、「選択範囲で前方一致検索」を追加
                      例)unbelievableが辞書になくても、believを範囲選択したらbelieveにヒットした。

                    ■作成にあたり
                    キーワードヘルプの機能としては、大体盛り込めたと思いますので、一旦終了にします。
                    マウスオーバ機能については、やはりパフォーマンス的なところがネックになりそう
                    でしたので、断念しました。アプローチとしては、CEditView::OnMOUSEMOVEで、手カーソル
                    を真似したもので実装検討しました。

                    「選択範囲で前方一致検索」の機能は、最初の1ヒットしか表示しないため、
                    使い勝手が劇的に良くなるということもなさそうです。
                    また、パフォーマンスに影響があるかどうか、このオプションのために検索エンジン
                    のコアの_stricmpを_strnicmpに変更しています。(CDicMgr::Search内)
                    この機能は入力補完機能を併用すれば、似たような使い方ができないことも無い
                    ですので、問題があれば取りやめます。
                    一応、当初の予定の英単語検索を成就させたくて実装しました。

                    別件、ToolTipウィンドウの最大折り返し幅が画面サイズなのを、画面内に収める修正
                    をしようとしましたが、上手くいっていません。
                    やりたい事は、現状CTipWnd::ComputeWindowSizeでは、DrawTextをrc.right、
                    DT_CALCRECT指定で発行していますが、(rc.right=画面横幅-マウスnX)の指定で
                    折り返したいというものです。
                    WEBなどを参考にすると、DrawTextは2回発行して、1回目にDT_CALCRECTを
                    指定するようなのですが、元の実装のままでも、2回発行の手順にしても、戻ってくる
                    rcの値が、折り返しを考慮した値になりません。何が原因かわかりますでしょうか?

                    ■
                    掲示板を拝見していると、Subversionでの作成が望ましいようですので、
                    アカウントをいただけるようでしたら、チャレンジしてみたいと思います。
                    よろしくお願い致します。より簡単に評価して頂けるなら、望むところです。
                    • [4374] Re9:キーワードヘルプ拡張 げんた 2006年04月05日 09:48

                      >掲示板を拝見していると、Subversionでの作成が望ましいようですので、
                      >アカウントをいただけるようでしたら、チャレンジしてみたいと思います。
                      アカウントはCommitするのに必要なだけでして,ソースを取得してパッチを作成するだけであれば誰でもできます.
                      • [4386] Re10:キーワードヘルプ拡張 fon 2006年04月08日 11:21

                        > アカウントはCommitするのに必要なだけでして,ソースを取得してパッチを作成するだけであれば誰でもできます.
                        コメントありがとうございます。お時間取れましたらパッチの方のレビューもして頂けると嬉しいです!

                        1点、一般の方向けのSubversionの位置づけについて質問です。

                        Subversionでソースをダウンロードしたところ、最新版を取得する旨のメッセージが出ました。このことから、パッチを最新のスナップショットで作成した場合、一般の方がダウンロードしたバージョンと、パッチのバージョンが変わってしまいそうです。
                        SVNの使い方を覚えてしまえばそれまでの話ですが、レビューして頂く際の敷居が上がって、見てもらえなくなったりしないかと危惧しています。

                        とはいえ、これまで通りsrc.tar.gzベースで作成すると、リリース周期から言ってマージが面倒になるということも理解できます。

                        何が言いたいか怪しくなってきましたが、要するにSubversionでパッチを作った方がベター、ということで良いですよね?(良く使い込んでいない状態での質問で恐縮です)
                        パッチの作成方法はこれまでのように、
                         1.SVNでダウンロードした際のイメージ
                         2.そこからモディファイしたコード
                        の差分を、指定のdiffツールにかける、という認識です。
                        • [4389] Re11:キーワードヘルプ拡張 げんた 2006年04月08日 12:12

                          >パッチを最新のスナップショットで作成した場合、一般の方がダウンロードしたバージョンと、パッチのバージョンが変わってしまいそうです。
                          リリース最新ソースにパッチが適用出来なくなることを心配していらっしゃるのですよね.
                          正直そこまで考えていませんでした.しかしSubversionはHTTPSでアクセスできますのでWebに接続できる環境であればほとんどの人が利用できるから問題にはならないのではと思います.一般の人と言ってもパッチをダウンロードして適用して自分でコンパイルするくらいですから,バイナリを使うだけの人とちがってある程度のツール操作は受け入れてもらえるかなと.

                          >パッチの作成方法はこれまでのように、
                          > 1.SVNでダウンロードした際のイメージ
                          > 2.そこからモディファイしたコード
                          >の差分を、指定のdiffツールにかける、という認識です。
                          Subversionを使うのであれば,Subversion自身を使って差分を作成してください.普通のdiffだとリビジョン情報が入っていないためにSubversionには直接読み込めません.Subversionで作ったファイルは従来のpatchにも使えるはずですから互換性は保たれています.
                          • [4392] ソースコード [Re12:キーワードヘルプ拡張] かろと 2006年04月08日 14:54


                            >発言者: げんた
                            >しかしSubversionはHTTPSでアクセスできますのでWebに接続できる環境であればほとんどの人が利用できるから問題にはならないのではと思います.

                            そういえば、ソースをSubversionで公開しているのだから、
                            リリース時の作業の
                            「・ソースコードをExportしてtar.bz2で圧縮. 」
                            は、止めてもいいのではないでしょうか?
                    • [4391] Re9:キーワードヘルプ拡張 げんた 2006年04月08日 14:48

                      なかなか使い方がわかりませんでしたがやっと挙動がつかめてきました.
                      変換ツールでGENE95を変換して試させて頂きました.

                      [共通設定]の[支援]に追加された「キャレット位置の...」は右クリックでの検索と関連していて,
                      OFF→選択して右クリックしたときだけキーワードヘルプを表示
                      ON→選択せずに右クリックしたときもキーワードヘルプを表示

                      ツールチップは選択して,その領域城にマウスを置いてちょっと待つ.
                      ---

                      気になる点

                      右クリックメニューのヘルプはメニュー1項目分のみ表示となるため,キーワードも表示させた上で複数辞書検索にすると肝心の検索結果がはみ出して見えない.また改行が\nのままとなる.
                      ※OwnerDrawでメニューに複数行書いて対応するか(?)

                      既存のキーワードヘルプ機能を残したまま追加していてソースコードでも別のフラグにしているようだが,今までの設定項目は全部削除でいいのでは?両者の違いがわからない.
                    • [4393] Re9:キーワードヘルプ拡張 げんた 2006年04月08日 14:56

                      エディタ上から抽出した文字列に対応する文字列をツールチップorメニューに表示するという枠組みだけ考えると,別にファイルから検索する必要もないですね.サーバに問い合わせるとか,指定のURLに問い合わせるとかできるとさらに用途が広がりそうな感じもしますね.