マクロファイル自身のパスを知る方法No.00939
fdsa2 さん 00/01/18 14:24
 
はじめまして、サトウです。よろしくお願いいたします。

題名にあるように「マクロファイル自身のパスを知る方法」を
知りたいのです。

    // マクロのあるパスを求める
    $macrodir = getinistr("HIDEMARU.INI", "Env", "MacroPath");
    if ($macrodir == "") $macrodir = hidemarudir;

上記の文では、「マクロファイル用のフォルダ」がわかるだけで、
そのマクロファイル自身の場所とは限りませんよね。
例えば、マクロからマクロを呼んだりした場合です。

すべてのマクロを「マクロファイル用のフォルダ」に入れれば
済むはなしではありますが、管理が大変になってしまいます。
#管理用マクロを作るのも手かな。

「hidemarudir」のような関数があることを望んでいます。
では、よろしくお願いいたします。

[ ]
RE:00939 マクロファイル自身のパスを知るNo.00940
きいろいまふらあ さん 00/01/18 17:00
 
きいろいまふらあです。

>題名にあるように「マクロファイル自身のパスを知る方法」を

あるマクロが直接(メニュー等から)実行されたときに、そのマクロの中で、
そのマクロが記述されている.macファイルのパスを動的に取得するというのは
多分、今の秀丸の仕様ではできないのではないでしょうか?

マクロ1からマクロ2を呼び出すような場合に、マクロ1がマクロ2に対して
何らかの方法でマクロ2が記述されている.macファイルのパスを渡してやる
ということは原理的には可能でしょう。
#パスがわからなきゃ呼び出せないですもんね。(^^;

ちょっと前に、マクロに引数を渡すという話題がありました。
参考にされてはいかがでしょう?

[ ]
RE:00940 マクロファイル自身のパスを知るNo.00942
fdsa2 さん 00/01/18 18:44
 
サトウです。コメントありがとうございます。

>>題名にあるように「マクロファイル自身のパスを知る方法」を
>
>あるマクロが直接(メニュー等から)実行されたときに、そのマクロの中で、
>そのマクロが記述されている.macファイルのパスを動的に取得するというのは
>多分、今の秀丸の仕様ではできないのではないでしょうか?

やはり、そうですか。非公開の関数でも存在していたらと
思ったのですが...

実装してもらうしかないですね。
  hidemarudir   hidemaru.exeのフォルダを表します。
とありますので、マクロフォルダの位置を
  hidemarumacrodir
なんかにしてもらって、マクロファイル自身のフルパスを
  filename   現在編集中のファイル名をドライブ文字も含めたフルパスで表します。
にあやかって、
  macrofilename
というふうにしていただけないか提案しましょう。
#作者さま、無理ですかね。

>
>マクロ1からマクロ2を呼び出すような場合に、マクロ1がマクロ2に対して
>何らかの方法でマクロ2が記述されている.macファイルのパスを渡してやる
>ということは原理的には可能でしょう。
>#パスがわからなきゃ呼び出せないですもんね。(^^;
>
>ちょっと前に、マクロに引数を渡すという話題がありました。
>参考にされてはいかがでしょう?

現状では、その方法しかないようですね。
#修正がたいへんです!

[ ]
RE:00942 マクロファイル自身のパスを知るNo.00945
きいろいまふらあ さん 00/01/18 22:39
 
きいろいまふらあです。

fdsa2 wrote on Tue, 18 Jan 2000 18:44:10 +0900
>   hidemarudir   hidemaru.exeのフォルダを表します。
> とありますので、マクロフォルダの位置を
>   hidemarumacrodir

これ、HIDEMARU.INIから取得できるフォルダ名ではない、ということですか?
#ところで、「マクロフォルダ」以外の場所にあるマクロが実行できてしまうのって、
#公開仕様でしたっけ?(^^;

> #修正がたいへんです!

具体的にはどんなことをなさろうとしているのでしょうか?

----
高木 郷
e-mail:xxxx@pluto.dti.ne.jp

[ ]
RE:00945 マクロファイル自身のパスを知るNo.00946
杉浦 まさき さん 00/01/19 01:45
 
