今更なんですが、settotaltextみたいなやNo.11597
こみやんま さん 24/03/14 14:49
 
今編集ペインの文章を一気に変更しようとすると、

begingroupundo();
selectall();
insert(全文);
endgroupundo();

的なことやってるんですが、そもそも論で
settotaltext();
があればいいんでないの、と思うのですが...


編集ペインそのものを秀丸独自関数でこねこね操作するよりも、
(現代のPCとか大抵テキスト処理という尺度ならメモリ超絶あまりまくってるので)
テキストをガッと一気にjsの変数メモリ内に置いて、
jsの汎用文字列加工手段を使って成形した後、
最後にドンと結果を反映、とした方が圧倒的に高速なため
var src = gettotaltext();

var success = settotaltext(dst);
的な対になってる方がいいかなーと思います。

[ ]
RE:11597 今更なんですが、settotaltextみNo.11599
秀丸担当 さん 24/03/15 15:12
 
settotaltextのようなものがあったら一文でできるのでいいかもしれないです。
selectallは、実際は部分編集のときに部分になるのでgettotaltextとは対ではない
です。
(setcompatiblemode 0x0c;による)

そもそものgettotaltext自体もあったほうがいいと思ってはいたのですが、できたの
はわりと最近です。
今まではgettext(...)なところを、いまさらながらとHidemaru_GetTotalTextUnicode
に合わせる意味で作ったものでした。
対になるという意味でも追加を考えようと思います。

[ ]
RE:11599 今更なんですが、settotaltextみNo.11644
こみやんま さん 24/05/17 14:29
 
こちらの実装は、とまっちゃいましたか?
非同期は難しそうでも、同期限定なら出来そうかなぁと思うのです。

hidemaru.getTotalText()が「非同期あり」で、hidemaru.setTotalText()は「同期の
み」はイヤだなぁといったことであれば、

hidemaru.setTotalText()は無いけど、settotaltext() だけはある、というのもギリ
ギリありなようなきもしなくもないです。


javascriptが「テキストをメモリ制限が無く加工がしやすい」という性質がある以上、
「編集領域から取得」→「加工」→「編集領域に戻す」が黄金パターンなので、ある
となしとではかなり違うが出ると思うんですよねー。


[ ]
RE:11644 今更なんですが、settotaltextみNo.11645
秀丸担当 さん 24/05/17 16:07
 
settotaltextまたはhidemaru.setTotalTextは、非同期の制約とかなにかネックにな
っているわけではなく、あったらあったでいいものです。
現状selectallとかでできるので、すっきり目的であればgettotaltextと対ではない
ので、すっきりではないかも、というのがあるだけです。
でも無理にしない理由もないので追加しようと思います。

[ ]
RE:11645 今更なんですが、settotaltextみNo.11646
こみやんま さん 24/05/17 16:51
 
>でも無理にしない理由もないので追加しようと思います。

よろしくお願いします。

現状、以下にみたいになりやすく、


// 通常選択ならその部分を置き換え、そうでないなら全文置換え
disabledraw();
begingroupundo();
if ( !selecting() ) { selectall(); }
insert(newText);
endgroupundo();
enabledraw();


「やりたい目的」と「実際の記述内容」の乖離が比較的大きく、
普通の人が見ても「え? ここ何やってんの?」と思ってしまうと思います。

熟練者が見ても「一種のバッドプラクティスか、これは」と思ってしまうかと...



本来ならば、(こまかな範囲編集モードとかは無視すれば)

// 通常選択ならその部分を置き換え、そうでないなら全文置換え
if ( selecting() ) { insert(newText); }
else { settotaltext(newText); }


といったような記述が理想に近いと思います。

[ ]