Menu

#111 コマンドライン -Y=num

closed
ryoji
None
5
2012-11-09
2007-08-17
No

既に開いているファイルで、
-Y= 指定で現在のキャレット位置だと、範囲外の場合のみの修正です。
-Y= と -X= 指定で、フリーカーソルの範囲になるのは、そのままです。
現在のキャレット位置は使わない変更です。

data[6223] コマンドライン -Y=num <バグ> フリーカーソル以外で
▽ 2007/8/17 (金) 13:54:14 山茶花

コマンドラインパラメータの -Y=num にバグがあります。
環境はサクラエディタ Ver. 1.5.17.0 (V 1310) on Windows 98/ME です。
行の長さが違うファイル file1.txt があって、桁の短い行が
4行目にあり、長い行が3行目あったとします。まずサクラエ
ディタをフリーカーソルでないように設定し、このファイルを
開き、4行目の改行以降に当たる3行目の桁位置へカーソルを
移動します。そして、
> sakura -Y=4 file1.txt
とすると、フリーカーソルでないのにカーソルが改行の次の位
置へきてしまいます。この状態で Backspace を押すと改行が
削除され行が連結ほか、Del を押すと次の行の先頭へ移動しま
す。
ファイルが開いている状態で
> sakura -Y=4 -X=500 file1.txt
と桁位置を越えてもこうなりますが、ファイルが開いていない
状態ではこうなりません。