こんばんは。
杉浦 まさき です。

>#ところで、「マクロフォルダ」以外の場所にあるマクロが実行できてしまうのって、
>#公開仕様でしたっけ?(^^;

公開かどうかは??ですが、
これができなくなると大ダメージですね(^^;。


[ ]
RE:00945 マクロファイル自身のパスを知るNo.00947
fdsa2 さん 00/01/19 12:24
 
さとうです。

>きいろいまふらあです。
>
>>   hidemarudir   hidemaru.exeのフォルダを表します。
>> とありますので、マクロフォルダの位置を
>>   hidemarumacrodir
>
>これ、HIDEMARU.INIから取得できるフォルダ名ではない、ということですか?

「マクロフォルダの位置は、秀丸は知っているのだから、関数があってもよいので
は?」
と考えたのですが、スクリプトファイルで書かれているものですから、
互換性をとるのがよさそうなので、提案を撤回します。
#最初の実装がかなり肝心になりますね。勉強になります。
#何でも仕様と言ってしまえば...


>#ところで、「マクロフォルダ」以外の場所にあるマクロが実行できてしまうのって、
>#公開仕様でしたっけ?(^^;

ごめんなさい。「秀丸マクロの概要」に「マクロファイルは秀丸本体(HIDEMARU.EX
E)と
同じフォルダに置いておく必要があります。」とありました。
ただし、これはデフォルトの場合ですね。
#マクロの登録でも、パスを書くと、マクロフォルダでないマクロを実行できます。
#仕様が変わったのでしょうか?


>> #修正がたいへんです!
>
>具体的にはどんなことをなさろうとしているのでしょうか?

したかったことは、マクロフォルダ以外の場所にマクロを置いて、
今作成中のマクロからそのマクロを呼び出すことです。
もちろん、対象のマクロは複数あって、実行時に好きなマクロを
選べるようにしたかったのです。
しかし、対象のマクロの中には、マクロフォルダを参照している
ものがあり、ただしく実行できませんでした。
ですから、正常に実行できるようにするには、
マクロの修正が必要なので、「たいへんだ」と書きました。
#ほとんどのマクロは、マクロライブラリからいただいたもので
#ほんとうは修正はいけないのかも。

[ ]
RE:00947 マクロファイル自身のパスを知るNo.00948
きいろいまふらあ さん 00/01/19 14:08
 

>>これ、HIDEMARU.INIから取得できるフォルダ名ではない、ということですか?

↑これ、
・HIDEMARU.INIから取得できるフォルダ名
・今実行されているマクロが記述されているマクロファイルが存在するフォルダ名
のどちらを返して欲しいんだろう?という気持ちで書きました。念のため。

>「マクロフォルダの位置は、秀丸は知っているのだから、関数があってもよいので
>は?」

これ自体は普通の欲求だと思いますが、そもそもいわゆる「マクロフォルダ」を
返してもらっても意味がないのかな?と思ったわけです。

なぜならば

>>#ところで、「マクロフォルダ」以外の場所にあるマクロが実行できてしまうのっ
>て、

ということです。この辺が肝なんですよね?

>ごめんなさい。「秀丸マクロの概要」に「マクロファイルは秀丸本体(HIDEMARU.EX
>E)と
>同じフォルダに置いておく必要があります。」とありました。

その他→動作環境で、マクロファイル用のフォルダを設定できる以上、この記述は
現在の秀丸の仕様と整合性がとれてないですね。
修正した方がよさそうですね。>秀丸担当殿

>したかったことは、マクロフォルダ以外の場所にマクロを置いて、

>しかし、対象のマクロの中には、マクロフォルダを参照している
>ものがあり、ただしく実行できませんでした。

想像ですが、そもそもそれらのマクロは「マクロフォルダ」にインストールして
使うことを想定して開発されているのではないでしょうか?
「マクロフォルダ」にインストールすると不具合があるのかなあ?
#ファイル名が競合するとか?

「呼び出す前にHIDEMARU.INIを書き換えてしまう」という手もあるか。
もちろん戻ってきたら書き戻すわけですが。
そしたら呼び出し先のマクロは書き換えなくてよい、と思う。

>#ほんとうは修正はいけないのかも。

その辺のことについてはたいてい付属のドキュメントに記述があると思います。
私的な使用に限っては改変を認めているものも少なくないのでは?

で、これだけひっかきまわしておいてなんですが、
・任意のフォルダに存在する.macファイルをマクロとして実行できる。
・フォルダの指定を省略した場合は「マクロフォルダ」に存在すると解釈する。
・マクロ実行中に、実行中のマクロが記述されている.macファイルのパスを返してく
れる関数が実装される。
なんてすると、開発側(最近してないですが(^^;)としては嬉しいかも。名前の競合
も気にしなくていいし。
#特に子マクロをたくさん使う某マクロとか。:-p
##大所帯のマクロは個別のフォルダに入れておくという発送です。念のため。

長くなりました。失礼しました。

[ ]
RE:00948 マクロファイル自身のパスを知るNo.00949
fdsa2 さん 00/01/19 15:53
 
さとうです。

> >>これ、HIDEMARU.INIから取得できるフォルダ名ではない、ということですか?
>
> ↑これ、
> ・HIDEMARU.INIから取得できるフォルダ名
> ・今実行されているマクロが記述されているマクロファイルが存在するフォルダ名
> のどちらを返して欲しいんだろう?という気持ちで書きました。念のため。

答えが遅くなりました。答えは、前者です。
「動作環境-パス-環境-マクロファイル用のフォルダ」で、値を設定できますよね。
たくさんの関数のなかに「マクロフォルダのパスを取得する関数」がなかったので、
なぜかなとおもったわけです。これも過去の互換をとるためだと考えてはいますが。
#互換をとるのか拡張をとるのか、難しいところですね。
#また先ほどから、勝手に「マクロフォルダ」を連発していますが、正式名称ではな
いでしょう。
#「マクロファイルの置いてあるフォルダ」のことを「マクロフォルダ」と私が勝手
に短縮しています。


> >したかったことは、マクロフォルダ以外の場所にマクロを置いて、
>
> >しかし、対象のマクロの中には、マクロフォルダを参照している
> >ものがあり、ただしく実行できませんでした。
>
> 想像ですが、そもそもそれらのマクロは「マクロフォルダ」にインストールして
> 使うことを想定して開発されているのではないでしょうか?

そのとおりです。これは正しいことです。

> 「呼び出す前にHIDEMARU.INIを書き換えてしまう」という手もあるか。
> もちろん戻ってきたら書き戻すわけですが。
> そしたら呼び出し先のマクロは書き換えなくてよい、と思う。

この方法、使わせていただきます。
ぼくもカレントディレクトリを変更できればと思ったのですが、
そんな関数あるわけもなく、あきらめていました。
#マクロのなかには、秀丸本体の場所(hidemarudir)をマクロフォルダとして
#仮定してあるものもありましたので、すんなりとはいかないとはおもいますが、
#ほとんどのものがうまくいきそうです。
#これからマクロを作成される方、自分も含め、マクロフォルダを意識して作成
#されることをのぞみます。


> で、これだけひっかきまわしておいてなんですが、
> ・任意のフォルダに存在する.macファイルをマクロとして実行できる。
> ・フォルダの指定を省略した場合は「マクロフォルダ」に存在すると解釈する。
> ・マクロ実行中に、実行中のマクロが記述されている.macファイルのパスを返して
>くれる関
> 数が実装される。
> なんてすると、開発側(最近してないですが(^^;)としては嬉しいかも。名前の競
>合も気にし
> なくていいし。

それはとてもいい考えですね。2番目では、フォルダを指定した場合、そこをマクロ
フォルダと
解釈してくれれば、既存のマクロにも対応できることになりますね。

> #特に子マクロをたくさん使う某マクロとか。:-p
> ##大所帯のマクロは個別のフォルダに入れておくという発送です。念のため。

もともとは、これが嫌だったのです。関連のあるマクロをフォルダ別にして管理した
かった
のが、そもそもの始まりです。

これにて、解決に致したいと思います。ありがとうございました。

[ ]
RE:00949 マクロファイル自身のパスを知るNo.00951
fdsa2 さん 00/01/19 17:53
 
さとうです。自己フォローします。

>> 「呼び出す前にHIDEMARU.INIを書き換えてしまう」という手もあるか。
>> もちろん戻ってきたら書き戻すわけですが。
>> そしたら呼び出し先のマクロは書き換えなくてよい、と思う。

実現可能でした。ただし、エラーを含んだ場合の処理やendmacroallを
含んでいた場合は、保証できないので、個人で使うにとどめたほうがよさそうです。
#やはりこれというものは現在ありません。


>> で、これだけひっかきまわしておいてなんですが、
>> ・任意のフォルダに存在する.macファイルをマクロとして実行できる。
>> ・フォルダの指定を省略した場合は「マクロフォルダ」に存在すると解釈する。
>> ・マクロ実行中に、実行中のマクロが記述されている.macファイルのパスを返し
>てくれる関
>> 数が実装される。
>> なんてすると、開発側(最近してないですが(^^;)としては嬉しいかも。名前の
>競合も気にし
>> なくていいし。
>
>それはとてもいい考えですね。2番目では、フォルダを指定した場合、そこをマクロ
>フォルダと
>解釈してくれれば、既存のマクロにも対応できることになりますね。

既存のマクロすべてに対応できるのは、嘘ですね。申し訳ありません。
またもや、撤回です。

#何かフォローありましたら、よろしくお願いします。

[ ]
RE:00949 マクロファイル自身のパスを知るNo.00952
きいろいまふらあ さん 00/01/19 18:45
 
>#互換をとるのか拡張をとるのか、難しいところですね。

新しい関数を使用したマクロを古い秀丸で走らせた場合のみ問題が発生するわけです
から、
新しい関数を作ること自体は、互換性にはあまり影響しないと思います。

設定内容を取得する関数は確かにたくさんありますが、
関数で取得できない設定項目もたくさんあります。(^_^)

>#また先ほどから、勝手に「マクロフォルダ」を連発していますが、正式名称ではな
>いでしょう。

そうですね。自分の発言の中で「マクロフォルダ」と括弧付きで記述している場合は、

>「動作環境-パス-環境-マクロファイル用のフォルダ」で、値を設定できますよね。

これ(設定していない場合はhidemaru.exeのあるフォルダ)のつもりでした。

>この方法、使わせていただきます。

老婆心ながら、endmacroallを使っているマクロを呼び出さないようご注意ください。
結構痛いと思いますゆえ。

>#マクロのなかには、秀丸本体の場所(hidemarudir)をマクロフォルダとして
>#仮定してあるものもありましたので、すんなりとはいかないとはおもいますが、

ヘルプの記述などから想像するにつけ、昔はそういう仕様だったのかも。

>それはとてもいい考えですね。2番目では、フォルダを指定した場合、そこをマクロ
>フォルダと
>解釈してくれれば、既存のマクロにも対応できることになりますね。

ロジックに穴があるかも。よく考えてませんけど。(^^;

[ ]
RE:00947 マクロファイル自身のパスを知るNo.00953
Micky さん 00/01/19 19:12
 
>したかったことは、マクロフォルダ以外の場所にマクロを置いて、
>今作成中のマクロからそのマクロを呼び出すことです。
>もちろん、対象のマクロは複数あって、実行時に好きなマクロを
>選べるようにしたかったのです。

横から失礼します。
Mickyです。
ちょっと外しているかもしれませんが、私はこうしています。
まず、私の環境ですが、サーバにhidemaru.exeがあり、
一般ユーザはリード特権しかありません。
一般ユーザが使って便利であろうマクロは
\\server\hidemau
のディレクトリにあります。
この状態で、自分しか使わないであろうマクロを
自分だけ登録して、使っています。
この辺がしたい事とあっているかどうか分からないのですが、

>すべてのマクロを「マクロファイル用のフォルダ」に入れれば
>済むはなしではありますが、管理が大変になってしまいます。
>#管理用マクロを作るのも手かな。

まず、自分用のマクロは
c:\HideMac
のディレクトリと決めているのですが、
c:\HideMac\MacroMenu.mac
をマクロ登録して(これはフルパスで書いています)、
MacroMenu.macの中は、

ここから−−−−
// MacroMenu.mac
// ローカルにあるマクロを選択して実行する。
// ローカルにあるマクロは "c:\HideMac\MacroMenu.ini に列記する。
// 実行ファイルの拡張子がiniであればそのファイルを定義体として
// 再度選択する。(階層構造とする。)

// file open
$MacroData = "c:\\HideMac\\MacroMenu.ini";// ローカルにあるマクロが記述され
ているファイル
loop:
if( ! existfile( $MacroData ) ) {
beep;
message $MacroData + " マクロ記述ファイルがありません";
endmacro;
}


// data read
#i = 0;
while( 1 )
{
$wk1 = getinistr($MacroData,"comment",str(#i + 1));
if ( $wk1 == "") break;
$menu1[#i] = str(#i + 1) + ": " + $wk1;
$Macro[#i] = getinistr($MacroData,"FileName",str(#i + 1));
$b[#i] = $menu1[#i] + "\t" + $Macro[#i] ;
#i = #i + 1;
}


// マクロを選択し実行する。
mousemenuarray $b, #i;
if (result != 0)
{
//message $Macro[result-1];
$Ext = midstr( $Macro[result-1], strstr($Macro[result-1], ".") + 1, 3);
//message $Ext;

$E1 = leftstr($Ext, 1);
$E2 = midstr($Ext, 1, 1);
$E3 = midstr($Ext, 2, 1);

//message $E1 + $E2 + $E3;

if ((($E1 == "i") || ($E1 == "I")) &&
(($E2 == "n") || ($E2 == "N")) &&
(($E3 == "i") || ($E3 == "I")))
{
$MacroData = "c:\\HideMac\\" + $Macro[result-1];
//message $MacroData;
goto loop;
}
else
{
execmacro "c:\\HideMac\\" + $Macro[result-1];
}
}

endmacro;


ここまで−−−−

と、なっており、MacroMenu.iniの中身は

ここから−−−−
*5 MacroMenu.ini - 1999-12-07 -
// このファイルはMacroMenuのメニュー用のファイルです。
[comment]
1=全角かなの濁点半濁点を外に出す
2=フォントサイズ変更(DB中)
3=MP2 ファイルを整形する
4=頁を繰り上げる
5=頁を繰り下げる
6=電話をかける
7=関数が使われているかチェックする
8=残業ログ編集
9=単語の後ろに "2" を追加
10=log を編集する
11=
12=
13=
14=
15=
16=WonderScopeのログを編集する。
17=
18=
19=
20=
[FileName]
1=dakuten.mac
2=FontSize.mac
3=Map2MemRd.mac
4=PageCut.mac
5=PageIns.mac
6=PhonDial.mac
7=isuse.mac
8=ZanEdit.mac
9=Plus2.mac
10=StateEdit.mac
11=
12=
13=
14=
15=
16=WonderEdit.ini
17=
18=
19=
20=

ここまで−−−−

となっています。

これでこのマクロを Cntl+B に割り当てて使用しています。

決まった場所にデバッグ中のファイルを置いて、デバッグ出来ます。
デバッグ完了でhidemaru.exeと同じ場所に入れてはいかがでしょうか?

[ ]
RE:00947 マク・ぢ鴻tァイル自身のパスをNo.00982
fdsa2 さん 00/02/07 17:47
 
さとうです。

>したかったことは、マクロフォルダ以外の場所にマクロを置いて、
>今作成中のマクロからそのマクロを呼び出すことです。
>もちろん、対象のマクロは複数あって、実行時に好きなマクロを
>選べるようにしたかったのです。

このマクロが完成いたしましたので、公開します。
本来ならば、マクロライブラリに登録すべきなのですが、
レジストリを変更する、秀丸の仕様に違反?
などの理由で、初心者には不向きと思い、登録はせずに
メール添付で送らせていただきました。
#約3KBのファイルです。必要のない方は破棄してください。

使い方は、添付ファイルを解凍すると、misc.macとmisc.ini
ができますので、misc.macをみてください。

掲示板をご覧の方は、こちらまでメールで問い合わせてください。
   xxxxx@mail.goo.ne.jp

[ ]