質問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の方が目的には合ってますね。
私の方は修正完了しちゃってるので(^^)ヘルプ対応だけでいいと思います。

[ ]