Discussion

  • じゅうじ

    じゅうじ - 2007-08-17

    2007-07-08CNormalProcess_cpp.txt

     
  • ryoji

    ryoji - 2007-08-18

    改行の真ん中にカーソルが来ないように

     
  • ryoji

    ryoji - 2007-08-18

    Logged In: YES
    user_id=1480046
    Originator: NO

    この問題については、
    CNormalProcess.cpp(246)
    CEditDoc.cpp(734)
    にある「改行の真ん中にカーソルが来ないように」と同じ処理を
    CEditWndのMYWM_SETCARETPOSにも入れるのが
    良いかな~、と思ったのですがどうでしょう。
    (パッチを作ってみたのでUploadしておきます)
    File Added: FixMoveCursorEOL1.patch

     
  • ryoji

    ryoji - 2007-08-20

    Logged In: YES
    user_id=1480046
    Originator: NO

    >にある「改行の真ん中にカーソルが来ないように」と同じ処理を
    もとのCNormalProcess.cpp(246)、CEditDoc.cpp(734)の処理
    自体にもバグがあるようで、そこを通る時に誤って桁位置が左に
    ずれることがあります(悲)。
    どうやらレイアウト行/改行単位行の扱いが間違っているみたい。

     
  • ryoji

    ryoji - 2007-08-22

    追加修正

     
  • ryoji

    ryoji - 2007-08-22

    Logged In: YES
    user_id=1480046
    Originator: NO

    修正の追加版です。
    →FixMoveCursorEOL2.patch

    開ファイル時に関連するカーソル位置修正です。
    1.開いた状態のファイルを更にコマンドライン-Y指定で
    開くとカーソルが改行の真中に来ることがある
    (data[6223]の件)
    2.履歴(カーソル位置の復元)で開いたときにカーソル
    位置が左にずれることがある
    3.コマンドラインから-X指定で開くとカーソル位置が左に
    ずれることがある
    4.外部で変更されたファイルを開き直したり、別の文字
    コードを指定して開き直すとカーソルが不適切な位置
    になることがある
    5.CEditView::MoveCursorSelecting()でnCaretMarginRate
    引数が使われていない

    【2、3の再現方法】
    折り返し桁数を20にして、
    123456789012345678901234567890
    ABC
    という内容のファイルを開く。
    (1行目は折り返される)
    カーソルを1行目の末尾(改行コードの手前)に移動し、
    「閉じて(無題)」で閉じる。
    履歴からファイルを開くと1文字左にずれている。
    そのまま、「閉じて(無題)」、履歴からファイルを開く
    操作を繰り返すと、次々に左にずれていく。

    上のファイルを、閉じた状態からコマンドライン指定
    -Y=1 -X=25
    で開いてみると桁位置が25でなく24で開かれる。

    似たような処理が複数個所にあるので、まとめて
    関数化するのが良い気もしますが、
    選択したまま移動のパターンなどとの絡みもあって
    ちょっとややこしくなりそうなので今回はパスです。
    File Added: FixMoveCursorEOL2.patch

     
  • ryoji

    ryoji - 2007-08-22

    Logged In: YES
    user_id=1480046
    Originator: NO

    開き直しの場合(「4.外部で...」の場合)について、
    折り返し行インデントへの考慮が欠けていたので、
    更に修正しました。

    File Added: FixMoveCursorEOL2_1.patch

     
  • ryoji

    ryoji - 2007-08-22

    「開き直す」の行頭インデント処理追加

     
  • ryoji

    ryoji - 2007-08-22

    2_1への微修正

     
  • ryoji

    ryoji - 2007-08-22

    Logged In: YES
    user_id=1480046
    Originator: NO

    FixMoveCursorEOL2_2です。
    2_1の修正にちょっとミスがありました。

    File Added: FixMoveCursorEOL2_2.patch

     
  • ryoji

    ryoji - 2007-08-23

    再読み込み時カーソル移動関数共通化

     
  • ryoji

    ryoji - 2007-08-23

    Logged In: YES
    user_id=1480046
    Originator: NO

    CEditView::MoveCursorToPoint()の主要部分を関数化し、
    再読み込み時のカーソル移動もその関数を使うようにしてみました。
    →FixMoveCursorEOL2_3.patch

    よく見ると2_2でもEOF直前カーソルの考慮が抜けていましたね。
    2_3では実績のある処理を流用しているので、
    自前で書くより信頼性が高そうです。
    File Added: FixMoveCursorEOL2_3.patch

     
  • Genta

    Genta - 2007-09-02

    Logged In: YES
    user_id=86076
    Originator: NO

    元々の問題(1)に対応する修正はCEditView.cppのMYWM_SETCARETPOSのカーソル位置調整だけで,残りの修正は2-5の問題に相当するという理解でOKですか?

    (2)と(3)が2つあるGetLineInfoへ渡す桁位置の誤り,
    (4)がReopenの処理ですよね.

    報告されている(1)については動作確認しました.

     
  • Genta

    Genta - 2007-09-03

    Logged In: YES
    user_id=86076
    Originator: NO

    (2)についても旧バージョンでの再現と,修正されていることの確認ができました.

     
  • ryoji

    ryoji - 2007-09-03

    Logged In: YES
    user_id=1480046
    Originator: NO

    >元々の問題(1)に対応する修正はCEditView.cppのMYWM_SETCARETPOSのカーソル位置調整だけで,残りの修正は2-5の問題に相当するという理解でOKですか?
    はい。その理解でOKです。

     
  • Genta

    Genta - 2007-09-04

    Logged In: YES
    user_id=86076
    Originator: NO

    (4)を確認しました.以前のバージョンは読み直しで桁が少なくなると
    フリーカーソルのような挙動になってしまいますね.
    ただ,画面の表示位置復元の効果をまだうまく再現できていません.
    (その後のマウス移動でも動いてしまう)

    (5)はRev.998を確認したところ,私が入れ忘れていたようです.

     
  • Genta

    Genta - 2007-09-05

    テスト用ファイル

     
  • Genta

    Genta - 2007-09-05

    Logged In: YES
    user_id=86076
    Originator: NO

    (3)も確認しました.
    これで1-5まで再現と修正確認ができたので,commit OKです.

    テストファイルを添付しておきます.

    File Added: test1.txt

     
  • ryoji

    ryoji - 2007-09-06

    Logged In: YES
    user_id=1480046
    Originator: NO

    commitしました。(rev:1118)

     

Log in to post a comment.