sakura
sakura copied to clipboard
選択行をソートする機能でEOFマークのある行がソートに含まれない
問題内容
複数の行を選択して行のソートする機能[編集→整形→選択した行を昇順ソート/降順ソート]で 選択したデータの最後の行に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%
問題のカテゴリ
- 仕様の問題
- プログラムの動作上の問題
- 正式リリース版
環境情報
-
OS バージョン Windows 10 Pro 64bit
-
サクラエディタバージョン サクラエディタ v2.4.1.2849 32bit (tag v2.4.1) (GitHash ee8234f65fd7a69116e07e819c6972b246eda926) (GitURL https://github.com/sakura-editor/sakura.git)
Compile Info: V1916 WPR WIN601/I800/C000/N601 Last Modified: 2020/5/30 03:10:34
実装コードを見たら明記されてるんですが、設計当初に意図した通りの挙動っぽいです。 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
技術的にできないのか?というとそうでもないので対応してもええんかな?と思ったりもします。 ただし、このコードの複雑度はまぁまぁ高いので、自分が手を加えるなら大幅なリファクタリングをする感じになると思われます。
所詮、特定範囲を切り取って整形して書き戻すだけのシンプルなロジックなので、現状のコードは複雑すぎるような気がしないでもないです。
仕様変更しても良いかも?ということだと理解しました。
この仕様のせいでソートのやり直しを時々起きていたので良かったです。
仕様変更は以下の内容になると思います。
変更前: ファイルの最終行はソート対象外。 改行コードはソート前後で変化しない。 変更後: 選択範囲末尾の長さがゼロである行はソート対象外。 ★選択範囲の最終行に改行コードがないとき、既定の改行コードを付与してからソートする。
★の挙動を「仕様」にしたくなくて現在のカタチになったのではないかと。
勝手に改行コードが付くのはキモい、という考え方もありえますね。 共感はできませんが「既定の改行コード」みたいな方式を嫌がる人はよくいる気がします。