◀一般トップへ
  • 6333 半角文字をクリックした時のカーソル位置
  • [6333] 半角文字をクリックした時のカーソル位置 なすこじ 2007年09月25日 23:06

    こんにちは。
    最近サクラエディタに移ってきて便利に使わせて頂いております m(_ _)m

    殆ど満足なのですが、1点、半角文字をクリックした時のカーソル位置の決まり方に違和感があります。

    サクラエディタの場合、例えば"ABC"という文字列の"B"のどの位置をクリックしても"B"の左側にカーソルが移動します。
    秀丸やNotepadの場合、"B"の中心あたりに切れ目があり挙動が変わります。("B"の右半分の位置をクリックすると"B"の右側にカーソルが移動します)
    K2Editorの場合、文字の右端から数ドット左に切れ目があります。

    全角文字とTAB文字は、サクラエディタでも文字の中心に切れ目があります。
    秀丸やNotepadも同様に文字の中心に切れ目があります。
    K2Editorは、やはり文字の右端から数ドット左に切れ目があります。

    文字の間をアバウトにクリックすると、自分の思惑とは違う位置にカーソルが行ってしまうことがあるため、できれば全角文字と同様文字の中心に切れ目を持ってきて欲しいです。

    一応 ssrc_2007-07-08.tar.bz2 をダウンロードして覗いてみて、CEditView.cpp の MoveCursorToPoint() でできるのではないかと思い修正を考えてみました。

    (修正前)
    3076~3078行目
      if (nNewX >= (pcLayout ? pcLayout->GetIndent() : 0) && (it.getColumnDelta() > 1) && ((it.getColumn() + it.getColumnDelta() - nNewX) <= it.getColumnDelta() / 2)){
        nPosX += it.getColumnDelta();
      }

    (修正その1)
      if (nNewX >= (pcLayout ? pcLayout->GetIndent() : 0) &&
        ((it.getColumnDelta() > 1) && ((it.getColumn() + it.getColumnDelta() - nNewX) <= it.getColumnDelta() / 2)) ||
        ((it.getColumnDelta() == 1) && (((xPos - m_nViewAlignLeft) % ( m_nCharWidth + m_pcEditDoc->GetDocumentAttribute().m_nC
    olmSpace )) > (m_nCharWidth / 2))))
      {
        nPosX += it.getColumnDelta();
      }

    (修正その2)
      if (nNewX >= (pcLayout ? pcLayout->GetIndent() : 0) && it.getColumnDelta()){
        int w = m_nCharWidth + m_pcEditDoc->GetDocumentAttribute().m_nC
    olmSpace;

        if((((xPos - m_nViewAlignLeft) - (w * it.getColumn())) * 2) > (w * it.getColumnDelta()))
          nPosX += it.getColumnDelta();
      }

    こんな感じですが、どうでしょうか?
    自分で試せば良いのですが、開発環境を入れるPCを準備しないといけないので暫く先になってしまいます。

    ではでは。