部分編集時の変換モジュール実行No.09067
colder さん 16/09/11 20:44
 
colderです。
部分編集時、最終行の改行は編集可能な文字には含まれていませんが、変換モジュー
ル(特に行指向のもの)に渡す際には、最終行の改行も含めないと問題が生じます。


以下のテキストでaに囲まれた数字だけの行を部分編集している際、全選択して、
ソートを行うと数字だけの行の後に空行が一行現れます。
a
3
2
1
a

例2
以下のテキストでaに囲まれた数字だけの行と空行を部分編集している際、全選択し
て、ソートを行うとき、空行が無視されます。
a
3
2
1

a

[ ]
RE:09067 部分編集時の変換モジュール実行No.09071
秀丸担当 さん 16/09/12 14:13
 

確かにそうなることが確認できました。
標準添付のソートだけを特別扱いすることはできるとは思います。
標準添付のソートはcsvモードのルーラー部分右クリックのソートでも使われた
りするので、これは特別扱いで修正しようと思います。

ただ「プログラム実行...」で「sort.exe <con >con」とした場合も同様で、実
行するプログラムは何であるかはわからないので、sort.exeもできないと言われ
ると、対策は難しそうです。

[ ]
RE:09071 部分編集時の変換モジュール実行No.09072
colder さん 16/09/12 15:48
 
>確かにそうなることが確認できました。
>標準添付のソートだけを特別扱いすることはできるとは思います。
>標準添付のソートはcsvモードのルーラー部分右クリックのソートでも使われた
>りするので、これは特別扱いで修正しようと思います。

これは標準添付のソートだけを特別扱いして済む問題ではないです。
多くの行指向の変換モジュールがを実行するときに起こる問題です。
部分編集時、行指向の変換モジュールを実行するときは、最終行を渡すときは(実際
に改行がない場合を除いて)常に改行も含めて渡し、もし、変換結果が改行で終わっ
ていないときには、改行を自動的に付加するようなことはできないでしょうか?

[ ]
RE:09072 部分編集時の変換モジュール実行No.09073
秀丸担当 さん 16/09/12 16:53
 

確かにそうではありますが、秀丸エディタにとっては「プログラム実行」同様、
どういう処理が行われるかはブラックボックスの中の出来事で、それに変化があ
ることになると思います。
例えばファイルに出力する変換モジュールがあったとして、今までとは違う内容
が出力されることになります。
とはいえ、行単位指定の変換モジュールであれば、現実的には問題ないと思いま
す。
行単位の場合はできるように修正したいと思います。

[ ]
RE:09073 部分編集時の変換モジュール実行No.09078
colder さん 16/09/14 14:31
 
秀丸ver8.66β5で試したところ、例2の問題がまだ解消されていません。

>どういう処理が行われるかはブラックボックスの中の出来事で、それに変化があ
>ることになると思います。
>例えばファイルに出力する変換モジュールがあったとして、今までとは違う内容
>が出力されることになります。
変換モジュールに渡すテキストを変えてしまうと問題が起こりうるという可能性を失
念していました。
では、変換モジュール側の変更も必要とするということでどうでしょうか?
行単位の変換モジュールの場合には構造体HIDEMARUFILTERINFOのfMustLineUnitメン
バーには1が入っていると思いますが、これが2になっている場合にのみ、改行を付け
るとか。

[ ]
RE:09078 部分編集時の変換モジュール実行No.09079
秀丸担当 さん 16/09/14 15:46
 

fMustLineUnitで2のときに改行の調整をするというのもありだと思います。
m.fujimotoさんの作られている「秀丸パイプ」の変換モジュールは何でもありな
ので、もしこれが行単位指定だったとしたら、考えるべきと思います。
行単位指定ではないようなので、V8.66β5の状態でも現実的に問題は起きなさそ
うですが、どうでしょうか。

例2の問題はよく確認していませんでした。すみません。
最後の行が空行の場合、その行を含めて選択しようとしているかどうかを判別す
る要素が無いので難しそうです。
「すべて選択」の直後だけとか、改行の選択は可能だけど編集はできないとか、
特例を設けることで手段はありそうですが、いろいろ矛盾を生みそうです。
文字単位の部分編集ができれば矛盾は無いとは思いますが、行単位である限りは
そういう仕様ということにさせていただきたいところです。

[ ]
RE:09079 部分編集時の変換モジュール実行No.09080
colder さん 16/09/14 20:54
 
>最後の行が空行の場合、その行を含めて選択しようとしているかどうかを判別す
>る要素が無いので難しそうです。
>「すべて選択」の直後だけとか、改行の選択は可能だけど編集はできないとか、
>特例を設けることで手段はありそうですが、いろいろ矛盾を生みそうです。
>文字単位の部分編集ができれば矛盾は無いとは思いますが、行単位である限りは
>そういう仕様ということにさせていただきたいところです。
確かに最後の行が空行の場合、判別方法がありませんね。
了解しました。

[ ]
RE:09079 部分編集時の変換モジュール実行No.09082
colder さん 16/09/15 13:45
 
>最後の行が空行の場合、その行を含めて選択しようとしているかどうかを判別す
>る要素が無いので難しそうです。
>「すべて選択」の直後だけとか、改行の選択は可能だけど編集はできないとか、
>特例を設けることで手段はありそうですが、いろいろ矛盾を生みそうです。
ふと思いついたんですけど、改行の\r\nの内、\rだけを編集可能にするのはどうでし
ょうか?
\nは編集不可なので改行が無くなることもなく、最終行の選択も可能になると思うん
ですが。

[ ]
RE:09082 部分編集時の変換モジュール実行No.09084
秀丸担当 さん 16/09/15 17:09
 

\r\nを別々にカーソル移動可能にすると、部分編集の最後の空行については何ら
かの方法が生まれると思いますが、他の部分に与える影響が大きく、ややこしい
ことになると思います。
最後の空行が必要となると、やはり別のネタになってしまいますが、文字単位の
部分編集ができるといいと思います。

[ ]
RE:09084 部分編集時の変換モジュール実行No.09087
colder さん 16/09/17 18:33
 
よくよく考えてみたら、部分編集時、最終行が空行の場合選択しているかどうか判定
しようがないので、空行以外なら改行を追加しなくても最終行が選択されていること
が分かるので変換モジュールに文字列を渡すとき改行を追加する必要はないですね。
変換モジュールから返却された文字列から最後の改行を削除するだけで十分です。

[ ]
RE:09087 部分編集時の変換モジュール実行No.09090
秀丸担当 さん 16/09/20 10:56
 

V8.64以前のままと同等で、秀丸エディタ本体としては、最初から改行を追加せ
ずに変換モジュールに渡して、そのまま入れ替えるのでもいいと思います。
秀丸エディタ標準の変換モジュール側を変更して、末尾の改行が無ければ、改行
を増やさずに返すといいです。
colderさん作の変換モジュールは既にそうなっていると思います。

秀丸エディタ標準のソートとしては、どちらでもいいです。
未知の変換モジュールでは対応できないので、問題なければ現状のβにしたいと
ころです。

改行を追加せず渡して、返されたデータから改行を消すのは、都合が悪い可能性
があると思います。
ソートでは昇順/降順が逆の場合で本当に改行がある場合や、変換モジュールに
よっては行数が増減して本当に改行があるという場合もあると思います。

[ ]