|
はじめまして、 A1 といいます。
秀丸歴は10年以上ですが、マクロの利用歴はその半分以下です。
暫く ROM をやっていたのですが、 V8. で新設される機能の中に「悲願(大袈裟)」
ともいえる
「execmacro に於ける引数渡し」
が在るのを見て、(普段使わない)β版を DL してヘルプを覗いて見ました。
-------
気になった事が幾つか在ります。
※「要望」というよりも「こういうのはネタとしてアリだろうか?」という
(一般論的な)疑問の段階の為、「β版会議室」ではなくこちらに投稿する次第
です。
(1) 実引数の取得:
getarg() も良いが、(呼び出され側のメインルーチンで)$$1,$$2 ..
等で取得できないか
(2) 戻り値の取得:
(endmacro/return 文の拡張などで)$$return に戻り値を得ることは
できないか
※参考: <秀丸エディタ マクロ作者会議室 - スレッド05505, 07/04/26>
(3) goto 型の外部呼出し:
(call 型の) execmacro とは異なり、呼び出し元に処理を返さない外部
呼出しはできないか
(1),(2) は「サブルーチンのコードをそのまま切り取って外部モジュール化できたら
良いな〜」
と以前から思っていたもので、「悲願」達成を目前にして急に欲が出てきたという次
第です。
(3) は少し特殊で、現在の execmacro は呼び出し元のマクロの状態(コードと変
数)を(仮想的な)
「スタック」に積んでから、実行後に呼び出し元に戻るという動作をしてるように見
えますが、
execmacro のネストには制限があって(記憶で申し訳ないのですが) 秀丸5.09 + Wi
n2000SP3 の
時は確か 6〜7 段でアウトになっていました。
マクロ中でサブマクロを呼び出すのはよくあることですが、通常の使い方であれば
この制限に引っかかることはまずありません。
ところが、予め登録した中からメニューを組んで、ユーザに選ばせた別のマクロを呼
び出す
「ランチャー」のようなマクロの場合、それ自身が「スタック」を一つ消費してしま
うため、
目的のマクロを呼び出す時点でネストに余裕がなくなってしまいます。
execmacro に引数が導入されてもこの状況は変わりません。
※slide_moon さんの 「MacroLink」 は自分自身を再帰的に用いることができる
が、
この機能を活用しようとして上の制限に引っかかってしまい、
単一マクロでネストしたメニューを出せるようなものを自作した。
更に、「ランチャー(A)」は目的のマクロ(B)を呼び出せばそこで仕事は終わりなので
「呼び出し元に処理を返す必要がない」マクロの典型といえます。
なので、goto 型の呼び出し(A のマクロ状態をクリアして最初から B が
指定されたかのように B を実行)が実現されれば、上で述べた心配事がひとつ減り
ます。
-------
(1),(2) については、過去ログに議論があったのですが、 (3) に相当する話題を
見付けられなかった為、このタイミングで提起してみました。
「秀丸担当」さんに限らず、マクロの作者さん等にもご意見を伺いたいです。
よろしくお願いします。
※ 個人的妄想ですが、 V8.β を見るまで以下のように考えていました。
{call "ファイル名[:ラベル]" 引数1, 引数2, ..;}
{goto "ファイル名[:ラベル]" 引数1, 引数2, ..;}
{return 戻り値;} は状況により {endmacro 戻り値;} を兼ねる
{execmacro "ファイル名";} は盲腸
…キーワードあまり増えて欲しくないんです (^^;
|
|