◀Unicode版開発トップへ
  • 2410 「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
    • 2411 Re:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
      • 2412 Re2:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
        • 2414 Re3:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
          • 2415 Re4:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
  • [2410] 「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない soappp 2017年08月19日 02:29

    こんにちは。サクラエディタを使わせていただいております。
    この度、表題の事象を確認いたしましたので、ご報告いたします。
    確認したバージョンは 2.3.2.0、使用OSは Windows 7 Pro です。

    ●再現手順
    ・Ctrl+Alt+X「折り返さない」を選択。
    ・ウィンドウ幅よりも長い文字列がある行が、表示中の画面に1行以上存在する状態にする。
    ・それらの行よりも下にある、任意の行の任意の位置をクリックして、テキストカーソルを置く。
    ・Ctrl+Alt+W「右端で折り返す」を選択。
     →折り返しが発生することで、テキストカーソルが表示されるべき位置が変わるが、テキストカーソルの点滅位置は更新されない(おかしな場所で点滅することになる)。
    • [2411] Re:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない AC 2017年08月19日 23:02

      手元にある過去バージョンで試してみたところ、
      ver.2.1.1.2と ver.2.2.0.1の間で挙動が変わったようです。

      • [2412] Re2:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない berryzplus 2017年08月26日 15:59

        ▼ ACさん
        > 手元にある過去バージョンで試してみたところ、
        > ver.2.1.1.2と ver.2.2.0.1の間で挙動が変わったようです。
        >

        再現方法を書いていただいたので、実機で検証してみました。
        結論としてバグで、原因は設計不良みたいです。

        とりあえず、調査報告をあげておきます。

        過去バイナリとか持ってないのでバイナリはSVNソースからビルドしました。
        ビルド環境はvs2005proのvc++です。
        動作環境はwin8.1 pro x64です。

        ver.2.1.1.4 (rev3825) ○再現せず
        ver.2.1.1.4+ (rev3870) ○再現せず
        ver.2.1.1.4+ (rev3871) △コンパイルエラーになった
        ver.2.1.1.4+ (rev3872) △コンパイルエラーになった
        ver.2.1.1.4+ (rev3873) ×再現


        原因はrev3871~rev3873の変更です。
        rev3871でコンパイルエラーになるバグを作りこんで
        rev3873でコンパイルエラーを修正したようです。
        rev3872は本件とはまったく関係のない軽微な仕様変更です。


        ★↓がrev3871のコミット時コメント
        --
        Fix: キャレットの更新でGetDrawSwitchフラグを見るように

        [patchunicode:#913]
        ・マクロで高速にキャレットが更新されるので処理を省略するようにします。
        --

        マクロ絡みの動作でキャレットが更新されると困るケースがあったんですかね?


        コミットコメントの内容からすると、
        マクロ実行中はキャレット更新を抑制するように変更したい
        というのが仕様のはずです。

        rev3871~rev3873の変更内容を見ると、
        特定条件下ではCCaret::ShowEditCaret()を呼び出しても、
        キャレット位置を更新しないように修正しています。
        変更仕様として読み取れる内容とは関係ない修正です。

        効果が立証できない改善を残すより、実害のあるバグを潰すのが先だと思うので、
        対応策としては、該当範囲の修正を一旦破棄するのがよいと思います。

        もしキャレット更新のせいでマクロが遅くなるのなら
        マクロ実行中はShowEditCaretを呼ばない、という対応を検討しましょう。

        パッチのステータスがclosed(=完了)になっているのでこれを元に戻してやり直しですね。
        https://sourceforge.net/p/sakura-editor/patchunicode/913/
        • [2414] Re3:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない ななし 2017年08月27日 00:58

          time = new Date();
          Editor.SetDrawSwitch(0)
          for(line = 0; line < 100; line++){
          for(i = 0; i < 1000; i++){
          Editor.InsText("a");
          }
          Editor.InsText("\r\n");
          }
          Editor.SetDrawSwitch(1);
          Editor.Redraw();
          last = new Date();
          Editor.InsText(last - time);
          • [2415] Re4:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない berryzplus 2017年08月27日 02:23

            ▼ ななしさん

            言いたいことはなんとなく分かりました。
            ぼくはマクロの実行速度なんて捨てちゃえ、と言いましたが、
            事務用スペックの端末でこれを実行したら酷いことになりそうですね。

            まぁ、ここまでのマクロを組める人なら、
            この処理が実用的じゃないことは分かると思います。
            同じことを1秒未満で完了させるスクリクプティング手法は、
            他にいくらでもあります。

            やりたいことを実現するのに最適な手段を選択できることも、
            ある種のITスキルだと思います。


            追記
            投稿されたマクロの実行時間。
            ver.2.1.1.4+ (rev3870) 26015ミリ秒
            ver.2.1.1.4+ (rev3873) 9695ミリ秒

            投稿マクロが遅い原因に対策した版での実行時間。
            ver.2.1.1.4+ (rev3870) 105ミリ秒
            ver.2.1.1.4+ (rev3873) 112ミリ秒

            やはり、サクラエディタ側で対策する必要なんてない気がします。