秀丸エディタVer.5.12−最終編集位置の記No.09074
Buckeye さん 06/02/03 10:11
 
いつもお世話になっています。秀丸エディタVer.5.12でちょっと気になった点が
あります。

最終編集位置と違う行にカーソルを置くと、最終編集位置に「L」みたいな記号
がつきますよね。ここでundoをすると、ひとつ前の最終編集位置にカーソルが移
動します(「L」記号は当然、消えますが、カーソル位置を動かせば、ひとつ前
の最終編集位置に「L」記号が現れます)。

ところが、マクロで編集をしてからundoをすると、上記の動作に不具合が出るこ
とがあるようです。具体的には以下のように、undo時、最終編集位置として記憶
しているところと違うところにカーソルが飛ぶようです。

・リターンキーで改行を続けて入れます→これで、改行が複数続いた最後が最終
  編集位置かつカーソル位置となります。

・問題のマクロを実行。まず、改行がふたつ続いているところの後ろ側にカーソ
  ルがあると、前側の改行をdelで削除します(つまり、この場合は削除が行わ
  れる)。その後、他の動作もするのですが、ここは再現性と関係ないようです。

・その後、undoで元に戻し、上記のdelによる改行削除をundoすると、本来、最
  終編集位置もカーソル位置も、最初に置いたカーソル位置(最後の改行)にな
  るはずです。

ところが実際は、↓のようになります。

・カーソルは、最後から一つ前に飛ぶ(この位置がおかしい)

・左端、行番号を表示させているよりももっと左に赤い小さなマークがあります。
  最終編集位置のある行を示すマーカーのようですが、これは、最後の改行にあ
  ります(これは正しい)

・この状態からカーソルを別の行に移すと、最後の改行の位置に「L」記号が出
  る(これは正しい)

・カーソルを別の行に移した後でも移す前でも、別のマクロで最終編集位置に戻
  すと、最後の改行の位置に戻る(これは正しい)

undo後、続けて入力したいときに不便なので、次のバージョンで直していただけ
ると幸いです。

Best regards,
Buckeye

[ ]
RE:09074 秀丸エディタVer.5.12−最終編集No.09075
Buckeye さん 06/02/03 10:18
 
ふと思ってやってみたら、マクロでなくても再現しました(^^;)

・リターンキーで改行を続けて入れます→これで、改行が複数続いた最後が最終
  編集位置かつカーソル位置となります。

・1行もどってdelキーで前側の改行を削除。

・その後、undoで元に戻し、上記のdelによる改行削除をundoすると、本来、最
  終編集位置もカーソル位置も、最初に置いたカーソル位置(最後の改行)にな
  るはずです。

ところが実際は、↓のようになります。

・カーソルは、最後から一つ前に飛ぶ(この位置がおかしい)

・左端、行番号を表示させているよりももっと左に赤い小さなマークがあります。
  最終編集位置のある行を示すマーカーのようですが、これは、最後の改行にあ
  ります(これは正しい)

・この状態からカーソルを別の行に移すと、最後の改行の位置に「L」記号が出
  る(これは正しい)

・カーソルを別の行に移した後でも移す前でも、別のマクロで最終編集位置に戻
  すと、最後の改行の位置に戻る(これは正しい)

なお、再現手順の最初、「1行もどってdelキーで前側の改行を削除」を「そのま
まの位置からBSキーで前側の改行を削除」とすると、上記のような不具合は出ま
せん。

Best regards,
Buckeye

[ ]
RE:09075 秀丸エディタVer.5.12−最終編集No.09078
秀丸担当 さん 06/02/03 11:27
 

手順を元にいろいろと検証してみたのですが、アンドゥ後のカーソル位置が削除
する方法によって違うということが問題と捉えていいでしょうか。

たとえば、以下のようなテキストで、

12345

3の位置にカーソルがあってDelキーを押してアンドゥすると、3の位置にカーソ
ルがあります。
4の位置にカーソルがあってBackSpaceキーを押してアンドゥすると、4の位置に
カーソルがあります。
どちらも同じ3を消してからアンドゥしていますが、削除する方法によってカー
ソル位置は違います。
削除のアンドゥには2種類あって、意図的にそのようにして作ってあります。
12345を改行に置き換えても同じことが言えると思います。

「最後に編集した所」のLマークは、このカーソル位置とは別の動きになってい
て、上記の手順ではどちらも4の位置にLマークが来ます。
ここに食い違いがあるわけですが、もし一致させるべきとしたら、Delキーの後
のLマークをカーソル位置の場所にするようにしたほうがいいかもしれません。
しかし、そうすると

>・左端、行番号を表示させているよりももっと左に赤い小さなマークがあります。
>  最終編集位置のある行を示すマーカーのようですが、これは、最後の改行にあ
>  ります(これは正しい)

の思惑とは違ったことになってしましますが、どうでしょうか。

[ ]
RE:09078 秀丸エディタVer.5.12−最終編集No.09083
Buckeye さん 06/02/04 06:08
 
秀丸担当さん、Buckeyeです。

