◀ANSI版開発トップへ
  • 2305 対括弧を強調表示
    • 2310 Re: 対括弧を強調表示
      • 2311 Re2: 対括弧を強調表示
        • 2313 対括弧を強調表示ver2
    • 2312 強調表示追加要望
      • 2314 RE: 強調表示追加要望
      • 2316 対括弧を強調表示ver3
        • 2317 Re: 対括弧を強調表示ver3
          • 2318 Re2: 対括弧を強調表示ver3
          • 2319 Re2: 対括弧を強調表示ver3
          • 2320 Re2: 対括弧を強調表示ver3
    • 2332 Re: 対括弧を強調表示
      • 2333 Re2: 対括弧を強調表示
        • 2335 Re3: 対括弧を強調表示
    • 2337 対括弧を強調表示ver4
      • 2338 Re: 対括弧を強調表示ver4
        • 2339 Re2: 対括弧を強調表示ver4
          • 2357 Re3: 対括弧を強調表示ver4
    • 2340 RE: 対括弧を強調表示
      • 2341 Re2: 対括弧を強調表示
        • 2342 Re3: 対括弧を強調表示
          • 2343 Re4: 対括弧を強調表示
          • 2347 Re4: 放浪の旅?
            • 2355 Re5: 括弧の前・後ろ?
              • 2375 Re6: 括弧の前・後ろ?
    • 2366 ここまでのまとめ
      • 2374 RE: ここまでのまとめ
        • 2379 RE2: ここまでのまとめ
  • [2305] 対括弧を強調表示 ai 2002年09月16日 14:01


    対括弧を強調表示(カーソルが来た時対応する括弧が強調表示される)

    一般掲示板でも時々要望にあがる(私自身も要望していました)上記の機能の実装を試みました。
    が、行き詰まりました・・・。
    現時点までの修正をeGroups/のDeveloper/SourceにUPしておきますので、
    改善箇所や「こんなの使い物にならん」(^^;「根本的に考え方が間違ってる」(^^;; 等、
    御指摘がありましたらお願い致しますm(__)m
    また、この機能を引き取って実装してくださる方がいらっしゃれば大歓迎です(^^;;;

    <修正箇所>
    (1)[タイプ別設定]-[カラー]に"対括弧の強調表示"を追加。
    (2)カーソル位置に括弧がある場合、対応する括弧を探して見つかれば強調表示を行なう。
    (3)(1)の設定にて文字色と背景色が同じ場合、反転表示を行なう。

    <問題点>
    ・強調表示した後の括弧を元に戻す際に、テキストの文字色と背景色を固定で使っている。
    (対括弧がコメント/強調キーワードの場合等に、元の色に戻らない)
    ・再描画されない。
    ・反転表示のほうは、使い物にならない状態です・・・

    ※ DrawBracketPair.zip
    ssrc_2002-09-12.tar.bz2 からの差分となっております。
    • [2310] Re: 対括弧を強調表示 げんた 2002年09月18日 09:43

      ><問題点>
      >・強調表示した後の括弧を元に戻す際に、テキストの文字色と背景色を固定で使っている。
      > (対括弧がコメント/強調キーワードの場合等に、元の色に戻らない)
      これは1行全部再描画するしか無いと思います.行頭位置がコメントや引用付内であるかという情報はあったように思います(うろ覚え)ので,行頭から描画すれば正しい色になるはず.

      括弧探し(特に前方)のパフォーマンスが低いような気がするので,括弧の前に移動するたびに検索していたらカーソルが引っかからないかなぁ(特にすいさんの486マシン)とちょっと心配.編集時に補助情報を付加することで検索速度を向上する工夫が必要かなとも思います.
      • [2311] Re2: 対括弧を強調表示 ai 2002年09月18日 12:28

        >これは1行全部再描画するしか無いと思います.行頭位置がコメントや引用付内であるかという情報はあったように思います(うろ覚え)ので,行頭から描画すれば正しい色になるはず.
        対括弧の強調表示の消去処理を下記のように修正したところ、うまく色分けされました。
        アドバイスありがとうございます。

        PAINTSTRUCT ps;
        ps.rcPaint.left = m_nViewAlignLeft;
        ps.rcPaint.right = m_nViewAlignLeft + m_nViewCx;
        ps.rcPaint.top = ( nLine - m_nViewTopLine ) * ( m_nCharHeight + m_pcEditDoc->GetDocumentAttribute().m_nL
        ineSpace ) + m_nViewAlignTop;
        ps.rcPaint.bottom = ps.rcPaint.top + m_nCharHeight + m_pcEditDoc->GetDocumentAttribute().m_nL
        ineSpace;
        OnPaint( hdc, &ps, TRUE );

        >括弧探し(特に前方)のパフォーマンスが低いような気がするので,括弧の前に移動するたびに検索していたらカーソルが引っかからないかなぁ(特にすいさんの486マシン)とちょっと心配.編集時に補助情報を付加することで検索速度を向上する工夫が必要かなとも思います.
        この辺は考慮していませんでした。
        よい改善策があればよいのですが・・・。
        • [2313] 対括弧を強調表示ver2 ai 2002年09月18日 22:09


          修正したものをeGroupsにUPしました。
          反転表示の処理は必要ないと考え削除しました。
          再描画、パフォーマンスの件は未解決です。

          ※ DrawBracketPair_v2.zip
          ssrc_2002-09-12.tar.bz2 からの差分となっております。
    • [2312] 強調表示追加要望 げんた 2002年09月18日 20:54

      うろ覚えですが,Emacsの対括弧の強調で対応する括弧が画面外にある場合には該当行をmini bufferに表示する機能があったように思います.

      これと同じように対商業が画面外の場合は括弧を含む行をステータスバーに表示するというのはどうでしょうか.

      しかし,これがなければ画面外に出た時点で検索をうち切れるけどこれをやると対応箇所が見つかるまで画面外も追いかけないといけませんね.(っと,今は画面外に出たらうち切る処理は入っていないのか)
      • [2314] RE: 強調表示追加要望 ai 2002年09月18日 22:32


        >これと同じように対商業が画面外の場合は括弧を含む行をステータスバーに表示するというのはどうでしょうか.
        試してみました。
        表示させることはできるのですが、TABが含まれるとうまくいきません。
        TABが先頭に1つあると半角空白70個(?)相当のスペースが空いてしまいます。
        下記の方法が悪いのでしょうか?

        pLine = m_pcEditDoc->m_cLayoutMgr.GetLineStr( nLine, &nLineLen );
        if( NULL != pLine )
        {
        SendStatusMessage( pLine );
        }

        >しかし,これがなければ画面外に出た時点で検索をうち切れるけどこれをやると対応箇所が見つかるまで画面外も追いかけないといけませんね.(っと,今は画面外に出たらうち切る処理は入っていないのか)
        入っていません(^^;
        入れたほうがいいですかね?
        私の力で出来るか分かりませんが・・・

        ※ 申し訳ありませんが、先ほどのDrawBracketPair_v2.zipは修正漏れがありましたので無視してください。
      • [2316] 対括弧を強調表示ver3 ai 2002年09月20日 08:54


        >しかし,これがなければ画面外に出た時点で検索をうち切れるけどこれをやると対応箇所が見つかるまで画面外も追いかけないといけませんね.(っと,今は画面外に出たらうち切る処理は入っていないのか)
        画面外に出た場合に検索をうち切る処理を入れたものをeGroupsにUPしました。

        ※ DrawBracketPair_v3.zip
        ssrc_2002-09-18.tar.bz2 からの差分となっております。
        • [2317] Re: 対括弧を強調表示ver3 げんた 2002年09月20日 13:25

          試してみました.感動度高いですね.全角の対応も(有効性は別にして)おもしろい.
          次回のリリースに入れたくなりました.

          処理時間を考えると画面外でうち切る方が対応行をステータスバーに出すよりもいいように思います.ファイルサイズに関係なく処理時間の上限値が抑えられますし,それに{だけで1行使う人は対応する行が見えても何もわかりませんしね.
          • [2318] Re2: 対括弧を強調表示ver3 もか 2002年09月20日 16:20

            >処理時間を考えると画面外でうち切る方が対応行をステータスバーに出すよりもいいように思います.ファイルサイズに関係なく処理時間の上限値が抑えられますし,それに{だけで1行使う人は対応する行が見えても何もわかりませんしね.

            画面外に出たら処理を打ち切るに賛成です。
            画面に映っていないときに確認したい場合は対カッコ検索を使うということで。
          • [2319] Re2: 対括弧を強調表示ver3 ai 2002年09月21日 13:57

            >試してみました.感動度高いですね.全角の対応も(有効性は別にして)おもしろい.
            >次回のリリースに入れたくなりました.

            恐縮です(^-^;

            >処理時間を考えると画面外でうち切る方が対応行をステータスバーに出すよりもいいように思います.ファイルサイズに関係なく処理時間の上限値が抑えられますし,それに{だけで1行使う人は対応する行が見えても何もわかりませんしね.

            そうですね。自分では"画面外でうち切る"って思いつきませんでしたので、追加要望がとても参考になりましたです。
          • [2320] Re2: 対括弧を強調表示ver3 かろと 2002年09月21日 19:13

            ▼ げんたさん
            > 試してみました.感動度高いですね.全角の対応も(有効性は別にして)おもしろい.
            > 次回のリリースに入れたくなりました.

            対括弧強調表示(1.3.4.0)使ってみました。
            いい感じです。

            ただ、私が見たのが SmartIndent_CPP() だったので、
            最初の switch文の { の対括弧が case '}': に
            なってしまうのが、非常に残念でした。

            検索時に、
            '' の中、"" の中
            は検索対象から外したい気がしました。

            できれば、コメント内も・・(笑)


    • [2332] Re: 対括弧を強調表示 げんた 2002年09月24日 09:00

      1.3.4.0からできるようになった対括弧表示ですが1つだけ物足りないことがあります.
      それは括弧を入力したときに入力した括弧の相手を強調してくれないことです.特に閉じ括弧の方.

      つまり,入力された文字が括弧の時はカーソル位置の直前を強調表示して欲しいのです.
      ただ,MoveCursor()で強調処理を読んでいるので直前と直後のどっちを強調すべきかはわからないですよね.MoveCursorにパラメータ追加するのはやな感じだし.
      • [2333] Re2: 対括弧を強調表示 ai 2002年09月24日 12:57


        手元では対応してみました。
        MoveCursor()のパラメータは変更せずに、SearchBracket~のパラメータのmodeの使い方を変更しました。
        一応御要望通りの動作になっていると思います。
        もう少し確認などありますので差分のアップロードは少し先になります。
        • [2335] Re3: 対括弧を強調表示 あろか 2002年09月25日 00:18

          強調表示とても便利ですね。
          aiさん ありがとうございます。

          調子に乗って要望します。
          相手が範囲外になったとき、カーソルのある括弧自身だけは強調表示するというのはいかがでしょう
    • [2337] 対括弧を強調表示ver4 ai 2002年09月25日 12:46


      げんたさんの
      >入力された文字が括弧の時はカーソル位置の直前を強調表示して欲しいのです.
      と、あろかさんの
      >相手が範囲外になったとき、カーソルのある括弧自身だけは強調表示するというのはいかがでしょう
      に対応してみました。

      かろとさんの
      >検索時に、
      >'' の中、"" の中
      >は検索対象から外したい気がしました。
      >できれば、コメント内も・・(笑)
      は、私にはちょっと無理そうです。
      できればよかったのですが・・・。すみません。

      DrawBracketPair_v4.zip
      ssrc_2002-09-21.tar.bz2 からの差分となっております。
      • [2338] Re: 対括弧を強調表示ver4 げんた 2002年09月26日 02:03

        ちょっと試してみました.がなんか違うような気がする...
        >>入力された文字が括弧の時はカーソル位置の直前を強調表示
        なんですが,前が括弧でないときは後ろを調べるようになっています.

        でも,括弧の直前でもう1つ括弧を入力したときに入力した方の括弧を強調して欲しいのよぉ.( ( 入力→)|) となっているときに,外側じゃなくて内側を強調して欲しいってことなんです.贅沢?

        >>相手が範囲外になったとき、カーソルのある括弧自身だけは強調表示
        もいまいちだと思いました.というのは強調表示される=相手がある という前提が崩れてしまうからです.

        画面外まで追っていって相手があったら強調ならわかりますけど,相手のない括弧を強調して欲しくないです.
        • [2339] Re2: 対括弧を強調表示ver4 ai 2002年09月26日 12:04


          >( ( 入力→)|) となっているときに,外側じゃなくて内側を強調して欲しいってことなんです.贅沢?
          あぁなるほど。()だけの入力時はOKでも、上記の場合はだめですね。
          う~ん・・・どうしたらよいでしょうか?

          >>>相手が範囲外になったとき、カーソルのある括弧自身だけは強調表示
          これも早まったみたいです(^_^;
          今試したところ対応する括弧がなくても、括弧はすべて強調表示されてしまいますね。
          "対応する括弧があって、対応する括弧が画面外の場合にカーソル位置の括弧を強調表示"
          これを実現するには結局、表示領域外を調べなければならないので、無理そうですね。

          ということで、前回のままのほうが良さそうな感じがします。
          • [2357] Re3: 対括弧を強調表示ver4 あろか 2002年09月29日 15:30

            ▼ aiさん
            > >>>相手が範囲外になったとき、カーソルのある括弧自身だけは強調表示
            > これも早まったみたいです(^_^;
            > 今試したところ対応する括弧がなくても、括弧はすべて強調表示されてしまいますね。
            > "対応する括弧があって、対応する括弧が画面外の場合にカーソル位置の括弧を強調表示"
            > これを実現するには結局、表示領域外を調べなければならないので、無理そうですね。
            >
            > ということで、前回のままのほうが良さそうな感じがします。
            すみません。画面外は検索打ち切りってのをちゃんと読んでいませんでした。ということで先の要望はなかったことにしてください。

            一つ不具合をみつけました。
            対になる括弧が画面外にある状態で対カッコ検索(C-})でジャンプしたとき、カーソル位置(ジャンプ先)の括弧は強調表示されず、もう一方(ジャンプ元)だけが強調されます。
    • [2340] RE: 対括弧を強調表示 すい 2002年09月26日 21:02

      ども、です。

      対括弧強調表示ですが「対括弧の検索」の対象の括弧を強調表示するようにはできないでしょうか?
      「右に括弧が無く左に括弧がある」時、対括弧検索は左の括弧に対してちゃんと動作してくれるのに、
      強調表示は括弧がカーソルの右に無いと駄目というのが使っていてもどかしいのです。

      げんたさん からの要望「入力した文字が閉じ括弧ならそちらを強調...」というのも、
      もし、それを実装するなら対括弧検索と一緒に仕様を揃えて実施するようにした方がよいのではないでしょうか。
      でないと「強調表示されている括弧はこっちの括弧だから、そこへ飛んで行くと思って対括弧検索したら、
      あらぬ所へ飛んで行った」とか使っていて混乱が起きそうな気が。
      # それ以前に現時点では げんたさん の要望を取り入れるのが難しそうな気配ですが。。。(^^;


      あと、括弧が強調表示されている状態でファイル保存(上書き保存とか)すると強調が
      解除されてしまうのでずか...こちらはどうにかなりませんか?


      もう一つ追加で、デフォルトの色設定、始めから対括弧検索は on にしておくというのはどうでしょう?
      せっかく機能付いたのですし、、却下?鬱陶しいとかいう方がいらっしゃるでしょうか?
      # DIFF差分表示も、分かり易い色設定にして始めから on にしてあっても良いんじゃないかと思ったのですが。


      ps.
      上の方で げんたさん が心配してくださっていた
      > カーソルが引っかからないかなぁ(特にすいさんの486マシン)とちょっと心配.
      の 486 ですが、実家(リース屋)に帰っていきました。今頃はおそらくジャンク...
      手元には早いのしか残ってませんよ~ Pen. 90MHz とか 100MHz とか(をぃ)
      ですので特に。。(笑) あ、そういう問題じゃないって?(笑) (^^ゞ
      • [2341] Re2: 対括弧を強調表示 げんた 2002年09月26日 23:24

        ▼ すいさん
        > 「入力した文字が閉じ括弧ならそちらを強調...」というのも、
        > もし、それを実装するなら対括弧検索と一緒に仕様を揃えて実施するようにした方がよいのではないでしょうか。
        う~む。なんか難しい話になってきました。
        対括弧の検索は直後の括弧(なければ直前の括弧)の対応を捜すが,括弧が入力された直後に限っては直前の括弧を優先して扱う,と。
        言葉で書くと複雑ですが,使った感じは自然なのかなぁ。

        > 括弧が強調表示されている状態でファイル保存(上書き保存とか)すると強調が> 解除されてしまう
        厳しいですねぇ。私はべつにいいじゃんって思いましたが。

        > もう一つ追加で、デフォルトの色設定
        C++, Java, Perlあたりは既にデフォルト設定を行ってあります。
        • [2342] Re3: 対括弧を強調表示 かろと 2002年09月26日 23:56

          ▼ げんたさん
          > ▼ すいさん
          > > 「入力した文字が閉じ括弧ならそちらを強調...」というのも、
          > > もし、それを実装するなら対括弧検索と一緒に仕様を揃えて実施するようにした方がよいのではないでしょうか。
          > う~む。なんか難しい話になってきました。
          > 対括弧の検索は直後の括弧(なければ直前の括弧)の対応を捜すが,括弧が入力された直後に限っては直前の括弧を優先して扱う,と。
          > 言葉で書くと複雑ですが,使った感じは自然なのかなぁ。

          そうですね~。
          強調表示の括弧と対括弧検索の括弧が異なるのは、かなり嫌ですね。

          かといって、あんまりややこしいのも面倒ですし、
          強調表示も、対括弧検索も
          直前の括弧(なければ直後の括弧)としちゃうってのはどないでしょ?

          • [2343] Re4: 対括弧を強調表示 やざき 2002年09月27日 00:15


            >かといって、あんまりややこしいのも面倒ですし、
            >強調表示も、対括弧検索も
            >直前の括弧(なければ直後の括弧)としちゃうってのはどないでしょ?

            賛成です。カーソルひとつ動かすだけだし。
          • [2347] Re4: 放浪の旅? すい 2002年09月28日 12:29

            私は「“対括弧の強調表示”と“対括弧の検索”の対象がピッタリ一致してくれればいいな~」
            と思っているだけで、私個人的にはカーソルの前後どちらを優先してもおうが、
            げんたさん要望の動作が入ろうが入るまいが、どちらでも構わないのですが...
            一点↓。

            >直前の括弧(なければ直後の括弧)としちゃうってのはどないでしょ?
            ↑これって今の仕様と逆ですよね。(今、対括弧検索はカーソル直後の括弧、無ければ直前の括弧)

            もし直前の括弧優先に変更するなら対括弧検索の動作まで変えないとならない事に注意!です。

            もし対括弧検索の動作を変えず、“直前の括弧を優先”に変更した場合、次のような不具合が。

            例:カーソル位置を | とします。
            1. |((abc)(def)) ←この状態で対括弧検索実行
            2. ((abc)(def)|) ←この時点で直前の括弧が対象になると...対括弧検索を実行
            3. ((abc)|(def)) ←別の括弧へ飛んで行ってしまう。さらに対括弧検索を実行すると
            4. (|(abc)(def)) ←また別の括弧へ飛んで行ってしまう。ここで対象括弧は最初の括弧に戻ってはいるが。。

            このように対括弧検索を連続実行するだけでカーソルが次々と放浪の旅に出かけてしまいます。
            # 「カーソル放浪の旅」が望みの動作って事はないですよね?さすがに :-D

            この問題を解決するには「対括弧検索を実行すると、対象括弧の後ろにカーソルが飛んで行く」
            というように動作を変更しなくてはならないことになります。
            で、その動作(カーソルが括弧の後ろへ飛ぶ)が使っていて普通なのでしょうか?


            >>> もう一つ追加で、デフォルトの色設定
            >>C++, Java, Perlあたりは既にデフォルト設定を行ってあります。
            それは気付きませんでした。(;^^ゞ
            でも他のタイプも、、、HTML なんか < > の嵐ですし。全タイプ on でも良いんじゃないかっていう気が。
            • [2355] Re5: 括弧の前・後ろ? かろと 2002年09月29日 08:11

              ▼ すいさん
              > 私は「“対括弧の強調表示”と“対括弧の検索”の対象がピッタリ一致してくれればいいな~」
              > と思っているだけで、私個人的にはカーソルの前後どちらを優先してもおうが、
              > げんたさん要望の動作が入ろうが入るまいが、どちらでも構わないのですが...
              > 一点↓。

              私は、げんたさん要望の動作も希望です。

              > このように対括弧検索を連続実行するだけでカーソルが次々と放浪の旅に出かけてしまいます。
              > # 「カーソル放浪の旅」が望みの動作って事はないですよね?さすがに :-D

              もちろん、変更するなら一緒に変えないと 放浪癖は・・・

              > で、その動作(カーソルが括弧の後ろへ飛ぶ)が使っていて普通なのでしょうか?

              予想通りの反対意見ありがとうございます。

              飛び先は括弧の前か後ろか?なら、どっちでも気にならない。と思いますが、
              たぶん普通のエディタとは動作が異なるでしょうね。(笑)

              普通に見えるのは、カーソル(キャレット)が括弧の文字の上に飛ぶ。なのでしょう。
              さくらの場合、文字の上にあたるのが、弧の前です。(笑)

              そのへん変わると気持ち悪いとなると、げんたさんの
              >> 対括弧の検索は直後の括弧(なければ直前の括弧)の対応を捜すが,括弧が入力された直後に限っては直前の括弧を優先して扱う,と。
              かな・・

              • [2375] Re6: 括弧の前・後ろ? すい 2002年10月02日 12:45

                >> で、その動作(カーソルが括弧の後ろへ飛ぶ)が使っていて普通なのでしょうか?
                >
                >予想通りの反対意見ありがとうございます。

                これ、特に反論のつもりは無かったのですが。
                っていうか、どっちが使い易いか、実際に使ってみないとちょっと分からないですねぇ。

                何か色々考えていたら“括弧内移動タイプ”なんか使い易そうだな~~、とか思ってみたり。
                 (|abc) ← 対括弧の検索 実行
                 (abc|) ← 対括弧の検索 実行
                 (|abc) ← 対括弧の検索 実行
                カーソルの前後が 括弧/閉じ括弧 どちらかまで見て優先側や移動位置を決める必要がありますが。。。
                でも使ってみたら使いにくいかも、、、(笑)
    • [2366] ここまでのまとめ ai 2002年10月01日 06:54


      いろいろと意見が出ていますので、ここまでを勝手にまとめてみました。

      1.カーソルの直後の括弧(なければ直前の括弧)と対応する括弧を検索し、見つかった場合は強調表示を行なう。
      ※ 現在は直後のみ対象にしている。
      2.カーソルの直後/直前の優先順位は、"対括弧の検索"と同様にし統一する。
      3.対括弧を検索する範囲は表示領域内のみ。

      >括弧が入力された直後に限っては直前の括弧を優先して扱う
      これは、やるとしても実装が難しい(私には見当がつかない(--;)ため保留。

      あと、あろかさんが発見した不具合を少し調べたのですが、再描画されない件が解決しないと直らないような感じです。
      これも私には解決できそうにないので保留。

      上記のような仕様でよければ、差分をUPしようと思いますがいかがでしょうか?
      (現在と変わるのは1と2のみですが、個人的にはこれだけでも早めに取り込んでいただけたらうれしいです。)
      • [2374] RE: ここまでのまとめ すい 2002年10月02日 12:33

        >ここまでを勝手にまとめてみました。

        ひとまず、そんな感じが良さそうな気がします。
        それから先の機能upは出来る方お願いって事にでもして。

        # あ、話で触れられていない所を見ると、ファイル保存で強調解除されちゃう方も無理だったのでしょうか?
        • [2379] RE2: ここまでのまとめ ai 2002年10月02日 22:28


          DrawBracketPair_v5.zip をeGroupsに置いておきました。
          ssrc_2002-09-29.tar.bz2 からの差分です。

          ># あ、話で触れられていない所を見ると、ファイル保存で強調解除されちゃう方も無理だったのでしょうか?
          これは再描画の問題と一緒にしてました(^^;
          void CEditView::RedrawAll( void ) の最後あたりに下記を追加すると保存の際に強調表示が解除されることは回避できるのですが、良い解決策ではなさそうなので、再描画の問題の解決待ち状態です。

          if( m_pcEditDoc->GetDocumentAttribute().m_Co
          lorInfoArr[COLORIDX_BRACKET_PAIR].m_bDis
          p ){
          DrawBracketPair();
          }