折り畳みと保存マクロ実行No.09443
pao さん 06/02/24 13:31
 
 V6.00β4(それ以前でも)で、アウトラインを折りたたんで表示している時に、マ
クロを使って上書き保存すると全て開いてしまいます。
(具体的には save コマンド、saveas コマンドがダメなようです)
 お手数ですが、ご確認いただけますか?

[ ]
RE:09443 折り畳みとマクロ実行No.09452
pao さん 06/02/24 17:36
 
 いろいろ試してみましたが、マクロ全般だめなのかな(^^;)。

[ ]
RE:09452 折り畳みとマクロ実行No.09457
秀丸担当 さん 06/02/24 18:53
 

> いろいろ試してみましたが、マクロ全般だめなのかな(^^;)。

現在のところマクロを実行すると折りたたみと部分編集が解除されるようになっ
ています。
アウトライン関係のマクロをまだ作っていないです。
これらは解除しないと従来のマクロの互換性は維持できないので、マクロの仕様
をどうするべきか考え中です。

互換性も維持しつつ、折りたたみと部分編集も維持できる何かいい案があれば募
集したいです。

[ ]
RE:09457 折り畳みとマクロ実行No.09461
Iranoan さん 06/02/24 19:23
 
 秀丸担当さん今日は、Iranoan です。
> 互換性も維持しつつ、折りたたみと部分編集も維持できる何かいい案があれば募
> 集したいです。
 まず、どれは折り畳んだままでも同じなのか分類する必要があると思います。

 まだ抜けていることが有ると思いますが、今思いつくのは次の通りです。
(どれもメニューから行うときも同様の心算です。)
・検索系は、折り畳みを解除しないオプション (searchdown etc.) とフラグ
  (setsearch) が有ると良い
・next/prevfunc, directtagjump, tagjump は折り畳まれている部分にカーソ
  ルが来るときは展開。展開しないオプションは要望があってからで良いで
  しょう。
・goleftkakko 等括弧に移動するは、該当箇所が折り畳まれていれば展開
・上記カーソル移動系は、moveto, movetolineno 等明示して異動するコマン
  ド以外は展開しない。明示して異動するコマンドは、移動先が折り畳まれて
  いれば展開

 基本的には、カーソルが移動する可能性のあるコマンドが問題になると思い
ます。少なくとも、今回最初にあった save 等の保存系と、showwindow 等の
描画系は、execmacro, loadhilight 以外の読み込み系は展開する必要はない
と思います。

 皆さんのツッコミを期待します。

[ ]
RE:09457 折り畳みとマクロ実行No.09463
pao さん 06/02/24 19:26
 
 「現在の折りたたみ/部分編集の状況を保存」と、「保存された折りたたみ
/部分編集の状況を再現する」ことができれば、マクロ自体を全部開いた状態
で実行することができると思います。

disabledraw;
折りたたみ保存;
★ここで全部折り畳みが解除される
[マクロ本文]
折りたたみ再現;
enabledraw;

 とすればいいと思うのですが、いかがでしょう。重いかな。
 ……あー、でもこれだとマクロ内で折り畳みの処理をするときに例外処理が
必要になりますね。うーん。
#でも、日常の仕事でマクロを使いまくってる人間なので、必要なのです。

[ ]
RE:09463 折り畳みとマクロ実行No.09465
Iranoan さん 06/02/24 19:43
 
 秀丸担当さん、pao さん今日は、Iranoan です。
>  「現在の折りたたみ/部分編集の状況を保存」と、「保存された折りたたみ
> /部分編集の状況を再現する」ことができれば、マクロ自体を全部開いた状態
> で実行することができると思います。
 先の投稿で書き忘れたので、ここに繋げてしまいますが、折り畳みや部分編
集の状態を正確に戻すことは不可能だと思います。何故なら
・範囲選択して任意の場所を好きなだけ折り畳んでおくこと
・マクロで折り畳みや部分編集の最初や最後を区別する文字列をそうでない形
  式に編集することも、別の場所へ移動する
が出来るからです。よって出来るのは、できるだけ展開しない、程度だと思い
ます。

[ ]
RE:09465 折り畳みとマクロ実行No.09518
秀丸担当 さん 06/02/27 16:15
 

マクロ仕様についてのご意見ありがとうございます。

最初に考えていたのは、従来のマクロは全て折りたたみ/部分編集を全て解除し
て、今後作成するマクロについてはマクロファイルの先頭で解除しないというこ
とを記述するような方式にしようかと考えていました。

ですがカーソルの動きや範囲選択の関係無いマクロは、そんなこと関係ないです
ね。
聞いておいてよかったです。

地道な作業になりますが、一つ一つの文について互換の動作と新しい動作を切り
分けられるようにしたほうがよさそうです。

[ ]
RE:09518 折り畳みとマクロ実行No.09578
Iranoan さん 06/02/28 22:38
 
 秀丸担当さん今日は、Iranoan です。
> 地道な作業になりますが、一つ一つの文について互換の動作と新しい動作を切り
> 分けられるようにしたほうがよさそうです。
 忘れがちなキーワードとして、lineno, y, linecount, linecount2 があり
ますね。特に「部分編集」が「ローカル編集モード」の時にどうするか、注意
が必要そうです。
 そうなると、moveto, movetolineno 文や ytolineno() 関数等もだなあ〜。
考え出すと、切り分けは大変ですね。
 また、よく考えてみると、カーソル移動する文や gettext() 関数は、「部
分編集」でも (たとえ「ローカル編集モード」であっても)、内部的に移動が
できていれば、必ずしも解除する必要は無いんですね。そして、マクロ終了時
に、カーソル位置が部分編集の領域以外の時に、解除すればよいんですね。

[ ]