◀一般トップへ
  • 2175 改行コードの統一(ぢっけん)
    • 2177 RE: 改行コードの統一(ぢっけん)
      • 2180 RE2: 改行コードの統一(ぢっけん)
        • 2208 RE3: 改行コードの統一(ぢっけん)
          • 2210 Re4: ちょっと注意
            • 2211 Re5: ちょっと注意
            • 2212 Re5: ちょっと注意
      • 2183 RE2: 改行コードの統一(ぢっけん)
        • 2185 Re3: 改行コードの統一(ぢっけん)
  • [2175] 改行コードの統一(ぢっけん) すい 2002年08月08日 22:58

    「2170 小さな要望(空行挿入)」にフォロー書いていて、ふと思い付いた事。

    ファイル全体を改行コード LF (0x0a) に統一する場合。

    Ctrl+R で置換画面を出す。
    ・置換前(N)「[\r\n]+」
    ・置換後(P)「\n」
    ・正規表現(E)  ←チェックする。
    で [すべて置換(A)] ボタンをパシーンと押せば一発でファイル全体が LF 改行になりますね。

    [置換(R)](変換する)と [下検索(D)](変換せず次の行へ)で押し分けてみてもよし。

    また、範囲指定してから置換出して、上記設定にしてから「選択範囲(S)」を
    選択後、[すべて置換(A)] で指定範囲の行のみ改行コードが LF になりますね。(当然ですが)

    改行コードを CRLF に統一する場合は置換後(N)を「\r\n」に変えるだけ。
    改行コードを CR  に統一する場合は置換後(N)を「\r」 に変えるだけ。
    ・\r\n = CRLF 0x0d,0x0a
    ・\n = LF 0x0a
    ・\r = CR 0x0d

    んで、これをマクロに記述して右クリックメニューとかに登録することまで考えてみる。
    --------- 2CRLF.MAC ---------
    //キーボードマクロのファイル
    S_ReplaceAll('[\\r\\n]+', '\\r\\n', 148); //
    S_CancelMode(0); // 各種モードの取り消し
    S_SearchClearMark(0); // 検索マークの切替え
    S_MoveHistPrev(0); // 移動履歴: 前へ
    S_ReDraw(0); // 再描画
    ---------- 2LF.MAC ----------
    S_ReplaceAll('[\\r\\n]+', '\\n', 148); //
    S_CancelMode(0); // 各種モードの取り消し
    S_SearchClearMark(0); // 検索マークの切替え
    S_MoveHistPrev(0); // 移動履歴: 前へ
    S_ReDraw(0); // 再描画
    ---------- 2CR.MAC ----------
    //キーボードマクロのファイル
    S_ReplaceAll('[\\r\\n]+', '\\r', 148); //
    S_CancelMode(0); // 各種モードの取り消し
    S_SearchClearMark(0); // 検索マークの切替え
    S_MoveHistPrev(0); // 移動履歴: 前へ
    S_ReDraw(0); // 再描画
    -----------------------------
    これらを共通設定→[マクロ] でそれぞれ
    ・改行コードを CRLF (Win):2CRLF.MAC
    ・改行コードを LF (UNIX) :2LF.MAC
    ・改行コードを CR (MAC) :2CR.MAC
    とか設定して、マウス右クリックメニューに登録してみた。
    ちなみに
    ・範囲選択してから実行すると選択範囲内の改行コードのみ変わる。
    ・範囲選択せず実行するとファイル全体の改行コードが変わる。
    と なるようにしてある。いかがなものでしょ?

    難点はカーソル位置が保存されないこと。変換が終ると、とんでもない所(ファイル末尾とか)へ行ってしまう。
    ので、ラストに S_MoveHistPrev 入れたけど...
    「元の位置近辺に戻る確率が高い」だけで完全に元の場所には戻らないし。。。
    置換処理に対しては「検索開始位置へ戻る」も機能しないようだし。。。(未解決)
    全行が「変更行」になってしまうというのは愛敬という事で。
    • [2177] RE: 改行コードの統一(ぢっけん) ai 2002年08月08日 23:21


      >置換処理に対しては「検索開始位置へ戻る」も機能しないようだし。。。(未解決)
      私の手元には、置換でも動作するように修正したものがあります。
      繰り返し使っているうちに、置換でも使えたほうが便利かな?と感じましたので(^^;
      他にいくつか追加したい機能があり、そちらと一緒に差分をUPしようと思っていました。
      ただ、マクロから検索/置換を実行した場合は機能しません。
      • [2180] RE2: 改行コードの統一(ぢっけん) すい 2002年08月09日 12:34

        >>置換処理に対しては「検索開始位置へ戻る」も機能しないようだし。。。(未解決)
        >私の手元には、置換でも動作するように修正したものがあります。
        >繰り返し使っているうちに、置換でも使えたほうが便利かな?と感じましたので(^^;

        私もその方が便利だと思います。
        # というか、そもそも検索と置換で違いがあるのは変な気が (^^;)

        >ただ、マクロから検索/置換を実行した場合は機能しません。

        それは残念、というかどうでも良かったりして。(爆)

        マクロを使う立場から考えると、「現在のカーソル位置を移動履歴に登録する」という機能が欲しいですね。
        場所を登録するだけで他は何もしない。
        CEditView_Command.cpp の中で AddCurrentLineToHistory(); を呼び出すだけの機能、というか。

        そうすれば、カーソル位置を保存したい所で「移動履歴に登録」やってから
        「移動履歴 前へ」「移動履歴 次へ」すれば良いワケで、カーソル位置を
        行ったり来たりするようなマクロも簡単に作れるようになりますし。

        そうなれば検索/置換で「検索開始位置へ戻る」が使えなくても何も問題無しなんですけど。
        汎用的だし。
        • [2208] RE3: 改行コードの統一(ぢっけん) すい 2002年08月19日 21:30

          >マクロを使う立場から考えると、「現在のカーソル位置を移動履歴に登録する」という機能が欲しいですね。
          >場所を登録するだけで他は何もしない。
          >CEditView_Command.cpp の中で AddCurrentLineToHistory(); を呼び出すだけの機能、というか。

          ↑を追加してみました。

          ssrc_2002-08-18.tar.bz2 に対する差分です。
          http://www.egroups.co.jp/files/sakura-editor/Developer/Source/MoveHistSet.zip

          追加 → 内部名称 F_JUMPHIST_SET // 現在位置を移動履歴に登録

          これに合わせ、内部名称 JUMPPREV / JUMPNEXT をそれぞれ
          ・JUMPPREV → JUMPHIST_PREV // 移動履歴: 前へ
          ・JUMPNEXT → JUMPHIST_NEXT // 移動履歴: 次へ
          に揃えました。

          ただ、コンパイル出来ないので動作確認が出来ないので していません。(;^^A (恐)
          どうでしょうか?動きます?
          たったこれだけの変更なんですが...(;*^o^*;)

          あ、動作確認できてないのでスリルあり。夏向きという事で。(こら>私)
          # 動かなかったらごめんなさい。 m(_ _)m
          • [2210] Re4: ちょっと注意 げんた 2002年08月20日 09:51

            >>マクロを使う立場から考えると、「現在のカーソル位置を移動履歴に登録する」という機能が欲しいですね。
            移動履歴は行マークとは異なり現在のカーソル位置を記憶するだけのものなので,ファイルが編集されると場所がずれちゃいます.

            現在位置をマークして,番号を返す.
            mark = SetMark();

            指定された番号のマーク位置に飛ぶ
            JumpMark( mark );

            みたいな機能があるともっといいですけどね.

            ---
            そういえば,マクロといえばWSHの組み込みをすっかり忘れていました...
            • [2211] Re5: ちょっと注意 Youma 2002年08月20日 10:35

              ▼ げんたさん
              > >>マクロを使う立場から考えると、「現在のカーソル位置を移動履歴に登録する」という機能が欲しいですね。
              > 移動履歴は行マークとは異なり現在のカーソル位置を記憶するだけのものなので,ファイルが編集されると場所がずれちゃいます.

              あ、これ、あると非常にうれしいですよね~
              行マークとか、結構使いまくるんですけど、
              文字単位のマーキングが有ると非常に便利(W

              ついでに、
              SelectMark(mark1 , mark2 )って感じに、
              マーキングした所から、マーキングした所までを
              選択 ⇒ 切り取り/コピー して、
              PasteMark( mark ) って感じにマークの部分に貼り付けるとか(W
              マーク単位の編集技があるとうれしいなぁ。
            • [2212] Re5: ちょっと注意 すい 2002年08月20日 20:00

              >>>マクロを使う立場から考えると、「現在のカーソル位置を移動履歴に登録する」という機能が欲しいですね。
              >移動履歴は行マークとは異なり現在のカーソル位置を記憶するだけのものなので,ファイルが編集されると場所がずれちゃいます.
              ァ,それは見落としていました。一応、注意が必要ですね。 :-P


              >現在位置をマークして,番号を返す.
              >mark = SetMark();
              >
              >指定された番号のマーク位置に飛ぶ
              >JumpMark( mark );
              >
              >みたいな機能があるともっといいですけどね.

              各種編集による場所の移動にも対応・追跡してくれるような物、という事でしょうか?
              # と言うか、↑そうでなければ「現在の行位置・桁位置を返す」「指定の行・桁位置へ移動する」
              # という単純な物を用意すれば十分ですよね。(;^^ゞ

              それはとっても良い構想ですけど...
              それって mark みたいな変数が必要って事ですよね?
              つまり ppa.dll とかが必須では。どこの環境でも動くというワケではなく。。。

              サクラエディタ単体で変数が使えるようになるならば、それはそれで嬉しいですけど、
              変数とかの取り扱いって結構プログラムが面倒になってバグ取りとかが大変なのは
              経験済みだから、やりとぅないですしねぇ。
              変数といっても「特定の名前固定の大域変数のみ」なら比較的取り扱いも楽ですが。
              # って考えていくと、次第に DOS版 Mifes のマクロになっていくのか。(笑)
              でも数式の処理は絶対必要になるだろうし。
      • [2183] RE2: 改行コードの統一(ぢっけん) すい 2002年08月09日 20:21

        >>置換処理に対しては「検索開始位置へ戻る」も機能しないようだし。。。(未解決)
        >私の手元には、置換でも動作するように修正したものがあります。

        ついでにデフォルトでキー割り当てするわけにいきませんか? :-)
        例えば Shift+Ctrl+F3 とか。
        # 皆、使わないかなぁ?

        >他にいくつか追加したい機能があり、そちらと一緒に差分をUPしようと思っていました。

        もし、機能周りをいじるなら、ついでに例の
        (2164:RE2: 検索をマクロから実行時の不具合)
        >カーソル位置がファイル先頭の方にある場合、困った事に S_CurLineCenter は全く動作してくれません
        の方も直してもらえると嬉しひ。ついでって事で。
        これでかなり不自由していますので。

        CEditView_Command.cpp の void CEditView::Command_CURLINECENTER( void ) 内
        オリジナル
        --------------------
        if( 0 <= nViewTopLine ){
        m_nViewTopLine = nViewTopLine;
        /* フォーカス移動時の再描画 */
        RedrawAll();
        }
        --------------------
        ↓↓ 変更 ↓↓
        --------------------
        if( 0 > nViewTopLine ) nViewTopLine = 0;
        m_nViewTopLine = nViewTopLine;
        /* フォーカス移動時の再描画 */
        RedrawAll();
        --------------------

        で直りますよね?
        動作確認していない(確認出来ない)んですけど。
        • [2185] Re3: 改行コードの統一(ぢっけん) げんた 2002年08月10日 01:31

          >>カーソル位置がファイル先頭の方にある場合、困った事に S_CurLineCenter は全く動作してくれません
          >の方も直してもらえると嬉しひ。ついでって事で。
          aiさん,ついでにお願いします.