[ 新規に投稿する ]

質問2つNo.09347
ラフ さん 21/05/02 20:46 [ コメントを投稿する ]
  1. execmacroの仕様について
(1) フルパスでマクロファイル名を渡すとそのパスどおりのマクロファイルを起動。
(2) ファイル名だけを渡すとmacrodirにあるマクロファイルを起動。
(3) 相対パスで渡すと、アクティブのテキストファイルが存在するフォルダからの相対パスのマクロファイルを起動
となっていますが、(3)はなぜこういう仕様になったのでしょうか?
通常テキストファイルはディスク中のいろいろな場所に点在しており、マクロファイルはmacrodirに置いておくのが一般的。
(3)の仕様だと、特定のフォルダにある文書専用のマクロでもない限りあまり使い道がないですよね。
つまり(3)の相対パスで渡した場合、macrodirからの相対パスにあるマクロファイルを起動するのが自然だと思いますがいかがでしょうか?
マクロファイルが多数になってきたため、macrodirの配下にサブフォルダをいくつか作って系統別に格納したいのですが。
特別な理由がないならmacrodirからの相対パスに変更する事(互換性を考えて設定オプションでの選択も可)は可能でしょうか?

2. createobjectでhtmlfileオブジェクトを作成し、parseしたあと値を取り出すところまでは上手くいくのですが、
parseで戻ってきたオブジェクトをstringifyしたときに、本来なら元の文字列が返ってくるはずが元のJSON文字列内容に関係なく常に7が返ってきます。
秀丸マクロのオブジェクトになってるからかとも思いましたが、それだと値を取り出すことも出来ないはずだなと。
stringifyをうまく呼び出す方法はありますでしょうか?
[ ]
RE:09347 質問2つNo.09348
Iranoan さん 21/05/02 22:15 [ コメントを投稿する ]
  ラフさんこんにちは、Iranoan です
1 にだけ反応します
> (3) 相対パスで渡すと、アクティブのテキストファイルが存在するフォルダからの相対パスのマクロファイルを起動
> となっていますが、(3)はなぜこういう仕様になったのでしょうか?
たまたま偶然そうなった気もするのですが、仕様変更してしまうのは互換性の観点からよろしくないと思います

> (3)の仕様だと、特定のフォルダにある文書専用のマクロ
実際私は後者の使い方をしていたことが有りますが、仕様が変わるとマクロを書き換えなければならなくなります

> マクロファイルが多数になってきたため、macrodirの配下にサブフォルダをいくつか作って系統別に格納したい
これがしたいなら、マクロの書き方を変えて
execmacro macrodir + "\\package\\hoge.mac";
execmacro currentmacrodirectory + "\\hoge.mac";
のどちらかにすれば良いのではないでしょうか
[ ]
RE:09347 質問2つNo.09349
h-tom さん 21/05/02 23:12 [ コメントを投稿する ]
  h-tom です。

>2. createobjectでhtmlfileオブジェクトを作成し、parseしたあと値を取り出すとこ
>ろまでは上手くいくのですが、
>parseで戻ってきたオブジェクトをstringifyしたときに、本来なら元の文字列が返っ
>てくるはずが元のJSON文字列内容に関係なく常に7が返ってきます。
>秀丸マクロのオブジェクトになってるからかとも思いましたが、それだと値を取り出
>すことも出来ないはずだなと。
>stringifyをうまく呼び出す方法はありますでしょうか?
どんなコードなのかわからないので予想になりますが、オブジェクト関連でよくあるのが、
引数がオブジェクトとして認識されていない事です。

allowobjparam 使って、引数をオブジェクトとして認識させてみてはどうでしょう。
第一パラメーターのみの、
    allowobjparam 1; 
だと、数値としての呼び出しに失敗しないと、オブジェクトにならないので、
第二パラメータ以降を指定する方法を使いましょう。
[ ]
RE:09348 質問2つNo.09351
ラフ さん 21/05/03 11:34 [ コメントを投稿する ]
  こんにちは
>実際私は後者の使い方をしていたことが有りますが、仕様が変わるとマクロを書き換えなければならなくなります
まぁ、そういう人もいるでしょうね。
だから、互換性を考えて設定オプションでの選択も可、はできませんか?
と聞いているのです(^^)

実際にやっているのは多数のマクロをマクロ登録するのは大変なのと、引数が渡せないので、
execmacroやrun系の命令を使った外部コマンド起動などのメニューファイルを作成しています。
それを読み込んだ結果をmousemenuarrayで選択して起動するランチャー的なマクロを
組んであるのですが、今まではmacrodir配下に全て置いていたので、メニューファイルの中は
表示文字列、マクロファイル名、マクロへの引数でした。
で、マクロファイルをサブフォルダに移したらマクロファイル名の部分がサブフォルダ\マクロファイル名に
なるわけですが、文書のフォルダ\サブフォルダ\マクロファイル名を起動しようとしていることが分かったので
質問に至っています。
現状は仕方なく、\を探してあればmacrodir\を前につけて起動するように手を加えてとりあえず運用しています。
[ ]
RE:09349 質問2つNo.09352
ラフ さん 21/05/03 11:38 [ コメントを投稿する ]
  こんにちは
allowobjparamですか、そういうのあったんですね。

コード端折りますが、

allowobjparam 1, 1;
$b = callmethod_returnstr(#objJson, "stringify", #a);
allowobjparam 0;
でうまくいきました。

ありがとうございました。
[ ]
RE:09351 質問2つNo.09354
秀丸担当 さん 21/05/06 11:30 [ コメントを投稿する ]
 
execmacroの相対パスについて、最初からマクロファイルからの相対の動作になっていればよかったですが、Iranoanさんの言われる通り、いったんそういう動作になってしまったため、互換性のために現在のフォルダからの相対としての動作が維持されています。
例えばマクロファイルからの相対パスの場合は、currentmacrodirectoryを使うといいです。
execmacro currentmacrodirectory + "\\subfoler\\testsub.mac";
このあたりのことや回避方法はヘルプに書いておこうと思います。

オプションを追加や何らかの変更をするとしたら、[その他]→[動作環境]→[トラブル対策]の「その他のトラブル対策...」の「マクロで問題のある文法の警告を出さない」のようなオプションのような感じで、既存の相対パスの書き方をしている場合に警告を出すようにしたらいいかもしれません。
この方法の場合、動作は変えずに、警告が出たら該当箇所を書き換えるといった感じになります。
とはいえ、現状で多くの場合はマクロファイルが見つからないというエラーになるので、オプション追加しなくてもヘルプの追記だけでわかるようになるかもしれないです。

[ ]
RE:09354 質問2つNo.09358
ラフ さん 21/05/08 18:20 [ コメントを投稿する ]
  currentmacrodirectoryを使うといいです。
>execmacro currentmacrodirectory + "\\subfoler\\testsub.mac";
呼び出し元と先が関連するマクロ同士ならcurrentmacrodirectoryでいいんでしょうけど、今作ってたのがランチャーなので、macrodirの方が目的には合ってますね。
私の方は修正完了しちゃってるので(^^)ヘルプ対応だけでいいと思います。
[ ]

[ 新規に投稿する ]