あ、そっか。アンドゥ後のカーソル位置は、最終編集位置ではなく、アンドゥし
た編集を行う直前のカーソル位置なんですね。そういう意味であれば、Delキー
とBackSpaceキーとでアンドゥ後のカーソル位置が異なるのは当然ですし、別に
どうこうしていただくほうがいいとも思いません。

    私の手元で不便をしていることは、自作のマクロを書き換えて対応します。

ただ、説明していただいた点を確認するため、少し、いろいろとやってみたとき、
何か変に感じる動きが、ひとつ、ありました。せっかくなのでお知らせしておき
ます。

>12345を改行に置き換えても同じことが言えると思います。

文字と改行とで、動作が異なることがあるようです。今度はBackSpaceキーです。

・文章の前に改行をたくさん入力する。

・文章の頭(行頭)にカーソルを置き、BackSpaceキーで次々と改行を削除。前
  の文章とひとつの段落にしてしまう。

・ここからアンドゥをくり返す。

    ・最初のアンドゥで、段落がふたつに割れ、後ろの段落の行頭にカーソルが
      来る(これは正しい)
    ・次のアンドゥで、段落間が一行空き、空いたところにカーソルが来る。つ
      まり、後ろの段落の一行、前にカーソルが来る。(これはDelキーの動作
      では???)
    ・その後のアンドゥでは、段落間の空きが増えていくが、そのときのカーソ
      ル位置は、後ろの段落の一行、前に。(3回目以降のアンドゥの処理とし
      ては正しいのでしょう。2回目のアンドゥの狂いがそのままなので、変で
      はあるけど)

Best regards,
Buckeye

[ ]
RE:09083 秀丸エディタVer.5.12−最終編集No.09084
秀丸担当 さん 06/02/06 10:27
 

>>12345を改行に置き換えても同じことが言えると思います。
>
>文字と改行とで、動作が異なることがあるようです。今度はBackSpaceキーです。

実は自分でもこれを書いた後に気づきました。
直前の行が改行だけの行のとき、BackSpaceはBackSpaceとしての動作ではなく行
削除としての動作となってしまっていて、思惑とは違う動作になっていたようで
す。
ちょうど折り返したところに禁則無しで改行だけがあると、BackSpace後のアン
ドゥでカーソル位置がずれるのが気になります。
修正したいと思いますが、互換性の懸念もあるので次期バージョンのβ版での修
正とするか、検討したいと思います。

[ ]
RE:09084 秀丸エディタVer.5.12−最終編集No.09091
Buckeye さん 06/02/10 05:11
 
秀丸担当さん、

わたしとしては別にこれで困っているわけではないので、必要性や影響を考えて
修正するかどうかを決めていただければけっこうです。

で、こういうのって気になりはじめると気になるもので、また一点、あれっと思
うことがあったのでお知らせしておきます。

入力中、「やり直し」で戻ってから、「やり直しのやり直し」で元に戻すときの
カーソル位置です。

入力中に「やり直し」で戻していくと、カーソルは文末ママです(感覚的にこれ
が正しいと思います)。

ここから「やり直しのやり直し」で、文字を復元していきます。このときのカー
ソル位置は、最後に確定された文字列の「前」になります。DelキーとBackSpace
キーの「やり直し」で、「アンドゥ直前のカーソル位置に戻る」となっているの
であれば、ここは行末であるべきだと思うんですけど、いかがでしょうか。

あと、この投稿を書きながら、ふと、気になってチェックしてみたんですが……

>直前の行が改行だけの行のとき、BackSpaceはBackSpaceとしての動作ではなく行
>削除としての動作となってしまっていて、思惑とは違う動作になっていたようで
>す。

との関連かなと思いますが、私の#9083の操作をしたあと、「やり直しのやり直
し」をすると、なぜかカーソル位置がずれるようです。つまり、

    ・その後のアンドゥでは、段落間の空きが増えていくが、そのときのカーソ
      ル位置は、後ろの段落の一行、前に。(3回目以降のアンドゥの処理とし
      ては正しいのでしょう。2回目のアンドゥの狂いがそのままなので、変で
      はあるけど)

だったものが、「後ろの段落の頭」に移動します。

Best regards,
Buckeye

[ ]
RE:09091 秀丸エディタVer.5.12−最終編集No.09094
秀丸担当 さん 06/02/10 10:18
 

>入力中、「やり直し」で戻ってから、「やり直しのやり直し」で元に戻すときの
>カーソル位置です。
>
>入力中に「やり直し」で戻していくと、カーソルは文末ママです(感覚的にこれ
>が正しいと思います)。

確かに、入力後、やり直しして、さらにやり直しのやり直しをしたときのカーソ
ル位置が違和感があるかもしれません。
こちらも前の件と合わせて次期バージョンで修正してみようと思います。

>との関連かなと思いますが、私の#9083の操作をしたあと、「やり直しのやり直
>し」をすると、なぜかカーソル位置がずれるようです。つまり、

これもたぶん同じことでしょうか。やり直しのやり直しの修正で直るのではない
かと思います。

[ ]