sakura-editor / sakura

SAKURA Editor (Japanese text editor for MS Windows)
https://sakura-editor.github.io/
Other
1.25k stars 163 forks source link

選択行をソートする機能でEOFマークのある行がソートに含まれない #1713

Open arigayas opened 3 years ago

arigayas commented 3 years ago

問題内容

複数の行を選択して行のソートする機能[編集→整形→選択した行を昇順ソート/降順ソート]で 選択したデータの最後の行にEOFマークのある場合、ソートされるデータに含まれず、ソートされないのは仕様なのでしょうか? 仕様でなければ期待する結果のように動作して欲しいです。

再現手順

1.以下のような状態でテキストデータを用意します。

122[改行]
316[改行]
894[改行]
153[改行]
674[改行]
214[改行]
548[改行]
746[改行]
989[改行]
486[改行]
122[EOF]

2.全て選択します。 3.昇順ソートを実行します。

実際に実行される結果

4-1.

122[改行]
153[改行]
214[改行]
316[改行]
486[改行]
548[改行]
674[改行]
746[改行]
894[改行]
989[改行]
122[EOF]

期待する結果

4-2.

122[改行]
122[改行]
153[改行]
214[改行]
316[改行]
486[改行]
548[改行]
674[改行]
746[改行]
894[改行]
989[EOF]

再現頻度

100%

問題のカテゴリ

環境情報

berryzplus commented 3 years ago

実装コードを見たら明記されてるんですが、設計当初に意図した通りの挙動っぽいです。 https://github.com/sakura-editor/sakura/blob/25ccc53996d1b4e148cb2fe674c98348e013c22f/sakura_core/cmd/CViewCommander_Edit_advanced.cpp#L629-L630

ただまぁ、最初に作成されてから20年近く経過しており、「設計当初」を堅持しているわけでもなさそうです。 https://github.com/sakura-editor/sakura/blob/25ccc53996d1b4e148cb2fe674c98348e013c22f/sakura_core/cmd/CViewCommander_Edit_advanced.cpp#L631-L635

技術的にできないのか?というとそうでもないので対応してもええんかな?と思ったりもします。 ただし、このコードの複雑度はまぁまぁ高いので、自分が手を加えるなら大幅なリファクタリングをする感じになると思われます。

所詮、特定範囲を切り取って整形して書き戻すだけのシンプルなロジックなので、現状のコードは複雑すぎるような気がしないでもないです。

arigayas commented 3 years ago

仕様変更しても良いかも?ということだと理解しました。

この仕様のせいでソートのやり直しを時々起きていたので良かったです。

berryzplus commented 3 years ago

仕様変更は以下の内容になると思います。

変更前: ファイルの最終行はソート対象外。      改行コードはソート前後で変化しない。 変更後: 選択範囲末尾の長さがゼロである行はソート対象外。      ★選択範囲の最終行に改行コードがないとき、既定の改行コードを付与してからソートする。

★の挙動を「仕様」にしたくなくて現在のカタチになったのではないかと。

勝手に改行コードが付くのはキモい、という考え方もありえますね。 共感はできませんが「既定の改行コード」みたいな方式を嫌がる人はよくいる気がします。