◀ANSI版開発トップへ
  • 5100 マクロで選択すると右端の1文字が選択されない
    • 5102 Re:マクロで選択すると右端の1文字が選択されない
      • 5103 Re2:マクロで選択すると右端の1文字が選択されない
  • [5100] マクロで選択すると右端の1文字が選択されない なすこじ 2007年10月08日 15:02

    以下のマクロにて折り返しで表示している行を選択すると右端の1文字が選択されません。
    S_GoLineTop(1);
    S_GoLineEnd_Sel();

    (NG) 折り返された行
    (OK) 改行のある行
    (OK) [EOF]のある行

    Command_GOLINEEND()を下記のように修正すると問題が無くなると思います。
    ただし、SJIS,CRLF改行でしか確認していません。

    == ここから ==
    --- sakura_core\CEditView_Command.cpp.orig Sun Oct 07 02:33:08 2007
    +++ sakura_core\CEditView_Command.cpp Mon Oct 08 14:53:28 2007
    @@ -1288,21 +1288,11 @@
    while( !it.end() ){
    it.scanNext();
    if ( it.getIndex() + it.getIndexDelta() > pcLayout->GetLengthWithoutEOL() ){
    - nPosX += it.getColumnDelta();
    break;
    }
    it.addDelta();
    }
    - nPosX += it.getColumn() - it.getColumnDelta();
    - if( it.getIndex() >= (pcLayout ? pcLayout->GetLengthWithEOL() : 0) ){
    - if( m_nCaretPosY + 1 == m_pcEditDoc->m_cLayoutMgr.GetLineCount() ){
    - /* 改行で終わっているか */
    - if( EOL_NONE != pcLayout->m_cEol ){
    - }else{
    - nPosX += it.getColumnDelta();
    - }
    - }
    - }
    + nPosX += it.getColumn();

    MoveCursor( nPosX, m_nCaretPosY, TRUE );
    m_nCaretPosX_Prev = m_nCaretPosX;
    == ここまで ==
    • [5102] Re:マクロで選択すると右端の1文字が選択されない ryoji 2007年10月08日 17:10

      ▼ なすこじさん
      > (NG) 折り返された行
      レイアウト折り返し行での行末へのカーソル移動についてもエディタによって違いがあるようです。

      折り返し行末文字の前に移動するもの
      →秀丸、K2Editor、TeraPadなど

      折り返し行末文字の後ろに移動するもの
      →EmEditor、VS2005など

      現行のサクラエディタは前者の仲間ですね。経緯は知りませんがソースを見る限り意図的にそうしているみたいです...個人的には後者が好みです。(^^;
      • [5103] Re2:マクロで選択すると右端の1文字が選択されない なすこじ 2007年10月08日 20:20

        ▼ ryojiさん
        > 現行のサクラエディタは前者の仲間ですね。経緯は知りませんがソースを見る限り意図的にそうしているみたいです...個人的には後者が好みです。(^^;

        K2Editorでは折り返し表示を使用していなかったので知りませんでした (^^;
        カーソルが行頭へ戻ってしまうのを嫌ったのでしょうかね。

        仕様だとするとちょっと悩ましいですが、文字列の選択という機能を考えた場合この仕様は使い勝手が悪くないでしょうか?