◀ANSI版開発トップへ
  • 4228 行頭文字の置換の対応
    • 4280 Re:行頭文字の置換の対応
      • 4360 Re2:行頭文字の置換の対応
        • 4361 Re3:行頭文字の置換の対応
          • 4363 Re4:行頭文字の置換の対応
            • 4365 Re5:行頭文字の置換の対応
              • 4367 Re6:行頭文字の置換の対応
                • 4369 Re7:行頭文字の置換の対応
                  • 4370 Re8:行頭文字の置換の対応
                    • 4372 Re9:行頭文字の置換の対応
            • 4390 Re5:行頭文字の置換の対応
  • [4228] 行頭文字の置換の対応 かろと 2006年01月22日 19:13


    一般:4742,4996
    開発:3326
    などで、何度も出てきているので、なんらかの対応はした方がベターとは思いつつ、
    バグじゃないし、個人的には必要がないため全く手を出す気がなかったのですが、
    ちょっとだけ手出ししました。

    ユーザインターフェースや名称をどうしたらいいのか?という点は、議論すべきと思いますので、
    とりあえず、置換ダイアログに「すべて行置換」という名称でボタンを「すべて置換」の下に配置して、
    お試し版という形で公開したいと思います。

    マクロなどの対応もしてませんし、
    明日からしばらく仕事が忙しく、手を付けられそうにないため、
    後はどなたかが引き継いでくれないかと期待しております。

    変更点は、
    先読み対応した時に、BREGEXPライブラリには行全体を渡すようにしたので、
    UI以外の変更量はそんなに多くなく、

    ・「すべて行置換」時は、/gオプションをつけられるように CBregexp::optGlobal追加。
    ・Command_REPLACE_ALLに引数を指定して、「すべて行置換」と「すべて置換」を指定できるように変更。
    ・「全て行置換」時は、置換文字列を行末まで貼り付けられるように、選択範囲をマッチ文字列でなく行末までに変更する処理を追加。

    となってます。

    あと、
    REPLACEダイアログの「すべて置換」ボタンのIDが IDC_BUTTON_REPALCEALLとなっていて
    REPLACEの綴りが間違っているのに気が付いたけど、放置してます。w

    <実行形式:R1591ベース>
    http://karoto.hp.infoseek.co.jp/Archive/sakura_20060122.lzh

    <差分:R1591から>
    http://karoto.hp.infoseek.co.jp/Archive/sakura_R1591_to_20060122.lzh
    • [4280] Re:行頭文字の置換の対応 かろと 2006年02月22日 00:59

      ▼ かろとさん
      > ユーザインターフェースや名称をどうしたらいいのか?という点は、議論すべきと思いますので、
      > とりあえず、置換ダイアログに「すべて行置換」という名称でボタンを「すべて置換」の下に配置して、
      > お試し版という形で公開したいと思います。

      ご無沙汰してました。長旅から戻ってきました。
      特にレスもないようなので、このままの名称とUIで完成させようと思います。
      意見ある方はお早めに。
      • [4360] Re2:行頭文字の置換の対応 かろと 2006年04月01日 12:10


        最近忙しくて・・・遅くなりました。

        マクロも対応して、パッチ置きました。

        http://sourceforge.net/tracker/index.php?func=detail&aid=1462518&group_id=12488&atid=312488

        お試しバイナリは、こちら
        <実行形式:R955>
        http://karoto.hp.infoseek.co.jp/Archive/sakura_r955_0401.lzh
        • [4361] Re3:行頭文字の置換の対応 げんた 2006年04月02日 03:08

          試してみました.

          1行で複数回Hitする場合に,行置換だと1行を1回で処理するので,置換した数といってもヒットした行数になりますよね.
          1行でたくさん置換しているのに最後に報告された数が妙に少ないなー,と疑問に思う人がいるかもしれません.

          ダイアログボックスで,「すべて行置換」ボタンのTAB Orderがちょいと変ですね.
          最後まで行って追加したボタンに戻ります.(sakura.rcで順番を入れ換えるだけですが)

          Funccode.hで,機能的に近いためかすべて置換のすぐ下にdefineが挿入されていますが,使用済み番号が一目でわかるためにここは番号順に並べた方がよいと思います.

          CEditView_Command.cppでCommand_REPLACE_ALL()に引数を追加していますが,従来の行は引数無しで記述されています.従来の方はデフォルト値が渡されるというのはわかるのですが,ここは次の行との待避のためにも引数を明示的に書いた方がいいと思います.

          CEditView_Command.cppのCommand_REPLACE_ALL()中
          // 正規表現オプションの設定
          cRegexp.optCaseSensitive
          cRegexp.optGlobal
          cRegexp.optNothing
          と使われていますが,これらはenum値なのでcRegexp.の代わりにCBregexp::の方が一般的なのかなと思いますが.
          • [4363] Re4:行頭文字の置換の対応 かろと 2006年04月02日 14:10

            確認ありがとうございます。

            ▼ げんたさん
            > 1行で複数回Hitする場合に,行置換だと1行を1回で処理するので,置換した数といってもヒットした行数になりますよね.
            > 1行でたくさん置換しているのに最後に報告された数が妙に少ないなー,と疑問に思う人がいるかもしれません.

            確かに・・・行置換時も個数を報告できないかと思いましたが、
            置換個数を知る方法がないみたいなので、諦めて、行置換時は行数を報告するように変更しました。

            > ダイアログボックスで,「すべて行置換」ボタンのTAB Orderがちょいと変ですね.
            > 最後まで行って追加したボタンに戻ります.(sakura.rcで順番を入れ換えるだけですが)

            修正しました。

            > Funccode.hで,機能的に近いためかすべて置換のすぐ下にdefineが挿入されていますが,使用済み番号が一目でわかるためにここは番号順に並べた方がよいと思います.

            私も、番号順の方が空き番号が探しやすいので、最初番号順に挿入しようと思ったのですが、回りを見て
            F_FILESAVEALL
            F_FILE_REOPEN_UNICODEBE
            F_TOHANKATA
            F_CODECNV_UNICODEBE2SJIS
            などが、敢えて機能順に並べているので、回りに合わせてしまいました。
            番号順に並べるのを良しとするなら、後から追加する人が見ても番号順に入れたくなるように例外を修正しておいた方が良さそうです。


            > CEditView_Command.cppでCommand_REPLACE_ALL()に引数を追加していますが,従来の行は引数無しで記述されています.従来の方はデフォルト値が渡されるというのはわかるのですが,ここは次の行との待避のためにも引数を明示的に書いた方がいいと思います.

            了解です。同感です。

            > CEditView_Command.cppのCommand_REPLACE_ALL()中
            > と使われていますが,これらはenum値なのでcRegexp.の代わりにCBregexp::の方が一般的なのかなと思いますが.

            クラス名に関係なく書ける方が、修正に強いかと思って、書いてました。
            他のソースを見ても、クラス名:: で参照しているようなので、統一しておきます。

            <パッチ>
            http://sourceforge.net/tracker/index.php?func=detail&aid=1462518&group_id=12488&atid=312488

            お試しバイナリは、こちら
            <実行形式:R955>
            http://karoto.hp.infoseek.co.jp/Archive/sakura_r955_0402.lzh
            • [4365] Re5:行頭文字の置換の対応 maru 2006年04月03日 21:41

              ▼ かろとさん
              > ユーザインターフェースや名称をどうしたらいいのか

              割り込みですいません。
              「すべて置換」と「すべて行置換」の2本立て、ということですよね?
              過去ログから「すべて行置換」の動作はなんとなく分かりましたが
              従来の「すべて置換」を残している理由が分からなくて…。
              お時間許せば、使い分けどころを解説いただけると助かります。
              • [4367] Re6:行頭文字の置換の対応 かろと 2006年04月03日 23:56

                >タイトル: Re6:行頭文字の置換の対応
                >発言者: maru
                >「すべて置換」と「すべて行置換」の2本立て、ということですよね?
                >過去ログから「すべて行置換」の動作はなんとなく分かりましたが
                >従来の「すべて置換」を残している理由が分からなくて…。

                maruさん。ご意見ありがとうございます。

                過去のログから、「すべて行置換」の動作だけで良いという発言をした方もいたと思いますが、
                私はそれに賛同して、今回のパッチを作っていないので、2本建てということと理解ください。

                更に言えば、私自身「すべて行置換」は必要と思ってないが、(2つあってわかりにくい)
                下記1の変換がしたいという要望もあるので、「行置換」を追加。とさせて頂きました。

                すでにどこかで書いたように、「行置換」では、通常の置換と動作が異なるところが出てきますので、
                従来の「すべて置換」を削除するのは、あり得ないと思います。

                もし、2つあってわかりにくいという意見が出てきたら、従来通り「すべて置換」だけにするのが筋と思ってます。


                >お時間許せば、使い分けどころを解説いただけると助かります。

                これまで出てきた要望を考えると、
                強いて言えば・・・

                1.「すべて行置換」を使う場合
                 「aaaaaaaaa」を置換するときに
                 「^a」→「」で、行頭の1文字だけを消したい場合

                2.「すべて置換」を使う場合

                 それ以外

                となるのではないかと思います。
                • [4369] Re7:行頭文字の置換の対応 じゅうじ 2006年04月04日 14:08

                  ▼ maru さん
                  今ある、「すべて置換」は、
                  「前検索」「置換」・・・の繰り返し(「先頭から再検索」付き)だと思います。

                  表示については、検索・置換の検索ボックスを開くと、桁位置のキャレットが消えて、どこからの検索・置換開始か分からなくなります。

                  ▼かろと さん
                  「全て行置換」で行う、先頭行置換は、/g を付けても1回のみの置換になると思います。
                  なので、今の「すべて置換」は無くなっても済ませられると思います。

                  下記2については、「abababa」が「^ab」⇒「」で、
                  1回の「すべて置換」で削除されるのを期待している「マクロ」が有るかもしれない、という理解でよろしいでしょうか?
                  • [4370] Re8:行頭文字の置換の対応 かろと 2006年04月04日 22:03

                    >タイトル: Re8:行頭文字の置換の対応
                    >発言者: じゅうじ
                    >▼かろと さん
                    >「全て行置換」で行う、先頭行置換は、/g を付けても1回のみの置換になると思います。

                    これまで書いてなかったのかもしれませんが、「すべて行置換」は、 /g つきです。
                    (「すべて行置換」の場合、/g をつけないと、1行で1回しか置換できないので)
                    つまり、/g の有無で表現すれば、
                    「すべて置換」は /g なしで、「すべて行置換」が /g付きです。

                    >なので、今の「すべて置換」は無くなっても済ませられると思います。

                    「すべて行置換」だけになると、
                    >「前検索」「置換」・・・の繰り返し
                    が出来なくなることが問題だと思ってます。

                    私は、「すべて置換」やる前に、まず「検索」「置換」をやってみて、自分の思った置換が出来ていると
                    「すべて置換」とやります。
                    この前提は、「検索」「置換」と「すべて置換」が同じ動作であることです。

                    すべて置換がなくなって、常に [/g]付きだと困ります。(正確に言うと、困る場合が出るかも?)


                    >下記2については、「abababa」が「^ab」⇒「」で、
                    >1回の「すべて置換」で削除されるのを期待している「マクロ」が有るかもしれない、という理解でよろしいでしょうか?

                    私が言いたかったのは、
                    行頭の文字が1回だけ消えて欲しい場合だけ、「すべて行置換」(つまり/gつき)
                    他の場合は、「検索」「置換」と同じ動作をして欲しいので、「すべて置換」(つまり/gなし)
                    ということで、そういうマクロがあるのかは不明です。でも、確かに、そういうマクロがあれば期待通りでなくなるので困りますね。

                    他にも、/g の有無で、 \b や + , * など使った場合に、差が出ると聞いたことがあります。
                    • [4372] Re9:行頭文字の置換の対応 maru 2006年04月05日 00:35

                      行置換の名前の由来がようやくわかりました。
                      ありがとうございます。
                      UIとしては…なんとも難しいところですね。
            • [4390] Re5:行頭文字の置換の対応 げんた 2006年04月08日 13:05

              sakura/trunk#958でCommitしました.